From 630d93e2fdc3e2d6c6f10622143d1b4c9e737832 Mon Sep 17 00:00:00 2001 From: Baorong Liu Date: Mon, 10 Jul 2023 10:14:11 -0700 Subject: [PATCH] [staticroutebfd] fix ipv6 letter case issue (#15765) *use lower case for IPv6 address as internal key and bfd session key. fixes #15764 Why I did it *staticroutebfd uses the IPv6 address string as a key to create bfd session and cache the bfd sessions using it as a key. When the IPv6 address string has uppercase letter in the static route nexthop list, the string with uppercase letter key is stored in the cache, but the BFD STATE_DB uses lowercase for IPv6 address, so when the staticroutebfd get the bfd state event, it cannot find the bfd session in its local cache because of the letter case. --- src/sonic-bgpcfgd/tests/test_static_rt_bfd.py | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/sonic-bgpcfgd/tests/test_static_rt_bfd.py b/src/sonic-bgpcfgd/tests/test_static_rt_bfd.py index 7246bd974b..e04241b2a1 100644 --- a/src/sonic-bgpcfgd/tests/test_static_rt_bfd.py +++ b/src/sonic-bgpcfgd/tests/test_static_rt_bfd.py @@ -94,6 +94,82 @@ def intf_setup(dut): {}, {} ) + set_del_test(dut, "intf", + "SET", + ("if1|2603:10E2:400:1::1/64",{} + ), + {}, + {} + ) + set_del_test(dut, "intf", + "SET", + ("if2|2603:10E2:400:2::1/64",{} + ), + {}, + {} + ) + set_del_test(dut, "intf", + "SET", + ("if3|2603:10E2:400:3::1/64",{} + ), + {}, + {} + ) + +def test_set_del_ipv6(): + dut = constructor() + intf_setup(dut) + + set_del_test(dut, "srt", + "SET", + ("2603:10e2:400::4/128", { + "bfd": "true", + "ifname": "if1, if2, if3", + "nexthop": "2603:10E2:400:1::2,2603:10E2:400:2::2,2603:10e2:400:3::2" + }), + { + "set_default:default:2603:10e2:400:1::2" : {'multihop': 'true', 'rx_interval': '50', 'tx_interval': '50', 'multiplier': '3', 'local_addr': '2603:10E2:400:1::1'}, + "set_default:default:2603:10e2:400:2::2" : {'multihop': 'true', 'rx_interval': '50', 'tx_interval': '50', 'multiplier': '3', 'local_addr': '2603:10E2:400:2::1'}, + "set_default:default:2603:10e2:400:3::2" : {'multihop': 'true', 'rx_interval': '50', 'tx_interval': '50', 'multiplier': '3', 'local_addr': '2603:10E2:400:3::1'} + }, + {} + ) + + set_del_test(dut, "bfd", + "SET", + ("2603:10e2:400:1::2", { + "state": "Up" + }), + {}, + {'set_default:2603:10e2:400::4/128': {'nexthop': '2603:10e2:400:1::2', 'ifname': 'if1', 'nexthop-vrf': 'default', 'expiry': 'false'}} + ) + set_del_test(dut, "bfd", + "SET", + ("2603:10e2:400:2::2", { + "state": "Up" + }), + {}, + {'set_default:2603:10e2:400::4/128': {'nexthop': '2603:10e2:400:1::2,2603:10e2:400:2::2', 'ifname': 'if1,if2', 'nexthop-vrf': 'default,default', 'expiry': 'false'}} + ) + set_del_test(dut, "bfd", + "SET", + ("2603:10e2:400:3::2", { + "state": "Up" + }), + {}, + {'set_default:2603:10e2:400::4/128': {'nexthop': '2603:10e2:400:1::2,2603:10e2:400:2::2,2603:10e2:400:3::2', 'ifname': 'if1,if2,if3', 'nexthop-vrf': 'default,default,default', 'expiry': 'false'}} + ) + + set_del_test(dut, "srt", + "DEL", + ("2603:10e2:400::4/128", { }), + { + "del_default:default:2603:10e2:400:1::2" : {}, + "del_default:default:2603:10e2:400:2::2" : {}, + "del_default:default:2603:10e2:400:3::2" : {} + }, + {'del_default:2603:10e2:400::4/128': { }} + ) set_del_test(dut, "intf", "SET",