Skip to content

Commit

Permalink
vyos.utils: T5749: fix get_vrf_members() call to iproute2
Browse files Browse the repository at this point in the history
The iproute2 master argument is used for both a VRF and a bridge device. Using
this in the VRF context would retrieve and report back the wrong interfaces:

Old implementation:
===================
>>> from vyos.utils.network import get_vrf_members
>>> get_vrf_members('br1')
['eth1', 'eth2', 'vxlan1']

>>> get_vrf_members('black')
['br1.3002', 'br1.4000', 'pim6reg10200']

The new implementation:
=======================
>>> from vyos.utils.network import get_vrf_members
>>> get_vrf_members('br1')
[]
>>> get_vrf_members('black')
['br1.3002', 'br1.4000', 'pim6reg10200']
  • Loading branch information
c-po committed Nov 27, 2023
1 parent b1a6d77 commit e025466
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions python/vyos/utils/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,17 @@ def get_vrf_members(vrf: str) -> list:
"""
import json
from vyos.utils.process import cmd
if not interface_exists(vrf):
raise ValueError(f'VRF "{vrf}" does not exist!')
output = cmd(f'ip --json --brief link show master {vrf}')
answer = json.loads(output)
interfaces = []
for data in answer:
if 'ifname' in data:
interfaces.append(data.get('ifname'))
try:
if not interface_exists(vrf):
raise ValueError(f'VRF "{vrf}" does not exist!')
output = cmd(f'ip --json --brief link show vrf {vrf}')
answer = json.loads(output)
for data in answer:
if 'ifname' in data:
interfaces.append(data.get('ifname'))
except:
pass
return interfaces

def get_interface_vrf(interface):
Expand Down

0 comments on commit e025466

Please sign in to comment.