void
show_ip_eigrp_prefix_entry (struct vty *vty, struct eigrp_prefix_entry *tn)
{
+ struct list *successors = eigrp_topology_get_successor(tn);
+
vty_out (vty, "%-3c",(tn->state > 0) ? 'A' : 'P');
- vty_out (vty, "%s/%u, ",inet_ntoa (tn->destination_ipv4->prefix),tn->destination_ipv4->prefixlen);
- vty_out (vty, "%u successors, ",eigrp_topology_get_successor(tn)->count);
- vty_out (vty, "FD is %u, serno: %lu %s",tn->fdistance, tn->serno, VTY_NEWLINE);
+ vty_out (vty, "%s/%u, ",
+ inet_ntoa (tn->destination_ipv4->prefix), tn->destination_ipv4->prefixlen);
+ vty_out (vty, "%u successors, ", successors->count);
+ vty_out (vty, "FD is %u, serno: %lu %s", tn->fdistance, tn->serno, VTY_NEWLINE);
+
+ list_delete(successors);
}
void
if (dist->list[DISTRIBUTE_V4_IN])
{
alist = access_list_lookup (AFI_IP, dist->list[DISTRIBUTE_V4_IN]);
- zlog_info("<DEBUG DISTRIBUTE ACL IN FOUND: %s",alist->name);
if (alist)
e->list[EIGRP_FILTER_IN] = alist;
else
/* access list OUT for whole process */
if (dist->list[DISTRIBUTE_V4_OUT])
{
- zlog_info("<DEBUG DISTRIBUTE ACL OUT FOUND: %s",dist->list[DISTRIBUTE_V4_OUT]);
alist = access_list_lookup (AFI_IP, dist->list[DISTRIBUTE_V4_OUT]);
if (alist)
e->list[EIGRP_FILTER_OUT] = alist;
/* PREFIX_LIST IN for process */
if (dist->prefix[DISTRIBUTE_V4_IN])
{
- zlog_info("<DEBUG DISTRIBUTE PREFIX IN FOUND: %s",dist->prefix[DISTRIBUTE_V4_IN]);
plist = prefix_list_lookup (AFI_IP, dist->prefix[DISTRIBUTE_V4_IN]);
if (plist)
{
/* PREFIX_LIST OUT for process */
if (dist->prefix[DISTRIBUTE_V4_OUT])
{
- zlog_info("<DEBUG DISTRIBUTE PREFIX OUT FOUND: %s",dist->prefix[DISTRIBUTE_V4_OUT]);
plist = prefix_list_lookup (AFI_IP, dist->prefix[DISTRIBUTE_V4_OUT]);
if (plist)
{
if (ifp == NULL)
return;
- zlog_info("<DEBUG ACL 2");
-
/*struct eigrp_if_info * info = ifp->info;
ei = info->eigrp_interface;*/
struct listnode *node, *nnode;
}
}
- if(ei == NULL)
- {
- zlog_info("Not Found eigrp interface %s",ifp->name);
- }
-
/* Access-list for interface in */
if (dist->list[DISTRIBUTE_V4_IN])
{
- zlog_info("<DEBUG ACL in");
alist = access_list_lookup (AFI_IP, dist->list[DISTRIBUTE_V4_IN]);
if (alist){
ei->list[EIGRP_FILTER_IN] = alist;
}
else
- {
- ei->list[EIGRP_FILTER_OUT] = NULL;
- zlog_info("<DEBUG ACL out else");
- }
+ ei->list[EIGRP_FILTER_OUT] = NULL;
/* Prefix-list for interface in */
if (dist->prefix[DISTRIBUTE_V4_IN])
if(my_ip == received_ip)
{
zlog_info ("Neighbor %s (%s) is down: Peer Termination received",
- inet_ntoa (nbr->src),ifindex2ifname (nbr->ei->ifp->ifindex, VRF_DEFAULT));
+ inet_ntoa (nbr->src),
+ ifindex2ifname (nbr->ei->ifp->ifindex, VRF_DEFAULT));
/* set neighbor to DOWN */
nbr->state = EIGRP_NEIGHBOR_DOWN;
/* delete neighbor */
case EIGRP_TLV_SW_VERSION:
eigrp_sw_version_decode(nbr, tlv_header);
break;
- case EIGRP_TLV_NEXT_MCAST_SEQ:
- break;
+ case EIGRP_TLV_NEXT_MCAST_SEQ:
+ break;
case EIGRP_TLV_PEER_TERMINATION:
eigrp_peer_termination_decode(nbr, tlv_header);
+ return;
break;
case EIGRP_TLV_PEER_MTRLIST:
- case EIGRP_TLV_PEER_TIDLIST:
- break;
+ case EIGRP_TLV_PEER_TIDLIST:
+ break;
default:
break;
}
{
/* increment statistics. */
ei->hello_in++;
- eigrp_nbr_state_update(nbr);
+ if (nbr)
+ eigrp_nbr_state_update(nbr);
}
{
pe = eigrp_prefix_entry_new ();
pe->serno = eigrp->serno;
- pe->destination_ipv4 = dest_addr;
+ pe->destination_ipv4 = prefix_ipv4_new ();
+ prefix_copy ((struct prefix *)pe->destination_ipv4,
+ (struct prefix *)&dest_addr);
pe->af = AF_INET;
pe->nt = EIGRP_TOPOLOGY_TYPE_CONNECTED;
if(keychain)
key = key_lookup_for_send(keychain);
else
- return EIGRP_AUTH_TYPE_NONE;
+ {
+ eigrp_authTLV_MD5_free(auth_TLV);
+ return EIGRP_AUTH_TYPE_NONE;
+ }
memset(&ctx, 0, sizeof(ctx));
MD5Init(&ctx);
}
/* save neighbor's crypt_seqnum */
- if (nbr)
- nbr->crypt_seqnum = authTLV->key_sequence;
+ nbr->crypt_seqnum = authTLV->key_sequence;
return 1;
}
struct eigrp_packet *ep;
ep = eigrp_fifo_tail(nbr->retrans_queue);
- if (ep != NULL)
+ if (ep)
{
if (ntohl(eigrph->ack) == ep->sequence_number)
{
eigrp_update_send_EOT(nbr);
}
ep = eigrp_fifo_pop_tail(nbr->retrans_queue);
- /*eigrp_packet_free(ep);*/
+ eigrp_packet_free(ep);
if (nbr->retrans_queue->count > 0)
{
eigrp_send_packet_reliably(nbr);
}
}
ep = eigrp_fifo_tail(nbr->multicast_queue);
- if (ep != NULL)
+ if (ep)
{
if (ntohl(eigrph->ack) == ep->sequence_number)
{
type = stream_getw(s);
if (type == EIGRP_TLV_IPv4_INT)
{
+ struct prefix_ipv4 dest_addr;
+
stream_set_getp(s, s->getp - sizeof(u_int16_t));
tlv = eigrp_read_ipv4_tlv(s);
- struct prefix_ipv4 *dest_addr;
- dest_addr = prefix_ipv4_new();
- dest_addr->prefix = tlv->destination;
- dest_addr->prefixlen = tlv->prefix_length;
+ dest_addr.family = AFI_IP;
+ dest_addr.prefix = tlv->destination;
+ dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest =
- eigrp_topology_table_lookup_ipv4(eigrp->topology_table, dest_addr);
+ eigrp_topology_table_lookup_ipv4(eigrp->topology_table, &dest_addr);
/* If the destination exists (it should, but one never know)*/
if (dest != NULL)
{
eigrp_send_packet_reliably(nbr);
}
+
+ XFREE(MTYPE_EIGRP_PREFIX_ENTRY, pe2);
}
/*EIGRP REPLY read function*/
type = stream_getw(s);
if (type == EIGRP_TLV_IPv4_INT)
{
+ struct prefix_ipv4 dest_addr;
+
stream_set_getp(s, s->getp - sizeof(u_int16_t));
tlv = eigrp_read_ipv4_tlv(s);
- struct prefix_ipv4 *dest_addr;
- dest_addr = prefix_ipv4_new();
- dest_addr->prefix = tlv->destination;
- dest_addr->prefixlen = tlv->prefix_length;
+ dest_addr.family = AFI_IP;
+ dest_addr.prefix = tlv->destination;
+ dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest =
- eigrp_topology_table_lookup_ipv4 (eigrp->topology_table, dest_addr);
+ eigrp_topology_table_lookup_ipv4 (eigrp->topology_table, &dest_addr);
/*
* Destination must exists
*/
plist = e->prefix[EIGRP_FILTER_IN];
alist_i = ei->list[EIGRP_FILTER_IN];
plist_i = ei->prefix[EIGRP_FILTER_IN];
- zlog_info("REPLY Receive: Filtering");
- zlog_info("REPLY RECEIVE Prefix: %s", inet_ntoa(dest_addr->prefix));
/* Check if any list fits */
- if ((alist && access_list_apply (alist,
- (struct prefix *) dest_addr) == FILTER_DENY)||
- (plist && prefix_list_apply (plist,
- (struct prefix *) dest_addr) == PREFIX_DENY)||
- (alist_i && access_list_apply (alist_i,
- (struct prefix *) dest_addr) == FILTER_DENY)||
- (plist_i && prefix_list_apply (plist_i,
- (struct prefix *) dest_addr) == PREFIX_DENY))
+ if ((alist &&
+ access_list_apply (alist, (struct prefix *)&dest_addr) == FILTER_DENY) ||
+ (plist &&
+ prefix_list_apply (plist, (struct prefix *)&dest_addr) == PREFIX_DENY) ||
+ (alist_i &&
+ access_list_apply (alist_i, (struct prefix *)&dest_addr) == FILTER_DENY) ||
+ (plist_i &&
+ prefix_list_apply (plist_i, (struct prefix *)&dest_addr) == PREFIX_DENY))
{
- zlog_info("REPLY RECEIVE: Setting metric to max");
tlv->metric.delay = EIGRP_MAX_METRIC;
- zlog_info("REPLY RECEIVE Prefix: %s", inet_ntoa(dest_addr->prefix));
- } else {
- zlog_info("REPLY RECEIVE: Not setting metric");
- }
+ }
/*
* End of filtering
*/
type = stream_getw(s);
if (type == EIGRP_TLV_IPv4_INT)
{
+ struct prefix_ipv4 dest_addr;
+
stream_set_getp(s, s->getp - sizeof(u_int16_t));
tlv = eigrp_read_ipv4_tlv(s);
- struct prefix_ipv4 *dest_addr;
- dest_addr = prefix_ipv4_new();
- dest_addr->prefix = tlv->destination;
- dest_addr->prefixlen = tlv->prefix_length;
+ dest_addr.family = AFI_IP;
+ dest_addr.prefix = tlv->destination;
+ dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest =
- eigrp_topology_table_lookup_ipv4(eigrp->topology_table, dest_addr);
+ eigrp_topology_table_lookup_ipv4(eigrp->topology_table, &dest_addr);
/* If the destination exists (it should, but one never know)*/
if (dest != NULL)
eigrp_send_packet_reliably(nbr);
}
}
+ else
+ eigrp_packet_free(ep);
}
type = stream_getw(s);
if (type == EIGRP_TLV_IPv4_INT)
{
+ struct prefix_ipv4 dest_addr;
+
stream_set_getp(s, s->getp - sizeof(u_int16_t));
tlv = eigrp_read_ipv4_tlv(s);
- struct prefix_ipv4 *dest_addr;
- dest_addr = prefix_ipv4_new();
- dest_addr->prefix = tlv->destination;
- dest_addr->prefixlen = tlv->prefix_length;
+ dest_addr.family = AFI_IP;
+ dest_addr.prefix = tlv->destination;
+ dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest =
- eigrp_topology_table_lookup_ipv4(eigrp->topology_table, dest_addr);
+ eigrp_topology_table_lookup_ipv4(eigrp->topology_table, &dest_addr);
/* If the destination exists (it should, but one never know)*/
if (dest != NULL)
eigrp_send_packet_reliably(nbr);
}
}
+ else
+ eigrp_packet_free(ep);
}
type = stream_getw(s);
if (type == EIGRP_TLV_IPv4_INT)
{
+ struct prefix_ipv4 dest_addr;
+
stream_set_getp(s, s->getp - sizeof(u_int16_t));
tlv = eigrp_read_ipv4_tlv(s);
/*searching if destination exists */
- struct prefix_ipv4 *dest_addr;
- dest_addr = prefix_ipv4_new();
- dest_addr->prefix = tlv->destination;
- dest_addr->prefixlen = tlv->prefix_length;
+ dest_addr.family = AFI_IP;
+ dest_addr.prefix = tlv->destination;
+ dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest =
- eigrp_topology_table_lookup_ipv4(eigrp->topology_table, dest_addr);
+ eigrp_topology_table_lookup_ipv4(eigrp->topology_table, &dest_addr);
/*if exists it comes to DUAL*/
if (dest != NULL)
/*Here comes topology information save*/
pe = eigrp_prefix_entry_new();
pe->serno = eigrp->serno;
- pe->destination_ipv4 = dest_addr;
+ pe->destination_ipv4 = prefix_ipv4_new();
+ prefix_copy((struct prefix *)pe->destination_ipv4,
+ (struct prefix *)&dest_addr);
pe->af = AF_INET;
pe->state = EIGRP_FSM_STATE_PASSIVE;
pe->nt = EIGRP_TOPOLOGY_TYPE_REMOTE;
*/
alist = ei->list[EIGRP_FILTER_IN];
- if (alist) {
- zlog_info ("ALIST PROC IN: %s", alist->name);
- } else {
- zlog_info("ALIST je prazdny");
- }
-
/* Check if access-list fits */
- if (alist && access_list_apply (alist,
- (struct prefix *) dest_addr) == FILTER_DENY)
+ if (alist &&
+ access_list_apply (alist, (struct prefix *)&dest_addr) == FILTER_DENY)
{
/* If yes, set reported metric to Max */
- zlog_info("PROC IN: Nastavujem metriku na MAX");
ne->reported_metric.delay = EIGRP_MAX_METRIC;
- zlog_info("PROC IN Prefix: %s", inet_ntoa(dest_addr->prefix));
} else {
- zlog_info("PROC IN: NENastavujem metriku ");
ne->distance = eigrp_calculate_total_metrics(eigrp, ne);
}
plist = e->prefix[EIGRP_FILTER_IN];
- if (plist) {
- zlog_info ("PLIST PROC IN: %s", plist->name);
- } else {
- zlog_info("PLIST PROC IN je prazdny");
- }
-
/* Check if prefix-list fits */
- if (plist && prefix_list_apply (plist,
- (struct prefix *) dest_addr) == PREFIX_DENY)
+ if (plist &&
+ prefix_list_apply (plist, (struct prefix *)&dest_addr) == PREFIX_DENY)
{
/* If yes, set reported metric to Max */
- zlog_info("PLIST PROC IN: Nastavujem metriku na MAX");
ne->reported_metric.delay = EIGRP_MAX_METRIC;
- zlog_info("PLIST PROC IN Prefix: %s", inet_ntoa(dest_addr->prefix));
- } else {
- zlog_info("PLIST PROC IN: NENastavujem metriku ");
- }
+ }
/*Get access-list from current interface */
- zlog_info("Checking access_list on interface: %s",ei->ifp->name);
alist = ei->list[EIGRP_FILTER_IN];
- if (alist) {
- zlog_info ("ALIST INT IN: %s", alist->name);
- } else {
- zlog_info("ALIST INT IN je prazdny");
- }
/* Check if access-list fits */
- if (alist && access_list_apply (alist, (struct prefix *) dest_addr) == FILTER_DENY)
+ if (alist &&
+ access_list_apply (alist, (struct prefix *)&dest_addr) == FILTER_DENY)
{
/* If yes, set reported metric to Max */
- zlog_info("INT IN: Nastavujem metriku na MAX");
ne->reported_metric.delay = EIGRP_MAX_METRIC;
- zlog_info("INT IN Prefix: %s", inet_ntoa(dest_addr->prefix));
- } else {
- zlog_info("INT IN: NENastavujem metriku ");
- }
+ }
plist = ei->prefix[EIGRP_FILTER_IN];
- if (plist) {
- zlog_info ("PLIST INT IN: %s", plist->name);
- } else {
- zlog_info("PLIST INT IN je prazdny");
- }
-
/* Check if prefix-list fits */
- if (plist && prefix_list_apply (plist,
- (struct prefix *) dest_addr) == PREFIX_DENY)
+ if (plist &&
+ prefix_list_apply (plist, (struct prefix *)&dest_addr) == PREFIX_DENY)
{
/* If yes, set reported metric to Max */
- zlog_info("PLIST INT IN: Nastavujem metriku na MAX");
ne->reported_metric.delay = EIGRP_MAX_METRIC;
- zlog_info("PLIST INT IN Prefix: %s", inet_ntoa(dest_addr->prefix));
- } else {
- zlog_info("PLIST INT IN: NENastavujem metriku ");
- }
+ }
/*
* End of filtering
*/
ne->distance = eigrp_calculate_total_metrics(eigrp, ne);
- zlog_info("<DEBUG PROC IN Distance: %x", ne->distance);
- zlog_info("<DEBUG PROC IN Delay: %x", ne->total_metric.delay);
-
pe->fdistance = pe->distance = pe->rdistance =
ne->distance;
ne->prefix = pe;
struct prefix_list *plist_i;
struct eigrp *e;
struct prefix_ipv4 *dest_addr;
+ bool packet_sent = false;
u_int16_t length = EIGRP_HEADER_LEN;
return;
}
- if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
+ if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5)
+ && (IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
{
eigrp_make_md5_digest(ei,ep->s, EIGRP_AUTH_UPDATE_FLAG);
}
{
if (nbr->state == EIGRP_NEIGHBOR_UP)
{
+ packet_sent = true;
/*Put packet to retransmission queue*/
eigrp_fifo_push_head(nbr->retrans_queue, ep);
}
}
}
+
+ if (!packet_sent)
+ eigrp_packet_free(ep);
}
void