diff options
Diffstat (limited to 'isisd/isis_circuit.c')
| -rw-r--r-- | isisd/isis_circuit.c | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index 75d4397637..2c443c71f7 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -234,8 +234,8 @@ void isis_circuit_add_addr(struct isis_circuit *circuit, #ifdef EXTREME_DEBUG prefix2str(connected->address, buf, sizeof(buf)); - zlog_debug("Added IP address %s to circuit %d", buf, - circuit->circuit_id); + zlog_debug("Added IP address %s to circuit %s", buf, + circuit->interface->name); #endif /* EXTREME_DEBUG */ } if (connected->address->family == AF_INET6) { @@ -265,8 +265,8 @@ void isis_circuit_add_addr(struct isis_circuit *circuit, #ifdef EXTREME_DEBUG prefix2str(connected->address, buf, sizeof(buf)); - zlog_debug("Added IPv6 address %s to circuit %d", buf, - circuit->circuit_id); + zlog_debug("Added IPv6 address %s to circuit %s", buf, + circuit->interface->name); #endif /* EXTREME_DEBUG */ } return; @@ -300,9 +300,9 @@ void isis_circuit_del_addr(struct isis_circuit *circuit, } else { prefix2str(connected->address, buf, sizeof(buf)); zlog_warn( - "Nonexistant ip address %s removal attempt from \ - circuit %d", - buf, circuit->circuit_id); + "Nonexistent ip address %s removal attempt from \ + circuit %s", + buf, circuit->interface->name); zlog_warn("Current ip addresses on %s:", circuit->interface->name); for (ALL_LIST_ELEMENTS_RO(circuit->ip_addrs, node, @@ -349,9 +349,9 @@ void isis_circuit_del_addr(struct isis_circuit *circuit, if (!found) { prefix2str(connected->address, buf, sizeof(buf)); zlog_warn( - "Nonexitant ip address %s removal attempt from \ - circuit %d", - buf, circuit->circuit_id); + "Nonexistent ip address %s removal attempt from \ + circuit %s", + buf, circuit->interface->name); zlog_warn("Current ip addresses on %s:", circuit->interface->name); for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_link, node, @@ -377,17 +377,15 @@ void isis_circuit_del_addr(struct isis_circuit *circuit, return; } -static uint8_t isis_circuit_id_gen(struct interface *ifp) +static uint8_t isis_circuit_id_gen(struct isis *isis, struct interface *ifp) { /* Circuit ids MUST be unique for any broadcast circuits. Otherwise, * Pseudo-Node LSPs cannot be generated correctly. * - * Currently, allocate one circuit ID for any circuit, limiting the - * total + * Currently, allocate one circuit ID for any circuit, limiting the total * numer of circuits IS-IS can run on to 255. * - * We should revisit this when implementing 3-way adjacencies for p2p, - * since + * We should revisit this when implementing 3-way adjacencies for p2p, since * we then have extended interface IDs available. */ uint8_t id = ifp->ifindex; @@ -405,6 +403,7 @@ static uint8_t isis_circuit_id_gen(struct interface *ifp) return 0; } + _ISIS_SET_FLAG(isis->circuit_ids_used, id); return id; } @@ -413,11 +412,7 @@ void isis_circuit_if_add(struct isis_circuit *circuit, struct interface *ifp) struct listnode *node, *nnode; struct connected *conn; - circuit->circuit_id = isis_circuit_id_gen(ifp); - _ISIS_SET_FLAG(isis->circuit_ids_used, circuit->circuit_id); - isis_circuit_if_bind(circuit, ifp); - /* isis_circuit_update_addrs (circuit, ifp); */ if (if_is_broadcast(ifp)) { if (circuit->circ_type_config == CIRCUIT_T_P2P) @@ -442,8 +437,6 @@ void isis_circuit_if_add(struct isis_circuit *circuit, struct interface *ifp) for (ALL_LIST_ELEMENTS(ifp->connected, node, nnode, conn)) isis_circuit_add_addr(circuit, conn); - - return; } void isis_circuit_if_del(struct isis_circuit *circuit, struct interface *ifp) @@ -460,26 +453,19 @@ void isis_circuit_if_del(struct isis_circuit *circuit, struct interface *ifp) if (circuit->ip_addrs) { assert(listcount(circuit->ip_addrs) == 0); list_delete_and_null(&circuit->ip_addrs); - circuit->ip_addrs = NULL; } if (circuit->ipv6_link) { assert(listcount(circuit->ipv6_link) == 0); list_delete_and_null(&circuit->ipv6_link); - circuit->ipv6_link = NULL; } if (circuit->ipv6_non_link) { assert(listcount(circuit->ipv6_non_link) == 0); list_delete_and_null(&circuit->ipv6_non_link); - circuit->ipv6_non_link = NULL; } circuit->circ_type = CIRCUIT_T_UNKNOWN; - _ISIS_CLEAR_FLAG(isis->circuit_ids_used, circuit->circuit_id); - circuit->circuit_id = 0; - - return; } void isis_circuit_if_bind(struct isis_circuit *circuit, struct interface *ifp) @@ -593,6 +579,12 @@ int isis_circuit_up(struct isis_circuit *circuit) } if (circuit->circ_type == CIRCUIT_T_BROADCAST) { + circuit->circuit_id = isis_circuit_id_gen(isis, circuit->interface); + if (!circuit->circuit_id) { + zlog_err("There are already 255 broadcast circuits active!"); + return ISIS_ERROR; + } + /* * Get the Hardware Address */ @@ -737,6 +729,9 @@ void isis_circuit_down(struct isis_circuit *circuit) THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[1]); circuit->lsp_regenerate_pending[0] = 0; circuit->lsp_regenerate_pending[1] = 0; + + _ISIS_CLEAR_FLAG(isis->circuit_ids_used, circuit->circuit_id); + circuit->circuit_id = 0; } else if (circuit->circ_type == CIRCUIT_T_P2P) { isis_delete_adj(circuit->u.p2p.neighbor); circuit->u.p2p.neighbor = NULL; @@ -1046,6 +1041,11 @@ int isis_interface_config_write(struct vty *vty) write++; } + if (circuit->disable_threeway_adj) { + vty_out(vty, " no isis three-way-handshake\n"); + write++; + } + /* ISIS - Hello interval */ if (circuit->hello_interval[0] == circuit->hello_interval[1]) { |
