summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetwroks.com>2016-07-29 21:20:19 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-12-21 20:26:04 -0500
commitc8fa5a1e4f2e34319a9bf8e9d1e98476f143742a (patch)
treebb99b782d907f6cb878cfbef2d9e209dcc96cd44
parent978d48a9fe6c8ad23fa8500631c4ffac0b0c7c9c (diff)
pimd: Create storage for a raw socket.
Each interface needs the ability to send raw packets at the RP. Create the data structure to do so. Further commits will create the socket as necessary and send the packet. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
-rw-r--r--pimd/pim_iface.c7
-rw-r--r--pimd/pim_iface.h1
2 files changed, 8 insertions, 0 deletions
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c
index fae11b674a..1ffea6ab46 100644
--- a/pimd/pim_iface.c
+++ b/pimd/pim_iface.c
@@ -87,6 +87,7 @@ struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim)
pim_ifp->options = 0;
pim_ifp->mroute_vif_index = -1;
+ pim_ifp->pim_raw_fd = -1;
pim_ifp->igmp_default_robustness_variable = IGMP_DEFAULT_ROBUSTNESS_VARIABLE;
pim_ifp->igmp_default_query_interval = IGMP_GENERAL_QUERY_INTERVAL;
@@ -162,6 +163,12 @@ void pim_if_delete(struct interface *ifp)
pim_ifp = ifp->info;
zassert(pim_ifp);
+ if (pim_ifp->pim_raw_fd == -1)
+ {
+ close (pim_ifp->pim_raw_fd);
+ pim_ifp->pim_raw_fd = -1;
+ }
+
if (pim_ifp->igmp_join_list) {
pim_if_igmp_join_del_all(ifp);
}
diff --git a/pimd/pim_iface.h b/pimd/pim_iface.h
index 75b85c306a..7f3d6961fa 100644
--- a/pimd/pim_iface.h
+++ b/pimd/pim_iface.h
@@ -73,6 +73,7 @@ struct pim_interface {
struct list *igmp_join_list; /* list of struct igmp_join */
int pim_sock_fd; /* PIM socket file descriptor */
+ int pim_raw_fd; /* RP forwarding */
struct thread *t_pim_sock_read; /* thread for reading PIM socket */
int64_t pim_sock_creation; /* timestamp of PIM socket creation */