]>
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 | ||
5d613d13 SG |
280 | void pim_cmd_init(void) |
281 | { | |
282 | if_cmd_init(pim_interface_config_write); | |
c73113ea MR |
283 | |
284 | install_element(CONFIG_NODE, &ipv6_pim_joinprune_time_cmd); | |
285 | install_element(CONFIG_NODE, &no_ipv6_pim_joinprune_time_cmd); | |
fb991ce9 MR |
286 | install_element(CONFIG_NODE, &ipv6_pim_spt_switchover_infinity_cmd); |
287 | install_element(CONFIG_NODE, &ipv6_pim_spt_switchover_infinity_plist_cmd); | |
288 | install_element(CONFIG_NODE, &no_ipv6_pim_spt_switchover_infinity_cmd); | |
289 | install_element(CONFIG_NODE, &no_ipv6_pim_spt_switchover_infinity_plist_cmd); | |
0da72f1f MR |
290 | install_element(CONFIG_NODE, &ipv6_pim_packets_cmd); |
291 | install_element(CONFIG_NODE, &no_ipv6_pim_packets_cmd); | |
28e32366 MR |
292 | install_element(CONFIG_NODE, &ipv6_pim_keep_alive_cmd); |
293 | install_element(CONFIG_NODE, &no_ipv6_pim_keep_alive_cmd); | |
2322b991 MR |
294 | install_element(CONFIG_NODE, &ipv6_pim_rp_keep_alive_cmd); |
295 | install_element(CONFIG_NODE, &no_ipv6_pim_rp_keep_alive_cmd); | |
18ca7de5 MR |
296 | install_element(CONFIG_NODE, &ipv6_pim_register_suppress_cmd); |
297 | install_element(CONFIG_NODE, &no_ipv6_pim_register_suppress_cmd); | |
a1caf7a8 | 298 | install_element(INTERFACE_NODE, &interface_ipv6_pim_cmd); |
299 | install_element(INTERFACE_NODE, &interface_no_ipv6_pim_cmd); | |
bb387611 | 300 | install_element(INTERFACE_NODE, &interface_ipv6_pim_drprio_cmd); |
301 | install_element(INTERFACE_NODE, &interface_no_ipv6_pim_drprio_cmd); | |
e6aab613 | 302 | install_element(INTERFACE_NODE, &interface_ipv6_pim_hello_cmd); |
303 | install_element(INTERFACE_NODE, &interface_no_ipv6_pim_hello_cmd); | |
5d613d13 | 304 | } |