mirror of
https://github.com/CumulusNetworks/ifupdown2.git
synced 2024-05-06 15:54:50 +00:00
addons: vrf: support for vrf-default-route attribute
Ticket:CM-9106 Reviewed By: Roopa Prabhu and Dave Olson Testing Done: Yes, by installing ifupdown and cumulus-tools deb on to cel-e1031-01 This patch adds per vrf default route: "ip route add table <tbid> unreachable default" It also accepts a policy file with vrf-default-route [yes/no] This also includes ifquery fixes for running and check.
This commit is contained in:
@ -7,6 +7,7 @@
|
||||
import os
|
||||
import atexit
|
||||
from ifupdown.iface import *
|
||||
import ifupdown.policymanager as policymanager
|
||||
import ifupdownaddons
|
||||
from ifupdownaddons.modulebase import moduleBase
|
||||
from ifupdownaddons.bondutil import bondutil
|
||||
@ -20,6 +21,10 @@ class vrf(moduleBase):
|
||||
{'help' : 'vrf device table id. key to ' +
|
||||
'creating a vrf device',
|
||||
'example': ['vrf-table-id 1']},
|
||||
'vrf-default-route':
|
||||
{'help' : 'vrf device default route ' +
|
||||
'to avoid communication outside the vrf device',
|
||||
'example': ['vrf-default-route yes/no']},
|
||||
'vrf':
|
||||
{'help' : 'vrf the interface is part of.',
|
||||
'example': ['vrf blue']}}}
|
||||
@ -225,11 +230,29 @@ class vrf(moduleBase):
|
||||
except Exception, e:
|
||||
self.logger.warn('%s: %s' %(ifaceobj.name, str(e)))
|
||||
|
||||
|
||||
def _up_vrf_default_route(self, ifaceobj, vrf_table):
|
||||
vrf_default_route = ifaceobj.get_attr_value_first('vrf-default-route')
|
||||
if not vrf_default_route:
|
||||
vrf_default_route = policymanager.policymanager_api.get_attr_default(
|
||||
module_name=self.__class__.__name__, attr='vrf-default-route')
|
||||
if not vrf_default_route:
|
||||
return
|
||||
if str(vrf_default_route).lower() == "yes":
|
||||
try:
|
||||
self.exec_command('ip route add table %s unreachable default' %vrf_table)
|
||||
except OSError, e:
|
||||
if e.errno != 17:
|
||||
raise
|
||||
pass
|
||||
|
||||
|
||||
def _up(self, ifaceobj):
|
||||
try:
|
||||
vrf_table = ifaceobj.get_attr_value_first('vrf-table')
|
||||
if vrf_table:
|
||||
self._up_vrf_dev(ifaceobj, vrf_table)
|
||||
self._up_vrf_default_route(ifaceobj, vrf_table)
|
||||
else:
|
||||
vrf = ifaceobj.get_attr_value_first('vrf')
|
||||
if vrf:
|
||||
@ -267,7 +290,7 @@ class vrf(moduleBase):
|
||||
|
||||
def _query_check_vrf_slave(self, ifaceobj, ifaceobjcurr, vrf):
|
||||
try:
|
||||
master = self.ipcmd.link_get_master(ifacename)
|
||||
master = self.ipcmd.link_get_master(ifaceobj.name)
|
||||
if not master or master != vrf:
|
||||
ifaceobjcurr.update_config_with_status('vrf', master, 1)
|
||||
else:
|
||||
@ -317,14 +340,14 @@ class vrf(moduleBase):
|
||||
try:
|
||||
kind = self.ipcmd.link_get_kind(ifaceobjrunning.name)
|
||||
if kind == 'vrf':
|
||||
vrfdev_attrs = self.ipcmd.link_get_linkinfo_attrs(ifaceobj.name)
|
||||
vrfdev_attrs = self.ipcmd.link_get_linkinfo_attrs(ifaceobjrunning.name)
|
||||
if vrfdev_attrs:
|
||||
running_table = vrfdev_attrs.get('table')
|
||||
if running_table:
|
||||
ifaceobjrunning.update_config('vrf-table',
|
||||
running_table)
|
||||
elif kind == 'vrf_slave':
|
||||
vrf = self.link_get_master(ifaceobjrunning.name)
|
||||
vrf = self.ipcmd.link_get_master(ifaceobjrunning.name)
|
||||
if vrf:
|
||||
ifaceobjrunning.update_config('vrf', vrf)
|
||||
except Exception, e:
|
||||
|
@ -96,6 +96,10 @@ class iproute2(utilsBase):
|
||||
elif citems[i] == 'vrf' and citems[i+1] == 'table':
|
||||
vattrs = {'table' : citems[i+2]}
|
||||
linkattrs['linkinfo'] = vattrs
|
||||
linkattrs['kind'] = 'vrf'
|
||||
break
|
||||
elif citems[i] == 'vrf_slave':
|
||||
linkattrs['kind'] = 'vrf_slave'
|
||||
break
|
||||
#linkattrs['alias'] = self.read_file_oneline(
|
||||
# '/sys/class/net/%s/ifalias' %ifname)
|
||||
|
Reference in New Issue
Block a user