mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 02:46:37 +00:00
bgp_l3vpn_to_bgp_vrf: catch linux setup failures
Signed-off-by: Lou Berger <lberger@labn.net>
This commit is contained in:
parent
d1f82d97db
commit
f2f902aca8
@ -93,6 +93,8 @@ CWD = os.path.dirname(os.path.realpath(__file__))
|
||||
# test name based on directory
|
||||
TEST = os.path.basename(CWD)
|
||||
|
||||
InitSuccess = False
|
||||
|
||||
class ThisTestTopo(Topo):
|
||||
"Test topology builder"
|
||||
def build(self, *_args, **_opts):
|
||||
@ -136,13 +138,45 @@ class ThisTestTopo(Topo):
|
||||
switch[1].add_link(tgen.gears['r2'], nodeif='r2-eth2')
|
||||
switch[1].add_link(tgen.gears['r3'], nodeif='r3-eth1')
|
||||
|
||||
def doCmd(tgen, rtr, cmd, checkstr = None):
|
||||
output = tgen.net[rtr].cmd(cmd).strip()
|
||||
if len(output):
|
||||
if checkstr != None:
|
||||
return re.search(checkstr, output)
|
||||
logger.info('command output: ' + output)
|
||||
return None
|
||||
class CustCmd():
|
||||
def __init__(self):
|
||||
self.resetCounts()
|
||||
|
||||
def doCmd(self, tgen, rtr, cmd, checkstr = None):
|
||||
output = tgen.net[rtr].cmd(cmd).strip()
|
||||
if len(output):
|
||||
self.output += 1
|
||||
if checkstr != None:
|
||||
ret = re.search(checkstr, output)
|
||||
if ret == None:
|
||||
self.nomatch += 1
|
||||
else:
|
||||
self.match += 1
|
||||
return ret
|
||||
logger.info('command: {} {}'.format(rtr, cmd))
|
||||
logger.info('output: ' + output)
|
||||
self.none += 1
|
||||
return None
|
||||
|
||||
def resetCounts(self):
|
||||
self.match = 0
|
||||
self.nomatch = 0
|
||||
self.output = 0
|
||||
self.none = 0
|
||||
|
||||
def getMatch(self):
|
||||
return self.match
|
||||
|
||||
def getNoMatch(self):
|
||||
return self.nomatch
|
||||
|
||||
def getOutput(self):
|
||||
return self.output
|
||||
|
||||
def getNone(self):
|
||||
return self.none
|
||||
|
||||
cc = CustCmd()
|
||||
|
||||
def ltemplatePreRouterStartHook():
|
||||
krel = platform.release()
|
||||
@ -152,14 +186,16 @@ def ltemplatePreRouterStartHook():
|
||||
if tgen.hasmpls != True:
|
||||
logger.info('MPLS not available, skipping setup')
|
||||
return
|
||||
#collect/log info on iproute2
|
||||
cc.doCmd(tgen, 'r2', 'apt-cache policy iproute2')
|
||||
cc.doCmd(tgen, 'r2', 'yum info iproute2')
|
||||
cc.doCmd(tgen, 'r2', 'yum info iproute')
|
||||
|
||||
cc.resetCounts()
|
||||
#configure r2 mpls interfaces
|
||||
intfs = ['lo', 'r2-eth0', 'r2-eth1', 'r2-eth2']
|
||||
for intf in intfs:
|
||||
doCmd(tgen, 'r2', 'echo 1 > /proc/sys/net/mpls/conf/{}/input'.format(intf))
|
||||
#collect/log info on iproute2
|
||||
doCmd(tgen, 'r2', 'apt-cache policy iproute2')
|
||||
doCmd(tgen, 'r2', 'yum info iproute2')
|
||||
doCmd(tgen, 'r2', 'yum info iproute')
|
||||
cc.doCmd(tgen, 'r2', 'echo 1 > /proc/sys/net/mpls/conf/{}/input'.format(intf))
|
||||
|
||||
#configure cust1 VRFs & MPLS
|
||||
rtrs = ['r1', 'r3', 'r4']
|
||||
@ -170,11 +206,11 @@ def ltemplatePreRouterStartHook():
|
||||
for rtr in rtrs:
|
||||
router = tgen.gears[rtr]
|
||||
for cmd in cmds:
|
||||
doCmd(tgen, rtr, cmd)
|
||||
doCmd(tgen, rtr, 'ip link set dev {}-eth4 master cust1'.format(rtr))
|
||||
cc.doCmd(tgen, rtr, cmd)
|
||||
cc.doCmd(tgen, rtr, 'ip link set dev {}-eth4 master cust1'.format(rtr))
|
||||
intfs = ['cust1', 'lo', rtr+'-eth0', rtr+'-eth4']
|
||||
for intf in intfs:
|
||||
doCmd(tgen, rtr, 'echo 1 > /proc/sys/net/mpls/conf/{}/input'.format(intf))
|
||||
cc.doCmd(tgen, rtr, 'echo 1 > /proc/sys/net/mpls/conf/{}/input'.format(intf))
|
||||
logger.info('setup {0} vrf cust1, {0}-eth4. enabled mpls input.'.format(rtr))
|
||||
#configure cust2 VRFs & MPLS
|
||||
rtrs = ['r4']
|
||||
@ -184,12 +220,19 @@ def ltemplatePreRouterStartHook():
|
||||
'ip link set dev cust2 up']
|
||||
for rtr in rtrs:
|
||||
for cmd in cmds:
|
||||
doCmd(tgen, rtr, cmd)
|
||||
doCmd(tgen, rtr, 'ip link set dev {}-eth5 master cust2'.format(rtr))
|
||||
cc.doCmd(tgen, rtr, cmd)
|
||||
cc.doCmd(tgen, rtr, 'ip link set dev {}-eth5 master cust2'.format(rtr))
|
||||
intfs = ['cust2', rtr+'-eth5']
|
||||
for intf in intfs:
|
||||
doCmd(tgen, rtr, 'echo 1 > /proc/sys/net/mpls/conf/{}/input'.format(intf))
|
||||
cc.doCmd(tgen, rtr, 'echo 1 > /proc/sys/net/mpls/conf/{}/input'.format(intf))
|
||||
logger.info('setup {0} vrf cust2, {0}-eth5. enabled mpls input.'.format(rtr))
|
||||
global InitSuccess
|
||||
if cc.getOutput():
|
||||
InitSuccess = False
|
||||
logger.info('VRF config failed ({}), tests will be skipped'.format(cc.getOutput()))
|
||||
else:
|
||||
InitSuccess = True
|
||||
logger.info('VRF config successful!')
|
||||
return;
|
||||
|
||||
def ltemplatePostRouterStartHook():
|
||||
@ -205,6 +248,10 @@ def versionCheck(vstr, rname='r1', compstr='<',cli=False, kernel='4.9'):
|
||||
ret = 'MPLS not initialized'
|
||||
return ret
|
||||
|
||||
if InitSuccess != True:
|
||||
ret = 'Test not successfully initialized'
|
||||
return ret
|
||||
|
||||
ret = True
|
||||
try:
|
||||
if router.has_version(compstr, vstr):
|
||||
|
Loading…
Reference in New Issue
Block a user