mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 18:20:15 +00:00
Some fixes to isisd done by me and Cougar in the spring of 2003. See
changelog for details.
This commit is contained in:
parent
5a514b14c7
commit
2097cd8a7a
@ -1,3 +1,19 @@
|
|||||||
|
2003-12-23 Hasso Tepper <hasso@estpak.ee>
|
||||||
|
Some fixes done by me and Cougar <cougar@random.ee>.
|
||||||
|
* isis_adjacency.c: Two bugfixes by Cougar:
|
||||||
|
After down state neigbour was deleted but not removed from neighbours list.
|
||||||
|
Don't show random expire time during neighbour initialisation.
|
||||||
|
* isis_circuit.c: Don't show interface addresses in config by Cougar.
|
||||||
|
* isis_constants.h, isis_misc.c: Show other well-known NLPID names as well
|
||||||
|
by Cougar.
|
||||||
|
* isisd.c: Two tiny CLI fixes by me.
|
||||||
|
* isis_lsp.c: Bugfix in lsp_print_detail() by Cougar.
|
||||||
|
Show IPv4 external and IPv6 TLV's in "show isis database detail" by me.
|
||||||
|
* isis_misc.c: Net address format fix by Cougar.
|
||||||
|
* isis_spf.c: Dead loop fix in isis_spf_preload_tent() by Cougar
|
||||||
|
* isis_zebra.c: Ignore distance when adding route to zebra for now by me.
|
||||||
|
* isis_tlv.c: Parse external IPv4 TLV's correctly by me.
|
||||||
|
|
||||||
Version 0.0.7 to 0.0.8
|
Version 0.0.7 to 0.0.8
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ isis_delete_adj (struct isis_adjacency *adj, struct list *adjdb)
|
|||||||
if (adj2 == adj)
|
if (adj2 == adj)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
listnode_delete (adjdb, node);
|
listnode_delete (adjdb, adj);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adj->ipv4_addrs)
|
if (adj->ipv4_addrs)
|
||||||
@ -336,7 +336,10 @@ isis_adj_print_vty2 (struct isis_adjacency *adj, struct vty *vty, char detail)
|
|||||||
vty_out (vty, "%-3u", adj->level); /* level */
|
vty_out (vty, "%-3u", adj->level); /* level */
|
||||||
vty_out (vty, "%-13s", adj_state2string (adj->adj_state));
|
vty_out (vty, "%-13s", adj_state2string (adj->adj_state));
|
||||||
now = time (NULL);
|
now = time (NULL);
|
||||||
|
if (adj->last_upd)
|
||||||
vty_out (vty, "%-9lu", adj->last_upd + adj->hold_time - now);
|
vty_out (vty, "%-9lu", adj->last_upd + adj->hold_time - now);
|
||||||
|
else
|
||||||
|
vty_out (vty, "- ");
|
||||||
vty_out (vty, "%-10s", snpa_print (adj->snpa));
|
vty_out (vty, "%-10s", snpa_print (adj->snpa));
|
||||||
vty_out (vty, "%s", VTY_NEWLINE);
|
vty_out (vty, "%s", VTY_NEWLINE);
|
||||||
}
|
}
|
||||||
@ -352,8 +355,12 @@ isis_adj_print_vty2 (struct isis_adjacency *adj, struct vty *vty, char detail)
|
|||||||
vty_out (vty, ", Level: %u", adj->level); /* level */
|
vty_out (vty, ", Level: %u", adj->level); /* level */
|
||||||
vty_out (vty, ", State: %s", adj_state2string (adj->adj_state));
|
vty_out (vty, ", State: %s", adj_state2string (adj->adj_state));
|
||||||
now = time (NULL);
|
now = time (NULL);
|
||||||
|
if (adj->last_upd)
|
||||||
vty_out (vty, ", Expires in %s",
|
vty_out (vty, ", Expires in %s",
|
||||||
time2string (adj->last_upd + adj->hold_time - now));
|
time2string (adj->last_upd + adj->hold_time - now));
|
||||||
|
else
|
||||||
|
vty_out (vty, ", Expires in %s",
|
||||||
|
time2string (adj->hold_time));
|
||||||
vty_out (vty, "%s Adjacency flaps: %u",
|
vty_out (vty, "%s Adjacency flaps: %u",
|
||||||
VTY_NEWLINE,
|
VTY_NEWLINE,
|
||||||
adj->flaps);
|
adj->flaps);
|
||||||
|
@ -553,35 +553,6 @@ isis_interface_config_write (struct vty *vty)
|
|||||||
write++;
|
write++;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_IPV6 */
|
#endif /* HAVE_IPV6 */
|
||||||
/* ipv4 addresses - FIXME: those should be related to interface*/
|
|
||||||
if (c->ip_addrs) {LIST_LOOP (c->ip_addrs,ip, node3)
|
|
||||||
{
|
|
||||||
vty_out (vty, " ip%s address %s/%d%s",
|
|
||||||
ip->family == AF_INET ? "" : "v6",
|
|
||||||
inet_ntop (ip->family, &ip->prefix, buf, BUFSIZ), ip->prefixlen,
|
|
||||||
VTY_NEWLINE);
|
|
||||||
write++;
|
|
||||||
}}
|
|
||||||
|
|
||||||
/* ipv6 addresses - FIXME: those should be related to interface*/
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
if (c->ipv6_link) {LIST_LOOP (c->ipv6_link, ipv6, node3)
|
|
||||||
{
|
|
||||||
vty_out (vty, " ip%s address %s/%d%s",
|
|
||||||
ipv6->family == AF_INET ? "" : "v6",
|
|
||||||
inet_ntop (ipv6->family, &ipv6->prefix, buf, BUFSIZ),
|
|
||||||
ipv6->prefixlen,VTY_NEWLINE);
|
|
||||||
write++;
|
|
||||||
}}
|
|
||||||
if (c->ipv6_non_link) {LIST_LOOP (c->ipv6_non_link, ipv6, node3)
|
|
||||||
{
|
|
||||||
vty_out (vty, " ip%s address %s/%d%s",
|
|
||||||
ipv6->family == AF_INET ? "" : "v6",
|
|
||||||
inet_ntop (ipv6->family, &ipv6->prefix, buf, BUFSIZ),
|
|
||||||
ipv6->prefixlen, VTY_NEWLINE);
|
|
||||||
write++;
|
|
||||||
}}
|
|
||||||
#endif /* HAVE_IPV6 */
|
|
||||||
|
|
||||||
/* ISIS - circuit type */
|
/* ISIS - circuit type */
|
||||||
if (c->circuit_is_type == IS_LEVEL_1) {
|
if (c->circuit_is_type == IS_LEVEL_1) {
|
||||||
@ -690,6 +661,7 @@ isis_interface_config_write (struct vty *vty)
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
vty_out (vty, "!%s",VTY_NEWLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return write;
|
return write;
|
||||||
|
@ -82,6 +82,9 @@
|
|||||||
*/
|
*/
|
||||||
#define NLPID_IP 204
|
#define NLPID_IP 204
|
||||||
#define NLPID_IPV6 142
|
#define NLPID_IPV6 142
|
||||||
|
#define NLPID_SNAP 128
|
||||||
|
#define NLPID_CLNP 129
|
||||||
|
#define NLPID_ESIS 130
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return values for functions
|
* Return values for functions
|
||||||
|
@ -764,7 +764,7 @@ lsp_print_detail (dnode_t *node, struct vty *vty, char dynhost)
|
|||||||
|
|
||||||
if (lsp->tlv_data.ipv4_addrs) {
|
if (lsp->tlv_data.ipv4_addrs) {
|
||||||
LIST_LOOP(lsp->tlv_data.ipv4_addrs, ipv4_addr, lnode) {
|
LIST_LOOP(lsp->tlv_data.ipv4_addrs, ipv4_addr, lnode) {
|
||||||
memcpy (ipv4_address, inet_ntoa (*ipv4_addr), sizeof (ipv4_addr));
|
memcpy (ipv4_address, inet_ntoa (*ipv4_addr), sizeof (ipv4_address));
|
||||||
vty_out (vty, " IP: %s%s",
|
vty_out (vty, " IP: %s%s",
|
||||||
ipv4_address,
|
ipv4_address,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
@ -776,7 +776,19 @@ lsp_print_detail (dnode_t *node, struct vty *vty, char dynhost)
|
|||||||
LIST_LOOP(lsp->tlv_data.ipv4_int_reachs, ipv4_reach, lnode) {
|
LIST_LOOP(lsp->tlv_data.ipv4_int_reachs, ipv4_reach, lnode) {
|
||||||
memcpy (ipv4_reach_prefix, inet_ntoa (ipv4_reach->prefix), sizeof (ipv4_reach_prefix));
|
memcpy (ipv4_reach_prefix, inet_ntoa (ipv4_reach->prefix), sizeof (ipv4_reach_prefix));
|
||||||
memcpy (ipv4_reach_mask, inet_ntoa (ipv4_reach->mask), sizeof (ipv4_reach_mask));
|
memcpy (ipv4_reach_mask, inet_ntoa (ipv4_reach->mask), sizeof (ipv4_reach_mask));
|
||||||
vty_out (vty, " Matric: %d IP %s %s%s",
|
vty_out (vty, " Metric: %d IP %s %s%s",
|
||||||
|
ipv4_reach->metrics.metric_default,
|
||||||
|
ipv4_reach_prefix,
|
||||||
|
ipv4_reach_mask,
|
||||||
|
VTY_NEWLINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* for the external reachable tlv */
|
||||||
|
if (lsp->tlv_data.ipv4_ext_reachs)
|
||||||
|
LIST_LOOP(lsp->tlv_data.ipv4_ext_reachs, ipv4_reach, lnode) {
|
||||||
|
memcpy (ipv4_reach_prefix, inet_ntoa (ipv4_reach->prefix), sizeof (ipv4_reach_prefix));
|
||||||
|
memcpy (ipv4_reach_mask, inet_ntoa (ipv4_reach->mask), sizeof (ipv4_reach_mask));
|
||||||
|
vty_out (vty, " Metric: %d IP-External %s %s%s",
|
||||||
ipv4_reach->metrics.metric_default,
|
ipv4_reach->metrics.metric_default,
|
||||||
ipv4_reach_prefix,
|
ipv4_reach_prefix,
|
||||||
ipv4_reach_mask,
|
ipv4_reach_mask,
|
||||||
@ -794,6 +806,29 @@ lsp_print_detail (dnode_t *node, struct vty *vty, char dynhost)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* IPv6 tlv */
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
if (lsp->tlv_data.ipv6_reachs)
|
||||||
|
LIST_LOOP(lsp->tlv_data.ipv6_reachs, ipv6_reach, lnode) {
|
||||||
|
memset(&in6, 0, sizeof(in6));
|
||||||
|
memcpy (in6.s6_addr, ipv6_reach->prefix, PSIZE(ipv6_reach->prefix_len));
|
||||||
|
inet_ntop (AF_INET6, &in6, buff, BUFSIZ);
|
||||||
|
if ((ipv6_reach->control_info &&
|
||||||
|
CTRL_INFO_DISTRIBUTION) == DISTRIBUTION_INTERNAL)
|
||||||
|
vty_out (vty, " Metric: %d IPv6-Intern %s/%d%s",
|
||||||
|
ntohl (ipv6_reach->metric),
|
||||||
|
buff,
|
||||||
|
ipv6_reach->prefix_len,
|
||||||
|
VTY_NEWLINE);
|
||||||
|
else
|
||||||
|
vty_out (vty, " Metric: %d IPv6-Extern %s/%d%s",
|
||||||
|
ntohl (ipv6_reach->metric),
|
||||||
|
buff,
|
||||||
|
ipv6_reach->prefix_len,
|
||||||
|
VTY_NEWLINE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* FIXME: Other tlvs such as te or external tlv will be added later */
|
/* FIXME: Other tlvs such as te or external tlv will be added later */
|
||||||
#if 0
|
#if 0
|
||||||
vty_out (vty, "%s %s %c%s",
|
vty_out (vty, "%s %s %c%s",
|
||||||
|
@ -63,7 +63,7 @@ char * isonet_print (u_char *from, int len) {
|
|||||||
sprintf ( pos, "%02x", *(from + i));
|
sprintf ( pos, "%02x", *(from + i));
|
||||||
pos += 2;
|
pos += 2;
|
||||||
} else {
|
} else {
|
||||||
if (i == 0) { /* if the area addr is just one byte, eg. 47. */
|
if (i == (len - 1)) { /* No dot at the end of address */
|
||||||
sprintf ( pos, "%02x", *(from + i));
|
sprintf ( pos, "%02x", *(from + i));
|
||||||
pos += 2;
|
pos += 2;
|
||||||
} else {
|
} else {
|
||||||
@ -187,6 +187,15 @@ nlpid2string (struct nlpids *nlpids) {
|
|||||||
case NLPID_IPV6:
|
case NLPID_IPV6:
|
||||||
pos += sprintf (pos, "IPv6");
|
pos += sprintf (pos, "IPv6");
|
||||||
break;
|
break;
|
||||||
|
case NLPID_SNAP:
|
||||||
|
pos += sprintf (pos, "SNAP");
|
||||||
|
break;
|
||||||
|
case NLPID_CLNP:
|
||||||
|
pos += sprintf (pos, "CLNP");
|
||||||
|
break;
|
||||||
|
case NLPID_ESIS:
|
||||||
|
pos += sprintf (pos, "ES-IS");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
pos += sprintf (pos, "unknown");
|
pos += sprintf (pos, "unknown");
|
||||||
break;
|
break;
|
||||||
|
@ -743,8 +743,10 @@ isis_spf_preload_tent (struct isis_spftree *spftree,
|
|||||||
anode = listhead (adj_list);
|
anode = listhead (adj_list);
|
||||||
while (anode) {
|
while (anode) {
|
||||||
adj = getdata (anode);
|
adj = getdata (anode);
|
||||||
if (!speaks (&adj->nlpids, family))
|
if (!speaks (&adj->nlpids, family)) {
|
||||||
|
anode = nextnode (anode);
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
switch (adj->sys_type) {
|
switch (adj->sys_type) {
|
||||||
case ISIS_SYSTYPE_ES:
|
case ISIS_SYSTYPE_ES:
|
||||||
isis_spf_add_local (spftree, VTYPE_ES, adj->sysid, adj,
|
isis_spf_add_local (spftree, VTYPE_ES, adj->sysid, adj,
|
||||||
|
@ -511,16 +511,17 @@ parse_tlvs (char *areatag, u_char *stream, int size, u_int32_t *expected,
|
|||||||
* +---------------------------------------------------------------+
|
* +---------------------------------------------------------------+
|
||||||
* : :
|
* : :
|
||||||
*/
|
*/
|
||||||
*found |= TLVFLAG_TE_IPV4_REACHABILITY;
|
*found |= TLVFLAG_IPV4_EXT_REACHABILITY;
|
||||||
#ifdef EXTREME_TLV_DEBUG
|
#ifdef EXTREME_TLV_DEBUG
|
||||||
zlog_info ("ISIS-TLV (%s): IPv4 external Reachability length %d",
|
zlog_info ("ISIS-TLV (%s): IPv4 external Reachability length %d",
|
||||||
areatag,
|
areatag,
|
||||||
length);
|
length);
|
||||||
#endif /* EXTREME_TLV_DEBUG */
|
#endif /* EXTREME_TLV_DEBUG */
|
||||||
if (*expected & TLVFLAG_TE_IPV4_REACHABILITY) {
|
if (*expected & TLVFLAG_IPV4_EXT_REACHABILITY) {
|
||||||
while (length > value_len) {
|
while (length > value_len) {
|
||||||
ipv4_reach = (struct ipv4_reachability*)pnt;
|
ipv4_reach = (struct ipv4_reachability*)pnt;
|
||||||
if (!tlvs->ipv4_ext_reachs) tlvs->ipv4_ext_reachs = list_new();
|
if (!tlvs->ipv4_ext_reachs)
|
||||||
|
tlvs->ipv4_ext_reachs = list_new();
|
||||||
listnode_add (tlvs->ipv4_ext_reachs, ipv4_reach);
|
listnode_add (tlvs->ipv4_ext_reachs, ipv4_reach);
|
||||||
value_len += 12;
|
value_len += 12;
|
||||||
pnt += 12;
|
pnt += 12;
|
||||||
|
@ -232,7 +232,9 @@ isis_zebra_route_add_ipv4 (struct prefix *prefix,
|
|||||||
|
|
||||||
SET_FLAG (message, ZAPI_MESSAGE_NEXTHOP);
|
SET_FLAG (message, ZAPI_MESSAGE_NEXTHOP);
|
||||||
SET_FLAG (message, ZAPI_MESSAGE_METRIC);
|
SET_FLAG (message, ZAPI_MESSAGE_METRIC);
|
||||||
|
#if 0
|
||||||
SET_FLAG (message, ZAPI_MESSAGE_DISTANCE);
|
SET_FLAG (message, ZAPI_MESSAGE_DISTANCE);
|
||||||
|
#endif
|
||||||
|
|
||||||
stream = zclient->obuf;
|
stream = zclient->obuf;
|
||||||
stream_reset (stream);
|
stream_reset (stream);
|
||||||
@ -265,8 +267,10 @@ isis_zebra_route_add_ipv4 (struct prefix *prefix,
|
|||||||
stream_putl (stream, nexthop->ifindex);
|
stream_putl (stream, nexthop->ifindex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
if (CHECK_FLAG (message, ZAPI_MESSAGE_DISTANCE))
|
if (CHECK_FLAG (message, ZAPI_MESSAGE_DISTANCE))
|
||||||
stream_putc (stream, route_info->depth);
|
stream_putc (stream, route_info->depth);
|
||||||
|
#endif
|
||||||
if (CHECK_FLAG (message, ZAPI_MESSAGE_METRIC))
|
if (CHECK_FLAG (message, ZAPI_MESSAGE_METRIC))
|
||||||
stream_putl (stream, route_info->cost);
|
stream_putl (stream, route_info->cost);
|
||||||
|
|
||||||
|
@ -1419,7 +1419,7 @@ DEFUN (no_dynamic_hostname,
|
|||||||
DEFUN (spf_interval,
|
DEFUN (spf_interval,
|
||||||
spf_interval_cmd,
|
spf_interval_cmd,
|
||||||
"spf-interval <1-120>",
|
"spf-interval <1-120>",
|
||||||
"Minimum interval between SPF calculations"
|
"Minimum interval between SPF calculations\n"
|
||||||
"Minimum interval between consecutive SPFs in seconds\n")
|
"Minimum interval between consecutive SPFs in seconds\n")
|
||||||
{
|
{
|
||||||
struct isis_area *area;
|
struct isis_area *area;
|
||||||
@ -1936,7 +1936,7 @@ isis_config_write (struct vty *vty)
|
|||||||
struct cmd_node isis_node =
|
struct cmd_node isis_node =
|
||||||
{
|
{
|
||||||
ISIS_NODE,
|
ISIS_NODE,
|
||||||
"%s(config_router)# ",
|
"%s(config-router)# ",
|
||||||
1
|
1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user