11import ipaddress
2- import re
3- import pytest
42import logging
53from common .helpers .assertions import pytest_assert
64
75logger = logging .getLogger (__name__ )
86
97def test_default_route_set_src (duthost ):
10- """check if ipv4 and ipv6 default src address match Loopback0 address
11-
12- admin@vlab-01:~$ ip route list match 0.0.0.0
13- default proto bgp src 10.1.0.32 metric 20
14- nexthop via 10.0.0.57 dev PortChannel0001 weight 1
15- nexthop via 10.0.0.59 dev PortChannel0002 weight 1
16- nexthop via 10.0.0.61 dev PortChannel0003 weight 1
17- nexthop via 10.0.0.63 dev PortChannel0004 weight 1
18-
19- admin@vlab-01:~$ ip -6 route list match ::
20- default proto bgp src fc00:1::32 metric 20
21- nexthop via fc00::72 dev PortChannel0001 weight 1
22- nexthop via fc00::76 dev PortChannel0002 weight 1
23- nexthop via fc00::7a dev PortChannel0003 weight 1
24- nexthop via fc00::7e dev PortChannel0004 weight 1 pref medium
8+ """
9+ check if ipv4 and ipv6 default src address match Loopback0 address
2510
26- ============ 4.9 kernel ===============
27- admin@vlab-01:~$ ip route list match 0.0.0.0
28- default proto 186 src 10.1.0.32 metric 20
29- nexthop via 10.0.0.57 dev PortChannel0001 weight 1
30- nexthop via 10.0.0.59 dev PortChannel0002 weight 1
31- nexthop via 10.0.0.61 dev PortChannel0003 weight 1
32- nexthop via 10.0.0.63 dev PortChannel0004 weight 1
33- admin@vlab-01:~$ ip -6 route list match ::
34- default via fc00::72 dev PortChannel0001 proto 186 src fc00:1::32 metric 20 pref medium
35- default via fc00::76 dev PortChannel0002 proto 186 src fc00:1::32 metric 20 pref medium
36- default via fc00::7a dev PortChannel0003 proto 186 src fc00:1::32 metric 20 pref medium
37- default via fc00::7e dev PortChannel0004 proto 186 src fc00:1::32 metric 20 pref medium
3811 """
3912
4013 config_facts = duthost .config_facts (host = duthost .hostname , source = "running" )['ansible_facts' ]
@@ -55,53 +28,24 @@ def test_default_route_set_src(duthost):
5528 pytest_assert (lo_ipv4 , "cannot find ipv4 Loopback0 address" )
5629 pytest_assert (lo_ipv6 , "cannot find ipv6 Loopback0 address" )
5730
58- rt = duthost .command ("ip route list match 0.0.0.0" )['stdout_lines' ]
59- m = re .match (r"^default proto (bgp|186) src (\S+)" , rt [0 ])
60- if m :
61- pytest_assert (ipaddress .ip_address (m .group (2 )) == lo_ipv4 .ip , \
62- "default route set src to wrong IP {} != {}" .format (m .group (1 ), lo_ipv4 .ip ))
63- else :
64- pytest .fail ("default route do not have set src. {}" .format (rt ))
31+ rtinfo = duthost .get_ip_route_info (ipaddress .ip_address (u"0.0.0.0" ))
32+ pytest_assert (rtinfo ['set_src' ], "default route do not have set src. {}" .format (rtinfo ))
33+ pytest_assert (rtinfo ['set_src' ] == lo_ipv4 .ip , \
34+ "default route set src to wrong IP {} != {}" .format (rtinfo ['set_src' ], lo_ipv4 .ip ))
6535
66- rt = duthost .command ("ip -6 route list match ::" )['stdout_lines' ]
67- m = re .match (r"^default proto bgp src (\S+)" , rt [0 ])
68- m1 = re .match (r"default via (\S+) dev (\S+) proto 186 src (\S+)" , rt [0 ])
69- if m :
70- pytest_assert (ipaddress .ip_address (m .group (1 )) == lo_ipv6 .ip , \
71- "default route set src to wrong IP {} != {}" .format (m .group (1 ), lo_ipv6 .ip ))
72- elif m1 :
73- pytest_assert (ipaddress .ip_address (m1 .group (3 )) == lo_ipv6 .ip , \
74- "default route set src to wrong IP {} != {}" .format (m1 .group (3 ), lo_ipv6 .ip ))
75- else :
76- pytest .fail ("default route do not have set src. {}" .format (rt ))
36+ rtinfo = duthost .get_ip_route_info (ipaddress .ip_address (u"::" ))
37+ pytest_assert (rtinfo ['set_src' ], "default v6 route do not have set src. {}" .format (rtinfo ))
38+ pytest_assert (rtinfo ['set_src' ] == lo_ipv6 .ip , \
39+ "default v6 route set src to wrong IP {} != {}" .format (rtinfo ['set_src' ], lo_ipv6 .ip ))
7740
7841def test_default_ipv6_route_next_hop_global_address (duthost ):
79- """check if ipv6 default route nexthop address uses global address
80-
81- admin@vlab-01:~$ ip -6 route list match ::
82- default proto bgp src fc00:1::32 metric 20
83- nexthop via fc00::72 dev PortChannel0001 weight 1
84- nexthop via fc00::76 dev PortChannel0002 weight 1
85- nexthop via fc00::7a dev PortChannel0003 weight 1
86- nexthop via fc00::7e dev PortChannel0004 weight 1 pref medium
87-
88- ============ 4.9 kernel ===============
89- admin@vlab-01:~$ ip -6 route list match ::
90- default via fc00::72 dev PortChannel0001 proto 186 src fc00:1::32 metric 20 pref medium
91- default via fc00::76 dev PortChannel0002 proto 186 src fc00:1::32 metric 20 pref medium
92- default via fc00::7a dev PortChannel0003 proto 186 src fc00:1::32 metric 20 pref medium
93- default via fc00::7e dev PortChannel0004 proto 186 src fc00:1::32 metric 20 pref medium
94-
9542 """
43+ check if ipv6 default route nexthop address uses global address
9644
97- rt = duthost .command ("ip -6 route list match ::" )['stdout_lines' ]
98- logger .info ("default ipv6 route {}" .format (rt ))
99- found_nexthop_via = False
100- for l in rt :
101- m = re .search (r"(default|nexthop) via (\S+)" , l )
102- if m :
103- found_nexthop_via = True
104- pytest_assert (not ipaddress .ip_address (m .group (2 )).is_link_local , \
105- "use link local address {} for nexthop" .format (m .group (2 )))
45+ """
10646
107- pytest_assert (found_nexthop_via , "cannot find ipv6 nexthop for default route {}" .format (rt ))
47+ rtinfo = duthost .get_ip_route_info (ipaddress .ip_address (u"::" ))
48+ pytest_assert (rtinfo ['nexthops' ] > 0 , "cannot find ipv6 nexthop for default route" )
49+ for nh in rtinfo ['nexthops' ]:
50+ pytest_assert (not nh [0 ].is_link_local , \
51+ "use link local address {} for nexthop" .format (nh [0 ]))
0 commit comments