]>
Commit | Line | Data |
---|---|---|
718e3744 | 1 | /* |
508e53e2 | 2 | * Copyright (C) 2003 Yasuhiro Ohara |
718e3744 | 3 | * |
4 | * This file is part of GNU Zebra. | |
5 | * | |
6 | * GNU Zebra is free software; you can redistribute it and/or modify it | |
7 | * under the terms of the GNU General Public License as published by the | |
8 | * Free Software Foundation; either version 2, or (at your option) any | |
9 | * later version. | |
10 | * | |
11 | * GNU Zebra 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 | * | |
896014f4 DL |
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 | |
718e3744 | 19 | */ |
20 | ||
508e53e2 | 21 | #include <zebra.h> |
718e3744 | 22 | |
508e53e2 | 23 | #include "thread.h" |
24 | #include "linklist.h" | |
25 | #include "vty.h" | |
26 | #include "command.h" | |
718e3744 | 27 | |
508e53e2 | 28 | #include "ospf6_proto.h" |
29 | #include "ospf6_network.h" | |
30 | #include "ospf6_lsa.h" | |
31 | #include "ospf6_lsdb.h" | |
32 | #include "ospf6_message.h" | |
33 | #include "ospf6_route.h" | |
34 | #include "ospf6_zebra.h" | |
35 | #include "ospf6_spf.h" | |
36 | #include "ospf6_top.h" | |
37 | #include "ospf6_area.h" | |
38 | #include "ospf6_interface.h" | |
39 | #include "ospf6_neighbor.h" | |
40 | #include "ospf6_intra.h" | |
41 | #include "ospf6_asbr.h" | |
049207c3 | 42 | #include "ospf6_abr.h" |
1e05838a | 43 | #include "ospf6_flood.h" |
049207c3 | 44 | #include "ospf6d.h" |
7f342629 | 45 | #include "ospf6_bfd.h" |
718e3744 | 46 | |
47 | char ospf6_daemon_version[] = OSPF6_DAEMON_VERSION; | |
48 | ||
508e53e2 | 49 | struct route_node * |
50 | route_prev (struct route_node *node) | |
718e3744 | 51 | { |
508e53e2 | 52 | struct route_node *end; |
53 | struct route_node *prev = NULL; | |
718e3744 | 54 | |
508e53e2 | 55 | end = node; |
56 | node = node->parent; | |
3b68735f | 57 | if (node) |
58 | route_lock_node (node); | |
508e53e2 | 59 | while (node) |
60 | { | |
61 | prev = node; | |
3b68735f | 62 | node = route_next (node); |
63 | if (node == end) | |
64 | { | |
65 | route_unlock_node (node); | |
66 | node = NULL; | |
67 | } | |
508e53e2 | 68 | } |
69 | route_unlock_node (end); | |
3b68735f | 70 | if (prev) |
71 | route_lock_node (prev); | |
718e3744 | 72 | |
508e53e2 | 73 | return prev; |
718e3744 | 74 | } |
75 | ||
6b0655a2 | 76 | |
6452df09 | 77 | /* show database functions */ |
718e3744 | 78 | DEFUN (show_version_ospf6, |
79 | show_version_ospf6_cmd, | |
80 | "show version ospf6", | |
81 | SHOW_STR | |
3a2d747c QY |
82 | "Display version\n" |
83 | "Display ospf6d version\n" | |
508e53e2 | 84 | ) |
718e3744 | 85 | { |
86 | vty_out (vty, "Zebra OSPF6d Version: %s%s", | |
049207c3 | 87 | ospf6_daemon_version, VNL); |
718e3744 | 88 | |
89 | return CMD_SUCCESS; | |
90 | } | |
91 | ||
7fc626de | 92 | static struct cmd_node debug_node = |
718e3744 | 93 | { |
508e53e2 | 94 | DEBUG_NODE, |
69b4a810 | 95 | "", |
96 | 1 /* VTYSH */ | |
508e53e2 | 97 | }; |
718e3744 | 98 | |
6ac29a51 | 99 | static int |
508e53e2 | 100 | config_write_ospf6_debug (struct vty *vty) |
101 | { | |
102 | config_write_ospf6_debug_message (vty); | |
103 | config_write_ospf6_debug_lsa (vty); | |
104 | config_write_ospf6_debug_zebra (vty); | |
105 | config_write_ospf6_debug_interface (vty); | |
106 | config_write_ospf6_debug_neighbor (vty); | |
107 | config_write_ospf6_debug_spf (vty); | |
108 | config_write_ospf6_debug_route (vty); | |
cb4b8845 | 109 | config_write_ospf6_debug_brouter (vty); |
508e53e2 | 110 | config_write_ospf6_debug_asbr (vty); |
049207c3 | 111 | config_write_ospf6_debug_abr (vty); |
1e05838a | 112 | config_write_ospf6_debug_flood (vty); |
049207c3 | 113 | vty_out (vty, "!%s", VNL); |
508e53e2 | 114 | return 0; |
718e3744 | 115 | } |
116 | ||
049207c3 | 117 | #define AREA_LSDB_TITLE_FORMAT \ |
118 | "%s Area Scoped Link State Database (Area %s)%s%s" | |
119 | #define IF_LSDB_TITLE_FORMAT \ | |
120 | "%s I/F Scoped Link State Database (I/F %s in Area %s)%s%s" | |
121 | #define AS_LSDB_TITLE_FORMAT \ | |
122 | "%s AS Scoped Link State Database%s%s" | |
123 | ||
124 | static int | |
14b16482 | 125 | parse_show_level (int idx_level, int argc, struct cmd_token **argv) |
049207c3 | 126 | { |
14b16482 DW |
127 | int level = OSPF6_LSDB_SHOW_LEVEL_NORMAL; |
128 | ||
129 | if (argc > idx_level) | |
049207c3 | 130 | { |
14b16482 | 131 | if (strmatch (argv[idx_level]->text, "detail")) |
049207c3 | 132 | level = OSPF6_LSDB_SHOW_LEVEL_DETAIL; |
14b16482 | 133 | else if (strmatch (argv[idx_level]->text, "dump")) |
049207c3 | 134 | level = OSPF6_LSDB_SHOW_LEVEL_DUMP; |
14b16482 | 135 | else if (strmatch (argv[idx_level]->text, "internal")) |
049207c3 | 136 | level = OSPF6_LSDB_SHOW_LEVEL_INTERNAL; |
137 | } | |
14b16482 | 138 | |
049207c3 | 139 | return level; |
140 | } | |
141 | ||
142 | static u_int16_t | |
14b16482 | 143 | parse_type_spec (int idx_lsa, int argc, struct cmd_token **argv) |
049207c3 | 144 | { |
6452df09 | 145 | u_int16_t type = 0; |
14b16482 DW |
146 | |
147 | if (argc > idx_lsa) | |
148 | { | |
30a24af0 | 149 | if (strmatch (argv[idx_lsa]->text, "router")) |
14b16482 | 150 | type = htons (OSPF6_LSTYPE_ROUTER); |
30a24af0 | 151 | else if (strmatch (argv[idx_lsa]->text, "network")) |
14b16482 | 152 | type = htons (OSPF6_LSTYPE_NETWORK); |
30a24af0 | 153 | else if (strmatch (argv[idx_lsa]->text, "as-external")) |
14b16482 | 154 | type = htons (OSPF6_LSTYPE_AS_EXTERNAL); |
30a24af0 | 155 | else if (strmatch (argv[idx_lsa]->text, "intra-prefix")) |
14b16482 | 156 | type = htons (OSPF6_LSTYPE_INTRA_PREFIX); |
30a24af0 | 157 | else if (strmatch (argv[idx_lsa]->text, "inter-router")) |
14b16482 | 158 | type = htons (OSPF6_LSTYPE_INTER_ROUTER); |
30a24af0 | 159 | else if (strmatch (argv[idx_lsa]->text, "inter-prefix")) |
14b16482 | 160 | type = htons (OSPF6_LSTYPE_INTER_PREFIX); |
30a24af0 | 161 | else if (strmatch (argv[idx_lsa]->text, "link")) |
14b16482 DW |
162 | type = htons (OSPF6_LSTYPE_LINK); |
163 | } | |
164 | ||
049207c3 | 165 | return type; |
166 | } | |
167 | ||
508e53e2 | 168 | DEFUN (show_ipv6_ospf6_database, |
169 | show_ipv6_ospf6_database_cmd, | |
6de69f83 | 170 | "show ipv6 ospf6 database [<detail|dump|internal>]", |
508e53e2 | 171 | SHOW_STR |
172 | IPV6_STR | |
173 | OSPF6_STR | |
174 | "Display Link state database\n" | |
14b16482 DW |
175 | "Display details of LSAs\n" |
176 | "Dump LSAs\n" | |
177 | "Display LSA's internal information\n") | |
718e3744 | 178 | { |
14b16482 | 179 | int idx_level = 4; |
049207c3 | 180 | int level; |
52dc7ee6 | 181 | struct listnode *i, *j; |
508e53e2 | 182 | struct ospf6 *o = ospf6; |
049207c3 | 183 | struct ospf6_area *oa; |
184 | struct ospf6_interface *oi; | |
508e53e2 | 185 | |
186 | OSPF6_CMD_CHECK_RUNNING (); | |
187 | ||
14b16482 | 188 | level = parse_show_level (idx_level, argc, argv); |
718e3744 | 189 | |
1eb8ef25 | 190 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
508e53e2 | 191 | { |
049207c3 | 192 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
193 | ospf6_lsdb_show (vty, level, NULL, NULL, NULL, oa->lsdb); | |
508e53e2 | 194 | } |
049207c3 | 195 | |
1eb8ef25 | 196 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
508e53e2 | 197 | { |
1eb8ef25 | 198 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
508e53e2 | 199 | { |
049207c3 | 200 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
201 | oi->interface->name, oa->name, VNL, VNL); | |
202 | ospf6_lsdb_show (vty, level, NULL, NULL, NULL, oi->lsdb); | |
508e53e2 | 203 | } |
204 | } | |
718e3744 | 205 | |
049207c3 | 206 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
207 | ospf6_lsdb_show (vty, level, NULL, NULL, NULL, o->lsdb); | |
208 | ||
209 | vty_out (vty, "%s", VNL); | |
718e3744 | 210 | return CMD_SUCCESS; |
211 | } | |
212 | ||
508e53e2 | 213 | DEFUN (show_ipv6_ospf6_database_type, |
214 | show_ipv6_ospf6_database_type_cmd, | |
14b16482 | 215 | "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> [<detail|dump|internal>]", |
718e3744 | 216 | SHOW_STR |
508e53e2 | 217 | IPV6_STR |
218 | OSPF6_STR | |
219 | "Display Link state database\n" | |
220 | "Display Router LSAs\n" | |
221 | "Display Network LSAs\n" | |
222 | "Display Inter-Area-Prefix LSAs\n" | |
223 | "Display Inter-Area-Router LSAs\n" | |
224 | "Display As-External LSAs\n" | |
225 | "Display Group-Membership LSAs\n" | |
226 | "Display Type-7 LSAs\n" | |
227 | "Display Link LSAs\n" | |
228 | "Display Intra-Area-Prefix LSAs\n" | |
14b16482 DW |
229 | "Display details of LSAs\n" |
230 | "Dump LSAs\n" | |
231 | "Display LSA's internal information\n" | |
508e53e2 | 232 | ) |
718e3744 | 233 | { |
14b16482 DW |
234 | int idx_lsa = 4; |
235 | int idx_level = 5; | |
049207c3 | 236 | int level; |
52dc7ee6 | 237 | struct listnode *i, *j; |
508e53e2 | 238 | struct ospf6 *o = ospf6; |
049207c3 | 239 | struct ospf6_area *oa; |
240 | struct ospf6_interface *oi; | |
508e53e2 | 241 | u_int16_t type = 0; |
242 | ||
718e3744 | 243 | OSPF6_CMD_CHECK_RUNNING (); |
244 | ||
14b16482 DW |
245 | type = parse_type_spec (idx_lsa, argc, argv); |
246 | level = parse_show_level (idx_level, argc, argv); | |
508e53e2 | 247 | |
049207c3 | 248 | switch (OSPF6_LSA_SCOPE (type)) |
508e53e2 | 249 | { |
6452df09 | 250 | case OSPF6_SCOPE_AREA: |
1eb8ef25 | 251 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 252 | { |
049207c3 | 253 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
254 | ospf6_lsdb_show (vty, level, &type, NULL, NULL, oa->lsdb); | |
255 | } | |
256 | break; | |
257 | ||
6452df09 | 258 | case OSPF6_SCOPE_LINKLOCAL: |
1eb8ef25 | 259 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 260 | { |
1eb8ef25 | 261 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
049207c3 | 262 | { |
049207c3 | 263 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
264 | oi->interface->name, oa->name, VNL, VNL); | |
265 | ospf6_lsdb_show (vty, level, &type, NULL, NULL, oi->lsdb); | |
266 | } | |
267 | } | |
268 | break; | |
269 | ||
6452df09 | 270 | case OSPF6_SCOPE_AS: |
049207c3 | 271 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
272 | ospf6_lsdb_show (vty, level, &type, NULL, NULL, o->lsdb); | |
273 | break; | |
274 | ||
275 | default: | |
276 | assert (0); | |
277 | break; | |
508e53e2 | 278 | } |
279 | ||
049207c3 | 280 | vty_out (vty, "%s", VNL); |
718e3744 | 281 | return CMD_SUCCESS; |
282 | } | |
283 | ||
508e53e2 | 284 | DEFUN (show_ipv6_ospf6_database_id, |
285 | show_ipv6_ospf6_database_id_cmd, | |
093d7a3a | 286 | "show ipv6 ospf6 database <*|linkstate-id> A.B.C.D [<detail|dump|internal>]", |
718e3744 | 287 | SHOW_STR |
508e53e2 | 288 | IPV6_STR |
718e3744 | 289 | OSPF6_STR |
508e53e2 | 290 | "Display Link state database\n" |
291 | "Any Link state Type\n" | |
093d7a3a | 292 | "Search by Link state ID\n" |
508e53e2 | 293 | "Specify Link state ID as IPv4 address notation\n" |
093d7a3a DW |
294 | "Display details of LSAs\n" |
295 | "Dump LSAs\n" | |
296 | "Display LSA's internal information\n") | |
718e3744 | 297 | { |
373886ab | 298 | int idx_ipv4 = 5; |
14b16482 | 299 | int idx_level = 6; |
049207c3 | 300 | int level; |
52dc7ee6 | 301 | struct listnode *i, *j; |
508e53e2 | 302 | struct ospf6 *o = ospf6; |
049207c3 | 303 | struct ospf6_area *oa; |
304 | struct ospf6_interface *oi; | |
508e53e2 | 305 | u_int32_t id = 0; |
306 | ||
718e3744 | 307 | OSPF6_CMD_CHECK_RUNNING (); |
093d7a3a DW |
308 | |
309 | if (argv[idx_ipv4]->type == IPV4_TKN) | |
310 | inet_pton (AF_INET, argv[idx_ipv4]->arg, &id); | |
311 | ||
14b16482 | 312 | level = parse_show_level (idx_level, argc, argv); |
049207c3 | 313 | |
1eb8ef25 | 314 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
508e53e2 | 315 | { |
049207c3 | 316 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
317 | ospf6_lsdb_show (vty, level, NULL, &id, NULL, oa->lsdb); | |
508e53e2 | 318 | } |
049207c3 | 319 | |
1eb8ef25 | 320 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
508e53e2 | 321 | { |
1eb8ef25 | 322 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
508e53e2 | 323 | { |
049207c3 | 324 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
325 | oi->interface->name, oa->name, VNL, VNL); | |
326 | ospf6_lsdb_show (vty, level, NULL, &id, NULL, oi->lsdb); | |
508e53e2 | 327 | } |
328 | } | |
718e3744 | 329 | |
049207c3 | 330 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
331 | ospf6_lsdb_show (vty, level, NULL, &id, NULL, o->lsdb); | |
332 | ||
333 | vty_out (vty, "%s", VNL); | |
718e3744 | 334 | return CMD_SUCCESS; |
335 | } | |
336 | ||
508e53e2 | 337 | DEFUN (show_ipv6_ospf6_database_router, |
338 | show_ipv6_ospf6_database_router_cmd, | |
093d7a3a | 339 | "show ipv6 ospf6 database <*|adv-router> * A.B.C.D <detail|dump|internal>", |
508e53e2 | 340 | SHOW_STR |
341 | IPV6_STR | |
342 | OSPF6_STR | |
343 | "Display Link state database\n" | |
344 | "Any Link state Type\n" | |
093d7a3a | 345 | "Search by Advertising Router\n" |
508e53e2 | 346 | "Any Link state ID\n" |
347 | "Specify Advertising Router as IPv4 address notation\n" | |
093d7a3a DW |
348 | "Display details of LSAs\n" |
349 | "Dump LSAs\n" | |
350 | "Display LSA's internal information\n") | |
718e3744 | 351 | { |
51c26414 | 352 | int idx_ipv4 = 6; |
14b16482 | 353 | int idx_level = 7; |
049207c3 | 354 | int level; |
52dc7ee6 | 355 | struct listnode *i, *j; |
508e53e2 | 356 | struct ospf6 *o = ospf6; |
049207c3 | 357 | struct ospf6_area *oa; |
358 | struct ospf6_interface *oi; | |
359 | u_int32_t adv_router = 0; | |
718e3744 | 360 | |
508e53e2 | 361 | OSPF6_CMD_CHECK_RUNNING (); |
14b16482 DW |
362 | inet_pton (AF_INET, argv[idx_ipv4]->arg, &adv_router); |
363 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 364 | |
1eb8ef25 | 365 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
718e3744 | 366 | { |
049207c3 | 367 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
368 | ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oa->lsdb); | |
718e3744 | 369 | } |
049207c3 | 370 | |
1eb8ef25 | 371 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
718e3744 | 372 | { |
1eb8ef25 | 373 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
508e53e2 | 374 | { |
049207c3 | 375 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
376 | oi->interface->name, oa->name, VNL, VNL); | |
377 | ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oi->lsdb); | |
508e53e2 | 378 | } |
718e3744 | 379 | } |
380 | ||
049207c3 | 381 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
382 | ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, o->lsdb); | |
383 | ||
384 | vty_out (vty, "%s", VNL); | |
508e53e2 | 385 | return CMD_SUCCESS; |
386 | } | |
387 | ||
508e53e2 | 388 | DEFUN (show_ipv6_ospf6_database_type_id, |
389 | show_ipv6_ospf6_database_type_id_cmd, | |
373886ab | 390 | "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> linkstate-id A.B.C.D [<detail|dump|internal>]", |
508e53e2 | 391 | SHOW_STR |
392 | IPV6_STR | |
393 | OSPF6_STR | |
394 | "Display Link state database\n" | |
395 | "Display Router LSAs\n" | |
396 | "Display Network LSAs\n" | |
397 | "Display Inter-Area-Prefix LSAs\n" | |
398 | "Display Inter-Area-Router LSAs\n" | |
399 | "Display As-External LSAs\n" | |
400 | "Display Group-Membership LSAs\n" | |
401 | "Display Type-7 LSAs\n" | |
402 | "Display Link LSAs\n" | |
403 | "Display Intra-Area-Prefix LSAs\n" | |
093d7a3a | 404 | "Search by Link state ID\n" |
508e53e2 | 405 | "Specify Link state ID as IPv4 address notation\n" |
093d7a3a DW |
406 | "Display details of LSAs\n" |
407 | "Dump LSAs\n" | |
408 | "Display LSA's internal information\n" | |
508e53e2 | 409 | ) |
410 | { | |
51c26414 | 411 | int idx_lsa = 4; |
093d7a3a DW |
412 | int idx_ipv4 = 6; |
413 | int idx_level = 7; | |
049207c3 | 414 | int level; |
52dc7ee6 | 415 | struct listnode *i, *j; |
508e53e2 | 416 | struct ospf6 *o = ospf6; |
049207c3 | 417 | struct ospf6_area *oa; |
418 | struct ospf6_interface *oi; | |
508e53e2 | 419 | u_int16_t type = 0; |
420 | u_int32_t id = 0; | |
421 | ||
422 | OSPF6_CMD_CHECK_RUNNING (); | |
423 | ||
14b16482 DW |
424 | type = parse_type_spec (idx_lsa, argc, argv); |
425 | inet_pton (AF_INET, argv[idx_ipv4]->arg, &id); | |
426 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 427 | |
428 | switch (OSPF6_LSA_SCOPE (type)) | |
718e3744 | 429 | { |
6452df09 | 430 | case OSPF6_SCOPE_AREA: |
1eb8ef25 | 431 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 432 | { |
049207c3 | 433 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
434 | ospf6_lsdb_show (vty, level, &type, &id, NULL, oa->lsdb); | |
435 | } | |
436 | break; | |
437 | ||
6452df09 | 438 | case OSPF6_SCOPE_LINKLOCAL: |
1eb8ef25 | 439 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 440 | { |
1eb8ef25 | 441 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
049207c3 | 442 | { |
049207c3 | 443 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
444 | oi->interface->name, oa->name, VNL, VNL); | |
445 | ospf6_lsdb_show (vty, level, &type, &id, NULL, oi->lsdb); | |
446 | } | |
447 | } | |
448 | break; | |
449 | ||
6452df09 | 450 | case OSPF6_SCOPE_AS: |
049207c3 | 451 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
452 | ospf6_lsdb_show (vty, level, &type, &id, NULL, o->lsdb); | |
453 | break; | |
454 | ||
455 | default: | |
456 | assert (0); | |
457 | break; | |
718e3744 | 458 | } |
459 | ||
049207c3 | 460 | vty_out (vty, "%s", VNL); |
718e3744 | 461 | return CMD_SUCCESS; |
462 | } | |
463 | ||
508e53e2 | 464 | DEFUN (show_ipv6_ospf6_database_type_router, |
465 | show_ipv6_ospf6_database_type_router_cmd, | |
093d7a3a | 466 | "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> <*|adv-router> A.B.C.D [<detail|dump|internal>]", |
508e53e2 | 467 | SHOW_STR |
468 | IPV6_STR | |
469 | OSPF6_STR | |
470 | "Display Link state database\n" | |
471 | "Display Router LSAs\n" | |
472 | "Display Network LSAs\n" | |
473 | "Display Inter-Area-Prefix LSAs\n" | |
474 | "Display Inter-Area-Router LSAs\n" | |
475 | "Display As-External LSAs\n" | |
476 | "Display Group-Membership LSAs\n" | |
477 | "Display Type-7 LSAs\n" | |
478 | "Display Link LSAs\n" | |
479 | "Display Intra-Area-Prefix LSAs\n" | |
480 | "Any Link state ID\n" | |
093d7a3a | 481 | "Search by Advertising Router\n" |
508e53e2 | 482 | "Specify Advertising Router as IPv4 address notation\n" |
093d7a3a DW |
483 | "Display details of LSAs\n" |
484 | "Dump LSAs\n" | |
485 | "Display LSA's internal information\n" | |
718e3744 | 486 | ) |
487 | { | |
51c26414 | 488 | int idx_lsa = 4; |
14b16482 DW |
489 | int idx_ipv4 = 6; |
490 | int idx_level = 7; | |
049207c3 | 491 | int level; |
52dc7ee6 | 492 | struct listnode *i, *j; |
508e53e2 | 493 | struct ospf6 *o = ospf6; |
049207c3 | 494 | struct ospf6_area *oa; |
495 | struct ospf6_interface *oi; | |
508e53e2 | 496 | u_int16_t type = 0; |
049207c3 | 497 | u_int32_t adv_router = 0; |
718e3744 | 498 | |
508e53e2 | 499 | OSPF6_CMD_CHECK_RUNNING (); |
718e3744 | 500 | |
14b16482 DW |
501 | type = parse_type_spec (idx_lsa, argc, argv); |
502 | inet_pton (AF_INET, argv[idx_ipv4]->arg, &adv_router); | |
503 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 504 | |
505 | switch (OSPF6_LSA_SCOPE (type)) | |
508e53e2 | 506 | { |
6452df09 | 507 | case OSPF6_SCOPE_AREA: |
1eb8ef25 | 508 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 509 | { |
049207c3 | 510 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
511 | ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oa->lsdb); | |
512 | } | |
513 | break; | |
514 | ||
6452df09 | 515 | case OSPF6_SCOPE_LINKLOCAL: |
1eb8ef25 | 516 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 517 | { |
1eb8ef25 | 518 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
049207c3 | 519 | { |
049207c3 | 520 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
521 | oi->interface->name, oa->name, VNL, VNL); | |
522 | ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oi->lsdb); | |
523 | } | |
524 | } | |
525 | break; | |
526 | ||
6452df09 | 527 | case OSPF6_SCOPE_AS: |
049207c3 | 528 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
529 | ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, o->lsdb); | |
530 | break; | |
531 | ||
532 | default: | |
533 | assert (0); | |
534 | break; | |
508e53e2 | 535 | } |
718e3744 | 536 | |
049207c3 | 537 | vty_out (vty, "%s", VNL); |
508e53e2 | 538 | return CMD_SUCCESS; |
718e3744 | 539 | } |
540 | ||
508e53e2 | 541 | |
049207c3 | 542 | DEFUN (show_ipv6_ospf6_database_id_router, |
543 | show_ipv6_ospf6_database_id_router_cmd, | |
14b16482 | 544 | "show ipv6 ospf6 database * A.B.C.D A.B.C.D [<detail|dump|internal>]", |
049207c3 | 545 | SHOW_STR |
546 | IPV6_STR | |
547 | OSPF6_STR | |
548 | "Display Link state database\n" | |
549 | "Any Link state Type\n" | |
550 | "Specify Link state ID as IPv4 address notation\n" | |
551 | "Specify Advertising Router as IPv4 address notation\n" | |
14b16482 DW |
552 | "Display details of LSAs\n" |
553 | "Dump LSAs\n" | |
554 | "Display LSA's internal information\n" | |
049207c3 | 555 | ) |
556 | { | |
14b16482 DW |
557 | int idx_ls_id = 5; |
558 | int idx_adv_rtr = 6; | |
559 | int idx_level = 7; | |
049207c3 | 560 | int level; |
52dc7ee6 | 561 | struct listnode *i, *j; |
049207c3 | 562 | struct ospf6 *o = ospf6; |
563 | struct ospf6_area *oa; | |
564 | struct ospf6_interface *oi; | |
565 | u_int32_t id = 0; | |
566 | u_int32_t adv_router = 0; | |
567 | ||
568 | OSPF6_CMD_CHECK_RUNNING (); | |
14b16482 DW |
569 | inet_pton (AF_INET, argv[idx_ls_id]->arg, &id); |
570 | inet_pton (AF_INET, argv[idx_adv_rtr]->arg, &adv_router); | |
571 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 572 | |
1eb8ef25 | 573 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
508e53e2 | 574 | { |
049207c3 | 575 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
576 | ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oa->lsdb); | |
508e53e2 | 577 | } |
049207c3 | 578 | |
1eb8ef25 | 579 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
508e53e2 | 580 | { |
1eb8ef25 | 581 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
508e53e2 | 582 | { |
049207c3 | 583 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
584 | oi->interface->name, oa->name, VNL, VNL); | |
585 | ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oi->lsdb); | |
508e53e2 | 586 | } |
587 | } | |
718e3744 | 588 | |
049207c3 | 589 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
590 | ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, o->lsdb); | |
591 | ||
592 | vty_out (vty, "%s", VNL); | |
718e3744 | 593 | return CMD_SUCCESS; |
594 | } | |
595 | ||
508e53e2 | 596 | |
049207c3 | 597 | DEFUN (show_ipv6_ospf6_database_adv_router_linkstate_id, |
598 | show_ipv6_ospf6_database_adv_router_linkstate_id_cmd, | |
14b16482 | 599 | "show ipv6 ospf6 database adv-router A.B.C.D linkstate-id A.B.C.D [<detail|dump|internal>]", |
049207c3 | 600 | SHOW_STR |
601 | IPV6_STR | |
602 | OSPF6_STR | |
603 | "Display Link state database\n" | |
604 | "Search by Advertising Router\n" | |
605 | "Specify Advertising Router as IPv4 address notation\n" | |
606 | "Search by Link state ID\n" | |
607 | "Specify Link state ID as IPv4 address notation\n" | |
14b16482 DW |
608 | "Display details of LSAs\n" |
609 | "Dump LSAs\n" | |
610 | "Display LSA's internal information\n") | |
049207c3 | 611 | { |
14b16482 DW |
612 | int idx_adv_rtr = 5; |
613 | int idx_ls_id = 7; | |
614 | int idx_level = 8; | |
049207c3 | 615 | int level; |
52dc7ee6 | 616 | struct listnode *i, *j; |
049207c3 | 617 | struct ospf6 *o = ospf6; |
618 | struct ospf6_area *oa; | |
619 | struct ospf6_interface *oi; | |
620 | u_int32_t id = 0; | |
621 | u_int32_t adv_router = 0; | |
622 | ||
623 | OSPF6_CMD_CHECK_RUNNING (); | |
14b16482 DW |
624 | inet_pton (AF_INET, argv[idx_adv_rtr]->arg, &adv_router); |
625 | inet_pton (AF_INET, argv[idx_ls_id]->arg, &id); | |
626 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 627 | |
1eb8ef25 | 628 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 629 | { |
049207c3 | 630 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
631 | ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oa->lsdb); | |
632 | } | |
633 | ||
1eb8ef25 | 634 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 635 | { |
1eb8ef25 | 636 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
049207c3 | 637 | { |
049207c3 | 638 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
639 | oi->interface->name, oa->name, VNL, VNL); | |
640 | ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oi->lsdb); | |
641 | } | |
642 | } | |
643 | ||
644 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); | |
645 | ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, o->lsdb); | |
646 | ||
647 | vty_out (vty, "%s", VNL); | |
648 | return CMD_SUCCESS; | |
649 | } | |
650 | ||
508e53e2 | 651 | DEFUN (show_ipv6_ospf6_database_type_id_router, |
652 | show_ipv6_ospf6_database_type_id_router_cmd, | |
14b16482 | 653 | "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> A.B.C.D A.B.C.D [<dump|internal>]", |
508e53e2 | 654 | SHOW_STR |
655 | IPV6_STR | |
656 | OSPF6_STR | |
657 | "Display Link state database\n" | |
658 | "Display Router LSAs\n" | |
659 | "Display Network LSAs\n" | |
660 | "Display Inter-Area-Prefix LSAs\n" | |
661 | "Display Inter-Area-Router LSAs\n" | |
662 | "Display As-External LSAs\n" | |
663 | "Display Group-Membership LSAs\n" | |
664 | "Display Type-7 LSAs\n" | |
665 | "Display Link LSAs\n" | |
666 | "Display Intra-Area-Prefix LSAs\n" | |
667 | "Specify Link state ID as IPv4 address notation\n" | |
668 | "Specify Advertising Router as IPv4 address notation\n" | |
14b16482 DW |
669 | "Dump LSAs\n" |
670 | "Display LSA's internal information\n") | |
718e3744 | 671 | { |
51c26414 | 672 | int idx_lsa = 4; |
14b16482 DW |
673 | int idx_ls_id = 5; |
674 | int idx_adv_rtr = 6; | |
675 | int idx_level = 7; | |
049207c3 | 676 | int level; |
52dc7ee6 | 677 | struct listnode *i, *j; |
508e53e2 | 678 | struct ospf6 *o = ospf6; |
049207c3 | 679 | struct ospf6_area *oa; |
680 | struct ospf6_interface *oi; | |
508e53e2 | 681 | u_int16_t type = 0; |
682 | u_int32_t id = 0; | |
049207c3 | 683 | u_int32_t adv_router = 0; |
508e53e2 | 684 | |
685 | OSPF6_CMD_CHECK_RUNNING (); | |
718e3744 | 686 | |
14b16482 DW |
687 | type = parse_type_spec (idx_lsa, argc, argv); |
688 | inet_pton (AF_INET, argv[idx_ls_id]->arg, &id); | |
689 | inet_pton (AF_INET, argv[idx_adv_rtr]->arg, &adv_router); | |
690 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 691 | |
692 | switch (OSPF6_LSA_SCOPE (type)) | |
508e53e2 | 693 | { |
6452df09 | 694 | case OSPF6_SCOPE_AREA: |
1eb8ef25 | 695 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 696 | { |
049207c3 | 697 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
698 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb); | |
699 | } | |
700 | break; | |
701 | ||
6452df09 | 702 | case OSPF6_SCOPE_LINKLOCAL: |
1eb8ef25 | 703 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 704 | { |
1eb8ef25 | 705 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
049207c3 | 706 | { |
049207c3 | 707 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
708 | oi->interface->name, oa->name, VNL, VNL); | |
709 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb); | |
710 | } | |
711 | } | |
712 | break; | |
713 | ||
6452df09 | 714 | case OSPF6_SCOPE_AS: |
049207c3 | 715 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
716 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb); | |
717 | break; | |
718 | ||
719 | default: | |
720 | assert (0); | |
721 | break; | |
718e3744 | 722 | } |
723 | ||
049207c3 | 724 | vty_out (vty, "%s", VNL); |
718e3744 | 725 | return CMD_SUCCESS; |
726 | } | |
727 | ||
049207c3 | 728 | |
729 | DEFUN (show_ipv6_ospf6_database_type_adv_router_linkstate_id, | |
730 | show_ipv6_ospf6_database_type_adv_router_linkstate_id_cmd, | |
14b16482 | 731 | "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> adv-router A.B.C.D linkstate-id A.B.C.D [<dump|internal>]", |
049207c3 | 732 | SHOW_STR |
733 | IPV6_STR | |
734 | OSPF6_STR | |
735 | "Display Link state database\n" | |
736 | "Display Router LSAs\n" | |
737 | "Display Network LSAs\n" | |
738 | "Display Inter-Area-Prefix LSAs\n" | |
739 | "Display Inter-Area-Router LSAs\n" | |
740 | "Display As-External LSAs\n" | |
741 | "Display Group-Membership LSAs\n" | |
742 | "Display Type-7 LSAs\n" | |
743 | "Display Link LSAs\n" | |
744 | "Display Intra-Area-Prefix LSAs\n" | |
745 | "Search by Advertising Router\n" | |
746 | "Specify Advertising Router as IPv4 address notation\n" | |
747 | "Search by Link state ID\n" | |
748 | "Specify Link state ID as IPv4 address notation\n" | |
14b16482 DW |
749 | "Dump LSAs\n" |
750 | "Display LSA's internal information\n") | |
049207c3 | 751 | { |
51c26414 | 752 | int idx_lsa = 4; |
14b16482 DW |
753 | int idx_adv_rtr = 6; |
754 | int idx_ls_id = 8; | |
755 | int idx_level = 9; | |
049207c3 | 756 | int level; |
52dc7ee6 | 757 | struct listnode *i, *j; |
049207c3 | 758 | struct ospf6 *o = ospf6; |
759 | struct ospf6_area *oa; | |
760 | struct ospf6_interface *oi; | |
761 | u_int16_t type = 0; | |
762 | u_int32_t id = 0; | |
763 | u_int32_t adv_router = 0; | |
764 | ||
765 | OSPF6_CMD_CHECK_RUNNING (); | |
766 | ||
14b16482 DW |
767 | type = parse_type_spec (idx_lsa, argc, argv); |
768 | inet_pton (AF_INET, argv[idx_adv_rtr]->arg, &adv_router); | |
769 | inet_pton (AF_INET, argv[idx_ls_id]->arg, &id); | |
770 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 771 | |
772 | switch (OSPF6_LSA_SCOPE (type)) | |
773 | { | |
6452df09 | 774 | case OSPF6_SCOPE_AREA: |
1eb8ef25 | 775 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 776 | { |
049207c3 | 777 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
778 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb); | |
779 | } | |
780 | break; | |
781 | ||
6452df09 | 782 | case OSPF6_SCOPE_LINKLOCAL: |
1eb8ef25 | 783 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 784 | { |
1eb8ef25 | 785 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
049207c3 | 786 | { |
049207c3 | 787 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
788 | oi->interface->name, oa->name, VNL, VNL); | |
789 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb); | |
790 | } | |
791 | } | |
792 | break; | |
793 | ||
6452df09 | 794 | case OSPF6_SCOPE_AS: |
049207c3 | 795 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
796 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb); | |
797 | break; | |
798 | ||
799 | default: | |
800 | assert (0); | |
801 | break; | |
802 | } | |
803 | ||
804 | vty_out (vty, "%s", VNL); | |
805 | return CMD_SUCCESS; | |
806 | } | |
807 | ||
508e53e2 | 808 | DEFUN (show_ipv6_ospf6_database_self_originated, |
809 | show_ipv6_ospf6_database_self_originated_cmd, | |
14b16482 | 810 | "show ipv6 ospf6 database self-originated [<detail|dump|internal>]", |
508e53e2 | 811 | SHOW_STR |
812 | IPV6_STR | |
813 | OSPF6_STR | |
16cedbb0 | 814 | "Display Link state database\n" |
508e53e2 | 815 | "Display Self-originated LSAs\n" |
14b16482 DW |
816 | "Display details of LSAs\n" |
817 | "Dump LSAs\n" | |
818 | "Display LSA's internal information\n") | |
718e3744 | 819 | { |
14b16482 | 820 | int idx_level = 5; |
049207c3 | 821 | int level; |
52dc7ee6 | 822 | struct listnode *i, *j; |
508e53e2 | 823 | struct ospf6 *o = ospf6; |
049207c3 | 824 | struct ospf6_area *oa; |
825 | struct ospf6_interface *oi; | |
826 | u_int32_t adv_router = 0; | |
718e3744 | 827 | |
508e53e2 | 828 | OSPF6_CMD_CHECK_RUNNING (); |
14b16482 | 829 | level = parse_show_level (idx_level, argc, argv); |
049207c3 | 830 | adv_router = o->router_id; |
718e3744 | 831 | |
1eb8ef25 | 832 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
508e53e2 | 833 | { |
049207c3 | 834 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
835 | ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oa->lsdb); | |
508e53e2 | 836 | } |
049207c3 | 837 | |
1eb8ef25 | 838 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
718e3744 | 839 | { |
1eb8ef25 | 840 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
508e53e2 | 841 | { |
049207c3 | 842 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
843 | oi->interface->name, oa->name, VNL, VNL); | |
844 | ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oi->lsdb); | |
508e53e2 | 845 | } |
718e3744 | 846 | } |
847 | ||
049207c3 | 848 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
849 | ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, o->lsdb); | |
850 | ||
851 | vty_out (vty, "%s", VNL); | |
718e3744 | 852 | return CMD_SUCCESS; |
853 | } | |
854 | ||
508e53e2 | 855 | |
856 | DEFUN (show_ipv6_ospf6_database_type_self_originated, | |
857 | show_ipv6_ospf6_database_type_self_originated_cmd, | |
14b16482 | 858 | "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> self-originated [<detail|dump|internal>]", |
508e53e2 | 859 | SHOW_STR |
860 | IPV6_STR | |
861 | OSPF6_STR | |
862 | "Display Link state database\n" | |
863 | "Display Router LSAs\n" | |
864 | "Display Network LSAs\n" | |
865 | "Display Inter-Area-Prefix LSAs\n" | |
866 | "Display Inter-Area-Router LSAs\n" | |
867 | "Display As-External LSAs\n" | |
868 | "Display Group-Membership LSAs\n" | |
869 | "Display Type-7 LSAs\n" | |
870 | "Display Link LSAs\n" | |
871 | "Display Intra-Area-Prefix LSAs\n" | |
872 | "Display Self-originated LSAs\n" | |
14b16482 DW |
873 | "Display details of LSAs\n" |
874 | "Dump LSAs\n" | |
875 | "Display LSA's internal information\n") | |
718e3744 | 876 | { |
14b16482 DW |
877 | int idx_lsa = 4; |
878 | int idx_level = 6; | |
049207c3 | 879 | int level; |
52dc7ee6 | 880 | struct listnode *i, *j; |
508e53e2 | 881 | struct ospf6 *o = ospf6; |
049207c3 | 882 | struct ospf6_area *oa; |
883 | struct ospf6_interface *oi; | |
508e53e2 | 884 | u_int16_t type = 0; |
049207c3 | 885 | u_int32_t adv_router = 0; |
718e3744 | 886 | |
508e53e2 | 887 | OSPF6_CMD_CHECK_RUNNING (); |
718e3744 | 888 | |
14b16482 DW |
889 | type = parse_type_spec (idx_lsa, argc, argv); |
890 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 891 | |
892 | adv_router = o->router_id; | |
893 | ||
894 | switch (OSPF6_LSA_SCOPE (type)) | |
718e3744 | 895 | { |
6452df09 | 896 | case OSPF6_SCOPE_AREA: |
1eb8ef25 | 897 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 898 | { |
049207c3 | 899 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
900 | ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oa->lsdb); | |
901 | } | |
902 | break; | |
903 | ||
6452df09 | 904 | case OSPF6_SCOPE_LINKLOCAL: |
1eb8ef25 | 905 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 906 | { |
1eb8ef25 | 907 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
049207c3 | 908 | { |
049207c3 | 909 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
910 | oi->interface->name, oa->name, VNL, VNL); | |
911 | ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oi->lsdb); | |
912 | } | |
913 | } | |
914 | break; | |
915 | ||
6452df09 | 916 | case OSPF6_SCOPE_AS: |
049207c3 | 917 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
918 | ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, o->lsdb); | |
919 | break; | |
920 | ||
921 | default: | |
922 | assert (0); | |
923 | break; | |
718e3744 | 924 | } |
508e53e2 | 925 | |
049207c3 | 926 | vty_out (vty, "%s", VNL); |
927 | return CMD_SUCCESS; | |
928 | } | |
508e53e2 | 929 | |
049207c3 | 930 | DEFUN (show_ipv6_ospf6_database_type_self_originated_linkstate_id, |
931 | show_ipv6_ospf6_database_type_self_originated_linkstate_id_cmd, | |
14b16482 | 932 | "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> self-originated linkstate-id A.B.C.D [<detail|dump|internal>]", |
049207c3 | 933 | SHOW_STR |
934 | IPV6_STR | |
935 | OSPF6_STR | |
936 | "Display Link state database\n" | |
937 | "Display Router LSAs\n" | |
938 | "Display Network LSAs\n" | |
939 | "Display Inter-Area-Prefix LSAs\n" | |
940 | "Display Inter-Area-Router LSAs\n" | |
941 | "Display As-External LSAs\n" | |
942 | "Display Group-Membership LSAs\n" | |
943 | "Display Type-7 LSAs\n" | |
944 | "Display Link LSAs\n" | |
945 | "Display Intra-Area-Prefix LSAs\n" | |
946 | "Display Self-originated LSAs\n" | |
947 | "Search by Link state ID\n" | |
948 | "Specify Link state ID as IPv4 address notation\n" | |
14b16482 DW |
949 | "Display details of LSAs\n" |
950 | "Dump LSAs\n" | |
951 | "Display LSA's internal information\n") | |
049207c3 | 952 | { |
51c26414 | 953 | int idx_lsa = 4; |
14b16482 DW |
954 | int idx_ls_id = 7; |
955 | int idx_level = 8; | |
049207c3 | 956 | int level; |
52dc7ee6 | 957 | struct listnode *i, *j; |
049207c3 | 958 | struct ospf6 *o = ospf6; |
959 | struct ospf6_area *oa; | |
960 | struct ospf6_interface *oi; | |
961 | u_int16_t type = 0; | |
962 | u_int32_t adv_router = 0; | |
963 | u_int32_t id = 0; | |
964 | ||
965 | OSPF6_CMD_CHECK_RUNNING (); | |
966 | ||
14b16482 DW |
967 | type = parse_type_spec (idx_lsa, argc, argv); |
968 | inet_pton (AF_INET, argv[idx_ls_id]->arg, &id); | |
969 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 970 | adv_router = o->router_id; |
971 | ||
972 | switch (OSPF6_LSA_SCOPE (type)) | |
718e3744 | 973 | { |
6452df09 | 974 | case OSPF6_SCOPE_AREA: |
1eb8ef25 | 975 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 976 | { |
049207c3 | 977 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
978 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb); | |
979 | } | |
980 | break; | |
981 | ||
6452df09 | 982 | case OSPF6_SCOPE_LINKLOCAL: |
1eb8ef25 | 983 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 984 | { |
1eb8ef25 | 985 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
049207c3 | 986 | { |
049207c3 | 987 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
988 | oi->interface->name, oa->name, VNL, VNL); | |
989 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb); | |
990 | } | |
991 | } | |
992 | break; | |
993 | ||
6452df09 | 994 | case OSPF6_SCOPE_AS: |
049207c3 | 995 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
996 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb); | |
997 | break; | |
998 | ||
999 | default: | |
1000 | assert (0); | |
1001 | break; | |
718e3744 | 1002 | } |
718e3744 | 1003 | |
049207c3 | 1004 | vty_out (vty, "%s", VNL); |
718e3744 | 1005 | return CMD_SUCCESS; |
1006 | } | |
718e3744 | 1007 | |
508e53e2 | 1008 | DEFUN (show_ipv6_ospf6_database_type_id_self_originated, |
1009 | show_ipv6_ospf6_database_type_id_self_originated_cmd, | |
14b16482 | 1010 | "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> A.B.C.D self-originated [<detail|dump|internal>]", |
508e53e2 | 1011 | SHOW_STR |
1012 | IPV6_STR | |
1013 | OSPF6_STR | |
1014 | "Display Link state database\n" | |
1015 | "Display Router LSAs\n" | |
1016 | "Display Network LSAs\n" | |
1017 | "Display Inter-Area-Prefix LSAs\n" | |
1018 | "Display Inter-Area-Router LSAs\n" | |
1019 | "Display As-External LSAs\n" | |
1020 | "Display Group-Membership LSAs\n" | |
1021 | "Display Type-7 LSAs\n" | |
1022 | "Display Link LSAs\n" | |
1023 | "Display Intra-Area-Prefix LSAs\n" | |
1024 | "Specify Link state ID as IPv4 address notation\n" | |
1025 | "Display Self-originated LSAs\n" | |
14b16482 DW |
1026 | "Display details of LSAs\n" |
1027 | "Dump LSAs\n" | |
1028 | "Display LSA's internal information\n") | |
718e3744 | 1029 | { |
51c26414 | 1030 | int idx_lsa = 4; |
14b16482 DW |
1031 | int idx_ls_id = 5; |
1032 | int idx_level = 7; | |
049207c3 | 1033 | int level; |
52dc7ee6 | 1034 | struct listnode *i, *j; |
508e53e2 | 1035 | struct ospf6 *o = ospf6; |
049207c3 | 1036 | struct ospf6_area *oa; |
1037 | struct ospf6_interface *oi; | |
508e53e2 | 1038 | u_int16_t type = 0; |
049207c3 | 1039 | u_int32_t adv_router = 0; |
508e53e2 | 1040 | u_int32_t id = 0; |
718e3744 | 1041 | |
508e53e2 | 1042 | OSPF6_CMD_CHECK_RUNNING (); |
718e3744 | 1043 | |
14b16482 DW |
1044 | type = parse_type_spec (idx_lsa, argc, argv); |
1045 | inet_pton (AF_INET, argv[idx_ls_id]->arg, &id); | |
1046 | level = parse_show_level (idx_level, argc, argv); | |
049207c3 | 1047 | adv_router = o->router_id; |
1048 | ||
1049 | switch (OSPF6_LSA_SCOPE (type)) | |
718e3744 | 1050 | { |
6452df09 | 1051 | case OSPF6_SCOPE_AREA: |
1eb8ef25 | 1052 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 1053 | { |
049207c3 | 1054 | vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL); |
1055 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb); | |
1056 | } | |
1057 | break; | |
1058 | ||
6452df09 | 1059 | case OSPF6_SCOPE_LINKLOCAL: |
1eb8ef25 | 1060 | for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa)) |
049207c3 | 1061 | { |
1eb8ef25 | 1062 | for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi)) |
049207c3 | 1063 | { |
049207c3 | 1064 | vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL, |
1065 | oi->interface->name, oa->name, VNL, VNL); | |
1066 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb); | |
1067 | } | |
1068 | } | |
1069 | break; | |
1070 | ||
6452df09 | 1071 | case OSPF6_SCOPE_AS: |
049207c3 | 1072 | vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL); |
1073 | ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb); | |
1074 | break; | |
1075 | ||
1076 | default: | |
1077 | assert (0); | |
1078 | break; | |
718e3744 | 1079 | } |
508e53e2 | 1080 | |
049207c3 | 1081 | vty_out (vty, "%s", VNL); |
508e53e2 | 1082 | return CMD_SUCCESS; |
718e3744 | 1083 | } |
1084 | ||
6452df09 | 1085 | DEFUN (show_ipv6_ospf6_border_routers, |
1086 | show_ipv6_ospf6_border_routers_cmd, | |
14b16482 | 1087 | "show ipv6 ospf6 border-routers [<A.B.C.D|detail>]", |
6452df09 | 1088 | SHOW_STR |
1089 | IP6_STR | |
1090 | OSPF6_STR | |
1091 | "Display routing table for ABR and ASBR\n" | |
16cedbb0 QY |
1092 | "Router ID\n" |
1093 | "Show detailed output\n") | |
6452df09 | 1094 | { |
14b16482 | 1095 | int idx_ipv4 = 4; |
6452df09 | 1096 | u_int32_t adv_router; |
6452df09 | 1097 | struct ospf6_route *ro; |
1098 | struct prefix prefix; | |
1099 | ||
1100 | OSPF6_CMD_CHECK_RUNNING (); | |
1101 | ||
14b16482 | 1102 | if (argc == 5) |
6452df09 | 1103 | { |
14b16482 | 1104 | if (strmatch (argv[idx_ipv4]->text, "detail")) |
6452df09 | 1105 | { |
14b16482 DW |
1106 | for (ro = ospf6_route_head (ospf6->brouter_table); ro; |
1107 | ro = ospf6_route_next (ro)) | |
1108 | ospf6_route_show_detail (vty, ro); | |
6452df09 | 1109 | } |
14b16482 | 1110 | else |
597fa7c1 | 1111 | { |
14b16482 DW |
1112 | inet_pton (AF_INET, argv[idx_ipv4]->arg, &adv_router); |
1113 | ||
1114 | ospf6_linkstate_prefix (adv_router, 0, &prefix); | |
1115 | ro = ospf6_route_lookup (&prefix, ospf6->brouter_table); | |
1116 | if (!ro) | |
1117 | { | |
1118 | vty_out (vty, "No Route found for Router ID: %s%s", argv[4]->arg, VNL); | |
1119 | return CMD_SUCCESS; | |
1120 | } | |
1121 | ||
1122 | ospf6_route_show_detail (vty, ro); | |
597fa7c1 J |
1123 | return CMD_SUCCESS; |
1124 | } | |
6452df09 | 1125 | } |
14b16482 DW |
1126 | else |
1127 | { | |
1128 | ospf6_brouter_show_header (vty); | |
6452df09 | 1129 | |
14b16482 DW |
1130 | for (ro = ospf6_route_head (ospf6->brouter_table); ro; |
1131 | ro = ospf6_route_next (ro)) | |
1132 | ospf6_brouter_show (vty, ro); | |
1133 | } | |
6452df09 | 1134 | |
1135 | return CMD_SUCCESS; | |
1136 | } | |
1137 | ||
6452df09 | 1138 | |
4846ef64 | 1139 | DEFUN (show_ipv6_ospf6_linkstate, |
1140 | show_ipv6_ospf6_linkstate_cmd, | |
093d7a3a | 1141 | "show ipv6 ospf6 linkstate <router A.B.C.D|network A.B.C.D A.B.C.D>", |
4846ef64 | 1142 | SHOW_STR |
1143 | IP6_STR | |
1144 | OSPF6_STR | |
1145 | "Display linkstate routing table\n" | |
093d7a3a DW |
1146 | "Display Router Entry\n" |
1147 | "Specify Router ID as IPv4 address notation\n" | |
1148 | "Display Network Entry\n" | |
1149 | "Specify Router ID as IPv4 address notation\n" | |
3a2d747c | 1150 | "Specify Link state ID as IPv4 address notation\n") |
4846ef64 | 1151 | { |
093d7a3a | 1152 | int idx_ipv4 = 4; |
52dc7ee6 | 1153 | struct listnode *node; |
4846ef64 | 1154 | struct ospf6_area *oa; |
1155 | ||
b52a8a52 DS |
1156 | OSPF6_CMD_CHECK_RUNNING (); |
1157 | ||
1eb8ef25 | 1158 | for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa)) |
4846ef64 | 1159 | { |
4846ef64 | 1160 | vty_out (vty, "%s SPF Result in Area %s%s%s", |
1161 | VNL, oa->name, VNL, VNL); | |
093d7a3a | 1162 | ospf6_linkstate_table_show (vty, idx_ipv4, argc, argv, oa->spf_table); |
4846ef64 | 1163 | } |
1164 | ||
1165 | vty_out (vty, "%s", VNL); | |
1166 | return CMD_SUCCESS; | |
1167 | } | |
1168 | ||
4846ef64 | 1169 | |
4846ef64 | 1170 | |
1171 | DEFUN (show_ipv6_ospf6_linkstate_detail, | |
1172 | show_ipv6_ospf6_linkstate_detail_cmd, | |
1173 | "show ipv6 ospf6 linkstate detail", | |
1174 | SHOW_STR | |
1175 | IP6_STR | |
1176 | OSPF6_STR | |
1177 | "Display linkstate routing table\n" | |
3a2d747c | 1178 | "Display detailed information\n") |
4846ef64 | 1179 | { |
093d7a3a | 1180 | int idx_detail = 4; |
52dc7ee6 | 1181 | struct listnode *node; |
4846ef64 | 1182 | struct ospf6_area *oa; |
1183 | ||
b52a8a52 DS |
1184 | OSPF6_CMD_CHECK_RUNNING (); |
1185 | ||
1eb8ef25 | 1186 | for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa)) |
4846ef64 | 1187 | { |
4846ef64 | 1188 | vty_out (vty, "%s SPF Result in Area %s%s%s", |
1189 | VNL, oa->name, VNL, VNL); | |
093d7a3a | 1190 | ospf6_linkstate_table_show (vty, idx_detail, argc, argv, oa->spf_table); |
4846ef64 | 1191 | } |
1192 | ||
1193 | vty_out (vty, "%s", VNL); | |
1194 | return CMD_SUCCESS; | |
1195 | } | |
6452df09 | 1196 | |
718e3744 | 1197 | /* Install ospf related commands. */ |
1198 | void | |
6ac29a51 | 1199 | ospf6_init (void) |
718e3744 | 1200 | { |
1e05838a | 1201 | ospf6_top_init (); |
1202 | ospf6_area_init (); | |
1203 | ospf6_interface_init (); | |
1204 | ospf6_neighbor_init (); | |
4140ca4d | 1205 | ospf6_zebra_init(master); |
1e05838a | 1206 | |
1207 | ospf6_lsa_init (); | |
1208 | ospf6_spf_init (); | |
1209 | ospf6_intra_init (); | |
1210 | ospf6_asbr_init (); | |
1211 | ospf6_abr_init (); | |
1212 | ||
7f342629 | 1213 | ospf6_bfd_init(); |
508e53e2 | 1214 | install_node (&debug_node, config_write_ospf6_debug); |
1215 | ||
92300491 DW |
1216 | install_element_ospf6_debug_message (); |
1217 | install_element_ospf6_debug_lsa (); | |
1218 | install_element_ospf6_debug_interface (); | |
1219 | install_element_ospf6_debug_neighbor (); | |
1220 | install_element_ospf6_debug_zebra (); | |
1221 | install_element_ospf6_debug_spf (); | |
1222 | install_element_ospf6_debug_route (); | |
1223 | install_element_ospf6_debug_brouter (); | |
1224 | install_element_ospf6_debug_asbr (); | |
1225 | install_element_ospf6_debug_abr (); | |
1226 | install_element_ospf6_debug_flood (); | |
1227 | ||
1228 | install_element_ospf6_clear_interface (); | |
1229 | ||
1230 | install_element (VIEW_NODE, &show_version_ospf6_cmd); | |
92300491 DW |
1231 | |
1232 | install_element (VIEW_NODE, &show_ipv6_ospf6_border_routers_cmd); | |
92300491 DW |
1233 | |
1234 | install_element (VIEW_NODE, &show_ipv6_ospf6_linkstate_cmd); | |
1235 | install_element (VIEW_NODE, &show_ipv6_ospf6_linkstate_detail_cmd); | |
92300491 | 1236 | |
34d5ef45 DL |
1237 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_cmd); |
1238 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_cmd); | |
1239 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_cmd); | |
1240 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_router_cmd); | |
1241 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_cmd); | |
1242 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_router_cmd); | |
1243 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_adv_router_linkstate_id_cmd); | |
1244 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_router_cmd); | |
1245 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_router_cmd); | |
1246 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_adv_router_linkstate_id_cmd); | |
1247 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_self_originated_cmd); | |
1248 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_self_originated_cmd); | |
1249 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_self_originated_cmd); | |
1250 | install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_self_originated_linkstate_id_cmd); | |
92300491 | 1251 | |
92300491 DW |
1252 | /* Make ospf protocol socket. */ |
1253 | ospf6_serv_sock (); | |
ffa2c898 | 1254 | thread_add_read(master, ospf6_receive, NULL, ospf6_sock, NULL); |
92300491 DW |
1255 | } |
1256 | ||
1257 | void | |
1258 | ospf6_clean (void) | |
1259 | { | |
1260 | if (!ospf6) | |
1261 | return; | |
1262 | if (ospf6->route_table) | |
1263 | ospf6_route_remove_all (ospf6->route_table); | |
1264 | if (ospf6->brouter_table) | |
1265 | ospf6_route_remove_all (ospf6->brouter_table); | |
1266 | } |