Ejemplo n.º 1
0
    def __init__(self, site, request, url=url):
        self.site = site
        self.request = request
        rtparm = 1
        if url.endswith('cgi'):
            rtparm = 2
        if 'interfaces' in self.request or 'ips' in self.request:
            rt = Routes(site=site, url=url + '?post_routes=%s' % rtparm)
            dt = Details(site=site, url=url + '?post_olsr=1')
            self.version = rt.version
            interfaces = {}
            ips = {}
            base = 0
            for count, (ip, ifname) in enumerate(pyk.iteritems(rt.ip_dev)):
                i4 = Inet4(ip, None, None, iface=ifname)
                # ignore interfaces with unroutable IPs
                if unroutable(i4.ip):
                    #print ("Unroutable: %s" % i4)
                    continue
                ips[i4] = 1
                iface = Interface(count, ifname, None)
                iface.is_wlan = False
                interfaces[ifname] = iface
                iface.append_inet4(i4)
                base = count
            base += 1
            for count, (ip, ifname) in enumerate(pyk.iteritems(dt.ip_dev)):
                i4 = Inet4(ip, None, None, iface=ifname)
                is_wlan = sum(x == 1.0 for x in dt.metric[ip]) != 3
                #print ("ip", ip, dt.metric [ip])
                if unroutable(i4.ip):
                    continue
                if i4 in ips:
                    if ifname not in interfaces:
                        iface = Interface(base + count, ifname, None)
                        interfaces[ifname] = iface
                        iface.append_inet4(i4)
                    else:
                        iface = interfaces[ifname]
                        if i4 not in iface.inet4:
                            #print ("Oops:", ifname, i4, iface.inet4 [0])
                            del iface.inet4[0]
                            iface.append_inet4(i4)
                    iface.is_wlan = is_wlan
                    continue
                ips[i4] = 1
                iface = Interface(base + count, ifname, None)
                iface.is_wlan = is_wlan
                interfaces[ifname] = iface
                iface.append_inet4(i4)

            # check own ip
            n = 'unknown'
            i4 = Inet4(self.request['ip'], None, None, iface=n)
            assert i4 in ips

            self.request['ips'] = ips
            self.request['interfaces'] = interfaces
            self.request['version'] = rt.version
Ejemplo n.º 2
0
    def __init__ (self, site, request, url = url) :
        self.site    = site
        self.request = request
        rtparm = 1
        if url.endswith ('cgi') :
            rtparm = 2
        if 'interfaces' in self.request or 'ips' in self.request :
            rt = Routes  (site = site, url = url + '?post_routes=%s' % rtparm)
            dt = Details (site = site, url = url + '?post_olsr=1')
            self.version = rt.version
            interfaces   = {}
            ips          = {}
            base         = 0
            for count, (ip, ifname) in enumerate (rt.ip_dev.iteritems ()) :
                i4 = Inet4 (ip, None, None, iface = ifname)
                # ignore interfaces with unroutable IPs
                if unroutable (i4.ip) :
                    #print "Unroutable: %s" % i4
                    continue
                ips [i4] = 1
                iface = Interface (count, ifname, None)
                iface.is_wlan = False
                interfaces [ifname] = iface
                iface.append_inet4 (i4)
                base = count
            base += 1
            for count, (ip, ifname) in enumerate (dt.ip_dev.iteritems ()) :
                i4 = Inet4 (ip, None, None, iface = ifname)
                is_wlan = sum (x == 1.0 for x in dt.metric [ip]) != 3
                #print "ip", ip, dt.metric [ip]
                if unroutable (i4.ip) :
                    continue
                if i4 in ips :
                    if ifname not in interfaces :
                        iface = Interface (base + count, ifname, None)
                        interfaces [ifname] = iface
                        iface.append_inet4 (i4)
                    else :
                        iface = interfaces [ifname]
                        if i4 not in iface.inet4 :
                            #print "Oops:", ifname, i4, iface.inet4 [0]
                            del iface.inet4 [0]
                            iface.append_inet4 (i4)
                    iface.is_wlan = is_wlan
                    continue
                ips [i4] = 1
                iface = Interface (base + count, ifname, None)
                iface.is_wlan = is_wlan
                interfaces [ifname] = iface
                iface.append_inet4 (i4)

            # check own ip
            n  = 'unknown'
            i4 = Inet4 (self.request ['ip'], None, None, iface = n)
            assert i4 in ips

            self.request ['ips']        = ips
            self.request ['interfaces'] = interfaces
            self.request ['version']    = rt.version
Ejemplo n.º 3
0
    def __init__ (self, site, request) :
        self.site    = site
        self.request = request
        if 'interfaces' in self.request or 'ips' in self.request :
            st    = Status           (site = site)
            conn  = OLSR_Connections (site = site)
            route = OLSR_Routes      (site = site)
            self.version = st.version
            assert len (st.wlans) <= 1
            interfaces   = {}
            ips          = {}
            count = 0
            for gw, ifname in route.iface_by_gw.iteritems () :
                ip, lq, nlq, etx  = conn.neighbors [gw]
                i4 = Inet4 (ip, None, None, iface = ifname)
                ips [i4] = 1
                is_wlan = True
                if lq == nlq == etx == 1.0 :
                    is_wlan = False
                if ifname in interfaces :
                    iface = interfaces [ifname]
                    if not iface.is_wlan and is_wlan :
                        iface.is_wlan   = True
                        iface.wlan_info = st.wlans [0]
                else :
                    iface = Interface (count, ifname, None)
                    iface.is_wlan = is_wlan
                    if is_wlan :
                        iface.wlan_info = st.wlans [0]
                    count += 1
                    interfaces [ifname] = iface
                if i4 not in iface.inet4 :
                    iface.append_inet4 (i4)
            wl_if = None
            for iface in interfaces.itervalues () :
                if iface.is_wlan :
                    if wl_if :
                        m = "Duplicate wlan: %s/%s" % (iface.name, wl_if.name)
                        raise ValueError (m)
                    wl_if = iface
            # check own ip
            n  = 'unknown'
            i4 = Inet4 (self.request ['ip'], None, None, iface = n)
            if i4 not in ips :
                assert n not in interfaces
                iface = interfaces [n] = Interface (count, n, None)
                iface.append_inet4 (i4)
                iface.is_wlan = False
                if not wl_if and st.wlans :
                    iface.is_wlan   = True
                    iface.wlan_info = st.wlans [0]
                ips [i4] = True

            self.request ['ips']        = ips
            self.request ['interfaces'] = interfaces
            self.request ['version']    = st.version
Ejemplo n.º 4
0
    def __init__(self, site, request):
        self.site = site
        self.request = request
        if 'interfaces' in self.request or 'ips' in self.request:
            st = Status(site=site)
            conn = OLSR_Connections(site=site)
            route = OLSR_Routes(site=site)
            self.version = st.version
            assert len(st.wlans) <= 1
            interfaces = {}
            ips = {}
            count = 0
            for gw, ifname in route.iface_by_gw.iteritems():
                ip, lq, nlq, etx = conn.neighbors[gw]
                i4 = Inet4(ip, None, None, iface=ifname)
                ips[i4] = 1
                is_wlan = True
                if lq == nlq == etx == 1.0:
                    is_wlan = False
                if ifname in interfaces:
                    iface = interfaces[ifname]
                    if not iface.is_wlan and is_wlan:
                        iface.is_wlan = True
                        iface.wlan_info = st.wlans[0]
                else:
                    iface = Interface(count, ifname, None)
                    iface.is_wlan = is_wlan
                    if is_wlan:
                        iface.wlan_info = st.wlans[0]
                    count += 1
                    interfaces[ifname] = iface
                if i4 not in iface.inet4:
                    iface.append_inet4(i4)
            wl_if = None
            for iface in interfaces.itervalues():
                if iface.is_wlan:
                    if wl_if:
                        m = "Duplicate wlan: %s/%s" % (iface.name, wl_if.name)
                        raise ValueError(m)
                    wl_if = iface
            # check own ip
            n = 'unknown'
            i4 = Inet4(self.request['ip'], None, None, iface=n)
            if i4 not in ips:
                assert n not in interfaces
                iface = interfaces[n] = Interface(count, n, None)
                iface.append_inet4(i4)
                iface.is_wlan = False
                if not wl_if and st.wlans:
                    iface.is_wlan = True
                    iface.wlan_info = st.wlans[0]
                ips[i4] = True

            self.request['ips'] = ips
            self.request['interfaces'] = interfaces
            self.request['version'] = st.version
Ejemplo n.º 5
0
 def append_iface(self, n, name, **kw):
     iface = Interface(n, name, kw['mtu'])
     i4 = Inet4(iface=name, **kw)
     iface.append_inet4(i4)
     iface.is_wlan = kw['wlan'].lower() == 'yes'
     self.if_by_name[name] = iface
     self.ips[iface.inet4[0]] = True
Ejemplo n.º 6
0
 def append_iface (self, n, name, ** kw) :
     iface = Interface (n, name, kw ['mtu'])
     i4 = Inet4 (iface = name, ** kw)
     iface.append_inet4 (i4)
     iface.is_wlan = kw ['wlan'].lower () == 'yes'
     self.if_by_name [name] = iface
     self.ips [iface.inet4 [0]] = True
Ejemplo n.º 7
0
 def append_iface(self, n, name, **kw):
     iface = Interface(n, name, kw["mtu"])
     i4 = Inet4(iface=name, **kw)
     iface.append_inet4(i4)
     iface.is_wlan = kw["wlan"].lower() == "yes"
     self.if_by_name[name] = iface
     self.ips[iface.inet4[0]] = True
Ejemplo n.º 8
0
 def parse (self) :
     root = self.tree.getroot ()
     self.if_by_name = {}
     self.ips        = {}
     for div in root.findall (".//%s" % tag ("div")) :
         self.try_get_version (div)
         if div.get ('id') == 'maincontent' and not self.if_by_name :
             tbl = div.find (".//%s" % tag ("table"))
             for n, tr in enumerate (tbl) :
                 if tr [0].tag == tag ('th') :
                     assert tr [0].text in ('Interface', 'Schnittstelle') \
                         , tr [0].text
                     continue
                 name, status, mtu, wlan, ip, mask, bcast = \
                     (x.text for x in tr)
                 if name in self.if_by_name :
                     iface = self.if_by_name [name]
                 else :
                     iface = Interface (n, name, mtu)
                     iface.is_wlan = self.yesno.get (wlan, False)
                 if status == 'DOWN' :
                     continue
                 # append IP address to interface if there is one
                 if ip is not None :
                     if ':' in ip :
                         i6 = Inet6 (ip, mask, bcast, iface = name)
                         iface.append_inet6 (i6)
                     else :
                         i4 = Inet4 (ip, mask, bcast, iface = name)
                         iface.append_inet4 (i4)
                         if not unroutable (i4.ip) :
                             self.if_by_name [name] = iface
                             self.ips [i4] = True
     self.set_version (root)
     if not self.if_by_name :
         raise ValueError, "No interface config found"
     bfw = Backfire_WLAN_Config (site = self.site)
     for d in bfw.wlans :
         if d.name in self.if_by_name :
             iface = self.if_by_name [d.name]
             iface.wlan_info = d
Ejemplo n.º 9
0
 def parse (self) :
     root = self.tree.getroot ()
     self.if_by_name = {}
     self.ips        = {}
     for div in root.findall (".//%s" % tag ("div")) :
         self.try_get_version (div)
         if div.get ('id') == 'maincontent' and not self.if_by_name :
             tbl = div.find (".//%s" % tag ("table"))
             for n, tr in enumerate (tbl) :
                 if tr [0].tag == tag ('th') :
                     assert tr [0].text in ('Interface', 'Schnittstelle') \
                         , tr [0].text
                     continue
                 name, status, mtu, wlan, ip, mask, bcast = \
                     (x.text for x in tr)
                 if name in self.if_by_name :
                     iface = self.if_by_name [name]
                 else :
                     iface = Interface (n, name, mtu)
                     iface.is_wlan = self.yesno.get (wlan, False)
                 if status == 'DOWN' :
                     continue
                 # append IP address to interface if there is one
                 if ip is not None :
                     if ':' in ip :
                         i6 = Inet6 (ip, mask, bcast, iface = name)
                         iface.append_inet6 (i6)
                     else :
                         i4 = Inet4 (ip, mask, bcast, iface = name)
                         iface.append_inet4 (i4)
                         if not unroutable (i4.ip) :
                             self.if_by_name [name] = iface
                             self.ips [i4] = True
     self.set_version (root)
     if not self.if_by_name :
         raise ValueError, "No interface config found"
     bfw = Backfire_WLAN_Config (site = self.site)
     for d in bfw.wlans :
         if d.name in self.if_by_name :
             iface = self.if_by_name [d.name]
             iface.wlan_info = d