Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[yang-models] Add missing constraints in VLAN yang model #2

Closed
wants to merge 12 commits into from

Conversation

matiAlfaro
Copy link

@matiAlfaro matiAlfaro commented Feb 29, 2024

Implement constraints as described in 12256 (sonic-buildimage)

  1. Don't allow write of default vlan (vid = 1)
  • in name leaf - must "not(current() = 'Vlan1')"
  • in vlanid leaf - must "not(current() = 1)"
  • test VLAN_CREATE_DEFAULT_VLAN
  1. If vlan id already exists, do not allow duplicitous write to ConfigDB
    No changes are required, name is key so it will be unique

  2. Do not allow removal of vlan interface if vlan has IP address assigned
    No chnage is needed since both VLAN_INTERFACE_LIST and VLAN_INTERFACE_IPPREFIX_LIST reference /vlan:sonic-vlan/vlan:VLAN/vlan:VLAN_LIST/vlan:name

  • Added IP_PREFIX_WITHOUT_CREATNG_VLAN test
  1. Don't allow removal of vlan if there are members assigned
    No chnage is needed since VLAN_MEMBER_LIST refereces "/vlan:sonic-vlan/vlan:VLAN/vlan:VLAN_LIST/vlan:name"
  • Added test VLAN_MEMBERS_WITHOUT_CREATING_VLAN
  1. If interface naming mode is alias, make sure corresponding port name exists
    sonic-yang doesn't support adding a ports using alias

  2. Make sure port is not configured as a mirror destination port

  • must "not(/sms:sonic-mirror-session/sms:MIRROR_SESSION/sms:MIRROR_SESSION_LIST[sms:dst_port=current()])"
  • Fixed MIRROR_SESSION in sonic-yang-models\tests\files\sample_config_db.json (Ethernet2 is in Vlan111)
  • Test MIRROR_SESSION_ON_VLAN_MEMBER_PORT
  1. Make sure port is not already a vlan member
    No change is needed, <vlan,port> is the key for VLAN_MEMBER_LIST

  2. Make sure port is not a router interface

  • must "not(/intf:sonic-interface/intf:INTERFACE/intf:INTERFACE_LIST[intf:name=current()])"
  • Test VLAN_ADD_PORT_THAT_IS_ROUTER_INTERFACE
  1. Make sure port is not already a portchannel member
  • must "not(/lag:sonic-portchannel/lag:PORTCHANNEL_MEMBER/lag:PORTCHANNEL_MEMBER_LIST[lag:port=current()]/lag:name)"
  • Test VLAN_ADD_PORT_CHANNEL_MEMBER
  1. Make sure port is not already an untagged member
  • must "not(/vlan:sonic-vlan/vlan:VLAN_MEMBER/vlan:VLAN_MEMBER_LIST[vlan:port=current() and vlan:tagging_mode='untagged' and vlan:name!=current()/../name])"
  • Test VLAN_ADD_PORT_THAT_IS_UNTAGGED

Verify Vlan name matches vlanid

  • must "substring-after(../name, 'Vlan') = current()"
  • Test VLAN_CREATE_VLAN_WITH_MISSMATCHING_NAME

Why I did it

Work item tracking
  • Microsoft ADO (number only):

How I did it

How to verify it

Added tests to verify all modified and added constraints.

Which release branch to backport (provide reason below if selected)

  • 201811
  • 201911
  • 202006
  • 202012
  • 202106
  • 202111
  • 202205
  • 202211
  • 202305

Tested branch (Please provide the tested image version)

Description for the changelog

Link to config_db schema for YANG module changes

A picture of a cute animal (not mandatory but encouraged)

@matiAlfaro matiAlfaro requested a review from a team February 29, 2024 16:37
@matiAlfaro matiAlfaro self-assigned this Feb 29, 2024
Fixed Problems/New Changes:

src/sonic-yang-models/tests/files/sample_config_db.json
	Ethernet1 is member of PO3 which is already in Vlan
	Ethernet2 is member of PO4, so add it to Vlan

src/sonic-config-engine/tests/simple-sample-graph-case-remap-disabled.xml
src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled-no-tunnel-attributes.xml
src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled.xml
src/sonic-config-engine/tests/simple-sample-graph-case.xml
	fortyGigE0/4 is member of PortChannel01, so add port-channel to vlan

src/sonic-config-engine/tests/t0-sample-graph-two-mgmt.xml
src/sonic-config-engine/tests/t0-sample-graph.xml
	fortyGigE0/112;fortyGigE0/116;fortyGigE0/120 are members of PortChannel01;PortChannel02;PortChannel03, so add port-channel.

~

Signed-off-by: matiAlfaro <[email protected]>
Fixed Problems/New Changes:

src/sonic-yang-models/tests/files/sample_config_db.json
	Ethernet1 is member of PO3 which is already in Vlan
	Ethernet2 is member of PO4, so add it to Vlan

src/sonic-config-engine/tests/simple-sample-graph-case-remap-disabled.xml
src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled-no-tunnel-attributes.xml
src/sonic-config-engine/tests/simple-sample-graph-case-remap-enabled.xml
src/sonic-config-engine/tests/simple-sample-graph-case.xml
	fortyGigE0/4 is member of PortChannel01, so add port-channel to vlan

src/sonic-config-engine/tests/t0-sample-graph-two-mgmt.xml
src/sonic-config-engine/tests/t0-sample-graph.xml
	fortyGigE0/112;fortyGigE0/116;fortyGigE0/120 are members of PortChannel01;PortChannel02;PortChannel03, so add port-channel.

src/sonic-config-engine/tests/test_minigraph_case.py
       Ethernet4 is member of PortChannel01, update test_minigraph_portchannels
~

Signed-off-by: matiAlfaro <[email protected]>
@matiAlfaro matiAlfaro changed the title Vlan yang constraints [yang-models] Add missing constraints in VLAN yang model Mar 7, 2024
@matiAlfaro matiAlfaro closed this Nov 19, 2024
shiraez pushed a commit that referenced this pull request Dec 11, 2024
…et#21095)

Adding the below fix from FRR FRRouting/frr#17297

This is to fix the following crash which is a statistical issue

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_nl -M snmp'.
Program terminated with signal SIGABRT, Aborted.
#0  0x00007fccd7351e2c in ?? () from /lib/x86_64-linux-gnu/libc.so.6
[Current thread is 1 (Thread 0x7fccd6faf7c0 (LWP 36))]
(gdb) bt
#0  0x00007fccd7351e2c in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007fccd7302fb2 in raise () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007fccd72ed472 in abort () from /lib/x86_64-linux-gnu/libc.so.6
#3  0x00007fccd75bb3a9 in _zlog_assert_failed (xref=xref@entry=0x7fccd7652380 <_xref.16>, extra=extra@entry=0x0) at ../lib/zlog.c:678
#4  0x00007fccd759b2fe in route_node_delete (node=<optimized out>) at ../lib/table.c:352
#5  0x00007fccd759b445 in route_unlock_node (node=0x0) at ../lib/table.h:258
#6  route_next (node=<optimized out>) at ../lib/table.c:436
#7  route_next (node=node@entry=0x56029d89e560) at ../lib/table.c:410
#8  0x000056029b6b6b7a in if_lookup_by_name_per_ns (ns=ns@entry=0x56029d873d90, ifname=ifname@entry=0x7fccc0029340 "PortChannel1020")
    at ../zebra/interface.c:312
#9  0x000056029b6b8b36 in zebra_if_dplane_ifp_handling (ctx=0x7fccc0029310) at ../zebra/interface.c:1867
#10 zebra_if_dplane_result (ctx=0x7fccc0029310) at ../zebra/interface.c:2221
#11 0x000056029b7137a9 in rib_process_dplane_results (thread=<optimized out>) at ../zebra/zebra_rib.c:4810
#12 0x00007fccd75a0e0d in thread_call (thread=thread@entry=0x7ffe8e553cc0) at ../lib/thread.c:1990
sonic-net#13 0x00007fccd7559368 in frr_run (master=0x56029d65a040) at ../lib/libfrr.c:1198
sonic-net#14 0x000056029b6ac317 in main (argc=9, argv=0x7ffe8e5540d8) at ../zebra/main.c:478
VladimirKuk pushed a commit that referenced this pull request Jan 21, 2025
…et#21095)

Adding the below fix from FRR FRRouting/frr#17297

This is to fix the following crash which is a statistical issue

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_nl -M snmp'.
Program terminated with signal SIGABRT, Aborted.
#0  0x00007fccd7351e2c in ?? () from /lib/x86_64-linux-gnu/libc.so.6
[Current thread is 1 (Thread 0x7fccd6faf7c0 (LWP 36))]
(gdb) bt
#0  0x00007fccd7351e2c in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007fccd7302fb2 in raise () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007fccd72ed472 in abort () from /lib/x86_64-linux-gnu/libc.so.6
#3  0x00007fccd75bb3a9 in _zlog_assert_failed (xref=xref@entry=0x7fccd7652380 <_xref.16>, extra=extra@entry=0x0) at ../lib/zlog.c:678
#4  0x00007fccd759b2fe in route_node_delete (node=<optimized out>) at ../lib/table.c:352
#5  0x00007fccd759b445 in route_unlock_node (node=0x0) at ../lib/table.h:258
#6  route_next (node=<optimized out>) at ../lib/table.c:436
#7  route_next (node=node@entry=0x56029d89e560) at ../lib/table.c:410
#8  0x000056029b6b6b7a in if_lookup_by_name_per_ns (ns=ns@entry=0x56029d873d90, ifname=ifname@entry=0x7fccc0029340 "PortChannel1020")
    at ../zebra/interface.c:312
#9  0x000056029b6b8b36 in zebra_if_dplane_ifp_handling (ctx=0x7fccc0029310) at ../zebra/interface.c:1867
#10 zebra_if_dplane_result (ctx=0x7fccc0029310) at ../zebra/interface.c:2221
#11 0x000056029b7137a9 in rib_process_dplane_results (thread=<optimized out>) at ../zebra/zebra_rib.c:4810
#12 0x00007fccd75a0e0d in thread_call (thread=thread@entry=0x7ffe8e553cc0) at ../lib/thread.c:1990
sonic-net#13 0x00007fccd7559368 in frr_run (master=0x56029d65a040) at ../lib/libfrr.c:1198
sonic-net#14 0x000056029b6ac317 in main (argc=9, argv=0x7ffe8e5540d8) at ../zebra/main.c:478
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants