def address_exists(netns=None, **kwarg): ret = 0 ipr = None if netns is None: ipr = IPRoute() else: ipr = NetNS(netns) if 'match' in kwarg: nkw = kwarg['match'] else: nkw = dict(kwarg) for key in ('address', 'local'): if key in nkw: nkw[key] = nkw[key].split('/')[0] if 'ifname' in kwarg: links = list(ipr.link_lookup(ifname=kwarg['ifname'])) if links: nkw['index'] = links[0] nkw.pop('ifname') else: ipr.close() return 0 ret = list(ipr.addr('dump', match=nkw)) ipr.close() return len(ret) == 1
def interface_exists(netns=None, **kwarg): ret = 0 ipr = None if netns is None: ipr = IPRoute() else: ipr = NetNS(netns) spec = {} spec.update(kwarg) ret = list(ipr.link_lookup(**spec)) ipr.close() return len(ret) >= 1
def neighbour_exists(netns=None, *argv, **kwarg): ret = 0 ipr = None if netns is None: ipr = IPRoute() else: ipr = NetNS(netns) spec = {} spec.update(kwarg) ret = list(ipr.get_neighbours(*argv, **spec)) ipr.close() return len(ret) >= 1
def route_exists(netns=None, **kwarg): ret = 0 ipr = None if netns is not None: ipr = NetNS(netns) else: ipr = IPRoute() ret = list(ipr.route('dump', **kwarg)) ipr.close() return len(ret) >= 1
def teardown(self): ''' 1. close the test NDB 2. remove the registered interfaces, ignore not existing ''' self.ndb.close() self.ipr.close() for (ifname, nsname) in self.interfaces.items(): try: ipr = None # # spawn ipr to remove the interface if nsname is not None: ipr = NetNS(nsname) else: ipr = IPRoute() # # lookup the interface index index = list(ipr.link_lookup(ifname=ifname)) if len(index): index = index[0] else: # # ignore not existing interfaces continue # # try to remove it ipr.link('del', index=index) except NetlinkError as e: # # ignore if removed (t.ex. by another process) if e.code != errno.ENODEV: raise finally: if ipr is not None: ipr.close() for nsname in self.namespaces: netns.remove(nsname) for net in self.ipnets: free_network(net)
def qdisc_exists(netns=None, kind=None, **kwarg): if netns is None: ipr = IPRoute() else: ipr = NetNS(netns) opts = {} with ipr: if 'ifname' in kwarg: opts['index'] = ipr.link_lookup(ifname=kwarg.pop('ifname'))[0] ret = list(ipr.get_qdiscs(**opts)) if kind is not None: ret = [x for x in ret if x.get_attr('TCA_KIND') == kind] if kwarg: pre = ret ret = [] for qdisc in pre: options = qdisc.get_attr('TCA_OPTIONS') for opt in kwarg: if options[opt] != kwarg[opt]: break else: ret.append(qdisc) return len(ret) > 0