internal void UninstallDhcpOptions() { // Back-out options IPModule ip = (IPModule !)Core.Instance().GetProtocolByName("IP"); DhcpIPv4Option address = (DhcpIPv4Option !) activeDhcpOptions[DhcpRequestedIPAddress.OptionCode]; IPv4 ifAddress = address.Value; // // Remove routes associated with interface address // ip.HostConfiguration.RoutingTable.DeleteInterfaceRoutes(ifAddress); // // Remove name server // DhcpMultiIPv4Option dnsServers = activeDhcpOptions[DhcpDomainNameServer.OptionCode] as DhcpMultiIPv4Option; if (dnsServers != null) { foreach (IPv4 server in dnsServers.Values) { ip.HostConfiguration.AddNameServer(server); } } // // Leave domain name in place // // If we wanted to remove it... DhcpStringOption domain = activeDhcpOptions[DhcpDomainName.OptionCode] as DhcpStringOption; string domainName = ip.HostConfiguration.GetDomainName(); if (domain != null && domainName == domain.Value) { ip.HostConfiguration.SetDomainName(""); } // // Remove interface address bindings // ip.HostConfiguration.Bindings.Flush(adapter, ifAddress); activeDhcpOptions = null; }
internal bool InstallDhcpOptions(SortedList !dhcpOptions) { if (activeDhcpOptions != null) { UninstallDhcpOptions(); } IPModule ip = (IPModule)Core.Instance().GetProtocolByName("IP"); if (ip == null) { DebugPrint("Failed to get IP Module\n"); return(false); } // // Add interface address binding // DhcpIPv4Option address = dhcpOptions[DhcpRequestedIPAddress.OptionCode] as DhcpIPv4Option; DhcpIPv4Option netmask = dhcpOptions[DhcpSubnetMask.OptionCode] as DhcpIPv4Option; DhcpMultiIPv4Option routers = dhcpOptions[DhcpRouter.OptionCode] as DhcpMultiIPv4Option; if (address == null || netmask == null || routers == null || routers.Values.Length == 0) { return(false); } ip.HostConfiguration.Bindings.Add( adapter, new InterfaceIPConfiguration(address.Value, netmask.Value, routers.Values[0]) ); // // Register Domain name // DhcpStringOption domain = dhcpOptions[DhcpDomainName.OptionCode] as DhcpStringOption; // string domainName = ip.HostConfiguration.GetDomainName(); // never used if (domain != null) { ip.HostConfiguration.SetDomainName(domain.Value); } // // Add DNS servers // DhcpMultiIPv4Option dnsServers = dhcpOptions[DhcpDomainNameServer.OptionCode] as DhcpMultiIPv4Option; if (dnsServers != null) { foreach (IPv4 server in dnsServers.Values) { ip.HostConfiguration.AddNameServer(server); } } // // Install static routes // DhcpMultiIPv4Option staticRoutes = dhcpOptions[DhcpStaticRoutes.OptionCode] as DhcpMultiIPv4Option; if (staticRoutes != null) { int routeCount = staticRoutes.Values.Length & ~1; // pairs for (int i = 0; i < routeCount; i += 2) { IPv4 destination = staticRoutes.Values[i]; IPv4 gateway = staticRoutes.Values[i + 1]; IPv4 ifAddress = address.Value; ip.HostConfiguration.RoutingTable.AddRoute( new RouteEntry(destination, gateway, ifAddress, RouteEntry.DefaultRouteMetric, 0) ); } } activeDhcpOptions = dhcpOptions; return(true); }