Ticket #44: dhcpserver.py.diff

File dhcpserver.py.diff, 2.6 KB (added by broder, 16 years ago)

Here's a new version - this one adds the domain_search option

  • code/dhcpserver.py

     
    2222
    2323dhcp_options = {'subnet_mask': '255.255.0.0',
    2424                'router': '18.181.0.1',
     25                'domain_search': list('mit.edu'),
    2526                'domain_name_server': '18.70.0.160,18.71.0.151,18.72.0.3',
    26                 'domain_name': 'mit.edu',
    2727                'ip_address_lease_time': 60*60*24}
    2828
    2929class DhcpBackend:
     
    6161    def getParameters(self, **extra):
    6262        all_options=dict(dhcp_options)
    6363        all_options.update(extra)
     64        if all_options.has_key('domainname') and all_options.has_key('domain_search') and all_options['domainname'] not in all_options['domain_search']:
     65            all_options['domain_search'].append(all_options['domain_name'])
    6466        options = {}
    6567        for parameter, value in all_options.iteritems():
    6668            if value is None:
     
    9698                   
    9799            elif option_type == "string" :
    98100                options[parameter] = strlist(value).list()
     101           
     102            elif option_type == "RFC3397" :
     103                parsed_value = ""
     104                for item in value:
     105                    components = item.split('.')
     106                    item_fmt = "".join(chr(len(elt)) + elt for elt in components) + "\x00"
     107                    parsed_value += item_fmt
    99108               
     109                options[parameter] = strlist(parsed_value).list()
     110           
    100111            else :
    101112                options[parameter] = strlist(value).list()
    102113        return options
     
    111122        if ip is None:  #Deactivated?
    112123            return False
    113124        if nic.hostname and '.' in nic.hostname:
    114             hostname = nic.hostname
     125            hostname, domainname = nic.hostname.split('.', 1)
    115126        elif nic.machine.name:
    116             hostname = nic.machine.name + '.servers.csail.mit.edu'
     127            hostname = nic.machine.name
     128            domainname = 'servers.csail.mit.edu'
    117129        else:
    118130            hostname = None
    119131        if ip is not None:
    120132            ip = ipv4(ip)
    121133            Log.Output(Log.debug,"dhcp_backend : Discover result = "+str(ip))
    122             packet_parameters = self.getParameters(host_name=hostname)
    123 
     134            packet_parameters = self.getParameters(host_name=hostname,
     135                                                   domain_name=domainname)
     136           
    124137            # FIXME: Other offer parameters go here
    125138            packet_parameters["yiaddr"] = ip.list()
    126139