X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-dhcp.git/blobdiff_plain/ae56a450592fdfe3645985146e18e55689df00be..40b9d8a1ad275d53fc17a601a27fe9afc8fb2346:/invirt-dhcpserver diff --git a/invirt-dhcpserver b/invirt-dhcpserver index ffbf839..438d80d 100755 --- a/invirt-dhcpserver +++ b/invirt-dhcpserver @@ -15,23 +15,21 @@ import time from invirt import database from invirt.config import structs as config -dhcp_options = {'subnet_mask': config.dhcp.netmask, - 'router': config.dhcp.gateway, - 'domain_name_server': ','.join(config.dhcp.dns), - 'ip_address_lease_time': 60*60*24} +dhcp_options = {'domain_name_server': ','.join(config.dhcp.dns), + 'ip_address_lease_time': config.dhcp.leasetime if config.dhcp.has_key('leasetime') else 60*60*24} class DhcpBackend: def __init__(self): database.connect() def findNIC(self, mac): database.clear_cache() - return database.NIC.query().filter_by(mac_addr=mac).first() + return database.NIC.query.filter_by(mac_addr=mac).first() def find_interface(self, packet): chaddr = hwmac(packet.GetHardwareAddress()) nic = self.findNIC(str(chaddr)) if nic is None or nic.ip is None: return None - ipstr = ''.join(reversed(['%02X' % i for i in ipv4(nic.ip).list()])) + ipstr = ''.join(reversed(['%02X' % i for i in ipv4(nic.ip.encode("utf-8")).list()])) for line in open('/proc/net/route'): parts = line.split() if parts[1] == ipstr: @@ -97,15 +95,17 @@ class DhcpBackend: nic = self.findNIC(str(chaddr)) if nic is None or nic.machine is None: return False - ip = nic.ip + ip = nic.ip.encode("utf-8") if ip is None: #Deactivated? return False options = {} + options['subnet_mask'] = nic.netmask.encode("utf-8") + options['router'] = nic.gateway.encode("utf-8") if nic.hostname and '.' in nic.hostname: - options['host_name'], options['domain_name'] = nic.hostname.split('.', 1) + options['host_name'], options['domain_name'] = nic.hostname.encode('utf-8').split('.', 1) elif nic.machine.name: - options['host_name'] = nic.machine.name + options['host_name'] = nic.machine.name.encode('utf-8') options['domain_name'] = config.dns.domains[0] else: hostname = None @@ -113,17 +113,15 @@ class DhcpBackend: options['host_name'] += '.' + options['domain_name'] del options['domain_name'] options['domain_search'] = [config.dhcp.search_domain] - if ip is not None: - ip = ipv4(ip) - s.syslog(s.LOG_DEBUG,"dhcp_backend : Discover result = "+str(ip)) - packet_parameters = self.getParameters(**options) + ip = ipv4(ip) + s.syslog(s.LOG_DEBUG,"dhcp_backend : Discover result = "+str(ip)) + packet_parameters = self.getParameters(**options) - # FIXME: Other offer parameters go here - packet_parameters["yiaddr"] = ip.list() - - packet.SetMultipleOptions(packet_parameters) - return True - return False + # FIXME: Other offer parameters go here + packet_parameters["yiaddr"] = ip.list() + + packet.SetMultipleOptions(packet_parameters) + return True def Request(self, packet): s.syslog(s.LOG_DEBUG, "dhcp_backend : Request") @@ -262,7 +260,7 @@ if '__main__' == __name__: print "invirt-dhcpserver: cannot determine local IP address by looking up %s" % socket.gethostname() sys.exit(1) - dhcp_options['server_identifier'] = myip + dhcp_options['server_identifier'] = ipv4(myip).int() backend = DhcpBackend() server = DhcpServer(backend, options)