2
2
# SPDX-License-Identifier: ISC
3
3
4
4
#
5
- # test_multicast_pim_autorp .py
5
+ # test_pim_autorp .py
6
6
#
7
7
# Copyright (c) 2024 ATCorp
8
8
# Nathan Bahr
19
19
from lib .pim import scapy_send_autorp_raw_packet , verify_pim_rp_info , verify_pim_rp_info_is_empty
20
20
from lib .common_config import step , write_test_header
21
21
22
+ from time import sleep
23
+
22
24
"""
23
- test_multicast_pim_autorp .py: Test general PIM AutoRP functionality
25
+ test_pim_autorp .py: Test general PIM AutoRP functionality
24
26
"""
25
27
26
28
TOPOLOGY = """
@@ -52,7 +54,7 @@ def build_topo(tgen):
52
54
switch = tgen .add_switch ("s1-2" )
53
55
switch .add_link (tgen .gears ["r1" ])
54
56
switch .add_link (tgen .gears ["r2" ])
55
-
57
+
56
58
def setup_module (mod ):
57
59
logger .info ("PIM AutoRP basic functionality:\n {}" .format (TOPOLOGY ))
58
60
@@ -97,20 +99,20 @@ def test_pim_autorp_discovery_single_rp(request):
97
99
step ("Start with no RP configuration" )
98
100
result = verify_pim_rp_info_is_empty (tgen , "r1" )
99
101
assert result is True , "Testcase {} :Failed \n Error: {}" .format (tc_name , result )
100
-
101
- step ("Send AutoRP packet from r2 to r1 " )
102
+
103
+ step ("Send AutoRP packet from r1 to r2 " )
102
104
# 1 RP(s), hold time 5 secs, 10.10.76.1, group(s) 224.0.0.0/4
103
105
data = "01005e00012800127f55cfb1080045c00030700c000008110abe0a0a4c01e000012801f001f0001c798b12010005000000000a0a4c0103010004e0000000"
104
- scapy_send_autorp_raw_packet (tgen , "r2 " , "r2 -eth0" , data )
105
-
106
+ scapy_send_autorp_raw_packet (tgen , "r1 " , "r1 -eth0" , data )
107
+
106
108
step ("Verify rp-info from AutoRP packet" )
107
- result = verify_pim_rp_info (tgen , None , "r1 " , "224.0.0.0/4" , "r1 -eth0" , "10.10.76.1" , "AutoRP" , False , "ipv4" , True )
109
+ result = verify_pim_rp_info (tgen , None , "r2 " , "224.0.0.0/4" , "r2 -eth0" , "10.10.76.1" , "AutoRP" , False , "ipv4" , True )
108
110
assert result is True , "Testcase {} :Failed \n Error: {}" .format (tc_name , result )
109
-
111
+
110
112
step ("Verify AutoRP configuration times out" )
111
- result = verify_pim_rp_info_is_empty (tgen , "r1 " )
113
+ result = verify_pim_rp_info_is_empty (tgen , "r2 " )
112
114
assert result is True , "Testcase {} :Failed \n Error: {}" .format (tc_name , result )
113
-
115
+
114
116
def test_pim_autorp_discovery_multiple_rp (request ):
115
117
"Test PIM AutoRP Discovery with multiple RP's"
116
118
tgen = get_topogen ()
@@ -121,20 +123,20 @@ def test_pim_autorp_discovery_multiple_rp(request):
121
123
pytest .skip ("skipped because of router(s) failure" )
122
124
123
125
step ("Start with no RP configuration" )
124
- result = verify_pim_rp_info_is_empty (tgen , "r1 " )
126
+ result = verify_pim_rp_info_is_empty (tgen , "r2 " )
125
127
assert result is True , "Testcase {} :Failed \n Error: {}" .format (tc_name , result )
126
-
127
- step ("Send AutoRP packet from r2 to r1 " )
128
+
129
+ step ("Send AutoRP packet from r1 to r2 " )
128
130
# 2 RP(s), hold time 5 secs, 10.10.76.1, group(s) 224.0.0.0/8, 10.10.76.3, group(s) 225.0.0.0/8
129
131
data = "01005e00012800127f55cfb1080045c0003c700c000008110ab20a0a4c01e000012801f001f000283f5712020005000000000a0a4c0103010008e00000000a0a4c0303010008e1000000"
130
- scapy_send_autorp_raw_packet (tgen , "r2 " , "r2 -eth0" , data )
131
-
132
+ scapy_send_autorp_raw_packet (tgen , "r1 " , "r1 -eth0" , data )
133
+
132
134
step ("Verify rp-info from AutoRP packet" )
133
- result = verify_pim_rp_info (tgen , None , "r1 " , "224.0.0.0/8" , "r1 -eth0" , "10.10.76.1" , "AutoRP" , False , "ipv4" , True )
135
+ result = verify_pim_rp_info (tgen , None , "r2 " , "224.0.0.0/8" , "r2 -eth0" , "10.10.76.1" , "AutoRP" , False , "ipv4" , True )
134
136
assert result is True , "Testcase {} :Failed \n Error: {}" .format (tc_name , result )
135
- result = verify_pim_rp_info (tgen , None , "r1 " , "225.0.0.0/8" , "r1 -eth0" , "10.10.76.3" , "AutoRP" , False , "ipv4" , True )
137
+ result = verify_pim_rp_info (tgen , None , "r2 " , "225.0.0.0/8" , "r2 -eth0" , "10.10.76.3" , "AutoRP" , False , "ipv4" , True )
136
138
assert result is True , "Testcase {} :Failed \n Error: {}" .format (tc_name , result )
137
-
139
+
138
140
139
141
def test_pim_autorp_discovery_static (request ):
140
142
"Test PIM AutoRP Discovery with Static RP"
@@ -146,26 +148,51 @@ def test_pim_autorp_discovery_static(request):
146
148
pytest .skip ("skipped because of router(s) failure" )
147
149
148
150
step ("Start with no RP configuration" )
149
- result = verify_pim_rp_info_is_empty (tgen , "r1 " )
151
+ result = verify_pim_rp_info_is_empty (tgen , "r2 " )
150
152
assert result is True , "Testcase {} :Failed \n Error: {}" .format (tc_name , result )
151
-
152
- step ("Add static RP configuration to r1 " )
153
- rnode = tgen .routers ()["r1 " ]
153
+
154
+ step ("Add static RP configuration to r2 " )
155
+ rnode = tgen .routers ()["r2 " ]
154
156
rnode .cmd ("vtysh -c 'conf t' -c 'router pim' -c 'rp 10.10.76.3 224.0.0.0/4'" )
155
-
156
- step ("Verify static rp-info from r1 " )
157
- result = verify_pim_rp_info (tgen , None , "r1 " , "224.0.0.0/4" , "r1 -eth0" , "10.10.76.3" , "Static" , False , "ipv4" , True )
157
+
158
+ step ("Verify static rp-info from r2 " )
159
+ result = verify_pim_rp_info (tgen , None , "r2 " , "224.0.0.0/4" , "r2 -eth0" , "10.10.76.3" , "Static" , False , "ipv4" , True )
158
160
assert result is True , "Testcase {} :Failed \n Error: {}" .format (tc_name , result )
159
-
160
- step ("Send AutoRP packet from r2 to r1 " )
161
+
162
+ step ("Send AutoRP packet from r1 to r2 " )
161
163
# 1 RP(s), hold time 5 secs, 10.10.76.1, group(s) 224.0.0.0/4
162
164
data = "01005e00012800127f55cfb1080045c00030700c000008110abe0a0a4c01e000012801f001f0001c798b12010005000000000a0a4c0103010004e0000000"
163
- scapy_send_autorp_raw_packet (tgen , "r2 " , "r2 -eth0" , data )
164
-
165
+ scapy_send_autorp_raw_packet (tgen , "r1 " , "r1 -eth0" , data )
166
+
165
167
step ("Verify rp-info from AutoRP packet" )
166
- result = verify_pim_rp_info (tgen , None , "r1 " , "224.0.0.0/4" , "r1 -eth0" , "10.10.76.1" , "AutoRP" , False , "ipv4" , True )
168
+ result = verify_pim_rp_info (tgen , None , "r2 " , "224.0.0.0/4" , "r2 -eth0" , "10.10.76.1" , "AutoRP" , False , "ipv4" , True )
167
169
assert result is True , "Testcase {} :Failed \n Error: {}" .format (tc_name , result )
168
170
171
+
172
+ def test_pim_autorp_announce_group (request ):
173
+ "Test PIM AutoRP Announcement with a single group"
174
+ tgen = get_topogen ()
175
+ tc_name = request .node .name
176
+ write_test_header (tc_name )
177
+
178
+ if tgen .routers_have_failure ():
179
+ pytest .skip ("skipped because of router(s) failure" )
180
+
181
+ step ("Add candidate RP configuration to r1" )
182
+ rnode = tgen .routers ()["r1" ]
183
+ rnode .cmd ("vtysh -c 'conf t' -c 'router pim' -c 'send-rp-announce 10.10.76.1 224.0.0.0/4'" )
184
+ step ("Verify Announcement sent data" )
185
+ # TODO: Verify AutoRP mapping agent receives candidate RP announcement
186
+ # Mapping agent is not yet implemented
187
+ #sleep(10)
188
+ step ("Change AutoRP Announcement packet parameters" )
189
+ rnode .cmd ("vtysh -c 'conf t' -c 'router pim' -c 'send-rp-announce scope 8 interval 10 holdtime 60'" )
190
+ step ("Verify Announcement sent data" )
191
+ # TODO: Verify AutoRP mapping agent receives updated candidate RP announcement
192
+ # Mapping agent is not yet implemented
193
+ #sleep(10)
194
+
195
+
169
196
def test_memory_leak ():
170
197
"Run the memory leak test and report results."
171
198
tgen = get_topogen ()
0 commit comments