summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2016-09-07 21:34:29 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-12-22 02:26:08 +0100
commit99deb321fcbd6b0519d21ccc1498e88341bd6bd7 (patch)
tree0375eade2ec1452e01b665f38668c695e27a2c6e
parentpimd: Allow ip address selection for BGP unnumbered (diff)
downloadfrr-99deb321fcbd6b0519d21ccc1498e88341bd6bd7.tar.xz
frr-99deb321fcbd6b0519d21ccc1498e88341bd6bd7.zip
pimd: Add the ability to lookup neighbor on a interface
On a specified interface return the single neighbor on that interface. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
-rw-r--r--pimd/pim_neighbor.c16
-rw-r--r--pimd/pim_neighbor.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/pimd/pim_neighbor.c b/pimd/pim_neighbor.c
index 61e19d800..ba2fc753b 100644
--- a/pimd/pim_neighbor.c
+++ b/pimd/pim_neighbor.c
@@ -403,6 +403,22 @@ struct pim_neighbor *pim_neighbor_find(struct interface *ifp,
return 0;
}
+/*
+ * Find the *one* interface out
+ * this interface. If more than
+ * one return NULL
+ */
+struct pim_neighbor *
+pim_neighbor_find_if (struct interface *ifp)
+{
+ struct pim_interface *pim_ifp = ifp->info;
+
+ if (pim_ifp->pim_neighbor_list->count != 1)
+ return NULL;
+
+ return listnode_head (pim_ifp->pim_neighbor_list);
+}
+
struct pim_neighbor *pim_neighbor_add(struct interface *ifp,
struct in_addr source_addr,
pim_hello_options hello_options,
diff --git a/pimd/pim_neighbor.h b/pimd/pim_neighbor.h
index 4bf78d063..3f5a121d4 100644
--- a/pimd/pim_neighbor.h
+++ b/pimd/pim_neighbor.h
@@ -48,6 +48,8 @@ void pim_neighbor_free(struct pim_neighbor *neigh);
struct pim_neighbor *pim_neighbor_find(struct interface *ifp,
struct in_addr source_addr);
+struct pim_neighbor *pim_neighbor_find_if (struct interface *ifp);
+
#define PIM_NEIGHBOR_SEND_DELAY 0
#define PIM_NEIGHBOR_SEND_NOW 1