+ self.ifaces = {}
+ self.configuredInterfaces = []
+ self.nameservers = []
+ self.ethtool_bin = "/usr/sbin/ethtool"
+ self.container = eConsoleAppContainer()
+ self.Console = Console()
+ self.getInterfaces()
+
+ def getInterfaces(self, callback = None):
+ devicesPattern = re_compile('[a-z]+[0-9]+')
+ self.configuredInterfaces = []
+ fp = file('/proc/net/dev', 'r')
+ system("cat /proc/net/dev")
+ result = fp.readlines()
+ fp.close()
+ for line in result:
+ try:
+ device = devicesPattern.search(line).group()
+ if device == 'wifi0':
+ continue
+ self.getDataForInterface(device, callback)
+ except AttributeError:
+ pass
+
+ # helper function
+ def regExpMatch(self, pattern, string):
+ if string is None:
+ return None
+ try:
+ return pattern.search(string).group()
+ except AttributeError:
+ None
+
+ # helper function to convert ips from a sring to a list of ints
+ def convertIP(self, ip):
+ strIP = ip.split('.')
+ ip = []
+ for x in strIP:
+ ip.append(int(x))
+ return ip
+
+ def IPaddrFinished(self, result, retval, extra_args):
+ (iface, callback ) = extra_args
+ data = { 'up': False, 'dhcp': False, 'preup' : False, 'postdown' : False }
+ globalIPpattern = re_compile("scope global")
+ ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
+ ipLinePattern = re_compile('inet ' + ipRegexp +'/')
+ ipPattern = re_compile(ipRegexp)
+
+ for line in result.splitlines():
+ split = line.strip().split(' ',2)
+ if (split[1] == iface):
+ if re_search(globalIPpattern, split[2]):
+ ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, split[2]))
+ if ip is not None:
+ data['ip'] = self.convertIP(ip)
+ if not data.has_key('ip'):
+ data['dhcp'] = True
+ data['ip'] = [0, 0, 0, 0]
+ data['netmask'] = [0, 0, 0, 0]
+ data['gateway'] = [0, 0, 0, 0]
+
+ cmd = "ifconfig " + iface
+ self.Console.ePopen(cmd, self.ifconfigFinished, [iface, data, callback])
+
+ def getDataForInterface(self, iface,callback):
+ #get ip out of ip addr, as avahi sometimes overrides it in ifconfig.
+ cmd = "ip -o addr"
+ self.Console.ePopen(cmd, self.IPaddrFinished, [iface,callback])
+
+ def ifconfigFinished(self, result, retval, extra_args ):
+ (iface, data, callback ) = extra_args
+ ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
+ ipLinePattern = re_compile('inet addr:' + ipRegexp)
+ netmaskLinePattern = re_compile('Mask:' + ipRegexp)
+ bcastLinePattern = re_compile('Bcast:' + ipRegexp)
+ ipPattern = re_compile(ipRegexp)
+ upPattern = re_compile('UP ')
+ macPattern = re_compile('[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}')
+
+ for line in result.splitlines():
+ #ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, line))
+ netmask = self.regExpMatch(ipPattern, self.regExpMatch(netmaskLinePattern, line))
+ bcast = self.regExpMatch(ipPattern, self.regExpMatch(bcastLinePattern, line))
+ up = self.regExpMatch(upPattern, line)
+ mac = self.regExpMatch(macPattern, line)
+ #if ip is not None:
+ # data['ip'] = self.convertIP(ip)
+ if netmask is not None:
+ data['netmask'] = self.convertIP(netmask)
+ if bcast is not None:
+ data['bcast'] = self.convertIP(bcast)
+ if up is not None:
+ data['up'] = True
+ if iface is not 'lo':
+ self.configuredInterfaces.append(iface)
+ if mac is not None:
+ data['mac'] = mac
+
+ cmd = "route -n | grep " + iface
+ self.Console.ePopen(cmd,self.routeFinished,[iface,data,callback])
+
+ def routeFinished(self, result, retval, extra_args):
+ (iface, data, callback) = extra_args
+ ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
+ ipPattern = re_compile(ipRegexp)
+ ipLinePattern = re_compile(ipRegexp)
+
+ for line in result.splitlines():
+ print line[0:7]
+ if line[0:7] == "0.0.0.0":
+ gateway = self.regExpMatch(ipPattern, line[16:31])
+ if gateway is not None:
+ data['gateway'] = self.convertIP(gateway)
+
+ for line in result.splitlines(): #get real netmask in case avahi has overridden ifconfig netmask
+ split = line.strip().split(' ')
+ if re_search(ipPattern, split[0]):
+ foundip = self.convertIP(split[0])
+ if (foundip[0] == data['ip'][0] and foundip[1] == data['ip'][1]):
+ if re_search(ipPattern, split[4]):
+ mask = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, split[4]))
+ if mask is not None:
+ data['netmask'] = self.convertIP(mask)
+ self.ifaces[iface] = data
+ self.loadNetworkConfig(iface,callback)
+