summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_fsm.c12
-rw-r--r--bgpd/bgp_route.c6
-rw-r--r--pimd/pim_register.c10
3 files changed, 25 insertions, 3 deletions
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index b0d2a8fe0e..786e953843 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -2137,6 +2137,7 @@ bgp_establish(struct peer_connection *connection)
struct peer *other;
int status;
struct peer *peer = connection->peer;
+ struct peer *orig = peer;
other = peer->doppelganger;
hash_release(peer->bgp->peerhash, peer);
@@ -2146,6 +2147,17 @@ bgp_establish(struct peer_connection *connection)
peer = peer_xfer_conn(peer);
if (!peer) {
flog_err(EC_BGP_CONNECT, "%%Neighbor failed in xfer_conn");
+
+ /*
+ * A failure of peer_xfer_conn but not putting the peers
+ * back in the hash ends up with a situation where incoming
+ * connections are rejected, as that the peer is not found
+ * when a lookup is done
+ */
+ (void)hash_get(orig->bgp->peerhash, orig, hash_alloc_intern);
+ if (other)
+ (void)hash_get(other->bgp->peerhash, other,
+ hash_alloc_intern);
return BGP_FSM_FAILURE;
}
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 629df2b480..c8271bf5ce 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -12793,6 +12793,8 @@ DEFPY(show_ip_bgp, show_ip_bgp_cmd,
rpki_target_state = RPKI_VALID;
else if (argv_find(argv, argc, "invalid", &idx))
rpki_target_state = RPKI_INVALID;
+ else if (argv_find(argv, argc, "notfound", &idx))
+ rpki_target_state = RPKI_NOTFOUND;
}
/* Display prefixes with matching version numbers */
@@ -15571,8 +15573,8 @@ DEFUN (show_bgp_peerhash,
struct bgp *bgp;
for (ALL_LIST_ELEMENTS_RO(instances, node, bgp)) {
- vty_out(vty, "BGP: %s\n", bgp->name);
- hash_iterate(bgp->peerhash, show_bgp_peerhash_entry,
+ vty_out(vty, "BGP: %s\n", bgp->name_pretty);
+ hash_iterate(bgp->peerhash, show_bgp_peerhash_entry,
vty);
}
diff --git a/pimd/pim_register.c b/pimd/pim_register.c
index b3e312e047..1f69175829 100644
--- a/pimd/pim_register.c
+++ b/pimd/pim_register.c
@@ -494,6 +494,7 @@ int pim_register_recv(struct interface *ifp, pim_addr dest_addr,
struct pim_interface *pim_ifp = ifp->info;
struct pim_instance *pim = pim_ifp->pim;
pim_addr rp_addr;
+ struct pim_rpf *rpg;
if (pim_ifp->pim_passive_enable) {
if (PIM_DEBUG_PIM_PACKETS)
@@ -602,7 +603,14 @@ int pim_register_recv(struct interface *ifp, pim_addr dest_addr,
}
}
- rp_addr = (RP(pim, sg.grp))->rpf_addr;
+ rpg = RP(pim, sg.grp);
+ if (!rpg) {
+ zlog_warn("%s: Received Register Message %pSG from %pPA on %s where the RP could not be looked up",
+ __func__, &sg, &src_addr, ifp->name);
+ return 0;
+ }
+
+ rp_addr = rpg->rpf_addr;
if (i_am_rp && (!pim_addr_cmp(dest_addr, rp_addr))) {
sentRegisterStop = 0;