mirror of
https://github.com/CumulusNetworks/ifupdown2.git
synced 2024-05-06 15:54:50 +00:00
84ca006f82
Ticket: CM-3346 Reviewed By: Testing Done: Sanity test + test new bridge format There are a bunch of open issues with `vlan` interface handling. Below is the format. auto swp1 iface swp1 bridge-access 300 mstpctl-pathcost 0 mstpctl-adminedge yes mstpctl-autoedge yes mstpctl-p2p yes mstpctl-bpduguard yes mstpctl-treeprio 64 mstpctl-network yes mstpctl-bpdufilter yes auto swp2 iface swp2 bridge-vids 301 bridge-pvid 302 bridge-pathcost 10 bridge-priority 10 bridge-multicast-router 0 bridge-multicast-fast-leave 1 auto br0 iface br0 bridge-vlan-aware yes bridge-stp on bridge-ports swp1 swp2 bridge-vids 2001 auto br0.2001 iface br0.2001 address 10.0.14.2 hwaddress 00:03:00:00:00:12 address-virtual 00:00:5e:00:01:01 11.0.4.1/24 auto br0.2001 vlan br0.2001 bridge-igmp-querier-src 172.16.101.1
88 lines
3.1 KiB
Python
88 lines
3.1 KiB
Python
#!/usr/bin/python
|
|
|
|
from ifupdown.iface import *
|
|
from ifupdownaddons.modulebase import moduleBase
|
|
from ifupdownaddons.iproute2 import iproute2
|
|
import logging
|
|
|
|
class vxlan(moduleBase):
|
|
_modinfo = {'mhelp' : 'vxlan module configures vxlan interfaces.',
|
|
'attrs' : {
|
|
'vxlan-id' :
|
|
{'help' : 'vxlan id',
|
|
'required' : True,
|
|
'example': ['vxlan-id 100']},
|
|
'vxlan-local-tunnelip' :
|
|
{'help' : 'vxlan local tunnel ip',
|
|
'example': ['vxlan-local-tunnelip 172.16.20.103']},
|
|
'vxlan-svcnodeip' :
|
|
{'help' : 'vxlan id',
|
|
'example': ['vxlan-svcnodeip 172.16.22.125']},
|
|
'vxlan-peernodeip' :
|
|
{'help' : 'vxlan peer node ip',
|
|
'example': ['vxlan-peernodeip 172.16.22.127']},
|
|
'vxlan-learning' :
|
|
{'help' : 'vxlan learning on/off',
|
|
'example': ['vxlan-learning on']},
|
|
}}
|
|
|
|
def __init__(self, *args, **kargs):
|
|
moduleBase.__init__(self, *args, **kargs)
|
|
self.ipcmd = None
|
|
|
|
def _is_vxlan_device(self, ifaceobj):
|
|
if ifaceobj.get_attr_value_first('vxlan-id'):
|
|
return True
|
|
return False
|
|
|
|
def _up(self, ifaceobj):
|
|
vxlanid = ifaceobj.get_attr_value_first('vxlan-id')
|
|
if vxlanid:
|
|
self.ipcmd.link_create_vxlan(ifaceobj.name, vxlanid,
|
|
localtunnelip=ifaceobj.get_attr_value_first('vxlan-local-tunnelip'),
|
|
svcnodeips=ifaceobj.get_attr_value('vxlan-svcnodeip'),
|
|
peernodeips=ifaceobj.get_attr_value('vxlan-peernodeip'),
|
|
learning=ifaceobj.get_attr_value_first('vxlan-learning'))
|
|
|
|
def _down(self, ifaceobj):
|
|
try:
|
|
self.ipcmd.link_delete(ifaceobj.name)
|
|
except Exception, e:
|
|
self.log_warn(str(e))
|
|
|
|
def _query_check(self, ifaceobj, ifaceobjcurr):
|
|
if not self.ipcmd.link_exists(ifaceobj.name):
|
|
ifaceobjcurr.status = ifaceStatus.NOTFOUND
|
|
return
|
|
|
|
# Update vxlan object
|
|
|
|
def _query_running(self, ifaceobjrunning):
|
|
# Not implemented
|
|
return
|
|
|
|
_run_ops = {'pre-up' : _up,
|
|
'post-down' : _down,
|
|
'query-checkcurr' : _query_check,
|
|
'query-running' : _query_running}
|
|
|
|
def get_ops(self):
|
|
return self._run_ops.keys()
|
|
|
|
def _init_command_handlers(self):
|
|
if not self.ipcmd:
|
|
self.ipcmd = iproute2(**self.get_flags())
|
|
|
|
def run(self, ifaceobj, operation, query_ifaceobj=None, **extra_args):
|
|
op_handler = self._run_ops.get(operation)
|
|
if not op_handler:
|
|
return
|
|
if (operation != 'query-running' and
|
|
not self._is_vxlan_device(ifaceobj)):
|
|
return
|
|
self._init_command_handlers()
|
|
if operation == 'query-checkcurr':
|
|
op_handler(self, ifaceobj, query_ifaceobj)
|
|
else:
|
|
op_handler(self, ifaceobj)
|