]>
Commit | Line | Data |
---|---|---|
5d613d13 SG |
1 | /* |
2 | * PIM for IPv6 FRR | |
3 | * Copyright (C) 2022 Vmware, Inc. | |
4 | * Mobashshera Rasool <mrasool@vmware.com> | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, but | |
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License along | |
17 | * with this program; see the file COPYING; if not, write to the Free Software | |
18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
19 | */ | |
20 | ||
21 | #include <zebra.h> | |
22 | ||
23 | #include "lib/json.h" | |
24 | #include "command.h" | |
25 | #include "if.h" | |
26 | #include "prefix.h" | |
27 | #include "zclient.h" | |
28 | #include "plist.h" | |
29 | #include "hash.h" | |
30 | #include "nexthop.h" | |
31 | #include "vrf.h" | |
32 | #include "ferr.h" | |
33 | ||
34 | #include "pimd.h" | |
35 | #include "pim6_cmd.h" | |
36 | #include "pim_vty.h" | |
37 | #include "lib/northbound_cli.h" | |
38 | #include "pim_errors.h" | |
39 | #include "pim_nb.h" | |
26cd3d66 | 40 | #include "pim_cmd_common.h" |
5d613d13 SG |
41 | |
42 | #ifndef VTYSH_EXTRACT_PL | |
43 | #include "pimd/pim6_cmd_clippy.c" | |
44 | #endif | |
45 | ||
c73113ea MR |
46 | DEFPY (ipv6_pim_joinprune_time, |
47 | ipv6_pim_joinprune_time_cmd, | |
48 | "ipv6 pim join-prune-interval (1-65535)$jpi", | |
49 | IPV6_STR | |
50 | PIM_STR | |
51 | "Join Prune Send Interval\n" | |
52 | "Seconds\n") | |
53 | { | |
54 | return pim_process_join_prune_cmd(vty, jpi_str); | |
55 | } | |
56 | ||
57 | DEFPY (no_ipv6_pim_joinprune_time, | |
58 | no_ipv6_pim_joinprune_time_cmd, | |
59 | "no ipv6 pim join-prune-interval [(1-65535)]", | |
60 | NO_STR | |
61 | IPV6_STR | |
62 | PIM_STR | |
63 | "Join Prune Send Interval\n" | |
64 | IGNORED_IN_NO_STR) | |
65 | { | |
66 | return pim_process_no_join_prune_cmd(vty); | |
67 | } | |
68 | ||
fb991ce9 MR |
69 | DEFPY (ipv6_pim_spt_switchover_infinity, |
70 | ipv6_pim_spt_switchover_infinity_cmd, | |
71 | "ipv6 pim spt-switchover infinity-and-beyond", | |
72 | IPV6_STR | |
73 | PIM_STR | |
74 | "SPT-Switchover\n" | |
75 | "Never switch to SPT Tree\n") | |
76 | { | |
77 | return pim_process_spt_switchover_infinity_cmd(vty); | |
78 | } | |
79 | ||
80 | DEFPY (ipv6_pim_spt_switchover_infinity_plist, | |
81 | ipv6_pim_spt_switchover_infinity_plist_cmd, | |
82 | "ipv6 pim spt-switchover infinity-and-beyond prefix-list WORD$plist", | |
83 | IPV6_STR | |
84 | PIM_STR | |
85 | "SPT-Switchover\n" | |
86 | "Never switch to SPT Tree\n" | |
87 | "Prefix-List to control which groups to switch\n" | |
88 | "Prefix-List name\n") | |
89 | { | |
90 | return pim_process_spt_switchover_prefixlist_cmd(vty, plist); | |
91 | } | |
92 | ||
93 | DEFPY (no_ipv6_pim_spt_switchover_infinity, | |
94 | no_ipv6_pim_spt_switchover_infinity_cmd, | |
95 | "no ipv6 pim spt-switchover infinity-and-beyond", | |
96 | NO_STR | |
97 | IPV6_STR | |
98 | PIM_STR | |
99 | "SPT_Switchover\n" | |
100 | "Never switch to SPT Tree\n") | |
101 | { | |
102 | return pim_process_no_spt_switchover_cmd(vty); | |
103 | } | |
104 | ||
105 | DEFPY (no_ipv6_pim_spt_switchover_infinity_plist, | |
106 | no_ipv6_pim_spt_switchover_infinity_plist_cmd, | |
107 | "no ipv6 pim spt-switchover infinity-and-beyond prefix-list WORD", | |
108 | NO_STR | |
109 | IPV6_STR | |
110 | PIM_STR | |
111 | "SPT_Switchover\n" | |
112 | "Never switch to SPT Tree\n" | |
113 | "Prefix-List to control which groups to switch\n" | |
114 | "Prefix-List name\n") | |
115 | { | |
116 | return pim_process_no_spt_switchover_cmd(vty); | |
117 | } | |
118 | ||
0da72f1f MR |
119 | DEFPY (ipv6_pim_packets, |
120 | ipv6_pim_packets_cmd, | |
121 | "ipv6 pim packets (1-255)", | |
122 | IPV6_STR | |
123 | PIM_STR | |
124 | "packets to process at one time per fd\n" | |
125 | "Number of packets\n") | |
126 | { | |
127 | return pim_process_pim_packet_cmd(vty, packets_str); | |
128 | } | |
129 | ||
130 | DEFPY (no_ipv6_pim_packets, | |
131 | no_ipv6_pim_packets_cmd, | |
132 | "no ipv6 pim packets [(1-255)]", | |
133 | NO_STR | |
134 | IPV6_STR | |
135 | PIM_STR | |
136 | "packets to process at one time per fd\n" | |
137 | IGNORED_IN_NO_STR) | |
138 | { | |
139 | return pim_process_no_pim_packet_cmd(vty); | |
140 | } | |
141 | ||
28e32366 MR |
142 | DEFPY (ipv6_pim_keep_alive, |
143 | ipv6_pim_keep_alive_cmd, | |
144 | "ipv6 pim keep-alive-timer (1-65535)$kat", | |
145 | IPV6_STR | |
146 | PIM_STR | |
147 | "Keep alive Timer\n" | |
148 | "Seconds\n") | |
149 | { | |
150 | return pim_process_keepalivetimer_cmd(vty, kat_str); | |
151 | } | |
152 | ||
153 | DEFPY (no_ipv6_pim_keep_alive, | |
154 | no_ipv6_pim_keep_alive_cmd, | |
155 | "no ipv6 pim keep-alive-timer [(1-65535)]", | |
156 | NO_STR | |
157 | IPV6_STR | |
158 | PIM_STR | |
159 | "Keep alive Timer\n" | |
160 | IGNORED_IN_NO_STR) | |
161 | { | |
162 | return pim_process_no_keepalivetimer_cmd(vty); | |
163 | } | |
164 | ||
2322b991 MR |
165 | DEFPY (ipv6_pim_rp_keep_alive, |
166 | ipv6_pim_rp_keep_alive_cmd, | |
167 | "ipv6 pim rp keep-alive-timer (1-65535)$kat", | |
168 | IPV6_STR | |
169 | PIM_STR | |
170 | "Rendevous Point\n" | |
171 | "Keep alive Timer\n" | |
172 | "Seconds\n") | |
173 | { | |
174 | return pim_process_rp_kat_cmd(vty, kat_str); | |
175 | } | |
176 | ||
177 | DEFPY (no_ipv6_pim_rp_keep_alive, | |
178 | no_ipv6_pim_rp_keep_alive_cmd, | |
179 | "no ipv6 pim rp keep-alive-timer [(1-65535)]", | |
180 | NO_STR | |
181 | IPV6_STR | |
182 | PIM_STR | |
183 | "Rendevous Point\n" | |
184 | "Keep alive Timer\n" | |
185 | IGNORED_IN_NO_STR) | |
186 | { | |
187 | return pim_process_no_rp_kat_cmd(vty); | |
188 | } | |
189 | ||
18ca7de5 MR |
190 | DEFPY (ipv6_pim_register_suppress, |
191 | ipv6_pim_register_suppress_cmd, | |
192 | "ipv6 pim register-suppress-time (1-65535)$rst", | |
193 | IPV6_STR | |
194 | PIM_STR | |
195 | "Register Suppress Timer\n" | |
196 | "Seconds\n") | |
197 | { | |
198 | return pim_process_register_suppress_cmd(vty, rst_str); | |
199 | } | |
200 | ||
201 | DEFPY (no_ipv6_pim_register_suppress, | |
202 | no_ipv6_pim_register_suppress_cmd, | |
203 | "no ipv6 pim register-suppress-time [(1-65535)]", | |
204 | NO_STR | |
205 | IPV6_STR | |
206 | PIM_STR | |
207 | "Register Suppress Timer\n" | |
208 | IGNORED_IN_NO_STR) | |
209 | { | |
210 | return pim_process_no_register_suppress_cmd(vty); | |
211 | } | |
212 | ||
a1caf7a8 | 213 | DEFPY (interface_ipv6_pim, |
214 | interface_ipv6_pim_cmd, | |
215 | "ipv6 pim", | |
216 | IPV6_STR | |
217 | PIM_STR) | |
218 | { | |
219 | return pim_process_ip_pim_cmd(vty); | |
220 | } | |
221 | ||
222 | DEFPY (interface_no_ipv6_pim, | |
223 | interface_no_ipv6_pim_cmd, | |
224 | "no ipv6 pim", | |
225 | NO_STR | |
226 | IPV6_STR | |
227 | PIM_STR) | |
228 | { | |
229 | return pim_process_no_ip_pim_cmd(vty); | |
230 | } | |
231 | ||
bb387611 | 232 | DEFPY (interface_ipv6_pim_drprio, |
233 | interface_ipv6_pim_drprio_cmd, | |
234 | "ipv6 pim drpriority (1-4294967295)", | |
235 | IPV6_STR | |
236 | PIM_STR | |
237 | "Set the Designated Router Election Priority\n" | |
238 | "Value of the new DR Priority\n") | |
239 | { | |
240 | return pim_process_ip_pim_drprio_cmd(vty, drpriority_str); | |
241 | } | |
242 | ||
243 | DEFPY (interface_no_ipv6_pim_drprio, | |
244 | interface_no_ipv6_pim_drprio_cmd, | |
245 | "no ip pim drpriority [(1-4294967295)]", | |
246 | NO_STR | |
247 | IPV6_STR | |
248 | PIM_STR | |
249 | "Revert the Designated Router Priority to default\n" | |
250 | "Old Value of the Priority\n") | |
251 | { | |
252 | return pim_process_no_ip_pim_drprio_cmd(vty); | |
253 | } | |
254 | ||
e6aab613 | 255 | DEFPY (interface_ipv6_pim_hello, |
256 | interface_ipv6_pim_hello_cmd, | |
257 | "ipv6 pim hello (1-65535) [(1-65535)]$hold", | |
258 | IPV6_STR | |
259 | PIM_STR | |
260 | IFACE_PIM_HELLO_STR | |
261 | IFACE_PIM_HELLO_TIME_STR | |
262 | IFACE_PIM_HELLO_HOLD_STR) | |
263 | { | |
264 | return pim_process_ip_pim_hello_cmd(vty, hello_str, hold_str); | |
265 | } | |
266 | ||
267 | DEFPY (interface_no_ipv6_pim_hello, | |
268 | interface_no_ipv6_pim_hello_cmd, | |
269 | "no ipv6 pim hello [(1-65535) [(1-65535)]]", | |
270 | NO_STR | |
271 | IPV6_STR | |
272 | PIM_STR | |
273 | IFACE_PIM_HELLO_STR | |
274 | IGNORED_IN_NO_STR | |
275 | IGNORED_IN_NO_STR) | |
276 | { | |
277 | return pim_process_no_ip_pim_hello_cmd(vty); | |
278 | } | |
279 | ||
7e01b641 | 280 | DEFPY (interface_ipv6_pim_activeactive, |
281 | interface_ipv6_pim_activeactive_cmd, | |
282 | "[no] ipv6 pim active-active", | |
283 | NO_STR | |
284 | IPV6_STR | |
285 | PIM_STR | |
286 | "Mark interface as Active-Active for MLAG operations\n") | |
287 | { | |
288 | return pim_process_ip_pim_activeactive_cmd(vty, no); | |
289 | } | |
290 | ||
dab0ac29 | 291 | DEFPY_HIDDEN (interface_ipv6_pim_ssm, |
292 | interface_ipv6_pim_ssm_cmd, | |
293 | "ipv6 pim ssm", | |
294 | IPV6_STR | |
295 | PIM_STR | |
296 | IFACE_PIM_STR) | |
297 | { | |
298 | int ret; | |
299 | ||
300 | ret = pim_process_ip_pim_cmd(vty); | |
301 | ||
302 | if (ret != NB_OK) | |
303 | return ret; | |
304 | ||
305 | vty_out(vty, | |
306 | "Enabled PIM SM on interface; configure PIM SSM range if needed\n"); | |
307 | ||
308 | return NB_OK; | |
309 | } | |
310 | ||
311 | DEFPY_HIDDEN (interface_no_ipv6_pim_ssm, | |
312 | interface_no_ipv6_pim_ssm_cmd, | |
313 | "no ipv6 pim ssm", | |
314 | NO_STR | |
315 | IPV6_STR | |
316 | PIM_STR | |
317 | IFACE_PIM_STR) | |
318 | { | |
319 | return pim_process_no_ip_pim_cmd(vty); | |
320 | } | |
321 | ||
2b16b40f | 322 | DEFPY_HIDDEN (interface_ipv6_pim_sm, |
323 | interface_ipv6_pim_sm_cmd, | |
324 | "ipv6 pim sm", | |
325 | IPV6_STR | |
326 | PIM_STR | |
327 | IFACE_PIM_SM_STR) | |
328 | { | |
329 | return pim_process_ip_pim_cmd(vty); | |
330 | } | |
331 | ||
332 | DEFPY_HIDDEN (interface_no_ipv6_pim_sm, | |
333 | interface_no_ipv6_pim_sm_cmd, | |
334 | "no ipv6 pim sm", | |
335 | NO_STR | |
336 | IPV6_STR | |
337 | PIM_STR | |
338 | IFACE_PIM_SM_STR) | |
339 | { | |
340 | return pim_process_no_ip_pim_cmd(vty); | |
341 | } | |
342 | ||
52c52d78 | 343 | /* boundaries */ |
344 | DEFPY (interface_ipv6_pim_boundary_oil, | |
345 | interface_ipv6_pim_boundary_oil_cmd, | |
346 | "ipv6 multicast boundary oil WORD", | |
347 | IPV6_STR | |
348 | "Generic multicast configuration options\n" | |
349 | "Define multicast boundary\n" | |
350 | "Filter OIL by group using prefix list\n" | |
351 | "Prefix list to filter OIL with\n") | |
352 | { | |
353 | return pim_process_ip_pim_boundary_oil_cmd(vty, oil); | |
354 | } | |
355 | ||
356 | DEFPY (interface_no_ipv6_pim_boundary_oil, | |
357 | interface_no_ipv6_pim_boundary_oil_cmd, | |
358 | "no ipv6 multicast boundary oil [WORD]", | |
359 | NO_STR | |
360 | IPV6_STR | |
361 | "Generic multicast configuration options\n" | |
362 | "Define multicast boundary\n" | |
363 | "Filter OIL by group using prefix list\n" | |
364 | "Prefix list to filter OIL with\n") | |
365 | { | |
366 | return pim_process_no_ip_pim_boundary_oil_cmd(vty); | |
367 | } | |
368 | ||
63ee25c0 | 369 | DEFPY (interface_ipv6_mroute, |
370 | interface_ipv6_mroute_cmd, | |
371 | "ipv6 mroute INTERFACE X:X::X:X$group [X:X::X:X]$source", | |
372 | IPV6_STR | |
373 | "Add multicast route\n" | |
374 | "Outgoing interface name\n" | |
375 | "Group address\n" | |
376 | "Source address\n") | |
377 | { | |
378 | return pim_process_ip_mroute_cmd(vty, interface, group_str, source_str); | |
379 | } | |
380 | ||
381 | DEFPY (interface_no_ipv6_mroute, | |
382 | interface_no_ipv6_mroute_cmd, | |
383 | "no ipv6 mroute INTERFACE X:X::X:X$group [X:X::X:X]$source", | |
384 | NO_STR | |
385 | IPV6_STR | |
386 | "Add multicast route\n" | |
387 | "Outgoing interface name\n" | |
388 | "Group Address\n" | |
389 | "Source Address\n") | |
390 | { | |
391 | return pim_process_no_ip_mroute_cmd(vty, interface, group_str, | |
392 | source_str); | |
393 | } | |
394 | ||
34b403cf MR |
395 | DEFPY (ipv6_pim_rp, |
396 | ipv6_pim_rp_cmd, | |
397 | "ipv6 pim rp X:X::X:X$rp [X:X::X:X/M]$gp", | |
398 | IPV6_STR | |
399 | PIM_STR | |
400 | "Rendezvous Point\n" | |
401 | "ipv6 address of RP\n" | |
402 | "Group Address range to cover\n") | |
403 | { | |
404 | const char *group_str = (gp_str) ? gp_str : "FF00::0/8"; | |
405 | ||
406 | return pim_process_rp_cmd(vty, rp_str, group_str); | |
407 | } | |
408 | ||
409 | DEFPY (no_ipv6_pim_rp, | |
410 | no_ipv6_pim_rp_cmd, | |
411 | "no ipv6 pim rp X:X::X:X$rp [X:X::X:X/M]$gp", | |
412 | NO_STR | |
413 | IPV6_STR | |
414 | PIM_STR | |
415 | "Rendezvous Point\n" | |
416 | "ipv6 address of RP\n" | |
417 | "Group Address range to cover\n") | |
418 | { | |
419 | const char *group_str = (gp_str) ? gp_str : "FF00::0/8"; | |
420 | ||
421 | return pim_process_no_rp_cmd(vty, rp_str, group_str); | |
422 | } | |
423 | ||
8663adc4 MR |
424 | DEFPY (ipv6_pim_rp_prefix_list, |
425 | ipv6_pim_rp_prefix_list_cmd, | |
426 | "ipv6 pim rp X:X::X:X$rp prefix-list WORD$plist", | |
427 | IPV6_STR | |
428 | PIM_STR | |
429 | "Rendezvous Point\n" | |
430 | "ipv6 address of RP\n" | |
431 | "group prefix-list filter\n" | |
432 | "Name of a prefix-list\n") | |
433 | { | |
434 | return pim_process_rp_plist_cmd(vty, rp_str, plist); | |
435 | } | |
436 | ||
437 | DEFPY (no_ipv6_pim_rp_prefix_list, | |
438 | no_ipv6_pim_rp_prefix_list_cmd, | |
439 | "no ipv6 pim rp X:X::X:X$rp prefix-list WORD$plist", | |
440 | NO_STR | |
441 | IPV6_STR | |
442 | PIM_STR | |
443 | "Rendezvous Point\n" | |
444 | "ipv6 address of RP\n" | |
445 | "group prefix-list filter\n" | |
446 | "Name of a prefix-list\n") | |
447 | { | |
448 | return pim_process_no_rp_plist_cmd(vty, rp_str, plist); | |
449 | } | |
450 | ||
fe2df4f7 A |
451 | DEFPY (interface_ipv6_mld_join, |
452 | interface_ipv6_mld_join_cmd, | |
453 | "ipv6 mld join X:X::X:X$group [X:X::X:X$source]", | |
454 | IPV6_STR | |
455 | IFACE_MLD_STR | |
456 | "MLD join multicast group\n" | |
457 | "Multicast group address\n" | |
458 | "Source address\n") | |
459 | { | |
460 | char xpath[XPATH_MAXLEN]; | |
461 | ||
462 | if (source_str) { | |
463 | if (IPV6_ADDR_SAME(&source, &in6addr_any)) { | |
464 | vty_out(vty, "Bad source address %s\n", source_str); | |
465 | return CMD_WARNING_CONFIG_FAILED; | |
466 | } | |
467 | } else | |
468 | source_str = "::"; | |
469 | ||
470 | snprintf(xpath, sizeof(xpath), FRR_GMP_JOIN_XPATH, "frr-routing:ipv6", | |
471 | group_str, source_str); | |
472 | ||
473 | nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL); | |
474 | ||
475 | return nb_cli_apply_changes(vty, NULL); | |
476 | } | |
477 | ||
478 | DEFPY (interface_no_ipv6_mld_join, | |
479 | interface_no_ipv6_mld_join_cmd, | |
480 | "no ipv6 mld join X:X::X:X$group [X:X::X:X$source]", | |
481 | NO_STR | |
482 | IPV6_STR | |
483 | IFACE_MLD_STR | |
484 | "MLD join multicast group\n" | |
485 | "Multicast group address\n" | |
486 | "Source address\n") | |
487 | { | |
488 | char xpath[XPATH_MAXLEN]; | |
489 | ||
490 | if (source_str) { | |
491 | if (IPV6_ADDR_SAME(&source, &in6addr_any)) { | |
492 | vty_out(vty, "Bad source address %s\n", source_str); | |
493 | return CMD_WARNING_CONFIG_FAILED; | |
494 | } | |
495 | } else | |
496 | source_str = "::"; | |
497 | ||
498 | snprintf(xpath, sizeof(xpath), FRR_GMP_JOIN_XPATH, "frr-routing:ipv6", | |
499 | group_str, source_str); | |
500 | ||
501 | nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL); | |
502 | ||
503 | return nb_cli_apply_changes(vty, NULL); | |
504 | } | |
505 | ||
5d613d13 SG |
506 | void pim_cmd_init(void) |
507 | { | |
508 | if_cmd_init(pim_interface_config_write); | |
c73113ea MR |
509 | |
510 | install_element(CONFIG_NODE, &ipv6_pim_joinprune_time_cmd); | |
511 | install_element(CONFIG_NODE, &no_ipv6_pim_joinprune_time_cmd); | |
fb991ce9 MR |
512 | install_element(CONFIG_NODE, &ipv6_pim_spt_switchover_infinity_cmd); |
513 | install_element(CONFIG_NODE, &ipv6_pim_spt_switchover_infinity_plist_cmd); | |
514 | install_element(CONFIG_NODE, &no_ipv6_pim_spt_switchover_infinity_cmd); | |
515 | install_element(CONFIG_NODE, &no_ipv6_pim_spt_switchover_infinity_plist_cmd); | |
0da72f1f MR |
516 | install_element(CONFIG_NODE, &ipv6_pim_packets_cmd); |
517 | install_element(CONFIG_NODE, &no_ipv6_pim_packets_cmd); | |
28e32366 MR |
518 | install_element(CONFIG_NODE, &ipv6_pim_keep_alive_cmd); |
519 | install_element(CONFIG_NODE, &no_ipv6_pim_keep_alive_cmd); | |
2322b991 MR |
520 | install_element(CONFIG_NODE, &ipv6_pim_rp_keep_alive_cmd); |
521 | install_element(CONFIG_NODE, &no_ipv6_pim_rp_keep_alive_cmd); | |
18ca7de5 MR |
522 | install_element(CONFIG_NODE, &ipv6_pim_register_suppress_cmd); |
523 | install_element(CONFIG_NODE, &no_ipv6_pim_register_suppress_cmd); | |
a1caf7a8 | 524 | install_element(INTERFACE_NODE, &interface_ipv6_pim_cmd); |
525 | install_element(INTERFACE_NODE, &interface_no_ipv6_pim_cmd); | |
bb387611 | 526 | install_element(INTERFACE_NODE, &interface_ipv6_pim_drprio_cmd); |
527 | install_element(INTERFACE_NODE, &interface_no_ipv6_pim_drprio_cmd); | |
e6aab613 | 528 | install_element(INTERFACE_NODE, &interface_ipv6_pim_hello_cmd); |
529 | install_element(INTERFACE_NODE, &interface_no_ipv6_pim_hello_cmd); | |
7e01b641 | 530 | install_element(INTERFACE_NODE, &interface_ipv6_pim_activeactive_cmd); |
dab0ac29 | 531 | install_element(INTERFACE_NODE, &interface_ipv6_pim_ssm_cmd); |
532 | install_element(INTERFACE_NODE, &interface_no_ipv6_pim_ssm_cmd); | |
2b16b40f | 533 | install_element(INTERFACE_NODE, &interface_ipv6_pim_sm_cmd); |
534 | install_element(INTERFACE_NODE, &interface_no_ipv6_pim_sm_cmd); | |
52c52d78 | 535 | install_element(INTERFACE_NODE, |
536 | &interface_ipv6_pim_boundary_oil_cmd); | |
537 | install_element(INTERFACE_NODE, | |
538 | &interface_no_ipv6_pim_boundary_oil_cmd); | |
63ee25c0 | 539 | install_element(INTERFACE_NODE, &interface_ipv6_mroute_cmd); |
540 | install_element(INTERFACE_NODE, &interface_no_ipv6_mroute_cmd); | |
34b403cf MR |
541 | install_element(CONFIG_NODE, &ipv6_pim_rp_cmd); |
542 | install_element(VRF_NODE, &ipv6_pim_rp_cmd); | |
543 | install_element(CONFIG_NODE, &no_ipv6_pim_rp_cmd); | |
544 | install_element(VRF_NODE, &no_ipv6_pim_rp_cmd); | |
8663adc4 MR |
545 | install_element(CONFIG_NODE, &ipv6_pim_rp_prefix_list_cmd); |
546 | install_element(VRF_NODE, &ipv6_pim_rp_prefix_list_cmd); | |
547 | install_element(CONFIG_NODE, &no_ipv6_pim_rp_prefix_list_cmd); | |
548 | install_element(VRF_NODE, &no_ipv6_pim_rp_prefix_list_cmd); | |
fe2df4f7 A |
549 | install_element(INTERFACE_NODE, &interface_ipv6_mld_join_cmd); |
550 | install_element(INTERFACE_NODE, &interface_no_ipv6_mld_join_cmd); | |
5d613d13 | 551 | } |