static private async Task <DHCPPacketView> GenerateLease(DHCPPacketView discovery, IPEndPoint localEndPoint, IPEndPoint remoteEndPoint) { DHCPPacketView result; switch (discovery.DHCPMessageType) { case DHCPMessageType.DHCPDISCOVER: result = new DHCPPacketView(DHCPMessageType.DHCPOFFER); break; case DHCPMessageType.DHCPREQUEST: result = new DHCPPacketView(DHCPMessageType.DHCPACK); break; default: return(null); } result.ClientHardwareAddress = discovery.ClientHardwareAddress; result.TransactionId = discovery.TransactionId; result.TimeElapsed = discovery.TimeElapsed; result.BroadcastFlag = discovery.BroadcastFlag; result.NextServerIP = localEndPoint.Address; result.RelayAgentIP = discovery.RelayAgentIP; result.Hops = discovery.Hops; result.RenewalTimeValue = TimeSpan.FromHours(12); result.RebindingTimeValue = TimeSpan.FromHours(21); result.IPAddressLeaseTime = TimeSpan.FromHours(24); result.DHCPServerIdentifier = localEndPoint.Address; result.YourIP = IPAddress.Parse("172.20.0.99"); result.SubnetMask = IPAddress.Parse("255.255.255.0"); result.Routers = new List <IPAddress> { IPAddress.Parse("172.20.0.1") }; result.Hostname = "bob"; result.DomainName = "minions.com"; result.DomainNameServers = new List <IPAddress> { IPAddress.Parse("10.100.11.81") }; return(result); }
public bool ReleaseLease(DHCPPacketView packet, IPEndPoint localEndPoint, IPEndPoint remoteEndPoint) { var pool = GetPoolByIP(packet.ClientIP); if (pool == null) { System.Diagnostics.Debug.WriteLine("Failed to find DHCP pool for lease release -> " + packet.ClientIP.ToString()); return(false); } var addressPool = AddressPools.Where(x => x.Pool == pool).FirstOrDefault(); if (addressPool == null) { System.Diagnostics.Debug.WriteLine("Failed to to find DHCP IP address pool for lease release -> " + packet.ClientIP.ToString()); return(false); } addressPool.SetAvailable(packet.ClientIP); System.Diagnostics.Debug.WriteLine("Returned address " + packet.ClientIP.ToString() + " to the address pool"); var count = Leases .RemoveAll(x => x.ClientId.Equals(packet.ClientId) ); if (count == 0) { System.Diagnostics.Debug.WriteLine("DHCPPools did not have a lease to be released for client id " + packet.ClientId.ToString()); return(false); } System.Diagnostics.Debug.WriteLine("DHCPPools released IP address " + packet.ClientIP.ToString() + " for client id " + packet.ClientId.ToString()); return(true); }