From 7303adb74a2d8c798b3e504b805fc1f1b8438191 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Tue, 22 Mar 2022 15:02:38 +0000 Subject: [PATCH] Assert is_l2() on sub-ints cannot have address or LCP --- unittest/yaml/error-bridgedomain2.yaml | 3 ++- unittest/yaml/error-bridgedomain3.yaml | 3 ++- unittest/yaml/error-l2xc6.yaml | 4 +++- validator/interface.py | 6 ++++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/unittest/yaml/error-bridgedomain2.yaml b/unittest/yaml/error-bridgedomain2.yaml index 7e70536..62ed274 100644 --- a/unittest/yaml/error-bridgedomain2.yaml +++ b/unittest/yaml/error-bridgedomain2.yaml @@ -4,7 +4,8 @@ test: expected: - "bridgedomain .* member .* has an LCP" - "interface .* is in L2 mode but has LCP name .*" - count: 5 + - "sub-interface .* is in L2 mode but has LCP name .*" + count: 6 --- interfaces: GigabitEthernet1/0/0: diff --git a/unittest/yaml/error-bridgedomain3.yaml b/unittest/yaml/error-bridgedomain3.yaml index 5dc9e7e..1da53b4 100644 --- a/unittest/yaml/error-bridgedomain3.yaml +++ b/unittest/yaml/error-bridgedomain3.yaml @@ -6,7 +6,8 @@ test: - "sub-interface .* has an address but .* does not have LCP" - "bridgedomain .* member .* has an address" - "interface .* is in L2 mode but has an address" - count: 8 + - "sub-interface .* is in L2 mode but has an address" + count: 9 --- interfaces: GigabitEthernet1/0/0: diff --git a/unittest/yaml/error-l2xc6.yaml b/unittest/yaml/error-l2xc6.yaml index c1b057c..0399986 100644 --- a/unittest/yaml/error-l2xc6.yaml +++ b/unittest/yaml/error-l2xc6.yaml @@ -4,7 +4,9 @@ test: expected: - "sub-interface .* l2xc target .* cannot have an address" - "sub-interface .* l2xc target .* cannot have an LCP" - count: 2 + - "sub-interface .* is in L2 mode but has an address" + - "sub-interface .* is in L2 mode but has LCP name .*" + count: 4 --- interfaces: GigabitEthernet1/0/0: diff --git a/validator/interface.py b/validator/interface.py index 08aefdd..749e3df 100644 --- a/validator/interface.py +++ b/validator/interface.py @@ -435,6 +435,9 @@ def validate_interfaces(yaml): result = False sub_lcp = get_lcp(yaml, sub_ifname) + if is_l2(yaml, sub_ifname) and sub_lcp: + msgs.append("sub-interface %s is in L2 mode but has LCP name %s" % (sub_ifname, sub_lcp)) + result = False if sub_lcp and not lcp.is_unique(yaml, sub_lcp): msgs.append("sub-interface %s does not have a unique LCP name %s" % (sub_ifname, sub_lcp)) result = False @@ -459,6 +462,9 @@ def validate_interfaces(yaml): if not iface_lcp: msgs.append("sub-interface %s has an address but %s does not have LCP" % (sub_ifname, ifname)) result = False + if is_l2(yaml, sub_ifname): + msgs.append("sub-interface %s is in L2 mode but has an address" % sub_ifname) + result = False for a in sub_iface['addresses']: if not address.is_allowed(yaml, sub_ifname, sub_iface['addresses'], a): msgs.append("sub-interface %s IP address %s conflicts with another" % (sub_ifname, a))