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:
@ -11,20 +11,25 @@ from ifupdownaddons.modulebase import moduleBase
|
|||||||
from ifupdownaddons.iproute2 import iproute2
|
from ifupdownaddons.iproute2 import iproute2
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
class loopback(moduleBase):
|
class link(moduleBase):
|
||||||
_modinfo = {'mhelp' : 'configure extra loopback module based on ' +
|
_modinfo = {'mhelp' : 'create/configure link types. similar to ip-link',
|
||||||
'dummy device' }
|
'attrs' : {
|
||||||
|
'link-type' :
|
||||||
|
{'help' : 'type of link as in \'ip link\' command.',
|
||||||
|
'example' : ['link-type <dummy|veth>']}}}
|
||||||
|
|
||||||
def __init__(self, *args, **kargs):
|
def __init__(self, *args, **kargs):
|
||||||
moduleBase.__init__(self, *args, **kargs)
|
moduleBase.__init__(self, *args, **kargs)
|
||||||
self.ipcmd = None
|
self.ipcmd = None
|
||||||
|
|
||||||
def _is_loopback_by_name(self, ifacename):
|
def _is_my_interface(self, ifaceobj):
|
||||||
return 'loop' in ifacename
|
if ifaceobj.get_attr_value_first('link-type'):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def _up(self, ifaceobj):
|
def _up(self, ifaceobj):
|
||||||
if self._is_loopback_by_name(ifaceobj.name):
|
self.ipcmd.link_create(ifaceobj.name,
|
||||||
self.ipcmd.link_create(ifaceobj.name, 'dummy')
|
ifaceobj.get_attr_value_first('link-type'))
|
||||||
|
|
||||||
def _down(self, ifaceobj):
|
def _down(self, ifaceobj):
|
||||||
if not self.PERFMODE and not self.ipcmd.link_exists(ifaceobj.name):
|
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):
|
def _query_check(self, ifaceobj, ifaceobjcurr):
|
||||||
if not self.ipcmd.link_exists(ifaceobj.name):
|
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,
|
_run_ops = {'pre-up' : _up,
|
||||||
'post-down' : _down,
|
'post-down' : _down,
|
||||||
@ -54,7 +67,7 @@ class loopback(moduleBase):
|
|||||||
if not op_handler:
|
if not op_handler:
|
||||||
return
|
return
|
||||||
if (operation != 'query-running' and
|
if (operation != 'query-running' and
|
||||||
not self._is_loopback_by_name(ifaceobj.name)):
|
not self._is_my_interface(ifaceobj)):
|
||||||
return
|
return
|
||||||
self._init_command_handlers()
|
self._init_command_handlers()
|
||||||
if operation == 'query-checkcurr':
|
if operation == 'query-checkcurr':
|
@ -1,4 +1,6 @@
|
|||||||
|
pre-up,link
|
||||||
pre-up,bond
|
pre-up,bond
|
||||||
|
pre-up,clagd
|
||||||
pre-up,vlan
|
pre-up,vlan
|
||||||
pre-up,vxlan
|
pre-up,vxlan
|
||||||
pre-up,clagd
|
pre-up,clagd
|
||||||
@ -29,3 +31,4 @@ post-down,vxlan
|
|||||||
post-down,vlan
|
post-down,vlan
|
||||||
post-down,bond
|
post-down,bond
|
||||||
post-down,usercmds
|
post-down,usercmds
|
||||||
|
post-down,link
|
||||||
|
@ -67,7 +67,11 @@ class iproute2(utilsBase):
|
|||||||
elif citems[i] == 'link/ether': linkattrs['hwaddress'] = citems[i+1]
|
elif citems[i] == 'link/ether': linkattrs['hwaddress'] = citems[i+1]
|
||||||
elif citems[i] == 'vlan' and citems[i+1] == 'id':
|
elif citems[i] == 'vlan' and citems[i+1] == 'id':
|
||||||
linkattrs['linkinfo'] = {'vlanid' : citems[i+2]}
|
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':
|
elif citems[i] == 'vxlan' and citems[i+1] == 'id':
|
||||||
|
linkattrs['kind'] = 'vxlan'
|
||||||
vattrs = {'vxlanid' : citems[i+2],
|
vattrs = {'vxlanid' : citems[i+2],
|
||||||
'svcnode' : [],
|
'svcnode' : [],
|
||||||
'remote' : [],
|
'remote' : [],
|
||||||
@ -568,6 +572,9 @@ class iproute2(utilsBase):
|
|||||||
def link_get_mtu(self, ifacename):
|
def link_get_mtu(self, ifacename):
|
||||||
return self._cache_get('link', [ifacename, 'mtu'])
|
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):
|
def link_get_hwaddress(self, ifacename):
|
||||||
address = self._cache_get('link', [ifacename, 'hwaddress'])
|
address = self._cache_get('link', [ifacename, 'hwaddress'])
|
||||||
# newly created logical interface addresses dont end up in the cache
|
# newly created logical interface addresses dont end up in the cache
|
||||||
|
3
setup.py
3
setup.py
@ -37,8 +37,9 @@ setup(name='ifupdown2',
|
|||||||
'addons/bond.py', 'addons/vlan.py',
|
'addons/bond.py', 'addons/vlan.py',
|
||||||
'addons/mstpctl.py', 'addons/address.py',
|
'addons/mstpctl.py', 'addons/address.py',
|
||||||
'addons/dhcp.py', 'addons/usercmds.py',
|
'addons/dhcp.py', 'addons/usercmds.py',
|
||||||
'addons/ethtool.py', 'addons/loopback.py',
|
'addons/ethtool.py',
|
||||||
'addons/addressvirtual.py', 'addons/vxlan.py',
|
'addons/addressvirtual.py', 'addons/vxlan.py',
|
||||||
|
'addons/link.py',
|
||||||
'addons/bridgevlan.py']),
|
'addons/bridgevlan.py']),
|
||||||
('/var/lib/ifupdownaddons/', ['config/addons.conf']),
|
('/var/lib/ifupdownaddons/', ['config/addons.conf']),
|
||||||
('/var/lib/ifupdownaddons/policy.d/', []),
|
('/var/lib/ifupdownaddons/policy.d/', []),
|
||||||
|
Reference in New Issue
Block a user