forked from Mirror/frr
eigrpd: Convert pe->destination_ipv4 to pe->destination
Convert the destination_ipv4 to a struct prefix and just call it destination. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
348addb4e7
commit
02b4599881
|
@ -158,7 +158,7 @@ const char *eigrp_topology_ip_string(struct eigrp_prefix_entry *tn)
|
||||||
static char buf[EIGRP_IF_STRING_MAXLEN] = "";
|
static char buf[EIGRP_IF_STRING_MAXLEN] = "";
|
||||||
u_int32_t ifaddr;
|
u_int32_t ifaddr;
|
||||||
|
|
||||||
ifaddr = ntohl(tn->destination_ipv4->prefix.s_addr);
|
ifaddr = ntohl(tn->destination->u.prefix4.s_addr);
|
||||||
snprintf(buf, EIGRP_IF_STRING_MAXLEN, "%u.%u.%u.%u",
|
snprintf(buf, EIGRP_IF_STRING_MAXLEN, "%u.%u.%u.%u",
|
||||||
(ifaddr >> 24) & 0xff, (ifaddr >> 16) & 0xff,
|
(ifaddr >> 24) & 0xff, (ifaddr >> 16) & 0xff,
|
||||||
(ifaddr >> 8) & 0xff, ifaddr & 0xff);
|
(ifaddr >> 8) & 0xff, ifaddr & 0xff);
|
||||||
|
@ -289,11 +289,12 @@ void show_ip_eigrp_topology_header(struct vty *vty, struct eigrp *eigrp)
|
||||||
void show_ip_eigrp_prefix_entry(struct vty *vty, struct eigrp_prefix_entry *tn)
|
void show_ip_eigrp_prefix_entry(struct vty *vty, struct eigrp_prefix_entry *tn)
|
||||||
{
|
{
|
||||||
struct list *successors = eigrp_topology_get_successor(tn);
|
struct list *successors = eigrp_topology_get_successor(tn);
|
||||||
|
char buffer[PREFIX_STRLEN];
|
||||||
|
|
||||||
vty_out(vty, "%-3c", (tn->state > 0) ? 'A' : 'P');
|
vty_out(vty, "%-3c", (tn->state > 0) ? 'A' : 'P');
|
||||||
|
|
||||||
vty_out(vty, "%s/%u, ", inet_ntoa(tn->destination_ipv4->prefix),
|
vty_out(vty, "%s, ",
|
||||||
tn->destination_ipv4->prefixlen);
|
prefix2str(tn->destination, buffer, PREFIX_STRLEN));
|
||||||
vty_out(vty, "%u successors, ", successors->count);
|
vty_out(vty, "%u successors, ", successors->count);
|
||||||
vty_out(vty, "FD is %u, serno: %" PRIu64 " \n", tn->fdistance,
|
vty_out(vty, "FD is %u, serno: %" PRIu64 " \n", tn->fdistance,
|
||||||
tn->serno);
|
tn->serno);
|
||||||
|
|
|
@ -289,21 +289,20 @@ int eigrp_if_up(struct eigrp_interface *ei)
|
||||||
ne->adv_router = eigrp->neighbor_self;
|
ne->adv_router = eigrp->neighbor_self;
|
||||||
ne->flags = EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG;
|
ne->flags = EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG;
|
||||||
|
|
||||||
struct prefix_ipv4 dest_addr;
|
struct prefix dest_addr;
|
||||||
|
|
||||||
dest_addr.family = AF_INET;
|
dest_addr.family = AF_INET;
|
||||||
dest_addr.prefix = ei->connected->address->u.prefix4;
|
dest_addr.u.prefix4 = ei->connected->address->u.prefix4;
|
||||||
dest_addr.prefixlen = ei->connected->address->prefixlen;
|
dest_addr.prefixlen = ei->connected->address->prefixlen;
|
||||||
apply_mask_ipv4(&dest_addr);
|
apply_mask(&dest_addr);
|
||||||
pe = eigrp_topology_table_lookup_ipv4(eigrp->topology_table,
|
pe = eigrp_topology_table_lookup_ipv4(eigrp->topology_table,
|
||||||
&dest_addr);
|
(struct prefix_ipv4 *)&dest_addr);
|
||||||
|
|
||||||
if (pe == NULL) {
|
if (pe == NULL) {
|
||||||
pe = eigrp_prefix_entry_new();
|
pe = eigrp_prefix_entry_new();
|
||||||
pe->serno = eigrp->serno;
|
pe->serno = eigrp->serno;
|
||||||
pe->destination_ipv4 = prefix_ipv4_new();
|
pe->destination = (struct prefix *)prefix_ipv4_new();
|
||||||
prefix_copy((struct prefix *)pe->destination_ipv4,
|
prefix_copy(pe->destination, &dest_addr);
|
||||||
(struct prefix *)&dest_addr);
|
|
||||||
pe->af = AF_INET;
|
pe->af = AF_INET;
|
||||||
pe->nt = EIGRP_TOPOLOGY_TYPE_CONNECTED;
|
pe->nt = EIGRP_TOPOLOGY_TYPE_CONNECTED;
|
||||||
|
|
||||||
|
|
|
@ -1167,21 +1167,21 @@ u_int16_t eigrp_add_internalTLV_to_stream(struct stream *s,
|
||||||
u_int16_t length;
|
u_int16_t length;
|
||||||
|
|
||||||
stream_putw(s, EIGRP_TLV_IPv4_INT);
|
stream_putw(s, EIGRP_TLV_IPv4_INT);
|
||||||
if (pe->destination_ipv4->prefixlen <= 8) {
|
if (pe->destination->prefixlen <= 8) {
|
||||||
stream_putw(s, 0x001A);
|
stream_putw(s, 0x001A);
|
||||||
length = 0x001A;
|
length = 0x001A;
|
||||||
}
|
}
|
||||||
if ((pe->destination_ipv4->prefixlen > 8)
|
if ((pe->destination->prefixlen > 8)
|
||||||
&& (pe->destination_ipv4->prefixlen <= 16)) {
|
&& (pe->destination->prefixlen <= 16)) {
|
||||||
stream_putw(s, 0x001B);
|
stream_putw(s, 0x001B);
|
||||||
length = 0x001B;
|
length = 0x001B;
|
||||||
}
|
}
|
||||||
if ((pe->destination_ipv4->prefixlen > 16)
|
if ((pe->destination->prefixlen > 16)
|
||||||
&& (pe->destination_ipv4->prefixlen <= 24)) {
|
&& (pe->destination->prefixlen <= 24)) {
|
||||||
stream_putw(s, 0x001C);
|
stream_putw(s, 0x001C);
|
||||||
length = 0x001C;
|
length = 0x001C;
|
||||||
}
|
}
|
||||||
if (pe->destination_ipv4->prefixlen > 24) {
|
if (pe->destination->prefixlen > 24) {
|
||||||
stream_putw(s, 0x001D);
|
stream_putw(s, 0x001D);
|
||||||
length = 0x001D;
|
length = 0x001D;
|
||||||
}
|
}
|
||||||
|
@ -1200,34 +1200,18 @@ u_int16_t eigrp_add_internalTLV_to_stream(struct stream *s,
|
||||||
stream_putc(s, pe->reported_metric.tag);
|
stream_putc(s, pe->reported_metric.tag);
|
||||||
stream_putc(s, pe->reported_metric.flags);
|
stream_putc(s, pe->reported_metric.flags);
|
||||||
|
|
||||||
stream_putc(s, pe->destination_ipv4->prefixlen);
|
stream_putc(s, pe->destination->prefixlen);
|
||||||
|
|
||||||
if (pe->destination_ipv4->prefixlen <= 8) {
|
stream_putc(s, pe->destination->u.prefix4.s_addr & 0xFF);
|
||||||
stream_putc(s, pe->destination_ipv4->prefix.s_addr & 0xFF);
|
if (pe->destination->prefixlen > 8)
|
||||||
}
|
|
||||||
if ((pe->destination_ipv4->prefixlen > 8)
|
|
||||||
&& (pe->destination_ipv4->prefixlen <= 16)) {
|
|
||||||
stream_putc(s, pe->destination_ipv4->prefix.s_addr & 0xFF);
|
|
||||||
stream_putc(s,
|
stream_putc(s,
|
||||||
(pe->destination_ipv4->prefix.s_addr >> 8) & 0xFF);
|
(pe->destination->u.prefix4.s_addr >> 8) & 0xFF);
|
||||||
}
|
if (pe->destination->prefixlen > 16)
|
||||||
if ((pe->destination_ipv4->prefixlen > 16)
|
|
||||||
&& (pe->destination_ipv4->prefixlen <= 24)) {
|
|
||||||
stream_putc(s, pe->destination_ipv4->prefix.s_addr & 0xFF);
|
|
||||||
stream_putc(s,
|
stream_putc(s,
|
||||||
(pe->destination_ipv4->prefix.s_addr >> 8) & 0xFF);
|
(pe->destination->u.prefix4.s_addr >> 16) & 0xFF);
|
||||||
|
if (pe->destination->prefixlen > 24)
|
||||||
stream_putc(s,
|
stream_putc(s,
|
||||||
(pe->destination_ipv4->prefix.s_addr >> 16) & 0xFF);
|
(pe->destination->u.prefix4.s_addr >> 24) & 0xFF);
|
||||||
}
|
|
||||||
if (pe->destination_ipv4->prefixlen > 24) {
|
|
||||||
stream_putc(s, pe->destination_ipv4->prefix.s_addr & 0xFF);
|
|
||||||
stream_putc(s,
|
|
||||||
(pe->destination_ipv4->prefix.s_addr >> 8) & 0xFF);
|
|
||||||
stream_putc(s,
|
|
||||||
(pe->destination_ipv4->prefix.s_addr >> 16) & 0xFF);
|
|
||||||
stream_putc(s,
|
|
||||||
(pe->destination_ipv4->prefix.s_addr >> 24) & 0xFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,19 +87,19 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||||
|
|
||||||
/* Check if any list fits */
|
/* Check if any list fits */
|
||||||
if ((alist
|
if ((alist
|
||||||
&& access_list_apply(alist, (struct prefix *)pe2->destination_ipv4)
|
&& access_list_apply(alist, pe2->destination)
|
||||||
== FILTER_DENY)
|
== FILTER_DENY)
|
||||||
|| (plist
|
|| (plist
|
||||||
&& prefix_list_apply(plist,
|
&& prefix_list_apply(plist,
|
||||||
(struct prefix *)pe2->destination_ipv4)
|
pe2->destination)
|
||||||
== PREFIX_DENY)
|
== PREFIX_DENY)
|
||||||
|| (alist_i
|
|| (alist_i
|
||||||
&& access_list_apply(alist_i,
|
&& access_list_apply(alist_i,
|
||||||
(struct prefix *)pe2->destination_ipv4)
|
pe2->destination)
|
||||||
== FILTER_DENY)
|
== FILTER_DENY)
|
||||||
|| (plist_i
|
|| (plist_i
|
||||||
&& prefix_list_apply(plist_i,
|
&& prefix_list_apply(plist_i,
|
||||||
(struct prefix *)pe2->destination_ipv4)
|
pe2->destination)
|
||||||
== PREFIX_DENY)) {
|
== PREFIX_DENY)) {
|
||||||
zlog_info("REPLY SEND: Setting Metric to max");
|
zlog_info("REPLY SEND: Setting Metric to max");
|
||||||
pe2->reported_metric.delay = EIGRP_MAX_METRIC;
|
pe2->reported_metric.delay = EIGRP_MAX_METRIC;
|
||||||
|
|
|
@ -469,10 +469,7 @@ struct eigrp_prefix_entry {
|
||||||
u_char af; // address family
|
u_char af; // address family
|
||||||
u_char req_action; // required action
|
u_char req_action; // required action
|
||||||
|
|
||||||
struct prefix_ipv4
|
struct prefix *destination;
|
||||||
*destination_ipv4; // pointer to struct with ipv4 address
|
|
||||||
struct prefix_ipv6
|
|
||||||
*destination_ipv6; // pointer to struct with ipv6 address
|
|
||||||
|
|
||||||
// If network type is REMOTE_EXTERNAL, pointer will have reference to
|
// If network type is REMOTE_EXTERNAL, pointer will have reference to
|
||||||
// its external TLV
|
// its external TLV
|
||||||
|
|
|
@ -81,25 +81,18 @@ static int eigrp_prefix_entry_cmp(struct eigrp_prefix_entry *node1,
|
||||||
{
|
{
|
||||||
if (node1->af == AF_INET) {
|
if (node1->af == AF_INET) {
|
||||||
if (node2->af == AF_INET) {
|
if (node2->af == AF_INET) {
|
||||||
if (node1->destination_ipv4->prefix.s_addr
|
if (node1->destination->u.prefix4.s_addr
|
||||||
< node2->destination_ipv4->prefix.s_addr) {
|
< node2->destination->u.prefix4.s_addr)
|
||||||
return -1; // if it belong above node2
|
return -1;
|
||||||
} else {
|
if (node1->destination->u.prefix4.s_addr
|
||||||
if (node1->destination_ipv4->prefix.s_addr
|
> node2->destination->u.prefix4.s_addr)
|
||||||
> node2->destination_ipv4->prefix.s_addr) {
|
return 1;
|
||||||
return 1; // if it belongs under node2
|
else
|
||||||
} else {
|
return 0;
|
||||||
return 0; // same value... ERROR...in
|
} else
|
||||||
// case of adding same prefix
|
|
||||||
// again
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
} else
|
||||||
} else { // TODO check if the prefix dont exists
|
return 1;
|
||||||
return 1; // add to end
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -125,8 +118,7 @@ struct eigrp_prefix_entry *eigrp_prefix_entry_new()
|
||||||
new->rij = list_new();
|
new->rij = list_new();
|
||||||
new->entries->cmp = (int (*)(void *, void *))eigrp_neighbor_entry_cmp;
|
new->entries->cmp = (int (*)(void *, void *))eigrp_neighbor_entry_cmp;
|
||||||
new->distance = new->fdistance = new->rdistance = EIGRP_MAX_METRIC;
|
new->distance = new->fdistance = new->rdistance = EIGRP_MAX_METRIC;
|
||||||
new->destination_ipv4 = NULL;
|
new->destination = NULL;
|
||||||
new->destination_ipv6 = NULL;
|
|
||||||
|
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
@ -137,9 +129,8 @@ struct eigrp_prefix_entry *eigrp_prefix_entry_new()
|
||||||
static int eigrp_neighbor_entry_cmp(struct eigrp_neighbor_entry *entry1,
|
static int eigrp_neighbor_entry_cmp(struct eigrp_neighbor_entry *entry1,
|
||||||
struct eigrp_neighbor_entry *entry2)
|
struct eigrp_neighbor_entry *entry2)
|
||||||
{
|
{
|
||||||
if (entry1->distance
|
if (entry1->distance < entry2->distance)
|
||||||
< entry2->distance) // parameter used in list_add_sort ()
|
return -1;
|
||||||
return -1; // actually set to sort by distance
|
|
||||||
if (entry1->distance > entry2->distance)
|
if (entry1->distance > entry2->distance)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -205,7 +196,8 @@ void eigrp_neighbor_entry_add(struct eigrp_prefix_entry *node,
|
||||||
listnode_add_sort(node->entries, entry);
|
listnode_add_sort(node->entries, entry);
|
||||||
entry->prefix = node;
|
entry->prefix = node;
|
||||||
|
|
||||||
eigrp_zebra_route_add(node->destination_ipv4, l);
|
eigrp_zebra_route_add((struct prefix_ipv4 *)
|
||||||
|
node->destination, l);
|
||||||
}
|
}
|
||||||
|
|
||||||
list_delete(l);
|
list_delete(l);
|
||||||
|
@ -230,7 +222,8 @@ void eigrp_prefix_entry_delete(struct list *topology,
|
||||||
list_free(node->entries);
|
list_free(node->entries);
|
||||||
list_free(node->rij);
|
list_free(node->rij);
|
||||||
listnode_delete(topology, node);
|
listnode_delete(topology, node);
|
||||||
eigrp_zebra_route_delete(node->destination_ipv4);
|
eigrp_zebra_route_delete((struct prefix_ipv4 *)
|
||||||
|
node->destination);
|
||||||
XFREE(MTYPE_EIGRP_PREFIX_ENTRY, node);
|
XFREE(MTYPE_EIGRP_PREFIX_ENTRY, node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -243,7 +236,8 @@ void eigrp_neighbor_entry_delete(struct eigrp_prefix_entry *node,
|
||||||
{
|
{
|
||||||
if (listnode_lookup(node->entries, entry) != NULL) {
|
if (listnode_lookup(node->entries, entry) != NULL) {
|
||||||
listnode_delete(node->entries, entry);
|
listnode_delete(node->entries, entry);
|
||||||
eigrp_zebra_route_delete(node->destination_ipv4);
|
eigrp_zebra_route_delete((struct prefix_ipv4 *)
|
||||||
|
node->destination);
|
||||||
XFREE(MTYPE_EIGRP_NEIGHBOR_ENTRY, entry);
|
XFREE(MTYPE_EIGRP_NEIGHBOR_ENTRY, entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -275,11 +269,8 @@ eigrp_topology_table_lookup_ipv4(struct list *topology_table,
|
||||||
struct eigrp_prefix_entry *data;
|
struct eigrp_prefix_entry *data;
|
||||||
struct listnode *node;
|
struct listnode *node;
|
||||||
for (ALL_LIST_ELEMENTS_RO(topology_table, node, data)) {
|
for (ALL_LIST_ELEMENTS_RO(topology_table, node, data)) {
|
||||||
if ((data->af == AF_INET)
|
if (prefix_same(data->destination,
|
||||||
&& (data->destination_ipv4->prefix.s_addr
|
(struct prefix *)address))
|
||||||
== address->prefix.s_addr)
|
|
||||||
&& (data->destination_ipv4->prefixlen
|
|
||||||
== address->prefixlen))
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -476,13 +467,16 @@ void eigrp_update_routing_table(struct eigrp_prefix_entry *prefix)
|
||||||
struct eigrp_neighbor_entry *entry;
|
struct eigrp_neighbor_entry *entry;
|
||||||
|
|
||||||
if (successors) {
|
if (successors) {
|
||||||
eigrp_zebra_route_add(prefix->destination_ipv4, successors);
|
eigrp_zebra_route_add((struct prefix_ipv4 *)
|
||||||
|
prefix->destination,
|
||||||
|
successors);
|
||||||
for (ALL_LIST_ELEMENTS_RO(successors, node, entry))
|
for (ALL_LIST_ELEMENTS_RO(successors, node, entry))
|
||||||
entry->flags |= EIGRP_NEIGHBOR_ENTRY_INTABLE_FLAG;
|
entry->flags |= EIGRP_NEIGHBOR_ENTRY_INTABLE_FLAG;
|
||||||
|
|
||||||
list_delete(successors);
|
list_delete(successors);
|
||||||
} else {
|
} else {
|
||||||
eigrp_zebra_route_delete(prefix->destination_ipv4);
|
eigrp_zebra_route_delete((struct prefix_ipv4 *)
|
||||||
|
prefix->destination);
|
||||||
for (ALL_LIST_ELEMENTS_RO(prefix->entries, node, entry))
|
for (ALL_LIST_ELEMENTS_RO(prefix->entries, node, entry))
|
||||||
entry->flags &= ~EIGRP_NEIGHBOR_ENTRY_INTABLE_FLAG;
|
entry->flags &= ~EIGRP_NEIGHBOR_ENTRY_INTABLE_FLAG;
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,9 +116,10 @@ static void eigrp_update_receive_GR_ask(struct eigrp *eigrp,
|
||||||
|
|
||||||
/* iterate over all prefixes which weren't advertised by neighbor */
|
/* iterate over all prefixes which weren't advertised by neighbor */
|
||||||
for (ALL_LIST_ELEMENTS_RO(nbr_prefixes, node1, prefix)) {
|
for (ALL_LIST_ELEMENTS_RO(nbr_prefixes, node1, prefix)) {
|
||||||
zlog_debug("GR receive: Neighbor not advertised %s/%d",
|
char buffer[PREFIX_STRLEN];
|
||||||
inet_ntoa(prefix->destination_ipv4->prefix),
|
zlog_debug("GR receive: Neighbor not advertised %s",
|
||||||
prefix->destination_ipv4->prefixlen);
|
prefix2str(prefix->destination,
|
||||||
|
buffer, PREFIX_STRLEN));
|
||||||
|
|
||||||
fsm_msg.metrics = prefix->reported_metric;
|
fsm_msg.metrics = prefix->reported_metric;
|
||||||
/* set delay to MAX */
|
/* set delay to MAX */
|
||||||
|
@ -311,9 +312,8 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
|
||||||
/*Here comes topology information save*/
|
/*Here comes topology information save*/
|
||||||
pe = eigrp_prefix_entry_new();
|
pe = eigrp_prefix_entry_new();
|
||||||
pe->serno = eigrp->serno;
|
pe->serno = eigrp->serno;
|
||||||
pe->destination_ipv4 = prefix_ipv4_new();
|
pe->destination = (struct prefix *)prefix_ipv4_new();
|
||||||
prefix_copy(
|
prefix_copy(pe->destination,
|
||||||
(struct prefix *)pe->destination_ipv4,
|
|
||||||
(struct prefix *)&dest_addr);
|
(struct prefix *)&dest_addr);
|
||||||
pe->af = AF_INET;
|
pe->af = AF_INET;
|
||||||
pe->state = EIGRP_FSM_STATE_PASSIVE;
|
pe->state = EIGRP_FSM_STATE_PASSIVE;
|
||||||
|
@ -571,7 +571,7 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr)
|
||||||
struct access_list *alist_i;
|
struct access_list *alist_i;
|
||||||
struct prefix_list *plist_i;
|
struct prefix_list *plist_i;
|
||||||
struct eigrp *e;
|
struct eigrp *e;
|
||||||
struct prefix_ipv4 *dest_addr;
|
struct prefix *dest_addr;
|
||||||
u_int32_t seq_no = nbr->ei->eigrp->sequence_number;
|
u_int32_t seq_no = nbr->ei->eigrp->sequence_number;
|
||||||
|
|
||||||
ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
|
ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr);
|
||||||
|
@ -609,7 +609,7 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Get destination address from prefix */
|
/* Get destination address from prefix */
|
||||||
dest_addr = pe->destination_ipv4;
|
dest_addr = pe->destination;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Filtering
|
* Filtering
|
||||||
|
@ -656,7 +656,7 @@ void eigrp_update_send(struct eigrp_interface *ei)
|
||||||
struct access_list *alist_i;
|
struct access_list *alist_i;
|
||||||
struct prefix_list *plist_i;
|
struct prefix_list *plist_i;
|
||||||
struct eigrp *e;
|
struct eigrp *e;
|
||||||
struct prefix_ipv4 *dest_addr;
|
struct prefix *dest_addr;
|
||||||
u_int32_t seq_no = ei->eigrp->sequence_number;
|
u_int32_t seq_no = ei->eigrp->sequence_number;
|
||||||
|
|
||||||
if (ei->nbrs->count == 0)
|
if (ei->nbrs->count == 0)
|
||||||
|
@ -714,7 +714,7 @@ void eigrp_update_send(struct eigrp_interface *ei)
|
||||||
has_tlv = 0;
|
has_tlv = 0;
|
||||||
}
|
}
|
||||||
/* Get destination address from prefix */
|
/* Get destination address from prefix */
|
||||||
dest_addr = pe->destination_ipv4;
|
dest_addr = pe->destination;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Filtering
|
* Filtering
|
||||||
|
@ -824,7 +824,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||||
u_int16_t length = EIGRP_HEADER_LEN;
|
u_int16_t length = EIGRP_HEADER_LEN;
|
||||||
struct listnode *node, *nnode;
|
struct listnode *node, *nnode;
|
||||||
struct eigrp_prefix_entry *pe;
|
struct eigrp_prefix_entry *pe;
|
||||||
struct prefix_ipv4 *dest_addr;
|
struct prefix *dest_addr;
|
||||||
struct eigrp *e;
|
struct eigrp *e;
|
||||||
struct access_list *alist, *alist_i;
|
struct access_list *alist, *alist_i;
|
||||||
struct prefix_list *plist, *plist_i;
|
struct prefix_list *plist, *plist_i;
|
||||||
|
@ -887,7 +887,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||||
/*
|
/*
|
||||||
* Filtering
|
* Filtering
|
||||||
*/
|
*/
|
||||||
dest_addr = pe->destination_ipv4;
|
dest_addr = pe->destination;
|
||||||
/* get list from eigrp process */
|
/* get list from eigrp process */
|
||||||
e = eigrp_lookup();
|
e = eigrp_lookup();
|
||||||
/* Get access-lists and prefix-lists from process and interface
|
/* Get access-lists and prefix-lists from process and interface
|
||||||
|
@ -899,22 +899,20 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||||
|
|
||||||
/* Check if any list fits */
|
/* Check if any list fits */
|
||||||
if ((alist
|
if ((alist
|
||||||
&& access_list_apply(alist, (struct prefix *)dest_addr)
|
&& access_list_apply(alist, dest_addr)
|
||||||
== FILTER_DENY)
|
== FILTER_DENY)
|
||||||
|| (plist
|
|| (plist
|
||||||
&& prefix_list_apply(plist, (struct prefix *)dest_addr)
|
&& prefix_list_apply(plist, dest_addr)
|
||||||
== PREFIX_DENY)
|
== PREFIX_DENY)
|
||||||
|| (alist_i
|
|| (alist_i
|
||||||
&& access_list_apply(alist_i,
|
&& access_list_apply(alist_i, dest_addr)
|
||||||
(struct prefix *)dest_addr)
|
|
||||||
== FILTER_DENY)
|
== FILTER_DENY)
|
||||||
|| (plist_i
|
|| (plist_i
|
||||||
&& prefix_list_apply(plist_i,
|
&& prefix_list_apply(plist_i, dest_addr)
|
||||||
(struct prefix *)dest_addr)
|
|
||||||
== PREFIX_DENY)) {
|
== PREFIX_DENY)) {
|
||||||
/* do not send filtered route */
|
/* do not send filtered route */
|
||||||
zlog_info("Filtered prefix %s won't be sent out.",
|
zlog_info("Filtered prefix %s won't be sent out.",
|
||||||
inet_ntoa(dest_addr->prefix));
|
inet_ntoa(dest_addr->u.prefix4));
|
||||||
} else {
|
} else {
|
||||||
/* sending route which wasn't filtered */
|
/* sending route which wasn't filtered */
|
||||||
length += eigrp_add_internalTLV_to_stream(ep->s, pe);
|
length += eigrp_add_internalTLV_to_stream(ep->s, pe);
|
||||||
|
@ -928,22 +926,20 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||||
|
|
||||||
/* Check if any list fits */
|
/* Check if any list fits */
|
||||||
if ((alist
|
if ((alist
|
||||||
&& access_list_apply(alist, (struct prefix *)dest_addr)
|
&& access_list_apply(alist, dest_addr)
|
||||||
== FILTER_DENY)
|
== FILTER_DENY)
|
||||||
|| (plist
|
|| (plist
|
||||||
&& prefix_list_apply(plist, (struct prefix *)dest_addr)
|
&& prefix_list_apply(plist, dest_addr)
|
||||||
== PREFIX_DENY)
|
== PREFIX_DENY)
|
||||||
|| (alist_i
|
|| (alist_i
|
||||||
&& access_list_apply(alist_i,
|
&& access_list_apply(alist_i, dest_addr)
|
||||||
(struct prefix *)dest_addr)
|
|
||||||
== FILTER_DENY)
|
== FILTER_DENY)
|
||||||
|| (plist_i
|
|| (plist_i
|
||||||
&& prefix_list_apply(plist_i,
|
&& prefix_list_apply(plist_i, dest_addr)
|
||||||
(struct prefix *)dest_addr)
|
|
||||||
== PREFIX_DENY)) {
|
== PREFIX_DENY)) {
|
||||||
/* do not send filtered route */
|
/* do not send filtered route */
|
||||||
zlog_info("Filtered prefix %s will be removed.",
|
zlog_info("Filtered prefix %s will be removed.",
|
||||||
inet_ntoa(dest_addr->prefix));
|
inet_ntoa(dest_addr->u.prefix4));
|
||||||
|
|
||||||
/* prepare message for FSM */
|
/* prepare message for FSM */
|
||||||
struct eigrp_fsm_action_message fsm_msg;
|
struct eigrp_fsm_action_message fsm_msg;
|
||||||
|
|
Loading…
Reference in a new issue