Skip to content

Commit cd1feee

Browse files
authored
Merge pull request #3449 from vyos/mergify/bp/sagitta/pr-3447
ethernet: T6306: add support for EVPN MH uplink/core tracking (backport #3447)
2 parents b976dad + 42ca28f commit cd1feee

File tree

5 files changed

+44
-6
lines changed

5 files changed

+44
-6
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!-- include start from interface/evpn-mh-uplink.xml.i -->
2+
<leafNode name="uplink">
3+
<properties>
4+
<help>Uplink to the VXLAN core</help>
5+
<valueless/>
6+
</properties>
7+
</leafNode>
8+
<!-- include end -->

interface-definitions/interfaces_bonding.xml.in

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,7 @@
102102
</constraint>
103103
</properties>
104104
</leafNode>
105-
<leafNode name="uplink">
106-
<properties>
107-
<help>Uplink to the VXLAN core</help>
108-
<valueless/>
109-
</properties>
110-
</leafNode>
105+
#include <include/interface/evpn-mh-uplink.xml.i>
111106
</children>
112107
</node>
113108
<leafNode name="hash-policy">

interface-definitions/interfaces_ethernet.xml.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@
5757
<defaultValue>auto</defaultValue>
5858
</leafNode>
5959
#include <include/interface/eapol.xml.i>
60+
<node name="evpn">
61+
<properties>
62+
<help>EVPN Multihoming</help>
63+
</properties>
64+
<children>
65+
#include <include/interface/evpn-mh-uplink.xml.i>
66+
</children>
67+
</node>
6068
#include <include/interface/hw-id.xml.i>
6169
#include <include/interface/ipv4-options.xml.i>
6270
#include <include/interface/ipv6-options.xml.i>

smoketest/scripts/cli/test_interfaces_ethernet.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,5 +354,15 @@ def test_ethtool_flow_control(self):
354354
out = loads(out)
355355
self.assertFalse(out[0]['autonegotiate'])
356356

357+
def test_ethtool_evpn_uplink_tarcking(self):
358+
for interface in self._interfaces:
359+
self.cli_set(self._base_path + [interface, 'evpn', 'uplink'])
360+
361+
self.cli_commit()
362+
363+
for interface in self._interfaces:
364+
frrconfig = self.getFRRconfig(f'interface {interface}', daemon='zebra')
365+
self.assertIn(f' evpn mh uplink', frrconfig)
366+
357367
if __name__ == '__main__':
358368
unittest.main(verbosity=2)

src/conf_mode/interfaces_ethernet.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,15 @@
4141
from vyos.pki import load_certificate
4242
from vyos.pki import wrap_private_key
4343
from vyos.template import render
44+
from vyos.template import render_to_string
4445
from vyos.utils.process import call
4546
from vyos.utils.dict import dict_search
4647
from vyos.utils.dict import dict_to_paths_values
4748
from vyos.utils.dict import dict_set
4849
from vyos.utils.dict import dict_delete
4950
from vyos.utils.file import write_file
5051
from vyos import ConfigError
52+
from vyos import frr
5153
from vyos import airbag
5254
airbag.enable()
5355

@@ -389,6 +391,10 @@ def generate(ethernet):
389391

390392
write_file(ca_cert_file_path, '\n'.join(ca_chains))
391393

394+
ethernet['frr_zebra_config'] = ''
395+
if 'deleted' not in ethernet:
396+
ethernet['frr_zebra_config'] = render_to_string('frr/evpn.mh.frr.j2', ethernet)
397+
392398
return None
393399

394400
def apply(ethernet):
@@ -407,6 +413,17 @@ def apply(ethernet):
407413

408414
call(f'systemctl {eapol_action} wpa_supplicant-wired@{ifname}')
409415

416+
zebra_daemon = 'zebra'
417+
# Save original configuration prior to starting any commit actions
418+
frr_cfg = frr.FRRConfig()
419+
420+
# The route-map used for the FIB (zebra) is part of the zebra daemon
421+
frr_cfg.load_configuration(zebra_daemon)
422+
frr_cfg.modify_section(f'^interface {ifname}', stop_pattern='^exit', remove_stop_mark=True)
423+
if 'frr_zebra_config' in ethernet:
424+
frr_cfg.add_before(frr.default_add_before, ethernet['frr_zebra_config'])
425+
frr_cfg.commit_configuration(zebra_daemon)
426+
410427
if __name__ == '__main__':
411428
try:
412429
c = get_config()

0 commit comments

Comments
 (0)