diff options
Diffstat (limited to 'isisd/isis_circuit.c')
-rw-r--r-- | isisd/isis_circuit.c | 1838 |
1 files changed, 982 insertions, 856 deletions
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index 192b107f..671ebbff 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -67,24 +67,27 @@ isis_circuit_new () int i; circuit = XMALLOC (MTYPE_ISIS_CIRCUIT, sizeof (struct isis_circuit)); - if (circuit) { - memset (circuit, 0, sizeof (struct isis_circuit)); - /* set default metrics for circuit */ - for (i = 0; i < 2; i++) { - circuit->metrics[i].metric_default = DEFAULT_CIRCUIT_METRICS; - circuit->metrics[i].metric_expense = METRICS_UNSUPPORTED; - circuit->metrics[i].metric_error = METRICS_UNSUPPORTED; - circuit->metrics[i].metric_delay = METRICS_UNSUPPORTED; - } - } else { - zlog_err ("Can't malloc isis circuit"); - return NULL; - } - + if (circuit) + { + memset (circuit, 0, sizeof (struct isis_circuit)); + /* set default metrics for circuit */ + for (i = 0; i < 2; i++) + { + circuit->metrics[i].metric_default = DEFAULT_CIRCUIT_METRICS; + circuit->metrics[i].metric_expense = METRICS_UNSUPPORTED; + circuit->metrics[i].metric_error = METRICS_UNSUPPORTED; + circuit->metrics[i].metric_delay = METRICS_UNSUPPORTED; + } + } + else + { + zlog_err ("Can't malloc isis circuit"); + return NULL; + } + return circuit; } - void isis_circuit_configure (struct isis_circuit *circuit, struct isis_area *area) { @@ -98,18 +101,20 @@ isis_circuit_configure (struct isis_circuit *circuit, struct isis_area *area) /* * Default values */ - for (i = 0; i < 2; i++) { - circuit->hello_interval[i] = HELLO_INTERVAL; - circuit->hello_multiplier[i] = HELLO_MULTIPLIER; - circuit->csnp_interval[i] = CSNP_INTERVAL; - circuit->psnp_interval[i] = PSNP_INTERVAL; - circuit->u.bc.priority[i] = DEFAULT_PRIORITY; - } - if (circuit->circ_type == CIRCUIT_T_BROADCAST) { - circuit->u.bc.adjdb[0] = list_new (); - circuit->u.bc.adjdb[1] = list_new (); - circuit->u.bc.pad_hellos = 1; - } + for (i = 0; i < 2; i++) + { + circuit->hello_interval[i] = HELLO_INTERVAL; + circuit->hello_multiplier[i] = HELLO_MULTIPLIER; + circuit->csnp_interval[i] = CSNP_INTERVAL; + circuit->psnp_interval[i] = PSNP_INTERVAL; + circuit->u.bc.priority[i] = DEFAULT_PRIORITY; + } + if (circuit->circ_type == CIRCUIT_T_BROADCAST) + { + circuit->u.bc.adjdb[0] = list_new (); + circuit->u.bc.adjdb[1] = list_new (); + circuit->u.bc.pad_hellos = 1; + } circuit->lsp_interval = LSP_INTERVAL; /* @@ -123,11 +128,11 @@ isis_circuit_configure (struct isis_circuit *circuit, struct isis_area *area) return; } -void +void isis_circuit_deconfigure (struct isis_circuit *circuit, - struct isis_area *area) + struct isis_area *area) { - + /* Remove circuit from area */ listnode_delete (area->circuit_list, circuit); /* Free the index of SRM and SSN flags */ @@ -141,16 +146,17 @@ circuit_lookup_by_ifp (struct interface *ifp, struct list *list) { struct isis_circuit *circuit = NULL; struct listnode *node; - + if (!list) return NULL; - - for (node = listhead (list); node; nextnode (node)) { - circuit = getdata (node); - if (circuit->interface == ifp) - return circuit; - } - + + for (node = listhead (list); node; nextnode (node)) + { + circuit = getdata (node); + if (circuit->interface == ifp) + return circuit; + } + return NULL; } @@ -164,13 +170,14 @@ circuit_scan_by_ifp (struct interface *ifp) if (!isis->area_list) return NULL; - for (node = listhead (isis->area_list); node; nextnode (node)) { - area = getdata (node); - circuit = circuit_lookup_by_ifp (ifp, area->circuit_list); - if (circuit) - return circuit; - } - + for (node = listhead (isis->area_list); node; nextnode (node)) + { + area = getdata (node); + circuit = circuit_lookup_by_ifp (ifp, area->circuit_list); + if (circuit) + return circuit; + } + return circuit_lookup_by_ifp (ifp, isis->init_circ_list); } @@ -181,17 +188,18 @@ isis_circuit_del (struct isis_circuit *circuit) if (!circuit) return; - if (circuit->circ_type == CIRCUIT_T_BROADCAST) { - /* destroy adjacency databases */ - list_delete (circuit->u.bc.adjdb[0]); - list_delete (circuit->u.bc.adjdb[1]); - /* destroy neighbour lists */ - if (circuit->u.bc.lan_neighs[0]) - list_delete (circuit->u.bc.lan_neighs[0]); - if (circuit->u.bc.lan_neighs[1]) - list_delete (circuit->u.bc.lan_neighs[1]); - /* destroy addresses */ - } + if (circuit->circ_type == CIRCUIT_T_BROADCAST) + { + /* destroy adjacency databases */ + list_delete (circuit->u.bc.adjdb[0]); + list_delete (circuit->u.bc.adjdb[1]); + /* destroy neighbour lists */ + if (circuit->u.bc.lan_neighs[0]) + list_delete (circuit->u.bc.lan_neighs[0]); + if (circuit->u.bc.lan_neighs[1]) + list_delete (circuit->u.bc.lan_neighs[1]); + /* destroy addresses */ + } if (circuit->ip_addrs) list_delete (circuit->ip_addrs); #ifdef HAVE_IPV6 @@ -200,7 +208,7 @@ isis_circuit_del (struct isis_circuit *circuit) if (circuit->ipv6_non_link) list_delete (circuit->ipv6_non_link); #endif /* HAVE_IPV6 */ - + /* and lastly the circuit itself */ XFREE (MTYPE_ISIS_CIRCUIT, circuit); @@ -208,63 +216,70 @@ isis_circuit_del (struct isis_circuit *circuit) } void -isis_circuit_add_addr (struct isis_circuit *circuit, - struct connected *conn) +isis_circuit_add_addr (struct isis_circuit *circuit, struct connected *conn) { struct prefix_ipv4 *ipv4; - u_char buf [BUFSIZ]; + u_char buf[BUFSIZ]; #ifdef HAVE_IPV6 struct prefix_ipv6 *ipv6; #endif /* HAVE_IPV6 */ - if (!circuit->ip_addrs) { - circuit->ip_addrs = list_new (); - } + if (!circuit->ip_addrs) + { + circuit->ip_addrs = list_new (); + } #ifdef HAVE_IPV6 - if (!circuit->ipv6_link) { - circuit->ipv6_link = list_new (); - } - if (!circuit->ipv6_non_link) { - circuit->ipv6_non_link = list_new (); - } + if (!circuit->ipv6_link) + { + circuit->ipv6_link = list_new (); + } + if (!circuit->ipv6_non_link) + { + circuit->ipv6_non_link = list_new (); + } #endif /* HAVE_IPV6 */ memset (&buf, 0, BUFSIZ); - if (conn->address->family == AF_INET) { - ipv4 = prefix_ipv4_new (); - ipv4->prefixlen = conn->address->prefixlen; - ipv4->prefix = conn->address->u.prefix4; - listnode_add (circuit->ip_addrs, ipv4); - prefix2str (conn->address, buf, BUFSIZ); + if (conn->address->family == AF_INET) + { + ipv4 = prefix_ipv4_new (); + ipv4->prefixlen = conn->address->prefixlen; + ipv4->prefix = conn->address->u.prefix4; + listnode_add (circuit->ip_addrs, ipv4); + prefix2str (conn->address, buf, BUFSIZ); #ifdef EXTREME_DEBUG - zlog_info ("Added IP address %s to circuit %d", buf, - circuit->circuit_id); -#endif /* EXTREME_DEBUG */ - } + zlog_info ("Added IP address %s to circuit %d", buf, + circuit->circuit_id); +#endif /* EXTREME_DEBUG */ + } #ifdef HAVE_IPV6 - if (conn->address->family == AF_INET6) { - ipv6 = prefix_ipv6_new (); - ipv6->prefixlen = conn->address->prefixlen; - ipv6->prefix = conn->address->u.prefix6; - if (IN6_IS_ADDR_LINKLOCAL(&ipv6->prefix)) { - listnode_add (circuit->ipv6_link, ipv6); - } else { - listnode_add (circuit->ipv6_non_link, ipv6); - } - prefix2str (conn->address, buf, BUFSIZ); + if (conn->address->family == AF_INET6) + { + ipv6 = prefix_ipv6_new (); + ipv6->prefixlen = conn->address->prefixlen; + ipv6->prefix = conn->address->u.prefix6; + if (IN6_IS_ADDR_LINKLOCAL (&ipv6->prefix)) + { + listnode_add (circuit->ipv6_link, ipv6); + } + else + { + listnode_add (circuit->ipv6_non_link, ipv6); + } + prefix2str (conn->address, buf, BUFSIZ); #ifdef EXTREME_DEBUG - zlog_info ("Added IPv6 address %s to circuit %d", buf, - circuit->circuit_id); -#endif /* EXTREME_DEBUG */ - } + zlog_info ("Added IPv6 address %s to circuit %d", buf, + circuit->circuit_id); +#endif /* EXTREME_DEBUG */ + } #endif /* HAVE_IPV6 */ - + return; } void isis_circuit_del_addr (struct isis_circuit *circuit, - struct connected *connected) + struct connected *connected) { } @@ -277,60 +292,71 @@ isis_circuit_if_add (struct isis_circuit *circuit, struct interface *ifp) circuit->interface = ifp; ifp->info = circuit; - - circuit->circuit_id = ifp->ifindex % 255; /* FIXME: Why not ? */ + + circuit->circuit_id = ifp->ifindex % 255; /* FIXME: Why not ? */ /* isis_circuit_update_addrs (circuit, ifp); */ - if (if_is_broadcast (ifp)) { - circuit->circ_type = CIRCUIT_T_BROADCAST; - /* - * Get the Hardware Address - */ + if (if_is_broadcast (ifp)) + { + circuit->circ_type = CIRCUIT_T_BROADCAST; + /* + * Get the Hardware Address + */ #ifdef HAVE_SOCKADDR_DL - if (circuit->interface->sdl.sdl_alen != ETHER_ADDR_LEN) - zlog_warn ("unsupported link layer"); - else - memcpy (circuit->u.bc.snpa, LLADDR(&circuit->interface->sdl), ETH_ALEN); + if (circuit->interface->sdl.sdl_alen != ETHER_ADDR_LEN) + zlog_warn ("unsupported link layer"); + else + memcpy (circuit->u.bc.snpa, LLADDR (&circuit->interface->sdl), + ETH_ALEN); #else - if (circuit->interface->hw_addr_len != ETH_ALEN) { - zlog_warn ("unsupported link layer"); - } else { - memcpy (circuit->u.bc.snpa, circuit->interface->hw_addr, ETH_ALEN); - } + if (circuit->interface->hw_addr_len != ETH_ALEN) + { + zlog_warn ("unsupported link layer"); + } + else + { + memcpy (circuit->u.bc.snpa, circuit->interface->hw_addr, ETH_ALEN); + } #ifdef EXTREME_DEGUG - zlog_info ("isis_circuit_if_add: if_id %d, isomtu %d snpa %s", - circuit->interface->ifindex, ISO_MTU (circuit), - snpa_print (circuit->u.bc.snpa)); + zlog_info ("isis_circuit_if_add: if_id %d, isomtu %d snpa %s", + circuit->interface->ifindex, ISO_MTU (circuit), + snpa_print (circuit->u.bc.snpa)); #endif /* EXTREME_DEBUG */ -#endif /* HAVE_SOCKADDR_DL */ - } else if (if_is_pointopoint (ifp)) { - circuit->circ_type = CIRCUIT_T_P2P; - } else { - zlog_warn ("isis_circuit_if_add: unsupported media"); - } - - for (node = ifp->connected ? listhead (ifp->connected) : NULL; node; - nextnode (node)) { - conn = getdata (node); - isis_circuit_add_addr (circuit, conn); - } +#endif /* HAVE_SOCKADDR_DL */ + } + else if (if_is_pointopoint (ifp)) + { + circuit->circ_type = CIRCUIT_T_P2P; + } + else + { + zlog_warn ("isis_circuit_if_add: unsupported media"); + } + + for (node = ifp->connected ? listhead (ifp->connected) : NULL; node; + nextnode (node)) + { + conn = getdata (node); + isis_circuit_add_addr (circuit, conn); + } return; } void -isis_circuit_update_params (struct isis_circuit *circuit, - struct interface *ifp) +isis_circuit_update_params (struct isis_circuit *circuit, + struct interface *ifp) { assert (circuit); - - if (circuit->circuit_id != ifp->ifindex) { - zlog_warn ("changing circuit_id %d->%d", circuit->circuit_id, - ifp->ifindex); - circuit->circuit_id = ifp->ifindex % 255; - } + + if (circuit->circuit_id != ifp->ifindex) + { + zlog_warn ("changing circuit_id %d->%d", circuit->circuit_id, + ifp->ifindex); + circuit->circuit_id = ifp->ifindex % 255; + } /* FIXME: Why is this needed? shouldn't we compare to the area's mtu */ /* Ofer, this was here in case someone changes the mtu (e.g. with ifconfig) @@ -341,125 +367,141 @@ isis_circuit_update_params (struct isis_circuit *circuit, ifp->mtu); circuit->mtu = ifp->mtu; } - */ + */ /* * Get the Hardware Address */ #ifdef HAVE_SOCKADDR_DL if (circuit->interface->sdl.sdl_alen != ETHER_ADDR_LEN) - zlog_warn ("unsupported link layer"); - else - memcpy (circuit->u.bc.snpa, LLADDR(&circuit->interface->sdl), ETH_ALEN); -#else - if (circuit->interface->hw_addr_len != ETH_ALEN) { zlog_warn ("unsupported link layer"); - } else { - if (memcmp(circuit->u.bc.snpa, circuit->interface->hw_addr, ETH_ALEN)) { - zlog_warn ("changing circuit snpa %s->%s", - snpa_print (circuit->u.bc.snpa), - snpa_print (circuit->interface->hw_addr)); + else + memcpy (circuit->u.bc.snpa, LLADDR (&circuit->interface->sdl), ETH_ALEN); +#else + if (circuit->interface->hw_addr_len != ETH_ALEN) + { + zlog_warn ("unsupported link layer"); } - } -#endif - + else + { + if (memcmp (circuit->u.bc.snpa, circuit->interface->hw_addr, ETH_ALEN)) + { + zlog_warn ("changing circuit snpa %s->%s", + snpa_print (circuit->u.bc.snpa), + snpa_print (circuit->interface->hw_addr)); + } + } +#endif + if (if_is_broadcast (ifp)) + { + circuit->circ_type = CIRCUIT_T_BROADCAST; + } + else if (if_is_pointopoint (ifp)) + { + circuit->circ_type = CIRCUIT_T_P2P; + } + else + { + zlog_warn ("isis_circuit_update_params: unsupported media"); + } - if (if_is_broadcast (ifp)) { - circuit->circ_type = CIRCUIT_T_BROADCAST; - } else if (if_is_pointopoint (ifp)) { - circuit->circ_type = CIRCUIT_T_P2P; - } else { - zlog_warn ("isis_circuit_update_params: unsupported media"); - } - return; } void -isis_circuit_if_del (struct isis_circuit *circuit) +isis_circuit_if_del (struct isis_circuit *circuit) { circuit->interface->info = NULL; circuit->interface = NULL; - + return; } void isis_circuit_up (struct isis_circuit *circuit) { - - if (circuit->circ_type == CIRCUIT_T_BROADCAST) { - if (circuit->area->min_bcast_mtu == 0 || - ISO_MTU(circuit) < circuit->area->min_bcast_mtu ) - circuit->area->min_bcast_mtu = ISO_MTU(circuit); - /* - * ISO 10589 - 8.4.1 Enabling of broadcast circuits - */ - - /* initilizing the hello sending threads - * for a broadcast IF - */ - - /* 8.4.1 a) commence sending of IIH PDUs */ - - if (circuit->circuit_is_type & IS_LEVEL_1) { - thread_add_event (master, send_lan_l1_hello, circuit, 0); - circuit->u.bc.lan_neighs[0] = list_new (); - } - - if (circuit->circuit_is_type & IS_LEVEL_2) { - thread_add_event (master, send_lan_l2_hello, circuit, 0); - circuit->u.bc.lan_neighs[1] = list_new (); - } - - /* 8.4.1 b) FIXME: solicit ES - 8.4.6 */ - /* 8.4.1 c) FIXME: listen for ESH PDUs */ - - /* 8.4.1 d) */ - /* dr election will commence in... */ - if (circuit->circuit_is_type & IS_LEVEL_1) - THREAD_TIMER_ON(master, circuit->u.bc.t_run_dr[0], isis_run_dr_l1, - circuit, - 2 * circuit->hello_multiplier[0] * circuit->hello_interval[0]); - if (circuit->circuit_is_type & IS_LEVEL_2) - THREAD_TIMER_ON(master, circuit->u.bc.t_run_dr[1], isis_run_dr_l2, - circuit, - 2 * circuit->hello_multiplier[1] * circuit->hello_interval[1]); - } else { - /* initializing the hello send threads - * for a ptp IF - */ - thread_add_event (master, send_p2p_hello, circuit, 0); - } + if (circuit->circ_type == CIRCUIT_T_BROADCAST) + { + if (circuit->area->min_bcast_mtu == 0 || + ISO_MTU (circuit) < circuit->area->min_bcast_mtu) + circuit->area->min_bcast_mtu = ISO_MTU (circuit); + /* + * ISO 10589 - 8.4.1 Enabling of broadcast circuits + */ + + /* initilizing the hello sending threads + * for a broadcast IF + */ + + /* 8.4.1 a) commence sending of IIH PDUs */ + + if (circuit->circuit_is_type & IS_LEVEL_1) + { + thread_add_event (master, send_lan_l1_hello, circuit, 0); + circuit->u.bc.lan_neighs[0] = list_new (); + } + + if (circuit->circuit_is_type & IS_LEVEL_2) + { + thread_add_event (master, send_lan_l2_hello, circuit, 0); + circuit->u.bc.lan_neighs[1] = list_new (); + } + + /* 8.4.1 b) FIXME: solicit ES - 8.4.6 */ + /* 8.4.1 c) FIXME: listen for ESH PDUs */ + + /* 8.4.1 d) */ + /* dr election will commence in... */ + if (circuit->circuit_is_type & IS_LEVEL_1) + THREAD_TIMER_ON (master, circuit->u.bc.t_run_dr[0], isis_run_dr_l1, + circuit, + 2 * circuit->hello_multiplier[0] * + circuit->hello_interval[0]); + if (circuit->circuit_is_type & IS_LEVEL_2) + THREAD_TIMER_ON (master, circuit->u.bc.t_run_dr[1], isis_run_dr_l2, + circuit, + 2 * circuit->hello_multiplier[1] * + circuit->hello_interval[1]); + } + else + { + /* initializing the hello send threads + * for a ptp IF + */ + thread_add_event (master, send_p2p_hello, circuit, 0); + + } /* initializing PSNP timers */ - if (circuit->circuit_is_type & IS_LEVEL_1) { - THREAD_TIMER_ON(master, circuit->t_send_psnp[0], send_l1_psnp, circuit, - isis_jitter(circuit->psnp_interval[0], PSNP_JITTER)); - } - - if (circuit->circuit_is_type & IS_LEVEL_2) { - THREAD_TIMER_ON(master, circuit->t_send_psnp[1], send_l2_psnp, circuit, - isis_jitter(circuit->psnp_interval[1], PSNP_JITTER)); - } - + if (circuit->circuit_is_type & IS_LEVEL_1) + { + THREAD_TIMER_ON (master, circuit->t_send_psnp[0], send_l1_psnp, circuit, + isis_jitter (circuit->psnp_interval[0], PSNP_JITTER)); + } + + if (circuit->circuit_is_type & IS_LEVEL_2) + { + THREAD_TIMER_ON (master, circuit->t_send_psnp[1], send_l2_psnp, circuit, + isis_jitter (circuit->psnp_interval[1], PSNP_JITTER)); + } + /* initialize the circuit streams */ if (circuit->rcv_stream == NULL) - circuit->rcv_stream = stream_new (ISO_MTU(circuit)); + circuit->rcv_stream = stream_new (ISO_MTU (circuit)); if (circuit->snd_stream == NULL) - circuit->snd_stream = stream_new (ISO_MTU(circuit)); + circuit->snd_stream = stream_new (ISO_MTU (circuit)); /* unified init for circuits */ isis_sock_init (circuit); #ifdef GNU_LINUX - THREAD_READ_ON(master, circuit->t_read, isis_receive, circuit, - circuit->fd); + THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit, + circuit->fd); #else - THREAD_TIMER_ON(master, circuit->t_read, isis_receive, circuit, - circuit->fd); + THREAD_TIMER_ON (master, circuit->t_read, isis_receive, circuit, + circuit->fd); #endif return; } @@ -467,15 +509,18 @@ isis_circuit_up (struct isis_circuit *circuit) void isis_circuit_down (struct isis_circuit *circuit) { - /* Cancel all active threads -- FIXME: wrong place*/ + /* Cancel all active threads -- FIXME: wrong place */ /* HT: Read thread if GNU_LINUX, TIMER thread otherwise. */ - THREAD_OFF(circuit->t_read); - if (circuit->circ_type == CIRCUIT_T_BROADCAST) { - THREAD_TIMER_OFF(circuit->u.bc.t_send_lan_hello[0]); - THREAD_TIMER_OFF(circuit->u.bc.t_send_lan_hello[1]); - } else if (circuit->circ_type == CIRCUIT_T_P2P) { - THREAD_TIMER_OFF(circuit->u.p2p.t_send_p2p_hello); - } + THREAD_OFF (circuit->t_read); + if (circuit->circ_type == CIRCUIT_T_BROADCAST) + { + THREAD_TIMER_OFF (circuit->u.bc.t_send_lan_hello[0]); + THREAD_TIMER_OFF (circuit->u.bc.t_send_lan_hello[1]); + } + else if (circuit->circ_type == CIRCUIT_T_P2P) + { + THREAD_TIMER_OFF (circuit->u.p2p.t_send_p2p_hello); + } /* close the socket */ close (circuit->fd); @@ -486,22 +531,24 @@ void circuit_update_nlpids (struct isis_circuit *circuit) { circuit->nlpids.count = 0; - - if (circuit->ip_router) { - circuit->nlpids.nlpids[0] = NLPID_IP; - circuit->nlpids.count++; - } + + if (circuit->ip_router) + { + circuit->nlpids.nlpids[0] = NLPID_IP; + circuit->nlpids.count++; + } #ifdef HAVE_IPV6 - if (circuit->ipv6_router) { - circuit->nlpids.nlpids[circuit->nlpids.count] = NLPID_IPV6; - circuit->nlpids.count++; - } + if (circuit->ipv6_router) + { + circuit->nlpids.nlpids[circuit->nlpids.count] = NLPID_IPV6; + circuit->nlpids.count++; + } #endif /* HAVE_IPV6 */ return; } int -isis_interface_config_write (struct vty *vty) +isis_interface_config_write (struct vty *vty) { int write = 0; @@ -519,146 +566,194 @@ isis_interface_config_write (struct vty *vty) char buf[BUFSIZ]; - LIST_LOOP (iflist, ifp, node) { /* IF name */ - vty_out (vty, "interface %s%s", ifp->name,VTY_NEWLINE); + vty_out (vty, "interface %s%s", ifp->name, VTY_NEWLINE); write++; /* IF desc */ - if (ifp->desc) { - vty_out (vty, " description %s%s", ifp->desc,VTY_NEWLINE); - write++; - } + if (ifp->desc) + { + vty_out (vty, " description %s%s", ifp->desc, VTY_NEWLINE); + write++; + } /* ISIS Circuit */ LIST_LOOP (isis->area_list, area, node2) { c = circuit_lookup_by_ifp (ifp, area->circuit_list); - if (c) { - if (c->ip_router) { - vty_out (vty, " ip router isis %s%s",area->area_tag,VTY_NEWLINE); - write++; - } + if (c) + { + if (c->ip_router) + { + vty_out (vty, " ip router isis %s%s", area->area_tag, + VTY_NEWLINE); + write++; + } #ifdef HAVE_IPV6 - if (c->ipv6_router) { - vty_out (vty, " ipv6 router isis %s%s",area->area_tag,VTY_NEWLINE); - write++; - } + if (c->ipv6_router) + { + vty_out (vty, " ipv6 router isis %s%s", area->area_tag, + VTY_NEWLINE); + write++; + } #endif /* HAVE_IPV6 */ - /* ISIS - circuit type */ - if (c->circuit_is_type == IS_LEVEL_1) { - vty_out (vty, " isis circuit-type level-1%s", VTY_NEWLINE); - write ++; - } else {if (c->circuit_is_type == IS_LEVEL_2) { - vty_out (vty, " isis circuit-type level-2-only%s", VTY_NEWLINE); - write ++; - }} - - /* ISIS - CSNP interval - FIXME: compare to cisco*/ - if (c->csnp_interval[0] == c->csnp_interval[1]) { - if (c->csnp_interval[0] != CSNP_INTERVAL) { - vty_out (vty, " isis csnp-interval %d%s", c->csnp_interval[0], - VTY_NEWLINE); - write ++; - } - } else { - for (i=0;i<2;i++) { - if (c->csnp_interval[1] != CSNP_INTERVAL) { - vty_out (vty, " isis csnp-interval %d level-%d%s", - c->csnp_interval[1],i+1, VTY_NEWLINE); - write ++; - } - } - } - - /* ISIS - Hello padding - Defaults to true so only display if false */ - if (c->circ_type == CIRCUIT_T_BROADCAST && !c->u.bc.pad_hellos) { - vty_out (vty, " no isis hello padding%s", VTY_NEWLINE); - write ++; - } - - /* ISIS - Hello interval - FIXME: compare to cisco */ - if (c->hello_interval[0] == c->hello_interval[1]) { - if (c->hello_interval[0] != HELLO_INTERVAL) { - vty_out (vty, " isis hello-interval %d%s", c->hello_interval[0], - VTY_NEWLINE); - write ++; - } - } else { - for (i=0;i<2;i++) { - if (c->hello_interval[i] != HELLO_INTERVAL) { - if (c->hello_interval[i] == HELLO_MINIMAL) { - vty_out (vty, " isis hello-interval minimal level-%d%s", i+1, - VTY_NEWLINE); - } else { - vty_out (vty, " isis hello-interval %d level-%d%s", - c->hello_interval[i],i+1, VTY_NEWLINE); - } - write ++; - } - } - } - - /* ISIS - Hello Multiplier */ - if (c->hello_multiplier[0] == c->hello_multiplier[1]) { - if (c->hello_multiplier[0] != HELLO_MULTIPLIER ) { - vty_out (vty, " isis hello-multiplier %d%s", - c->hello_multiplier[0], VTY_NEWLINE); - write ++; - } - } else { - for (i=0;i<2;i++) { - if (c->hello_multiplier[i] != HELLO_MULTIPLIER) { - vty_out (vty, " isis hello-multiplier %d level-%d%s", - c->hello_multiplier[i],i+1, VTY_NEWLINE); - write ++; - } - } - } - /* ISIS - Priority */ - if (c->circ_type == CIRCUIT_T_BROADCAST) { - if (c->u.bc.priority[0] == c->u.bc.priority[1]) { - if (c->u.bc.priority[0] != DEFAULT_PRIORITY) { - vty_out (vty, " isis priority %d%s", c->u.bc.priority[0], - VTY_NEWLINE); - write ++; - } - } else { - for (i=0;i<2;i++) { - if (c->u.bc.priority[i] != DEFAULT_PRIORITY) { - vty_out (vty, " isis priority %d level-%d%s", - c->u.bc.priority[i],i+1, VTY_NEWLINE); - write ++; - } - } - } - } - /* ISIS - Metric */ - if (c->metrics[0].metric_default == c->metrics[1].metric_default) { - if (c->metrics[0].metric_default != DEFAULT_CIRCUIT_METRICS) { - vty_out (vty, " isis metric %d%s", c->metrics[0].metric_default, - VTY_NEWLINE); - write ++; - } - } else { - for (i=0;i<2;i++) { - if (c->metrics[i].metric_default != DEFAULT_CIRCUIT_METRICS) { - vty_out (vty, " isis metric %d level-%d%s", - c->metrics[i].metric_default,i+1, VTY_NEWLINE); - write ++; - } - } - } - - } + /* ISIS - circuit type */ + if (c->circuit_is_type == IS_LEVEL_1) + { + vty_out (vty, " isis circuit-type level-1%s", VTY_NEWLINE); + write++; + } + else + { + if (c->circuit_is_type == IS_LEVEL_2) + { + vty_out (vty, " isis circuit-type level-2-only%s", + VTY_NEWLINE); + write++; + } + } + + /* ISIS - CSNP interval - FIXME: compare to cisco */ + if (c->csnp_interval[0] == c->csnp_interval[1]) + { + if (c->csnp_interval[0] != CSNP_INTERVAL) + { + vty_out (vty, " isis csnp-interval %d%s", + c->csnp_interval[0], VTY_NEWLINE); + write++; + } + } + else + { + for (i = 0; i < 2; i++) + { + if (c->csnp_interval[1] != CSNP_INTERVAL) + { + vty_out (vty, " isis csnp-interval %d level-%d%s", + c->csnp_interval[1], i + 1, VTY_NEWLINE); + write++; + } + } + } + + /* ISIS - Hello padding - Defaults to true so only display if false */ + if (c->circ_type == CIRCUIT_T_BROADCAST && !c->u.bc.pad_hellos) + { + vty_out (vty, " no isis hello padding%s", VTY_NEWLINE); + write++; + } + + /* ISIS - Hello interval - FIXME: compare to cisco */ + if (c->hello_interval[0] == c->hello_interval[1]) + { + if (c->hello_interval[0] != HELLO_INTERVAL) + { + vty_out (vty, " isis hello-interval %d%s", + c->hello_interval[0], VTY_NEWLINE); + write++; + } + } + else + { + for (i = 0; i < 2; i++) + { + if (c->hello_interval[i] != HELLO_INTERVAL) + { + if (c->hello_interval[i] == HELLO_MINIMAL) + { + vty_out (vty, + " isis hello-interval minimal level-%d%s", + i + 1, VTY_NEWLINE); + } + else + { + vty_out (vty, " isis hello-interval %d level-%d%s", + c->hello_interval[i], i + 1, VTY_NEWLINE); + } + write++; + } + } + } + + /* ISIS - Hello Multiplier */ + if (c->hello_multiplier[0] == c->hello_multiplier[1]) + { + if (c->hello_multiplier[0] != HELLO_MULTIPLIER) + { + vty_out (vty, " isis hello-multiplier %d%s", + c->hello_multiplier[0], VTY_NEWLINE); + write++; + } + } + else + { + for (i = 0; i < 2; i++) + { + if (c->hello_multiplier[i] != HELLO_MULTIPLIER) + { + vty_out (vty, " isis hello-multiplier %d level-%d%s", + c->hello_multiplier[i], i + 1, VTY_NEWLINE); + write++; + } + } + } + /* ISIS - Priority */ + if (c->circ_type == CIRCUIT_T_BROADCAST) + { + if (c->u.bc.priority[0] == c->u.bc.priority[1]) + { + if (c->u.bc.priority[0] != DEFAULT_PRIORITY) + { + vty_out (vty, " isis priority %d%s", + c->u.bc.priority[0], VTY_NEWLINE); + write++; + } + } + else + { + for (i = 0; i < 2; i++) + { + if (c->u.bc.priority[i] != DEFAULT_PRIORITY) + { + vty_out (vty, " isis priority %d level-%d%s", + c->u.bc.priority[i], i + 1, VTY_NEWLINE); + write++; + } + } + } + } + /* ISIS - Metric */ + if (c->metrics[0].metric_default == c->metrics[1].metric_default) + { + if (c->metrics[0].metric_default != DEFAULT_CIRCUIT_METRICS) + { + vty_out (vty, " isis metric %d%s", + c->metrics[0].metric_default, VTY_NEWLINE); + write++; + } + } + else + { + for (i = 0; i < 2; i++) + { + if (c->metrics[i].metric_default != DEFAULT_CIRCUIT_METRICS) + { + vty_out (vty, " isis metric %d level-%d%s", + c->metrics[i].metric_default, i + 1, + VTY_NEWLINE); + write++; + } + } + } + + } } - vty_out (vty, "!%s",VTY_NEWLINE); + vty_out (vty, "!%s", VTY_NEWLINE); } - + return write; } - DEFUN (ip_router_isis, ip_router_isis_cmd, @@ -666,47 +761,51 @@ DEFUN (ip_router_isis, "Interface Internet Protocol config commands\n" "IP router interface commands\n" "IS-IS Routing for IP\n" - "Routing process tag\n" - ) + "Routing process tag\n") { struct isis_circuit *c; struct interface *ifp; struct isis_area *area; - - ifp = (struct interface *)vty->index; + + ifp = (struct interface *) vty->index; assert (ifp); - + area = isis_area_lookup (argv[0]); /* Prevent more than one circuit per interface */ if (area) c = circuit_lookup_by_ifp (ifp, area->circuit_list); - else c = NULL; - if (c && (ifp->info != NULL)) { + else + c = NULL; + if (c && (ifp->info != NULL)) + { #ifdef HAVE_IPV6 - if (c->ipv6_router == 0) { + if (c->ipv6_router == 0) + { #endif /* HAVE_IPV6 */ - vty_out (vty, "ISIS circuit is already defined%s", VTY_NEWLINE); - return CMD_WARNING; + vty_out (vty, "ISIS circuit is already defined%s", VTY_NEWLINE); + return CMD_WARNING; #ifdef HAVE_IPV6 - } + } #endif /* HAVE_IPV6 */ - } - + } + /* this is here for ciscopability */ - if (!area) { - vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE); - return CMD_WARNING; - } + if (!area) + { + vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE); + return CMD_WARNING; + } - if (!c) { - c = circuit_lookup_by_ifp (ifp, isis->init_circ_list); - c = isis_csm_state_change (ISIS_ENABLE, c, area); - c->interface = ifp; /* this is automatic */ - ifp->info = c; /* hardly related to the FSM */ - } + if (!c) + { + c = circuit_lookup_by_ifp (ifp, isis->init_circ_list); + c = isis_csm_state_change (ISIS_ENABLE, c, area); + c->interface = ifp; /* this is automatic */ + ifp->info = c; /* hardly related to the FSM */ + } - if(!c) + if (!c) return CMD_WARNING; c->ip_router = 1; @@ -714,7 +813,7 @@ DEFUN (ip_router_isis, circuit_update_nlpids (c); vty->node = INTERFACE_NODE; - + return CMD_SUCCESS; } @@ -725,36 +824,37 @@ DEFUN (no_ip_router_isis, "Interface Internet Protocol config commands\n" "IP router interface commands\n" "IS-IS Routing for IP\n" - "Routing process tag\n" - ) + "Routing process tag\n") { struct isis_circuit *circuit = NULL; struct interface *ifp; struct isis_area *area; struct listnode *node; - ifp = (struct interface *)vty->index; + ifp = (struct interface *) vty->index; assert (ifp); - + area = isis_area_lookup (argv[0]); - if (!area) { - vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE); - return CMD_WARNING; - } + if (!area) + { + vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE); + return CMD_WARNING; + } LIST_LOOP (area->circuit_list, circuit, node) if (circuit->interface == ifp) break; - if (!circuit) { - vty_out (vty, "Can't find ISIS interface %s", VTY_NEWLINE); - return CMD_WARNING; - } + if (!circuit) + { + vty_out (vty, "Can't find ISIS interface %s", VTY_NEWLINE); + return CMD_WARNING; + } circuit->ip_router = 0; area->ip_circuits--; #ifdef HAVE_IPV6 if (circuit->ipv6_router == 0) #endif isis_csm_state_change (ISIS_DISABLE, circuit, area); - + return CMD_SUCCESS; } @@ -765,38 +865,40 @@ DEFUN (isis_circuit_type, "Configure circuit type for interface\n" "Level-1 only adjacencies are formed\n" "Level-1-2 adjacencies are formed\n" - "Level-2 only adjacencies are formed\n" - ) + "Level-2 only adjacencies are formed\n") { struct isis_circuit *circuit; struct interface *ifp; int circuit_t; int is_type; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; /* UGLY - will remove l8r */ - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); circuit_t = string2circuit_t (argv[0]); - if (!circuit_t) { - vty_out (vty, "Unknown circuit-type %s", VTY_NEWLINE); - return CMD_SUCCESS; - } - + if (!circuit_t) + { + vty_out (vty, "Unknown circuit-type %s", VTY_NEWLINE); + return CMD_SUCCESS; + } + is_type = circuit->area->is_type; if (is_type == IS_LEVEL_1_AND_2 || is_type == circuit_t) - isis_event_circuit_type_change (circuit, circuit_t); - else { - vty_out (vty, "invalid circuit level for area %s.%s", - circuit->area->area_tag, VTY_NEWLINE); - } - + isis_event_circuit_type_change (circuit, circuit_t); + else + { + vty_out (vty, "invalid circuit level for area %s.%s", + circuit->area->area_tag, VTY_NEWLINE); + } + return CMD_SUCCESS; } @@ -808,25 +910,25 @@ DEFUN (no_isis_circuit_type, "Configure circuit type for interface\n" "Level-1 only adjacencies are formed\n" "Level-1-2 adjacencies are formed\n" - "Level-2 only adjacencies are formed\n" - ) + "Level-2 only adjacencies are formed\n") { struct isis_circuit *circuit; struct interface *ifp; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } + + assert (circuit); - assert(circuit); - /* * Set the circuits level to its default value which is that of the area */ isis_event_circuit_type_change (circuit, circuit->area->is_type); - + return CMD_SUCCESS; } @@ -840,22 +942,24 @@ DEFUN (isis_passwd, struct isis_circuit *circuit; struct interface *ifp; int len; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } - + if (circuit == NULL) + { + return CMD_WARNING; + } + len = strlen (argv[0]); - if (len > 254) { - vty_out (vty, "Too long circuit password (>254)%s", VTY_NEWLINE); - return CMD_WARNING; - } + if (len > 254) + { + vty_out (vty, "Too long circuit password (>254)%s", VTY_NEWLINE); + return CMD_WARNING; + } circuit->passwd.len = len; circuit->passwd.type = ISIS_PASSWD_TYPE_CLEARTXT; strncpy (circuit->passwd.passwd, argv[0], 255); - + return CMD_SUCCESS; } @@ -868,15 +972,16 @@ DEFUN (no_isis_passwd, { struct isis_circuit *circuit; struct interface *ifp; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } - + if (circuit == NULL) + { + return CMD_WARNING; + } + memset (&circuit->passwd, 0, sizeof (struct isis_passwd)); - + return CMD_SUCCESS; } @@ -886,25 +991,25 @@ DEFUN (isis_priority, "isis priority <0-127>", "IS-IS commands\n" "Set priority for Designated Router election\n" - "Priority value\n" - ) + "Priority value\n") { struct isis_circuit *circuit; struct interface *ifp; int prio; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); prio = atoi (argv[0]); circuit->u.bc.priority[0] = prio; circuit->u.bc.priority[1] = prio; - + return CMD_SUCCESS; } @@ -913,22 +1018,22 @@ DEFUN (no_isis_priority, "no isis priority", NO_STR "IS-IS commands\n" - "Set priority for Designated Router election\n" - ) + "Set priority for Designated Router election\n") { struct isis_circuit *circuit; struct interface *ifp; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); circuit->u.bc.priority[0] = DEFAULT_PRIORITY; circuit->u.bc.priority[1] = DEFAULT_PRIORITY; - + return CMD_SUCCESS; } @@ -938,33 +1043,32 @@ ALIAS (no_isis_priority, NO_STR "IS-IS commands\n" "Set priority for Designated Router election\n" - "Priority value\n" - ) + "Priority value\n") DEFUN (isis_priority_l1, isis_priority_l1_cmd, - "isis priority <0-127> level-1", + "isis priority <0-127> level-1", "IS-IS commands\n" "Set priority for Designated Router election\n" "Priority value\n" - "Specify priority for level-1 routing\n" - ) + "Specify priority for level-1 routing\n") { struct isis_circuit *circuit; struct interface *ifp; int prio; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); prio = atoi (argv[0]); circuit->u.bc.priority[0] = prio; - + return CMD_SUCCESS; } @@ -974,21 +1078,21 @@ DEFUN (no_isis_priority_l1, NO_STR "IS-IS commands\n" "Set priority for Designated Router election\n" - "Specify priority for level-1 routing\n" - ) + "Specify priority for level-1 routing\n") { struct isis_circuit *circuit; struct interface *ifp; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + circuit->u.bc.priority[0] = DEFAULT_PRIORITY; - + return CMD_SUCCESS; } @@ -999,33 +1103,32 @@ ALIAS (no_isis_priority_l1, "IS-IS commands\n" "Set priority for Designated Router election\n" "Priority value\n" - "Specify priority for level-1 routing\n" - ) + "Specify priority for level-1 routing\n") DEFUN (isis_priority_l2, isis_priority_l2_cmd, - "isis priority <0-127> level-2", + "isis priority <0-127> level-2", "IS-IS commands\n" "Set priority for Designated Router election\n" "Priority value\n" - "Specify priority for level-2 routing\n" - ) + "Specify priority for level-2 routing\n") { struct isis_circuit *circuit; struct interface *ifp; int prio; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); prio = atoi (argv[0]); circuit->u.bc.priority[1] = prio; - + return CMD_SUCCESS; } @@ -1035,21 +1138,21 @@ DEFUN (no_isis_priority_l2, NO_STR "IS-IS commands\n" "Set priority for Designated Router election\n" - "Specify priority for level-2 routing\n" - ) + "Specify priority for level-2 routing\n") { struct isis_circuit *circuit; struct interface *ifp; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + circuit->u.bc.priority[1] = DEFAULT_PRIORITY; - + return CMD_SUCCESS; } @@ -1060,28 +1163,26 @@ ALIAS (no_isis_priority_l2, "IS-IS commands\n" "Set priority for Designated Router election\n" "Priority value\n" - "Specify priority for level-2 routing\n" - ) + "Specify priority for level-2 routing\n") /* Metric command */ - -DEFUN (isis_metric, + DEFUN (isis_metric, isis_metric_cmd, "isis metric <0-63>", "IS-IS commands\n" "Set default metric for circuit\n" - "Default metric value\n" - ) + "Default metric value\n") { struct isis_circuit *circuit; struct interface *ifp; int met; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); met = atoi (argv[0]); @@ -1097,17 +1198,17 @@ DEFUN (no_isis_metric, "no isis metric", NO_STR "IS-IS commands\n" - "Set default metric for circuit\n" - ) + "Set default metric for circuit\n") { struct isis_circuit *circuit; struct interface *ifp; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); circuit->metrics[0].metric_default = DEFAULT_CIRCUIT_METRICS; @@ -1122,40 +1223,40 @@ ALIAS (no_isis_metric, NO_STR "IS-IS commands\n" "Set default metric for circuit\n" - "Default metric value\n" - ) -/* end of metrics */ + "Default metric value\n") - -DEFUN (isis_hello_interval, +/* end of metrics */ + DEFUN (isis_hello_interval, isis_hello_interval_cmd, "isis hello-interval (<1-65535>|minimal)", "IS-IS commands\n" "Set Hello interval\n" "Hello interval value\n" - "Holdtime 1 seconds, interval depends on multiplier\n" - ) + "Holdtime 1 seconds, interval depends on multiplier\n") { struct isis_circuit *circuit; struct interface *ifp; int interval; char c; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } - assert (circuit); + if (circuit == NULL) + { + return CMD_WARNING; + } + assert (circuit); c = *argv[0]; - if (isdigit((int)c)) { - interval = atoi (argv[0]); - } else - interval = HELLO_MINIMAL; /* FIXME: should be calculated */ - - circuit->hello_interval[0] = (u_int16_t)interval; - circuit->hello_interval[1] = (u_int16_t)interval; - + if (isdigit ((int) c)) + { + interval = atoi (argv[0]); + } + else + interval = HELLO_MINIMAL; /* FIXME: should be calculated */ + + circuit->hello_interval[0] = (u_int16_t) interval; + circuit->hello_interval[1] = (u_int16_t) interval; + return CMD_SUCCESS; } @@ -1164,23 +1265,23 @@ DEFUN (no_isis_hello_interval, "no isis hello-interval", NO_STR "IS-IS commands\n" - "Set Hello interval\n" - ) + "Set Hello interval\n") { struct isis_circuit *circuit; struct interface *ifp; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - - circuit->hello_interval[0] = HELLO_INTERVAL; /* Default is 1 sec. */ + + circuit->hello_interval[0] = HELLO_INTERVAL; /* Default is 1 sec. */ circuit->hello_interval[1] = HELLO_INTERVAL; - + return CMD_SUCCESS; } @@ -1191,8 +1292,7 @@ ALIAS (no_isis_hello_interval, "IS-IS commands\n" "Set Hello interval\n" "Hello interval value\n" - "Holdtime 1 second, interval depends on multiplier\n" - ) + "Holdtime 1 second, interval depends on multiplier\n") DEFUN (isis_hello_interval_l1, isis_hello_interval_l1_cmd, @@ -1201,29 +1301,31 @@ DEFUN (isis_hello_interval_l1, "Set Hello interval\n" "Hello interval value\n" "Holdtime 1 second, interval depends on multiplier\n" - "Specify hello-interval for level-1 IIHs\n" - ) + "Specify hello-interval for level-1 IIHs\n") { struct isis_circuit *circuit; struct interface *ifp; long interval; char c; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + c = *argv[0]; - if (isdigit((int)c)) { - interval = atoi (argv[0]); - } else + if (isdigit ((int) c)) + { + interval = atoi (argv[0]); + } + else interval = HELLO_MINIMAL; - circuit->hello_interval[0] = (u_int16_t)interval; - + circuit->hello_interval[0] = (u_int16_t) interval; + return CMD_SUCCESS; } @@ -1233,22 +1335,22 @@ DEFUN (no_isis_hello_interval_l1, NO_STR "IS-IS commands\n" "Set Hello interval\n" - "Specify hello-interval for level-1 IIHs\n" - ) + "Specify hello-interval for level-1 IIHs\n") { struct isis_circuit *circuit; struct interface *ifp; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - - circuit->hello_interval[0] = HELLO_INTERVAL; /* Default is 1 sec. */ - + + circuit->hello_interval[0] = HELLO_INTERVAL; /* Default is 1 sec. */ + return CMD_SUCCESS; } @@ -1260,8 +1362,7 @@ ALIAS (no_isis_hello_interval_l1, "Set Hello interval\n" "Hello interval value\n" "Holdtime 1 second, interval depends on multiplier\n" - "Specify hello-interval for level-1 IIHs\n" - ) + "Specify hello-interval for level-1 IIHs\n") DEFUN (isis_hello_interval_l2, isis_hello_interval_l2_cmd, @@ -1270,29 +1371,31 @@ DEFUN (isis_hello_interval_l2, "Set Hello interval\n" "Hello interval value\n" "Holdtime 1 second, interval depends on multiplier\n" - "Specify hello-interval for level-2 IIHs\n" - ) + "Specify hello-interval for level-2 IIHs\n") { struct isis_circuit *circuit; struct interface *ifp; long interval; char c; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + c = *argv[0]; - if (isdigit((int)c)) { - interval = atoi (argv[0]); - } else + if (isdigit ((int) c)) + { + interval = atoi (argv[0]); + } + else interval = HELLO_MINIMAL; - circuit->hello_interval[1] = (u_int16_t)interval; - + circuit->hello_interval[1] = (u_int16_t) interval; + return CMD_SUCCESS; } @@ -1302,22 +1405,22 @@ DEFUN (no_isis_hello_interval_l2, NO_STR "IS-IS commands\n" "Set Hello interval\n" - "Specify hello-interval for level-2 IIHs\n" - ) + "Specify hello-interval for level-2 IIHs\n") { struct isis_circuit *circuit; struct interface *ifp; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - - circuit->hello_interval[1] = HELLO_INTERVAL; /* Default is 1 sec. */ - + + circuit->hello_interval[1] = HELLO_INTERVAL; /* Default is 1 sec. */ + return CMD_SUCCESS; } @@ -1329,34 +1432,32 @@ ALIAS (no_isis_hello_interval_l2, "Set Hello interval\n" "Hello interval value\n" "Holdtime 1 second, interval depends on multiplier\n" - "Specify hello-interval for level-2 IIHs\n" - ) - + "Specify hello-interval for level-2 IIHs\n") DEFUN (isis_hello_multiplier, isis_hello_multiplier_cmd, "isis hello-multiplier <3-1000>", "IS-IS commands\n" "Set multiplier for Hello holding time\n" - "Hello multiplier value\n" - ) + "Hello multiplier value\n") { struct isis_circuit *circuit; struct interface *ifp; int mult; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); mult = atoi (argv[0]); - circuit->hello_multiplier[0] = (u_int16_t)mult; - circuit->hello_multiplier[1] = (u_int16_t)mult; - + circuit->hello_multiplier[0] = (u_int16_t) mult; + circuit->hello_multiplier[1] = (u_int16_t) mult; + return CMD_SUCCESS; } @@ -1365,17 +1466,17 @@ DEFUN (no_isis_hello_multiplier, "no isis hello-multiplier", NO_STR "IS-IS commands\n" - "Set multiplier for Hello holding time\n" - ) + "Set multiplier for Hello holding time\n") { struct isis_circuit *circuit; struct interface *ifp; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); circuit->hello_multiplier[0] = HELLO_MULTIPLIER; @@ -1390,8 +1491,7 @@ ALIAS (no_isis_hello_multiplier, NO_STR "IS-IS commands\n" "Set multiplier for Hello holding time\n" - "Hello multiplier value\n" - ) + "Hello multiplier value\n") DEFUN (isis_hello_multiplier_l1, isis_hello_multiplier_l1_cmd, @@ -1399,24 +1499,24 @@ DEFUN (isis_hello_multiplier_l1, "IS-IS commands\n" "Set multiplier for Hello holding time\n" "Hello multiplier value\n" - "Specify hello multiplier for level-1 IIHs\n" - ) + "Specify hello multiplier for level-1 IIHs\n") { struct isis_circuit *circuit; struct interface *ifp; int mult; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); mult = atoi (argv[0]); - circuit->hello_multiplier[0] = (u_int16_t)mult; - + circuit->hello_multiplier[0] = (u_int16_t) mult; + return CMD_SUCCESS; } @@ -1426,17 +1526,17 @@ DEFUN (no_isis_hello_multiplier_l1, NO_STR "IS-IS commands\n" "Set multiplier for Hello holding time\n" - "Specify hello multiplier for level-1 IIHs\n" - ) + "Specify hello multiplier for level-1 IIHs\n") { struct isis_circuit *circuit; struct interface *ifp; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); circuit->hello_multiplier[0] = HELLO_MULTIPLIER; @@ -1451,8 +1551,7 @@ ALIAS (no_isis_hello_multiplier_l1, "IS-IS commands\n" "Set multiplier for Hello holding time\n" "Hello multiplier value\n" - "Specify hello multiplier for level-1 IIHs\n" - ) + "Specify hello multiplier for level-1 IIHs\n") DEFUN (isis_hello_multiplier_l2, isis_hello_multiplier_l2_cmd, @@ -1460,24 +1559,24 @@ DEFUN (isis_hello_multiplier_l2, "IS-IS commands\n" "Set multiplier for Hello holding time\n" "Hello multiplier value\n" - "Specify hello multiplier for level-2 IIHs\n" - ) + "Specify hello multiplier for level-2 IIHs\n") { struct isis_circuit *circuit; struct interface *ifp; int mult; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); mult = atoi (argv[0]); - circuit->hello_multiplier[1] = (u_int16_t)mult; - + circuit->hello_multiplier[1] = (u_int16_t) mult; + return CMD_SUCCESS; } @@ -1487,17 +1586,17 @@ DEFUN (no_isis_hello_multiplier_l2, NO_STR "IS-IS commands\n" "Set multiplier for Hello holding time\n" - "Specify hello multiplier for level-2 IIHs\n" - ) + "Specify hello multiplier for level-2 IIHs\n") { struct isis_circuit *circuit; struct interface *ifp; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); circuit->hello_multiplier[1] = HELLO_MULTIPLIER; @@ -1512,8 +1611,7 @@ ALIAS (no_isis_hello_multiplier_l2, "IS-IS commands\n" "Set multiplier for Hello holding time\n" "Hello multiplier value\n" - "Specify hello multiplier for level-2 IIHs\n" - ) + "Specify hello multiplier for level-2 IIHs\n") DEFUN (isis_hello, isis_hello_cmd, @@ -1525,16 +1623,17 @@ DEFUN (isis_hello, { struct interface *ifp; struct isis_circuit *circuit; - - ifp = vty->index; + + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + circuit->u.bc.pad_hellos = 1; - + return CMD_SUCCESS; } @@ -1543,9 +1642,7 @@ DEFUN (ip_address, ip_address_cmd, "ip address A.B.C.D/A", "Interface Internet Protocol config commands\n" - "Set the IP address of an interface\n" - "IP address (e.g. 10.0.0.1/8\n") - + "Set the IP address of an interface\n" "IP address (e.g. 10.0.0.1/8\n") { struct interface *ifp; struct isis_circuit *circuit; @@ -1553,11 +1650,12 @@ DEFUN (ip_address, struct listnode *node; int ret, found = 1; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); #ifdef HAVE_IPV6 @@ -1565,32 +1663,36 @@ DEFUN (ip_address, #endif /* HAVE_IPV6 */ ipv4 = prefix_ipv4_new (); - + ret = str2prefix_ipv4 (argv[0], ipv4); - if (ret <= 0) { - zlog_warn ("ip_address_cmd(): malformed address"); - vty_out (vty, "%% Malformed address %s", VTY_NEWLINE); - return CMD_WARNING; - } - - if (!circuit->ip_addrs) - circuit->ip_addrs = list_new (); - else { - for (node = listhead (circuit->ip_addrs); node; nextnode (node)) { - ip = getdata (node); - if (prefix_same ((struct prefix *)ip, (struct prefix *)ipv4)) - found = 1; + if (ret <= 0) + { + zlog_warn ("ip_address_cmd(): malformed address"); + vty_out (vty, "%% Malformed address %s", VTY_NEWLINE); + return CMD_WARNING; } - if (found) { - prefix_ipv4_free (ipv4); - return CMD_SUCCESS; + + if (!circuit->ip_addrs) + circuit->ip_addrs = list_new (); + else + { + for (node = listhead (circuit->ip_addrs); node; nextnode (node)) + { + ip = getdata (node); + if (prefix_same ((struct prefix *) ip, (struct prefix *) ipv4)) + found = 1; + } + if (found) + { + prefix_ipv4_free (ipv4); + return CMD_SUCCESS; + } } - } - + listnode_add (circuit->ip_addrs, ipv4); -#ifdef EXTREME_DEBUG - zlog_info ("added IP address %s to circuit %d", argv[0], +#ifdef EXTREME_DEBUG + zlog_info ("added IP address %s to circuit %d", argv[0], circuit->interface->ifindex); #endif /* EXTREME_DEBUG */ return CMD_SUCCESS; @@ -1610,36 +1712,43 @@ DEFUN (no_ip_address, struct listnode *node; int ret; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; /* UGLY - will remove l8r */ - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - if (!circuit->ip_addrs || circuit->ip_addrs->count == 0) { - vty_out (vty, "Invalid address %s", VTY_NEWLINE); - return CMD_WARNING; - } + if (!circuit->ip_addrs || circuit->ip_addrs->count == 0) + { + vty_out (vty, "Invalid address %s", VTY_NEWLINE); + return CMD_WARNING; + } ret = str2prefix_ipv4 (argv[0], &ipv4); - if (ret <= 0) { - vty_out (vty, "%% Malformed address %s", VTY_NEWLINE); - return CMD_WARNING; - } - - for (node = listhead (circuit->ip_addrs); node; nextnode (node)) { - ip = getdata (node); - if (prefix_same ((struct prefix *)ip, (struct prefix *)&ipv4)) - break; - } - - if (ip) { - listnode_delete (circuit->ip_addrs, ip); - } else { - vty_out (vty, "Invalid address %s", VTY_NEWLINE); - } - + if (ret <= 0) + { + vty_out (vty, "%% Malformed address %s", VTY_NEWLINE); + return CMD_WARNING; + } + + for (node = listhead (circuit->ip_addrs); node; nextnode (node)) + { + ip = getdata (node); + if (prefix_same ((struct prefix *) ip, (struct prefix *) &ipv4)) + break; + } + + if (ip) + { + listnode_delete (circuit->ip_addrs, ip); + } + else + { + vty_out (vty, "Invalid address %s", VTY_NEWLINE); + } + return CMD_SUCCESS; } #endif @@ -1656,15 +1765,16 @@ DEFUN (no_isis_hello, struct isis_circuit *circuit; struct interface *ifp; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + circuit->u.bc.pad_hellos = 0; - + return CMD_SUCCESS; } @@ -1679,18 +1789,19 @@ DEFUN (csnp_interval, struct interface *ifp; unsigned long interval; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + interval = atol (argv[0]); - circuit->csnp_interval[0] = (u_int16_t)interval; - circuit->csnp_interval[1] = (u_int16_t)interval; - + circuit->csnp_interval[0] = (u_int16_t) interval; + circuit->csnp_interval[1] = (u_int16_t) interval; + return CMD_SUCCESS; } @@ -1699,22 +1810,22 @@ DEFUN (no_csnp_interval, "no isis csnp-interval", NO_STR "IS-IS commands\n" - "Set CSNP interval in seconds\n" - ) + "Set CSNP interval in seconds\n") { struct isis_circuit *circuit; struct interface *ifp; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + circuit->csnp_interval[0] = CSNP_INTERVAL; circuit->csnp_interval[1] = CSNP_INTERVAL; - + return CMD_SUCCESS; } @@ -1726,7 +1837,6 @@ ALIAS (no_csnp_interval, "Set CSNP interval in seconds\n" "CSNP interval value\n") - DEFUN (csnp_interval_l1, csnp_interval_l1_cmd, "isis csnp-interval <0-65535> level-1", @@ -1739,17 +1849,18 @@ DEFUN (csnp_interval_l1, struct interface *ifp; unsigned long interval; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + interval = atol (argv[0]); - - circuit->csnp_interval[0] = (u_int16_t)interval; - + + circuit->csnp_interval[0] = (u_int16_t) interval; + return CMD_SUCCESS; } @@ -1764,15 +1875,16 @@ DEFUN (no_csnp_interval_l1, struct isis_circuit *circuit; struct interface *ifp; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + circuit->csnp_interval[0] = CSNP_INTERVAL; - + return CMD_SUCCESS; } @@ -1785,7 +1897,6 @@ ALIAS (no_csnp_interval_l1, "CSNP interval value\n" "Specify interval for level-1 CSNPs\n") - DEFUN (csnp_interval_l2, csnp_interval_l2_cmd, "isis csnp-interval <0-65535> level-2", @@ -1798,17 +1909,18 @@ DEFUN (csnp_interval_l2, struct interface *ifp; unsigned long interval; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + interval = atol (argv[0]); - - circuit->csnp_interval[1] = (u_int16_t)interval; - + + circuit->csnp_interval[1] = (u_int16_t) interval; + return CMD_SUCCESS; } @@ -1823,15 +1935,16 @@ DEFUN (no_csnp_interval_l2, struct isis_circuit *circuit; struct interface *ifp; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - + circuit->csnp_interval[1] = CSNP_INTERVAL; - + return CMD_SUCCESS; } @@ -1844,7 +1957,6 @@ ALIAS (no_csnp_interval_l2, "CSNP interval value\n" "Specify interval for level-2 CSNPs\n") - #ifdef HAVE_IPV6 DEFUN (ipv6_router_isis, ipv6_router_isis_cmd, @@ -1857,38 +1969,44 @@ DEFUN (ipv6_router_isis, struct isis_circuit *c; struct interface *ifp; struct isis_area *area; - - ifp = (struct interface *)vty->index; + + ifp = (struct interface *) vty->index; assert (ifp); - + area = isis_area_lookup (argv[0]); /* Prevent more than one circuit per interface */ if (area) c = circuit_lookup_by_ifp (ifp, area->circuit_list); - else c = NULL; - - if (c && (ifp->info != NULL)) { - if (c->ipv6_router == 1) { - vty_out (vty, "ISIS circuit is already defined for IPv6%s", VTY_NEWLINE); - return CMD_WARNING; + else + c = NULL; + + if (c && (ifp->info != NULL)) + { + if (c->ipv6_router == 1) + { + vty_out (vty, "ISIS circuit is already defined for IPv6%s", + VTY_NEWLINE); + return CMD_WARNING; + } } - } /* this is here for ciscopability */ - if (!area) { - vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE); - return CMD_WARNING; - } + if (!area) + { + vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE); + return CMD_WARNING; + } - if (!c) { - c = circuit_lookup_by_ifp (ifp, isis->init_circ_list); - c = isis_csm_state_change (ISIS_ENABLE, c, area); - c->interface = ifp; - ifp->info = c; - } + if (!c) + { + c = circuit_lookup_by_ifp (ifp, isis->init_circ_list); + c = isis_csm_state_change (ISIS_ENABLE, c, area); + c->interface = ifp; + ifp->info = c; + } - if(!c) + if (!c) return CMD_WARNING; c->ipv6_router = 1; @@ -1912,20 +2030,21 @@ DEFUN (no_ipv6_router_isis, struct isis_circuit *c; struct interface *ifp; struct isis_area *area; - - ifp = (struct interface *)vty->index; + + ifp = (struct interface *) vty->index; /* UGLY - will remove l8r if (circuit == NULL) { - return CMD_WARNING; - } */ + return CMD_WARNING; + } */ assert (ifp); - + area = isis_area_lookup (argv[0]); - if (!area) { - vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE); - return CMD_WARNING; - } - + if (!area) + { + vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE); + return CMD_WARNING; + } + c = circuit_lookup_by_ifp (ifp, area->circuit_list); if (!c) return CMD_WARNING; @@ -1938,7 +2057,7 @@ DEFUN (no_ipv6_router_isis, return CMD_SUCCESS; } -#if 0 /* Guess we don't really need these */ +#if 0 /* Guess we don't really need these */ DEFUN (ipv6_address, ipv6_address_cmd, @@ -1953,46 +2072,52 @@ DEFUN (ipv6_address, struct listnode *node; int ret, found = 1; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; /* UGLY - will remove l8r */ - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); #ifdef EXTREME_DEBUG zlog_info ("ipv6_address_cmd circuit %d", circuit->idx); #endif /* EXTREME_DEBUG */ - - if (circuit == NULL) { - zlog_warn ("ipv6_address_cmd(): no circuit"); - return CMD_WARNING; - } - - + + if (circuit == NULL) + { + zlog_warn ("ipv6_address_cmd(): no circuit"); + return CMD_WARNING; + } + + ipv6 = prefix_ipv6_new (); - + ret = str2prefix_ipv6 (argv[0], ipv6); - if (ret <= 0) { - vty_out (vty, "%% Malformed address %s", VTY_NEWLINE); - return CMD_WARNING; - } - - if (!circuit->ipv6_addrs) - circuit->ipv6_addrs = list_new (); - else { - for (node = listhead (circuit->ipv6_addrs); node; nextnode (node)) { - ip6 = getdata (node); - if (prefix_same ((struct prefix *)ip6, (struct prefix *)ipv6)) - found = 1; + if (ret <= 0) + { + vty_out (vty, "%% Malformed address %s", VTY_NEWLINE); + return CMD_WARNING; } - if (found) { - prefix_ipv6_free (ipv6); - return CMD_SUCCESS; + + if (!circuit->ipv6_addrs) + circuit->ipv6_addrs = list_new (); + else + { + for (node = listhead (circuit->ipv6_addrs); node; nextnode (node)) + { + ip6 = getdata (node); + if (prefix_same ((struct prefix *) ip6, (struct prefix *) ipv6)) + found = 1; + } + if (found) + { + prefix_ipv6_free (ipv6); + return CMD_SUCCESS; + } } - } - + listnode_add (circuit->ipv6_addrs, ipv6); #ifdef EXTREME_DEBUG zlog_info ("added IPv6 address %s to circuit %d", argv[0], circuit->idx); @@ -2003,7 +2128,7 @@ DEFUN (ipv6_address, DEFUN (no_ipv6_address, no_ipv6_address_cmd, - "no ipv6 address X:X::X:X/M", + "no ipv6 address X:X::X:X/M", NO_STR "Interface Internet Protocol config commands\n" "Set the IP address of an interface\n" @@ -2015,50 +2140,54 @@ DEFUN (no_ipv6_address, struct listnode *node; int ret; - ifp = vty->index; + ifp = vty->index; circuit = ifp->info; /* UGLY - will remove l8r */ - if (circuit == NULL) { - return CMD_WARNING; - } + if (circuit == NULL) + { + return CMD_WARNING; + } assert (circuit); - if (!circuit->ipv6_addrs || circuit->ipv6_addrs->count == 0) { - vty_out (vty, "Invalid address %s", VTY_NEWLINE); - return CMD_WARNING; - } + if (!circuit->ipv6_addrs || circuit->ipv6_addrs->count == 0) + { + vty_out (vty, "Invalid address %s", VTY_NEWLINE); + return CMD_WARNING; + } ret = str2prefix_ipv6 (argv[0], &ipv6); - if (ret <= 0) { - vty_out (vty, "%% Malformed address %s", VTY_NEWLINE); - return CMD_WARNING; - } - - for (node = listhead (circuit->ipv6_addrs); node; nextnode (node)) { - ip6 = getdata (node); - if (prefix_same ((struct prefix *)ip6, (struct prefix *)&ipv6)) - break; - } - - if (ip6) { - listnode_delete (circuit->ipv6_addrs, ip6); - } else { - vty_out (vty, "Invalid address %s", VTY_NEWLINE); - } - + if (ret <= 0) + { + vty_out (vty, "%% Malformed address %s", VTY_NEWLINE); + return CMD_WARNING; + } + + for (node = listhead (circuit->ipv6_addrs); node; nextnode (node)) + { + ip6 = getdata (node); + if (prefix_same ((struct prefix *) ip6, (struct prefix *) &ipv6)) + break; + } + + if (ip6) + { + listnode_delete (circuit->ipv6_addrs, ip6); + } + else + { + vty_out (vty, "Invalid address %s", VTY_NEWLINE); + } + return CMD_SUCCESS; } #endif /* 0 */ -#endif /* HAVE_IPV6 */ - +#endif /* HAVE_IPV6 */ -struct cmd_node interface_node = -{ +struct cmd_node interface_node = { INTERFACE_NODE, "%s(config-if)# ", 1, }; - int isis_if_new_hook (struct interface *ifp) { @@ -2077,11 +2206,9 @@ isis_if_delete_hook (struct interface *ifp) return 0; } - void isis_circuit_init () { - /* Initialize Zebra interface data structure */ if_init (); if_add_hook (IF_NEW_HOOK, isis_if_new_hook); @@ -2162,5 +2289,4 @@ isis_circuit_init () install_element (INTERFACE_NODE, &no_ipv6_address_cmd); #endif #endif - } |