internal override void EnterEvent() { // Yay! We got DHCP configuration information DateTime now = DateTime.Now; // Set up renewal timer DhcpDWordOption renewalOption = hostOptions[DhcpRenewalTime.OptionCode] as DhcpDWordOption; uint renewalSeconds = 3600; if (renewalOption != null) { renewalSeconds = renewalOption.Value; } client.SetRenewalTimeout(now + TimeSpan.FromSeconds(renewalSeconds)); // Set up rebinding timer DhcpDWordOption rebindOption = hostOptions[DhcpRebindingTime.OptionCode] as DhcpDWordOption; uint rebindSeconds = renewalSeconds + 60; if (rebindOption != null) { rebindSeconds = Math.Max(rebindOption.Value, renewalSeconds + 1); } client.SetRebindTimeout(now + TimeSpan.FromSeconds(rebindSeconds)); // Add host address as a dhcp option and then get client // to install settings. hostOptions[DhcpRequestedIPAddress.OptionCode] = DhcpRequestedIPAddress.Create(hostAddress); if (client.InstallDhcpOptions(hostOptions) == false) { client.ChangeState(new DhcpClientStateInitialize(client)); } DebugStub.Print("DHCP client acquired lease of " + hostAddress + " for " + rebindSeconds + " seconds. "); }
static IDhcpOption ParseDhcpOption( byte optionCode, byte length, byte[] srcBuffer, int offset) { byte type = optionCode; switch (optionCode) { case DhcpSubnetMask.OptionCode: return(DhcpIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpTimeOffset.OptionCode: return(DhcpDWordOption.Parse(type, length, srcBuffer, offset)); case DhcpRouter.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpTimeServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpNameServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpDomainNameServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpLogServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpCookieServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpLprServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpImpressServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpResourceLocationServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpHostName.OptionCode: return(DhcpStringOption.Parse(type, length, srcBuffer, offset)); case DhcpBootFileSize.OptionCode: return(DhcpWordOption.Parse(type, length, srcBuffer, offset)); case DhcpMeritDumpFile.OptionCode: return(DhcpStringOption.Parse(type, length, srcBuffer, offset)); case DhcpDomainName.OptionCode: return(DhcpStringOption.Parse(type, length, srcBuffer, offset)); case DhcpSwapServer.OptionCode: return(DhcpIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpRootPath.OptionCode: return(DhcpStringOption.Parse(type, length, srcBuffer, offset)); case DhcpExtensionsPath.OptionCode: return(DhcpStringOption.Parse(type, length, srcBuffer, offset)); case DhcpIPForwarding.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpForwardRemoteSourceRoute.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpPolicyFilter.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpMaximumDatagramReassembly.OptionCode: return(DhcpWordOption.Parse(type, length, srcBuffer, offset)); case DhcpDefaultTtl.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpPathMtuAgingTimeout.OptionCode: return(DhcpDWordOption.Parse(type, length, srcBuffer, offset)); case DhcpPathMtuPlateauTable.OptionCode: return(DhcpMultiWordOption.Parse(type, length, srcBuffer, offset)); case DhcpInterfaceMtu.OptionCode: return(DhcpWordOption.Parse(type, length, srcBuffer, offset)); case DhcpAllSubnetsLocal.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpBroadcastAddress.OptionCode: return(DhcpIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpMaskDiscovery.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpMaskSupplier.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpRouterDiscovery.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpRouterSolicitationAddress.OptionCode: return(DhcpIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpStaticRoutes.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpTrailerEncapsulate.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpArpCacheTimeout.OptionCode: return(DhcpDWordOption.Parse(type, length, srcBuffer, offset)); case DhcpEthernetEncapsulation.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpTcpDefaultTtl.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpTcpKeepalive.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpTcpKeepaliveGarbage.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpNisDomain.OptionCode: return(DhcpStringOption.Parse(type, length, srcBuffer, offset)); case DhcpNisServers.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpNtpServers.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpVendorSpecific.OptionCode: return(DhcpMultiByteOption.Parse(type, length, srcBuffer, offset)); case DhcpNetBiosNameServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpNetBiosDistributionServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpNetBiosType.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpNetBiosScope.OptionCode: return(DhcpMultiDWordOption.Parse(type, length, srcBuffer, offset)); case DhcpXWindowsFontServer.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpXWindowsDisplayManager.OptionCode: return(DhcpMultiIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpRequestedIPAddress.OptionCode: return(DhcpIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpIPAddressLeaseTime.OptionCode: return(DhcpDWordOption.Parse(type, length, srcBuffer, offset)); case DhcpOverloadIndicator.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpMessageType.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); case DhcpServerID.OptionCode: return(DhcpIPv4Option.Parse(type, length, srcBuffer, offset)); case DhcpParameterRequest.OptionCode: return(DhcpMultiByteOption.Parse(type, length, srcBuffer, offset)); case DhcpMessage.OptionCode: return(DhcpStringOption.Parse(type, length, srcBuffer, offset)); case DhcpMaximumMessageSize.OptionCode: return(DhcpWordOption.Parse(type, length, srcBuffer, offset)); case DhcpRenewalTime.OptionCode: return(DhcpDWordOption.Parse(type, length, srcBuffer, offset)); case DhcpRebindingTime.OptionCode: return(DhcpDWordOption.Parse(type, length, srcBuffer, offset)); case DhcpClassID.OptionCode: return(DhcpStringOption.Parse(type, length, srcBuffer, offset)); case DhcpClientID.OptionCode: return(DhcpMultiByteOption.Parse(type, length, srcBuffer, offset)); case DhcpAutoConfigure.OptionCode: return(DhcpByteOption.Parse(type, length, srcBuffer, offset)); default: return(null); } }