1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

new ifupdown2 link module to create dummy devices

Ticket: CM-3525
Reviewed By: CCR-3326
Testing Done: Tested creating dummy devices using ifupdown2

This is modification to gospos loopback module. It solves the same
purpose ie using linux dummy device like a loopback device but there were
objections on calling it loopback so i have renamed it to link and i have changed it
into a generic module that can do any 'ip link'. Can be extended for
link args in the future.

below example creates a loopy device

$ifquery loopy
auto loopy
iface loopy
link-type dummy

$ifup loopy
$ifquery -c loopy
auto loopy
iface loopy [pass]
link-type dummy [pass]

(cherry picked from commit 1151420408a53c106d29183a1e0da5562c8b03a3)
This commit is contained in:
Roopa Prabhu
2015-08-12 23:30:55 -07:00
parent 7496605db3
commit 2ec2da0cf9
4 changed files with 34 additions and 10 deletions

View File

@ -11,20 +11,25 @@ from ifupdownaddons.modulebase import moduleBase
from ifupdownaddons.iproute2 import iproute2
import logging
class loopback(moduleBase):
_modinfo = {'mhelp' : 'configure extra loopback module based on ' +
'dummy device' }
class link(moduleBase):
_modinfo = {'mhelp' : 'create/configure link types. similar to ip-link',
'attrs' : {
'link-type' :
{'help' : 'type of link as in \'ip link\' command.',
'example' : ['link-type <dummy|veth>']}}}
def __init__(self, *args, **kargs):
moduleBase.__init__(self, *args, **kargs)
self.ipcmd = None
def _is_loopback_by_name(self, ifacename):
return 'loop' in ifacename
def _is_my_interface(self, ifaceobj):
if ifaceobj.get_attr_value_first('link-type'):
return True
return False
def _up(self, ifaceobj):
if self._is_loopback_by_name(ifaceobj.name):
self.ipcmd.link_create(ifaceobj.name, 'dummy')
self.ipcmd.link_create(ifaceobj.name,
ifaceobj.get_attr_value_first('link-type'))
def _down(self, ifaceobj):
if not self.PERFMODE and not self.ipcmd.link_exists(ifaceobj.name):
@ -36,7 +41,15 @@ class loopback(moduleBase):
def _query_check(self, ifaceobj, ifaceobjcurr):
if not self.ipcmd.link_exists(ifaceobj.name):
return
ifaceobjcurr.update_config_with_status('link-type', 'None', 1)
else:
link_type = ifaceobj.get_attr_value_first('link-type')
if self.ipcmd.link_get_kind(ifaceobj.name) == link_type:
ifaceobjcurr.update_config_with_status('link-type',
link_type, 0)
else:
ifaceobjcurr.update_config_with_status('link-type',
link_type, 1)
_run_ops = {'pre-up' : _up,
'post-down' : _down,
@ -54,7 +67,7 @@ class loopback(moduleBase):
if not op_handler:
return
if (operation != 'query-running' and
not self._is_loopback_by_name(ifaceobj.name)):
not self._is_my_interface(ifaceobj)):
return
self._init_command_handlers()
if operation == 'query-checkcurr':

View File

@ -1,4 +1,6 @@
pre-up,link
pre-up,bond
pre-up,clagd
pre-up,vlan
pre-up,vxlan
pre-up,clagd
@ -29,3 +31,4 @@ post-down,vxlan
post-down,vlan
post-down,bond
post-down,usercmds
post-down,link

View File

@ -67,7 +67,11 @@ class iproute2(utilsBase):
elif citems[i] == 'link/ether': linkattrs['hwaddress'] = citems[i+1]
elif citems[i] == 'vlan' and citems[i+1] == 'id':
linkattrs['linkinfo'] = {'vlanid' : citems[i+2]}
linkattrs['kind'] = 'vlan'
elif citems[i] == 'dummy':
linkattrs['kind'] = 'dummy'
elif citems[i] == 'vxlan' and citems[i+1] == 'id':
linkattrs['kind'] = 'vxlan'
vattrs = {'vxlanid' : citems[i+2],
'svcnode' : [],
'remote' : [],
@ -568,6 +572,9 @@ class iproute2(utilsBase):
def link_get_mtu(self, ifacename):
return self._cache_get('link', [ifacename, 'mtu'])
def link_get_kind(self, ifacename):
return self._cache_get('link', [ifacename, 'kind'])
def link_get_hwaddress(self, ifacename):
address = self._cache_get('link', [ifacename, 'hwaddress'])
# newly created logical interface addresses dont end up in the cache

View File

@ -37,8 +37,9 @@ setup(name='ifupdown2',
'addons/bond.py', 'addons/vlan.py',
'addons/mstpctl.py', 'addons/address.py',
'addons/dhcp.py', 'addons/usercmds.py',
'addons/ethtool.py', 'addons/loopback.py',
'addons/ethtool.py',
'addons/addressvirtual.py', 'addons/vxlan.py',
'addons/link.py',
'addons/bridgevlan.py']),
('/var/lib/ifupdownaddons/', ['config/addons.conf']),
('/var/lib/ifupdownaddons/policy.d/', []),