Beispiel #1
0
 def bridge_port_pvid_del(self, bridgeportname, pvid):
     if self.ipbatch and not self.ipbatch_pause:
         self.add_to_batch('vlan del vid %s untagged pvid dev %s' %
                           (pvid, bridgeportname))
     else:
         utils.exec_command('bridge vlan del vid %s untagged pvid dev %s' %
                            (pvid, bridgeportname))
Beispiel #2
0
    def _bridge_fill(self, bridgename=None, refresh=False):
        try:
            # if cache is already filled, return
            linkCache.get_attr([bridgename, 'linkinfo', 'fd'])
            return
        except:
            pass
        if not bridgename:
            brctlout = utils.exec_command('/sbin/brctl show')
        else:
            brctlout = utils.exec_command('/sbin/brctl show %s' % bridgename)
        if not brctlout:
            return

        for bline in brctlout.splitlines()[1:]:
            bitems = bline.split()
            if len(bitems) < 2:
                continue
            try:
                linkCache.update_attrdict([bitems[0], 'linkinfo'],
                                          {'stp': bitems[2]})
            except KeyError:
                linkCache.update_attrdict([bitems[0]],
                                          {'linkinfo': {
                                              'stp': bitems[2]
                                          }})
            self._bridge_attrs_fill(bitems[0])
Beispiel #3
0
 def is_mstpd_running(self):
     try:
         utils.exec_command('/bin/pidof mstpd')
     except:
         return False
     else:
         return True
Beispiel #4
0
 def link_set(self,
              ifacename,
              key,
              value=None,
              force=False,
              type=None,
              state=None):
     if not force:
         if (key not in ['master', 'nomaster']
                 and self._cache_check('link', [ifacename, key], value)):
             return
     cmd = 'link set dev %s' % ifacename
     if type:
         cmd += ' type %s' % type
     cmd += ' %s' % key
     if value:
         cmd += ' %s' % value
     if state:
         cmd += ' %s' % state
     if self.ipbatch:
         self.add_to_batch(cmd)
     else:
         utils.exec_command('ip %s' % cmd)
     if key not in ['master', 'nomaster']:
         self._cache_update([ifacename, key], value)
Beispiel #5
0
 def addr_flush(self, ifacename):
     cmd = 'addr flush dev %s' % ifacename
     if self.ipbatch and not self.ipbatch_pause:
         self.add_to_batch(cmd)
     else:
         utils.exec_command('ip %s' % cmd)
     self._cache_delete([ifacename, 'addrs'])
Beispiel #6
0
    def _up(self, ifaceobj):
        """ up vrrpd -n -D -i $IFACE -v 1 -p 20 10.0.1.254
            up ifplugd -i $IFACE -b -f -u0 -d1 -I -p -q """

        if (not ifupdownflags.flags.DRYRUN and
            not os.path.exists('/sys/class/net/%s' %ifaceobj.name)):
            return

        cmd = ''
        attrval = ifaceobj.get_attr_value_first('vrrp-id')
        if attrval:
            cmd += ' -v %s' %attrval
        else:
            return
        attrval = ifaceobj.get_attr_value_first('vrrp-priority')
        if attrval:
            cmd += ' -p %s' %attrval
        else:
            self.logger.warn('%s: incomplete vrrp parameters ' %ifaceobj.name,
                    '(priority not found)')
        attrval = ifaceobj.get_attr_value_first('vrrp-virtual-ip')
        if attrval:
            cmd += ' %s' %attrval
        else:
            self.logger.warn('%s: incomplete vrrp arguments ' %ifaceobj.name,
                    '(virtual ip not found)')
            return
        cmd = '/usr/sbin/vrrpd -n -D -i %s %s' %(ifaceobj.name, cmd)
        utils.exec_command(cmd)

        cmd = '/usr/sbin/ifplugd -i %s -b -f -u0 -d1 -I -p -q' %ifaceobj.name
        if self._check_if_process_is_running('/usr/sbin/ifplugd', cmd):
           self.logger.info('%s: ifplugd already running' %ifaceobj.name)
           return
        utils.exec_command(cmd)
Beispiel #7
0
 def mstpbridge_exists(self, bridgename):
     try:
         utils.exec_command('mstpctl showbridge %s' % bridgename,
                            stdout=False)
         return True
     except:
         return False
Beispiel #8
0
 def _rule_cache_fill(self):
     ip_rules = utils.exec_command('/sbin/ip rule show').splitlines()
     self.ip_rule_cache = [' '.join(r.split()) for r in ip_rules]
     self.l3mdev4_rule = self._l3mdev_rule(self.ip_rule_cache)
     ip_rules = utils.exec_command('/sbin/ip -6 rule show').splitlines()
     self.ip6_rule_cache = [' '.join(r.split()) for r in ip_rules]
     self.l3mdev6_rule = self._l3mdev_rule(self.ip6_rule_cache)
Beispiel #9
0
 def bridge_port_vids_get(self, bridgeportname):
     utils.exec_command('/sbin/bridge vlan show %s' % bridgeportname)
     bridgeout = utils.exec_command('/sbin/bridge vlan show dev %s' %
                                    bridgeportname)
     if not bridgeout: return []
     brvlanlines = bridgeout.readlines()[2:]
     vids = [l.strip() for l in brvlanlines]
     return [v for v in vids if v]
Beispiel #10
0
 def set_bridgeport_attr(self, bridgename, bridgeportname, attrname,
                         attrval):
     if self._cache_check(
         [bridgename, 'linkinfo', 'ports', bridgeportname, attrname],
             attrval):
         return
     utils.exec_command('/sbin/brctl set%s %s %s %s' %
                        (attrname, bridgename, bridgeportname, attrval))
Beispiel #11
0
 def _down_vrf_helper(self, ifaceobj, vrf_table):
     mode = ""
     if ifupdownflags.flags.PERFMODE:
         mode = "boot"
     if self.vrf_helper:
         utils.exec_command(
             '%s delete %s %s %s' %
             (self.vrf_helper, ifaceobj.name, vrf_table, mode))
Beispiel #12
0
 def delete_bridge_port(self, bridgename, bridgeportname):
     """ Delete port from bridge """
     ports = self._cache_get([bridgename, 'linkinfo', 'ports'])
     if not ports or not ports.get(bridgeportname):
         return
     utils.exec_command('/sbin/brctl delif %s %s' %
                        (bridgename, bridgeportname))
     self._cache_delete([bridgename, 'linkinfo', 'ports', 'bridgeportname'])
Beispiel #13
0
 def set_vxlandev_learning(self, ifacename, learn):
     if learn == 'on':
         utils.exec_command('ip link set dev %s type vxlan learning' %
                            ifacename)
         self._cache_update([ifacename, 'linkinfo', 'learning'], 'on')
     else:
         utils.exec_command('ip link set dev %s type vxlan nolearning' %
                            ifacename)
         self._cache_update([ifacename, 'linkinfo', 'learning'], 'off')
Beispiel #14
0
 def link_delete(self, ifacename):
     if not self.link_exists(ifacename):
         return
     cmd = 'link del %s' % ifacename
     if self.ipbatch and not self.ipbatch_pause:
         self.add_to_batch(cmd)
     else:
         utils.exec_command('ip %s' % cmd)
     self._cache_invalidate()
Beispiel #15
0
 def add_bridge_port(self, bridgename, bridgeportname):
     """ Add port to bridge """
     ports = self._cache_get([bridgename, 'linkinfo', 'ports'])
     if ports and ports.get(bridgeportname):
         return
     utils.exec_command('/sbin/brctl addif %s %s' %
                        (bridgename, bridgeportname))
     self._cache_update([bridgename, 'linkinfo', 'ports', bridgeportname],
                        {})
Beispiel #16
0
 def _link_set_ifflag(self, ifacename, value):
     # Dont look at the cache, the cache may have stale value
     # because link status can be changed by external
     # entity (One such entity is ifupdown main program)
     cmd = 'link set dev %s %s' % (ifacename, value.lower())
     if self.ipbatch:
         self.add_to_batch(cmd)
     else:
         utils.exec_command('ip %s' % cmd)
Beispiel #17
0
 def is_process_running(self, processname):
     if not processname:
         return False
     try:
         utils.exec_command('/bin/pidof %s' % processname, stdout=False)
     except:
         return False
     else:
         return True
Beispiel #18
0
 def link_create_macvlan(self, name, linkdev, mode='private'):
     if self.link_exists(name):
         return
     cmd = ('link add link %s' % linkdev + ' name %s' % name +
            ' type macvlan mode %s' % mode)
     if self.ipbatch and not self.ipbatch_pause:
         self.add_to_batch(cmd)
     else:
         utils.exec_command('ip %s' % cmd)
     self._cache_update([name], {})
Beispiel #19
0
    def _close_sockets(self, ifaceobj, ifindex):
        if not self.vrf_close_socks_on_down:
            return

        try:
            utils.exec_command('/bin/ss -aK \"dev == %s\"' % ifindex)
        except Exception, e:
            self.logger.info('%s: closing socks using ss'
                             ' failed (%s)\n' % (ifaceobj.name, str(e)))
            pass
Beispiel #20
0
 def set_bridgeport_attrs(self, bridgename, bridgeportname, attrdict):
     portattrs = self._cache_get(
         [bridgename, 'linkinfo', 'ports', bridgeportname])
     if portattrs == None: portattrs = {}
     for k, v in attrdict.iteritems():
         if ifupdownflags.flags.CACHE:
             curval = portattrs.get(k)
             if curval and curval == v:
                 continue
         utils.exec_command('/sbin/brctl set%s %s %s %s' %
                            (k, bridgename, bridgeportname, v))
Beispiel #21
0
 def link_set_hwaddress(self, ifacename, hwaddress, force=False):
     if not force:
         if self._cache_check('link', [ifacename, 'hwaddress'], hwaddress):
             return
     self.link_down(ifacename)
     cmd = 'link set dev %s address %s' % (ifacename, hwaddress)
     if self.ipbatch:
         self.add_to_batch(cmd)
     else:
         utils.exec_command('ip %s' % cmd)
     self.link_up(ifacename)
     self._cache_update([ifacename, 'hwaddress'], hwaddress)
Beispiel #22
0
 def _down(self, ifaceobj):
     """ down ifplugd -k -i $IFACE
          down kill $(cat /var/run/vrrpd_$IFACE_*.pid) """
     attrval = ifaceobj.get_attr_value_first('vrrp-id')
     if not attrval:
         return
     try:
         utils.exec_command('/usr/sbin/ifplugd -k -i %s' % ifaceobj.name)
     except Exception, e:
         self.logger.debug('%s: ifplugd down error (%s)'
                           %(ifaceobj.name, str(e)))
         pass
Beispiel #23
0
 def set_bridge_attrs(self, bridgename, attrdict):
     for k, v in attrdict.iteritems():
         if not v:
             continue
         if self._cache_check([bridgename, 'linkinfo', k], v):
             continue
         try:
             cmd = '/sbin/brctl set%s %s %s' % (k, bridgename, v)
             utils.exec_command(cmd)
         except Exception, e:
             self.logger.warn('%s: %s' % (bridgename, str(e)))
             pass
Beispiel #24
0
 def route_add_gateway(self, ifacename, gateway, vrf=None, metric=None):
     if not gateway:
         return
     if not vrf:
         cmd = 'ip route add default via %s' % gateway
     else:
         cmd = 'ip route add table %s default via %s' % (vrf, gateway)
     # Add metric
     if metric:
         cmd += 'metric %s' % metric
     cmd += ' dev %s' % ifacename
     utils.exec_command(cmd)
Beispiel #25
0
 def route_del_gateway(self, ifacename, gateway, vrf=None, metric=None):
     # delete default gw
     if not gateway:
         return
     if not vrf:
         cmd = 'ip route del default via %s' % gateway
     else:
         cmd = 'ip route del table %s default via %s' % (vrf, gateway)
     if metric:
         cmd += ' metric %s' % metric
     cmd += ' dev %s' % ifacename
     utils.exec_command(cmd)
Beispiel #26
0
    def _del_vrf_rules(self, vrf_dev_name, vrf_table):
        pref = 200
        ip_rule_out_format = '%s: from all %s %s lookup %s'
        ip_rule_cmd = 'ip %s rule del pref %s %s %s table %s'

        rule = ip_rule_out_format % (pref, 'oif', vrf_dev_name, vrf_dev_name)
        if rule in self.ip_rule_cache:
            rule_cmd = ip_rule_cmd % ('', pref, 'oif', vrf_dev_name,
                                      vrf_dev_name)
            utils.exec_command(rule_cmd)

        rule = ip_rule_out_format % (pref, 'iif', vrf_dev_name, vrf_dev_name)
        if rule in self.ip_rule_cache:
            rule_cmd = ip_rule_cmd % ('', pref, 'iif', vrf_dev_name,
                                      vrf_dev_name)
            utils.exec_command(rule_cmd)

        rule = ip_rule_out_format % (pref, 'oif', vrf_dev_name, vrf_dev_name)
        if rule in self.ip6_rule_cache:
            rule_cmd = ip_rule_cmd % ('-6', pref, 'oif', vrf_dev_name,
                                      vrf_dev_name)
            utils.exec_command(rule_cmd)

        rule = ip_rule_out_format % (pref, 'iif', vrf_dev_name, vrf_dev_name)
        if rule in self.ip6_rule_cache:
            rule_cmd = ip_rule_cmd % ('-6', pref, 'iif', vrf_dev_name,
                                      vrf_dev_name)
            utils.exec_command(rule_cmd)
Beispiel #27
0
 def bridge_batch_commit(self):
     if not self.ipbatchbuf:
         self.ipbatchbuf = ''
         self.ipbatch = False
         self.ipbatch_pause = False
         return
     try:
         utils.exec_command('bridge -force -batch -', stdin=self.ipbatchbuf)
     except:
         raise
     finally:
         self.ipbatchbuf = ''
         self.ipbatch = False
         self.ipbatch_pause = False
Beispiel #28
0
 def tunnel_change(self, tunnelname, attrs={}):
     """ tunnel change function """
     if not self.link_exists(tunnelname):
         return
     cmd = 'tunnel change'
     cmd += ' %s' % (tunnelname)
     if attrs:
         for k, v in attrs.iteritems():
             cmd += ' %s' % k
             if v:
                 cmd += ' %s' % v
     if self.ipbatch and not self.ipbatch_pause:
         self.add_to_batch(cmd)
     else:
         utils.exec_command('ip %s' % cmd)
Beispiel #29
0
    def bridge_fdb_del(self,
                       dev,
                       address,
                       vlan=None,
                       bridge=True,
                       remote=None):
        target = 'self' if bridge else ''
        vlan_str = ''
        if vlan:
            vlan_str = 'vlan %s ' % vlan

        dst_str = ''
        if remote:
            dst_str = 'dst %s ' % remote
        utils.exec_command('bridge fdb del %s dev %s %s %s %s' %
                           (address, dev, vlan_str, target, dst_str))
Beispiel #30
0
 def bridge_port_vids_del(self, bridgeportname, vids):
     if not vids:
         return
     [
         utils.exec_command('bridge vlan del vid %s dev %s' %
                            (v, bridgeportname)) for v in vids
     ]