#!/usr/bin/python import os import sys import getopt # for testing if (os.path.exists('isys')): sys.path.append('isys') sys.path.append('/usr/lib/anaconda') import isys from sys import argv import network from network import NetworkDevice def showusage(): print "Usage: dhcpclient [-4] [-6] [-a] [-i device] [-c class]" def showhelp(): showusage() print "Options:" print " -4 Configure IPv4 stack via DHCP" print " -6 Configure IPv6 stack (DHCPv6 unless -a given)" print " -a Use IPv6 auto neighbor discovery" print " -i device Device to configure (e.g., eth0)" print " -c class Optional DHCP class name" print "Defaults:" print " dhcpclient -4 -6 -a -i eth0" if __name__ == "__main__": dev = NetworkDevice('eth0') dev.set(('bootproto', 'dhcp')) auto = False stacks = 0 help = False unknown = False try: opts, args = getopt.getopt(sys.argv[1:], '46ai:c:', ['ipv4', 'ipv6', 'auto', 'interface', 'class', 'help']) except getopt.GetoptError: help = True for o, a in opts: if o in ('-4', '--ipv4'): stacks += 4 elif o in ('-6', '--ipv6'): stacks += 6 elif o in ('-a', '--auto'): auto = True elif o in ('-i', '--interface'): dev.set(('device', a)) elif o in ('-c', '--class'): dev.set(('dhcpclass', a)) elif o in ('--help'): help = True else: unknown = True if help: showhelp() sys.exit(0) if unknown: showusage() sys.exit(1) if auto: dev.set(('ipv6_autoconf', 'yes')) else: dev.set(('ipv6_autoconf', 'no')) if stacks == 10: dev.set(('useipv4', True)) dev.set(('useipv6', True)) elif stacks == 6: dev.set(('useipv4', False)) dev.set(('useipv6', True)) elif stacks == 4: dev.set(('useipv4', True)) dev.set(('useipv6', False)) try: ns = isys.dhcpNetDevice(dev) if ns: f = open('/etc/resolv.conf', 'w') f.write("nameserver %s\n" % ns) f.close() except: print "Error configuring device %s." % (dev.get('device'),) sys.exit(0)