diff options
Diffstat (limited to 'abs/mv-core/MythVantage-config/mv_network.py')
-rwxr-xr-x | abs/mv-core/MythVantage-config/mv_network.py | 507 |
1 files changed, 0 insertions, 507 deletions
diff --git a/abs/mv-core/MythVantage-config/mv_network.py b/abs/mv-core/MythVantage-config/mv_network.py deleted file mode 100755 index b80e4cc..0000000 --- a/abs/mv-core/MythVantage-config/mv_network.py +++ /dev/null @@ -1,507 +0,0 @@ -# -*- coding: utf-8 -*- -import sys , os, commands , glob, time, re -import logging -import mv_common -import socket, fcntl, struct, array -import netifaces, iplib -global etcnetdir -etcnetdir = "/etc/net/ifaces" - -def setup_MYTH_DHCP(systemconfig): - default_interface = systemconfig["default_interface"] - try: - defaultdhcp = systemconfig["HostUSEDHCP"+default_interface] - except: - logging.critical(" *Error occured finding default dhcp") - defaultdhcp = "0" - logging.debug(" Using %s as dhcp value for %s", defaultdhcp, default_interface) - return defaultdhcp - -def all_interfaces(): - max_possible = 128 # arbitrary. raise if needed. - bytes = max_possible * 32 - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - names = array.array('B', '\0' * bytes) - outbytes = struct.unpack('iL', fcntl.ioctl( - s.fileno(), - 0x8912, # SIOCGIFCONF - struct.pack('iL', bytes, names.buffer_info()[0]) - ))[0] - namestr = names.tostring() - return [namestr[i:i+32].split('\0', 1)[0] for i in range(0, outbytes, 32)] - -def get_ip(ifname): - logging.debug(" Finding ip address for %s", ifname) - all_if = all_interfaces() - logging.debug(" found interfaces:%s", all_if) - if ifname in all_if : - logging.debug(" Found %s in all_interfaces", ifname) - else: - logging.critical("* Couldn't find %s in list", ifname) - ifname = all_if[0] - logging.critical("* Using %s for interface name", ifname) - - - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - return socket.inet_ntoa(fcntl.ioctl( - s.fileno(), - 0x8915, # SIOCGIFADDR - struct.pack('256s', ifname[:15]) - )[20:24]) - -def get_default_route(iface): - rcroute = "127.0.0.1" - f = open ('/proc/net/route', 'r') - for line in f: - words = string.split (line) - netiface = words[0] - route = words[2] - flags = words[3] - try: - if ( netiface == iface ) and ( flags == "0003") : - route = iplib.IPv4Address(route, notation="hex") - t = str(route.get_dot()) - s = t.split(".") - rcroute = s[3] + "." + s[2] + "." + s[1] + "." + s[0] - break - except ValueError: - pass - return rcroute - -def setup_MYTH_IP(systemconfig): - default_interface = systemconfig["default_interface"] - #check for dhcp in use - if setup_MYTH_DHCP(systemconfig) == "0": - logging.debug(" dhcp is in use, finding dhcp ip") - defaultip = get_ip(default_interface) - else: - try: - defaultip = systemconfig["Hostip"+default_interface] - except: - logging.debug(" Error occured finding the defaultip") - defaultip = "127.0.0.1" - logging.debug(" Using %s as default ip", defaultip) - return defaultip - - -def setup_MYTH_GW(systemconfig): - default_interface = systemconfig["default_interface"] - #check for dhcp in use - if setup_MYTH_DHCP(systemconfig) == "0": - logging.debug(" dhcp is in use, finding dhcp ip") - defaultgw = get_default_route(default_interface) - else: - try: - defaultgw = systemconfig["Hostgw"+default_interface] - except: - logging.debug(" Error occured finding the defaultgw") - defaultgw = "127.0.0.1" - logging.debug(" Using %s as default gw", defaultgw) - return defaultgw - - -def setup_MTYH_DNS(): - returndns = "127.0.0.1" - try: - f = open ('/etc/resolv.conf', 'r') - for line in f: - if line.startswith("nameserver"): - print line - returndns = line.split()[1] - break - except: - logging.debug(" Couldn't open /etc/resolv.conf for myth_dns") - logging.debug(" using %s for myth_dns", returndns) - return returndns - - - - - -def flush(netdev): - logging.debug(" Flushing %s",netdev) - cmd = '''ip address flush dev %s''' %netdev - mv_common.runcmd(cmd) - -def kill_dhcp(basedir): - logging.debug(" _Start of kill_dhcp") - logging.debug(" Killing off dhcpd") - stddir = os.getcwd() - piddir = ("%s/var/run/") %basedir - try: - os.chdir(piddir) - for FILE in glob.glob("dhcpcd-*.pid"): - f = open(FILE,'r') - pid = f.readline() - f.close - cmd = "kill -9 %s" %pid - mv_common.runcmd(cmd) - mv_common.remove_file(FILE) - os.chdir(stddir) - except: - pass - -def setup_nameserver(dns): - logging.info(" Adding %s for DNS", dns) - cmd = '''grep -q %s /etc/resolv.conf''' %dns - status = mv_common.runcmd(cmd) - if not status == 0 : - cmd = ''' echo "nameserver %s" >> /etc/resolv.conf ''' %dns - mv_common.runcmd(cmd) - - - -def setup_hostname(systemconfig): - logging.debug(" _Start of setup_hostname") - try: - hostname = systemconfig["hostname"] - except: - logging.critical(" *Hostname could not be set") - logging.info(" Using default value of me") - hostname = "me" - logging.info(" Setting the hostname to %s", hostname) - cmd = ''' echo %s > /etc/hostname ''' %hostname - mv_common.runcmd(cmd) - cmd = "cat /etc/hosts | grep -v 127.0.0.1 | grep -v %s > /tmp/hosts" %hostname - mv_common.runcmd(cmd) - if systemconfig["mythdhcp"] == "1" : - logging.debug(" not using dhcp") - cmd = ''' echo 127.0.0.1 localhost > /etc/hosts ''' - mv_common.runcmd(cmd) - cmd = ''' echo %s %s > /etc/hosts ''' %(systemconfig["mythip"], systemconfig["hostname"]) - mv_common.runcmd(cmd) - else: - cmd = ''' echo 127.0.0.1 %s localhost > /etc/hosts ''' %systemconfig["hostname"] - mv_common.runcmd(cmd) - cmd = '''cat /tmp/hosts >> /etc/hosts ''' - mv_common.runcmd(cmd) - - -def write_wpafile(line,netdev): - logging.debug(" writing out wpa_supplicant.conf file") - logging.debug(line) - wpafile = etcnetdir+"/"+netdev+"/wpa_supplicant.conf" - try: - f = open(wpafile,'w') - f.write(line) - f.close() - except: - logging.debug(" Couldn't write to %s",wpafile) - -def setup_wpa(netinfo,netdev): - logging.info(" %s will use wpa for encryption",netdev) - line = ''' -#This file was automaticly generated, any changes may be lost -ctrl_interface=/var/run/wpa_supplicant -network={ - ssid="%s" - # Preshared key as an ASCII passphrase - psk="%s" - scan_ssid=1 - key_mgmt=WPA-EAP WPA-PSK NONE - pairwise=CCMP TKIP - proto=WPA RSN -}''' %(netinfo["ESSID"],netinfo["KEY"]) - write_wpafile(line,netdev) - -def setup_wep(netinfo,netdev): - logging.info(" %s will use wep for encryption",netdev) - logging.debug(" When a packet comes along, you must wep it") - line=''' -#This file was automaticly generated, any changes may be lost -ctrl_interface=/var/run/wpa_supplicant -network={ - ssid="%s" - key_mgmt=NONE - wep_key0=%s - wep_tx_keyidx=0 - scan_ssid=1 - auth_alg=SHARED -} -''' %(netinfo["ESSID"],netinfo["KEY"]) - write_wpafile(line,netdev) - - -def setup_none(netinfo,netdev): - logging.info(" %s will not use encryption",netdev) - line = ''' -#This file was automaticly generated, any changes may be lost -ctrl_interface=/var/run/wpa_supplicant -network={ - ssid="%s" - key_mgmt=NONE -} -''' %netinfo["ESSID"] - write_wpafile(line,netdev) - -def setup_interface(netdev,systemconfig): - logging.debug(" _Start of setup_interface for %s",netdev) - nettrans = {'Hostip':'ip', - 'Hostnetmask':'netmask', - 'HostActive':'isactive', - 'HostDNS':'dns', - 'HostUSEDHCP':'UseDHCP', - 'HostGW':'GW', - 'HostMTU':'mtu', - 'HOST_iswireless':"wireless", - 'HostESSID':'ESSID', - 'HostKey':'KEY', - 'HostUseEncryption':'ENCRYPT'} - netinfo = {} - #populate the netinfo dict - for netitem in nettrans: - if systemconfig[netitem+netdev]: - netinfo[nettrans[netitem]] = systemconfig[netitem+netdev] - else: - netinfo[nettrans[netitem]] = False - logging.debug(" %s:%s",netitem,netinfo[nettrans[netitem]]) - logging.info(" %s wireless: %s", netdev,netinfo["wireless"]) - try: - os.makedirs(etcnetdir) - except: - logging.debug(" Could not create %s",etcnetdir) - - optionfile=etcnetdir+"/"+netdev+"/options" - if not os.path.exists(optionfile): - try: - os.makedirs(etcnetdir+"/"+netdev) - except: - pass - mv_common.cp_and_log(systemconfig["TEMPLATES"]+"/etcnet/eth/options", optionfile) - - if netinfo["isactive"] == "1" : - change_iface_state(netdev,"enabled") - else: - change_iface_state(netdev,"disabled") - - if netinfo["wireless"] == "1" : - - logging.info(" Enabling wireless extensions") - cmd = ''' sed -i -e 's/^CONFIG_WIRELESS=.*$/CONFIG_WIRLESS=yes/g' %s/%s/options''' %(etcnetdir,netdev) - mv_common.runcmd(cmd) - if netinfo["ENCRYPT"] == "WEP": - setup_wep(netinfo,netdev) - elif netinfo["ENCRYPT"] == "WPA": - setup_wpa(netinfo,netdev) - elif netinfo["ENCRYPT"] == "none": - setup_none(netinfo,netdev) - - else: - logging.info(" Disabling wireless extensions") - cmd = '''sed -i -e 's/^CONFIG_WIRLESS=.*$/CONFIG_WIRLESS=no/g' %s/%s/options''' %(etcnetdir, netdev) - mv_common.runcmd(cmd) - #try: - wpafile=etcnetdir+"/"+netdev+"/wpa_supplicant.conf" - #os.remove(wpafile) - mv_common.remove_file(wpafile) - #except: - #logging.debug(" Couldn't remove %s",wpafile) - - if netinfo["UseDHCP"] == "0" : - logging.info(" Enabling DHCP support") - cmd = ''' sed -i -e 's/^BOOTPROTO=.*$/BOOTPROTO=dhcp/g' %s/%s/options''' %(etcnetdir, netdev) - mv_common.runcmd(cmd) - else: - logging.info(" Using static ip address of %s",netinfo["ip"]) - cmd = ''' sed -i -e 's/^BOOTPROTO=.*$/BOOTPROTO=static/g' %s/%s/options''' %(etcnetdir, netdev) - mv_common.runcmd(cmd) - cmd = '''echo "default via %s" > %s/%s/ipv4route''' %(netinfo["GW"], etcnetdir, netdev) - mv_common.runcmd(cmd) - cmd = '''echo "%s%s" > %s/%s/ipv4address ''' %(netinfo["ip"], netinfo["netmask"].split()[0], etcnetdir, netdev) - mv_common.runcmd(cmd) - setup_nameserver(netinfo["dns"]) - - if netinfo["mtu"] : - logging.info(" Setting mtu to %s", netinfo["mtu"]) - cmd = '''sed -i '/^mtu.*$/d' %s/%s/iplink''' %(etcnetdir,netdev) - mv_common.runcmd(cmd) - cmd = ''' echo "mtu %s" >> %s/%s/iplink''' %(netinfo["mtu"], etcnetdir,netdev) - mv_common.runcmd(cmd) - else: - logging.info(" Using default mtu value") - cmd = '''sed -i '/^mtu.*$/d' %s/%s/iplink''' %(etcnetdir,netdev) - mv_common.runcmd(cmd) - - -def change_iface_state(netdev, state): - if state == "enabled": - logging.info(" Activating %s", netdev) - cmd = '''sed -i -e 's/^ONBOOT=.*$/ONBOOT=yes/g' %s/%s/options''' %(etcnetdir,netdev) - mv_common.runcmd(cmd) - cmd = '''sed -i -e 's/^DISABLED=.*$/DISABLED=no/g' %s/%s/options ''' %(etcnetdir,netdev) - mv_common.runcmd(cmd) - else: - logging.info(" Disabling %s", netdev) - cmd = '''sed -i -e 's/^ONBOOT=.*$/ONBOOT=no/g' %s/%s/options''' %(etcnetdir,netdev) - mv_common.runcmd(cmd) - cmd = '''sed -i -e 's/^DISABLED=.*$/DISABLED=yes/g' %s/%s/options ''' %(etcnetdir,netdev) - mv_common.runcmd(cmd) - cmd = "/sbin/ifconfig %s down" %netdev - mv_common.runcmd(cmd) - cmd = "ip address flush %s" %netdev - mv_common.runcmd(cmd) - -def devcheck(netdev): - cmd = ''' /sbin/ifconfig %s''' %netdev - rc = mv_common.runcmd(cmd) - if rc == 0 : - return True - else: - return False - -def udev_rules(netdev): - filename = "/etc/udev/rules.d/net.rules" - if devcheck(netdev): - logging.info(" Finding macaddress for %s",netdev) - try: - macaddress = netifaces.ifaddresses(netdev)[netifaces.AF_LINK][0]['addr'] - logging.debug(" Macaddress: %s",macaddress) - except: - logging.debug(" Couldn't find mac address for %s",netdev) - return - try: - f = open(filename,'a') - except: - logging.debug(" Couldn't open %s for writing", filename) - return - if netdev.startswith('eth'): - line = '''KERNEL=="eth*", SYSFS{address}=="%s", NAME="%s"''' % ( macaddress , netdev) - elif netdev.startswith('wlan'): - line = '''KERNEL=="wlan*", SYSFS{address}=="%s", NAME="%s"'''% ( macaddress , netdev) - elif netdev.startswith('ath'): - line = '''KERNEL=="ath*", SYSFS{address}=="%s", NAME="%s"''' % ( macaddress , netdev) - logging.debug(" adding to net.rules ") - logging.debug(" %s",line) - f.write(line) - f.write("\n") - f.close() - -def find_active(systemconfig,this_is_install): - interfacelist=('eth0', 'eth1', 'wlan0', 'wlan1', 'ath0') - logging.debug(" _Start of find_active") - - if systemconfig["mythdhcp"] == "1": - mv_common.remove_file("/etc/resolv.conf") - cmd = ''' echo search lan > /etc/resolv.conf ''' - mv_common.runcmd(cmd) - cmd = ''' echo nameserver 127.0.0.1 >> /etc/resolv.conf ''' - mv_common.runcmd(cmd) - - for netdev in interfacelist: - if this_is_install: - udev_rules(netdev) - currentnet = "HostActive" + netdev - try: - systemconfig[currentnet] - except: - logging.debug(" %s is not defined",currentnet) - change_iface_state(netdev, "disabled") - continue - if systemconfig[currentnet] == "1" : - #check if device is present - if devcheck(netdev) : - setup_interface(netdev,systemconfig) - else: - logging.debug(" Interface %s not found in config", netdev) - #change_iface_state(netdev, "disabled") - else: - change_iface_state(netdev, "disabled") - -def vnc_netboot_check(): - logging.debug(" Start of VNC/NETBOOT check") - vnc = False - netboot = False - try: - f = open('/proc/cmdline', 'r') - bootoptions = f.readlines() - f.close() - except: - logging.critical(" *Couldn't open /proc/cmdline") - logging.debug(" Assuming it's ok to fiddle with the network") - return True - bootoptions = bootoptions[0] - if re.match("vnc",bootoptions) != None : - logging.debug(" Found VNC option") - vnc = True - if re.match("nfsroot",bootoptions) != None : - logging.debug(" Found netboot option") - netboot = True - - return (vnc or netboot) - -def start_network(): - if not vnc_netboot_check(): - logging.info(" Restarting network") - cmd ="/etc/net/scripts/network.init reload" - mv_common.runcmd(cmd) - cmd ="/etc/net/scripts/network.init restart" - mv_common.runcmd(cmd) - else: - logging.info(" Will not restart network due to netboot/vnc") - - -def stop_network(): - if not vnc_netboot_check(): - logging.info(" Stopping network") - cmd ="/etc/net/scripts/network.init stop" - mv_common.runcmd(cmd) - kill_dhcp("") - interfacelist=('eth0', 'eth1', 'wlan0', 'wlan1', 'ath0') - for i in interfacelist: - flush(i) - else: - logging.info(" Will not stop network due to netboot/vnc") - pass - -def hostname_change_check(systemconfig): - restartfe = False - logging.debug(" _Start of hostname_change_check") - oldhostname = socket.gethostname() - #oldhostname = "crap" - newhostname = systemconfig["hostname"] - mv_root = systemconfig["MVROOT"] - logging.debug(" Old hostname: %s", oldhostname) - logging.debug(" New hostname: %s", newhostname) - if oldhostname != newhostname : - logging.info(" Changing hostname in database to match new hostname") - cmd ="%s/bin/restore_default_settings.sh -cuhostname -o -h%s" %(mv_root, oldhostname) - mv_common.runcmd(cmd) - logging.info(" Changing hostname to %s", newhostname) - cmd = "hostname %s" %newhostname - mv_common.runcmd(cmd) - if systemconfig["SystemType"] != "Frontend_only" : - logging.info(" Restarting backend") - mv_common.stop_service("mythbackend") - mv_common.start_service("mythbackend") - restartfe = True - else: - logging.debug(" old and new hostnames matched, leaving things along") - logging.debug(" __End of hostname_change_check") - return restartfe - - - -def setup_network (systemconfig,this_is_install): - logging.info("____Start of network____") - logging.info(" Setting up the network") - restartfe = hostname_change_check(systemconfig) - setup_hostname(systemconfig) - find_active(systemconfig,this_is_install) - start_network() - logging.info("__End of network\n") - return restartfe - - - -##this is used by the install process to start the network -def install_network_setup(systemconfig): - logging.info("____Start of network_install____") - logging.info(" Setting up the network") - #setup_MYTH_vars - setup_hostname(systemconfig) - stop_network() - find_active(systemconfig) - start_network() - logging.info("__End of network install \n") - - |