mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-26 03:07:51 +00:00
commit
e0196a847f
@ -174,7 +174,7 @@ const char *eigrp_if_ip_string(struct eigrp_interface *ei)
|
|||||||
if (!ei)
|
if (!ei)
|
||||||
return "inactive";
|
return "inactive";
|
||||||
|
|
||||||
ifaddr = ntohl(ei->address->u.prefix4.s_addr);
|
ifaddr = ntohl(ei->address.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);
|
||||||
|
@ -248,7 +248,7 @@ static void eigrp_peer_termination_decode(struct eigrp_neighbor *nbr,
|
|||||||
struct TLV_Peer_Termination_type *param =
|
struct TLV_Peer_Termination_type *param =
|
||||||
(struct TLV_Peer_Termination_type *)tlv;
|
(struct TLV_Peer_Termination_type *)tlv;
|
||||||
|
|
||||||
uint32_t my_ip = nbr->ei->address->u.prefix4.s_addr;
|
uint32_t my_ip = nbr->ei->address.u.prefix4.s_addr;
|
||||||
uint32_t received_ip = param->neighbor_ip;
|
uint32_t received_ip = param->neighbor_ip;
|
||||||
|
|
||||||
if (my_ip == received_ip) {
|
if (my_ip == received_ip) {
|
||||||
|
@ -68,7 +68,7 @@ struct eigrp_interface *eigrp_if_new(struct eigrp *eigrp, struct interface *ifp,
|
|||||||
|
|
||||||
/* Set zebra interface pointer. */
|
/* Set zebra interface pointer. */
|
||||||
ei->ifp = ifp;
|
ei->ifp = ifp;
|
||||||
ei->address = p;
|
prefix_copy(&ei->address, p);
|
||||||
|
|
||||||
ifp->info = ei;
|
ifp->info = ei;
|
||||||
listnode_add(eigrp->eiflist, ei);
|
listnode_add(eigrp->eiflist, ei);
|
||||||
@ -185,7 +185,7 @@ int eigrp_if_up(struct eigrp_interface *ei)
|
|||||||
|
|
||||||
struct prefix dest_addr;
|
struct prefix dest_addr;
|
||||||
|
|
||||||
dest_addr = *ei->address;
|
dest_addr = ei->address;
|
||||||
apply_mask(&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);
|
&dest_addr);
|
||||||
@ -292,7 +292,7 @@ void eigrp_if_set_multicast(struct eigrp_interface *ei)
|
|||||||
/* The interface should belong to the EIGRP-all-routers group.
|
/* The interface should belong to the EIGRP-all-routers group.
|
||||||
*/
|
*/
|
||||||
if (!ei->member_allrouters
|
if (!ei->member_allrouters
|
||||||
&& (eigrp_if_add_allspfrouters(ei->eigrp, ei->address,
|
&& (eigrp_if_add_allspfrouters(ei->eigrp, &ei->address,
|
||||||
ei->ifp->ifindex)
|
ei->ifp->ifindex)
|
||||||
>= 0))
|
>= 0))
|
||||||
/* Set the flag only if the system call to join
|
/* Set the flag only if the system call to join
|
||||||
@ -303,7 +303,7 @@ void eigrp_if_set_multicast(struct eigrp_interface *ei)
|
|||||||
* group. */
|
* group. */
|
||||||
if (ei->member_allrouters) {
|
if (ei->member_allrouters) {
|
||||||
/* Only actually drop if this is the last reference */
|
/* Only actually drop if this is the last reference */
|
||||||
eigrp_if_drop_allspfrouters(ei->eigrp, ei->address,
|
eigrp_if_drop_allspfrouters(ei->eigrp, &ei->address,
|
||||||
ei->ifp->ifindex);
|
ei->ifp->ifindex);
|
||||||
/* Unset the flag regardless of whether the system call
|
/* Unset the flag regardless of whether the system call
|
||||||
to leave
|
to leave
|
||||||
@ -339,7 +339,7 @@ void eigrp_if_free(struct eigrp_interface *ei, int source)
|
|||||||
eigrp_hello_send(ei, EIGRP_HELLO_GRACEFUL_SHUTDOWN, NULL);
|
eigrp_hello_send(ei, EIGRP_HELLO_GRACEFUL_SHUTDOWN, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
dest_addr = *ei->address;
|
dest_addr = ei->address;
|
||||||
apply_mask(&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);
|
&dest_addr);
|
||||||
@ -375,7 +375,7 @@ struct eigrp_interface *eigrp_if_lookup_by_local_addr(struct eigrp *eigrp,
|
|||||||
if (ifp && ei->ifp != ifp)
|
if (ifp && ei->ifp != ifp)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (IPV4_ADDR_SAME(&address, &ei->address->u.prefix4))
|
if (IPV4_ADDR_SAME(&address, &ei->address.u.prefix4))
|
||||||
return ei;
|
return ei;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -293,7 +293,7 @@ void eigrp_if_update(struct interface *ifp)
|
|||||||
*/
|
*/
|
||||||
for (ALL_LIST_ELEMENTS(eigrp_om->eigrp, node, nnode, eigrp)) {
|
for (ALL_LIST_ELEMENTS(eigrp_om->eigrp, node, nnode, eigrp)) {
|
||||||
/* EIGRP must be on and Router-ID must be configured. */
|
/* EIGRP must be on and Router-ID must be configured. */
|
||||||
if (!eigrp || eigrp->router_id.s_addr == 0)
|
if (eigrp->router_id.s_addr == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Run each network for this interface. */
|
/* Run each network for this interface. */
|
||||||
@ -333,7 +333,7 @@ int eigrp_network_unset(struct eigrp *eigrp, struct prefix *p)
|
|||||||
if (rn->info == NULL)
|
if (rn->info == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (eigrp_network_match_iface(ei->address, &rn->p)) {
|
if (eigrp_network_match_iface(&ei->address, &rn->p)) {
|
||||||
found = true;
|
found = true;
|
||||||
route_unlock_node(rn);
|
route_unlock_node(rn);
|
||||||
break;
|
break;
|
||||||
|
@ -281,7 +281,7 @@ int eigrp_make_sha256_digest(struct eigrp_interface *ei, struct stream *s,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inet_ntop(AF_INET, &ei->address->u.prefix4, source_ip, PREFIX_STRLEN);
|
inet_ntop(AF_INET, &ei->address.u.prefix4, source_ip, PREFIX_STRLEN);
|
||||||
|
|
||||||
memset(&ctx, 0, sizeof(ctx));
|
memset(&ctx, 0, sizeof(ctx));
|
||||||
buffer[0] = '\n';
|
buffer[0] = '\n';
|
||||||
@ -362,7 +362,7 @@ int eigrp_write(struct thread *thread)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ep->dst.s_addr == htonl(EIGRP_MULTICAST_ADDRESS))
|
if (ep->dst.s_addr == htonl(EIGRP_MULTICAST_ADDRESS))
|
||||||
eigrp_if_ipmulticast(eigrp, ei->address, ei->ifp->ifindex);
|
eigrp_if_ipmulticast(eigrp, &ei->address, ei->ifp->ifindex);
|
||||||
|
|
||||||
memset(&iph, 0, sizeof(struct ip));
|
memset(&iph, 0, sizeof(struct ip));
|
||||||
memset(&sa_dst, 0, sizeof(sa_dst));
|
memset(&sa_dst, 0, sizeof(sa_dst));
|
||||||
@ -418,7 +418,7 @@ int eigrp_write(struct thread *thread)
|
|||||||
iph.ip_ttl = EIGRP_IP_TTL;
|
iph.ip_ttl = EIGRP_IP_TTL;
|
||||||
iph.ip_p = IPPROTO_EIGRPIGP;
|
iph.ip_p = IPPROTO_EIGRPIGP;
|
||||||
iph.ip_sum = 0;
|
iph.ip_sum = 0;
|
||||||
iph.ip_src.s_addr = ei->address->u.prefix4.s_addr;
|
iph.ip_src.s_addr = ei->address.u.prefix4.s_addr;
|
||||||
iph.ip_dst.s_addr = ep->dst.s_addr;
|
iph.ip_dst.s_addr = ep->dst.s_addr;
|
||||||
|
|
||||||
memset(&msg, 0, sizeof(msg));
|
memset(&msg, 0, sizeof(msg));
|
||||||
@ -547,7 +547,7 @@ int eigrp_read(struct thread *thread)
|
|||||||
|
|
||||||
/* Self-originated packet should be discarded silently. */
|
/* Self-originated packet should be discarded silently. */
|
||||||
if (eigrp_if_lookup_by_local_addr(eigrp, NULL, iph->ip_src)
|
if (eigrp_if_lookup_by_local_addr(eigrp, NULL, iph->ip_src)
|
||||||
|| (IPV4_ADDR_SAME(&iph->ip_src, &ei->address->u.prefix4))) {
|
|| (IPV4_ADDR_SAME(&iph->ip_src, &ei->address.u.prefix4))) {
|
||||||
if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV))
|
if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"eigrp_read[%s]: Dropping self-originated packet",
|
"eigrp_read[%s]: Dropping self-originated packet",
|
||||||
@ -581,7 +581,7 @@ int eigrp_read(struct thread *thread)
|
|||||||
sizeof(buf[0])),
|
sizeof(buf[0])),
|
||||||
inet_ntop(AF_INET, &iph->ip_dst, buf[1],
|
inet_ntop(AF_INET, &iph->ip_dst, buf[1],
|
||||||
sizeof(buf[1])),
|
sizeof(buf[1])),
|
||||||
inet_ntop(AF_INET, &ei->address->u.prefix4,
|
inet_ntop(AF_INET, &ei->address.u.prefix4,
|
||||||
buf[2], sizeof(buf[2])));
|
buf[2], sizeof(buf[2])));
|
||||||
|
|
||||||
if (iph->ip_dst.s_addr == htonl(EIGRP_MULTICAST_ADDRESS)) {
|
if (iph->ip_dst.s_addr == htonl(EIGRP_MULTICAST_ADDRESS)) {
|
||||||
@ -981,9 +981,9 @@ static int eigrp_check_network_mask(struct eigrp_interface *ei,
|
|||||||
if (ei->type == EIGRP_IFTYPE_POINTOPOINT)
|
if (ei->type == EIGRP_IFTYPE_POINTOPOINT)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
masklen2ip(ei->address->prefixlen, &mask);
|
masklen2ip(ei->address.prefixlen, &mask);
|
||||||
|
|
||||||
me.s_addr = ei->address->u.prefix4.s_addr & mask.s_addr;
|
me.s_addr = ei->address.u.prefix4.s_addr & mask.s_addr;
|
||||||
him.s_addr = ip_src.s_addr & mask.s_addr;
|
him.s_addr = ip_src.s_addr & mask.s_addr;
|
||||||
|
|
||||||
if (IPV4_ADDR_SAME(&me, &him))
|
if (IPV4_ADDR_SAME(&me, &him))
|
||||||
|
@ -180,7 +180,7 @@ struct eigrp_interface {
|
|||||||
/* EIGRP Network Type. */
|
/* EIGRP Network Type. */
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
|
|
||||||
struct prefix *address; /* Interface prefix */
|
struct prefix address; /* Interface prefix */
|
||||||
|
|
||||||
/* Neighbor information. */
|
/* Neighbor information. */
|
||||||
struct list *nbrs; /* EIGRP Neighbor List */
|
struct list *nbrs; /* EIGRP Neighbor List */
|
||||||
|
@ -141,10 +141,10 @@ void eigrp_prefix_entry_add(struct route_table *topology,
|
|||||||
__PRETTY_FUNCTION__,
|
__PRETTY_FUNCTION__,
|
||||||
prefix2str(pe->destination, buf, sizeof(buf)));
|
prefix2str(pe->destination, buf, sizeof(buf)));
|
||||||
}
|
}
|
||||||
|
route_unlock_node(rn);
|
||||||
}
|
}
|
||||||
|
|
||||||
rn->info = pe;
|
rn->info = pe;
|
||||||
route_lock_node(rn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -559,6 +559,7 @@ DEFPY (show_ip_eigrp_topology,
|
|||||||
tn = rn->info;
|
tn = rn->info;
|
||||||
eigrp_vty_display_prefix_entry(vty, eigrp, tn, argc == 5);
|
eigrp_vty_display_prefix_entry(vty, eigrp, tn, argc == 5);
|
||||||
|
|
||||||
|
route_unlock_node(rn);
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +258,8 @@ static int eigrp_interface_address_delete(int command, struct zclient *zclient,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Call interface hook functions to clean up */
|
/* Call interface hook functions to clean up */
|
||||||
eigrp_if_free(ei, INTERFACE_DOWN_BY_ZEBRA);
|
if (prefix_cmp(&ei->address, c->address) == 0)
|
||||||
|
eigrp_if_free(ei, INTERFACE_DOWN_BY_ZEBRA);
|
||||||
|
|
||||||
connected_free(c);
|
connected_free(c);
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
log file zebra.log
|
log file zebra.log
|
||||||
|
debug zebra rib detail
|
||||||
!
|
!
|
||||||
hostname r1
|
hostname r1
|
||||||
!
|
!
|
||||||
|
@ -171,6 +171,16 @@ def test_zebra_ipv4_routingTable():
|
|||||||
assertmsg = 'Zebra IPv4 Routing Table verification failed for router {}'.format(router.name)
|
assertmsg = 'Zebra IPv4 Routing Table verification failed for router {}'.format(router.name)
|
||||||
assert topotest.json_cmp(output, expected) is None, assertmsg
|
assert topotest.json_cmp(output, expected) is None, assertmsg
|
||||||
|
|
||||||
|
def test_shut_interface_and_recover():
|
||||||
|
"Test shutdown of an interface and recovery of the interface"
|
||||||
|
|
||||||
|
tgen = get_topogen()
|
||||||
|
router = tgen.gears['r1']
|
||||||
|
router.run('ip link set r1-eth1 down')
|
||||||
|
topotest.sleep(5, 'Waiting for EIGRP convergence')
|
||||||
|
router.run('ip link set r1-eth1 up')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_shutdown_check_stderr():
|
def test_shutdown_check_stderr():
|
||||||
if os.environ.get('TOPOTESTS_CHECK_STDERR') is None:
|
if os.environ.get('TOPOTESTS_CHECK_STDERR') is None:
|
||||||
|
Loading…
Reference in New Issue
Block a user