summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pimd/pim_br.c24
-rw-r--r--pimd/pim_br.h6
-rw-r--r--pimd/pim_register.c38
-rw-r--r--pimd/pim_upstream.c2
4 files changed, 32 insertions, 38 deletions
diff --git a/pimd/pim_br.c b/pimd/pim_br.c
index 121a45fd16..ceee40e716 100644
--- a/pimd/pim_br.c
+++ b/pimd/pim_br.c
@@ -30,8 +30,7 @@
#include "linklist.h"
struct pim_br {
- struct in_addr source;
- struct in_addr group;
+ struct prefix sg;
struct in_addr pmbr;
};
@@ -40,14 +39,14 @@ struct in_addr pim_br_unknown = { .s_addr = 0 };
static struct list *pim_br_list = NULL;
struct in_addr
-pim_br_get_pmbr (struct in_addr source, struct in_addr group)
+pim_br_get_pmbr (struct prefix *sg)
{
struct listnode *node;
struct pim_br *pim_br;
for (ALL_LIST_ELEMENTS_RO (pim_br_list, node, pim_br)) {
- if (source.s_addr == pim_br->source.s_addr &&
- group.s_addr == pim_br->group.s_addr)
+ if (sg->u.sg.src.s_addr == pim_br->sg.u.sg.src.s_addr &&
+ sg->u.sg.grp.s_addr == pim_br->sg.u.sg.grp.s_addr)
return pim_br->pmbr;
}
@@ -55,14 +54,14 @@ pim_br_get_pmbr (struct in_addr source, struct in_addr group)
}
void
-pim_br_set_pmbr (struct in_addr source, struct in_addr group, struct in_addr br)
+pim_br_set_pmbr (struct prefix *sg, struct in_addr br)
{
struct listnode *node, *next;
struct pim_br *pim_br;
for (ALL_LIST_ELEMENTS (pim_br_list, node, next, pim_br)) {
- if (source.s_addr == pim_br->source.s_addr &&
- group.s_addr == pim_br->group.s_addr)
+ if (sg->u.sg.src.s_addr == pim_br->sg.u.sg.src.s_addr &&
+ sg->u.sg.grp.s_addr == pim_br->sg.u.sg.grp.s_addr)
break;
}
@@ -73,8 +72,7 @@ pim_br_set_pmbr (struct in_addr source, struct in_addr group, struct in_addr br)
return;
}
- pim_br->source = source;
- pim_br->group = group;
+ pim_br->sg = *sg;
listnode_add(pim_br_list, pim_br);
}
@@ -86,14 +84,14 @@ pim_br_set_pmbr (struct in_addr source, struct in_addr group, struct in_addr br)
* Remove the (S,G) from the stored values
*/
void
-pim_br_clear_pmbr (struct in_addr source, struct in_addr group)
+pim_br_clear_pmbr (struct prefix *sg)
{
struct listnode *node, *next;
struct pim_br *pim_br;
for (ALL_LIST_ELEMENTS (pim_br_list, node, next, pim_br)) {
- if (source.s_addr == pim_br->source.s_addr &&
- group.s_addr == pim_br->group.s_addr)
+ if (sg->u.sg.src.s_addr == pim_br->sg.u.sg.src.s_addr &&
+ sg->u.sg.grp.s_addr == pim_br->sg.u.sg.grp.s_addr)
break;
}
diff --git a/pimd/pim_br.h b/pimd/pim_br.h
index 06b10ada30..bcb864dfc1 100644
--- a/pimd/pim_br.h
+++ b/pimd/pim_br.h
@@ -21,10 +21,10 @@
#ifndef PIM_BR_H
#define PIM_BR_H
-struct in_addr pim_br_get_pmbr (struct in_addr source, struct in_addr group);
+struct in_addr pim_br_get_pmbr (struct prefix *sg);
-void pim_br_set_pmbr (struct in_addr source, struct in_addr group, struct in_addr value);
-void pim_br_clear_pmbr (struct in_addr source, struct in_addr group);
+void pim_br_set_pmbr (struct prefix *sg, struct in_addr value);
+void pim_br_clear_pmbr (struct prefix *sg);
void pim_br_init (void);
diff --git a/pimd/pim_register.c b/pimd/pim_register.c
index c1a78b722f..480c5e36cf 100644
--- a/pimd/pim_register.c
+++ b/pimd/pim_register.c
@@ -67,8 +67,8 @@ pim_check_is_my_ip_address (struct in_addr dest_addr)
}
static void
-pim_register_stop_send (struct interface *ifp, struct in_addr source,
- struct in_addr group, struct in_addr originator)
+pim_register_stop_send (struct interface *ifp, struct prefix *sg,
+ struct in_addr originator)
{
struct pim_interface *pinfo;
unsigned char buffer[3000];
@@ -80,12 +80,12 @@ pim_register_stop_send (struct interface *ifp, struct in_addr source,
memset (buffer, 0, 3000);
b1 = (uint8_t *)buffer + PIM_MSG_REGISTER_STOP_LEN;
- length = pim_encode_addr_group (b1, AFI_IP, 0, 0, group);
+ length = pim_encode_addr_group (b1, AFI_IP, 0, 0, sg->u.sg.grp);
b1length += length;
b1 += length;
p.family = AF_INET;
- p.u.prefix4 = source;
+ p.u.prefix4 = sg->u.sg.src;
p.prefixlen = 32;
length = pim_encode_addr_ucast (b1, &p);
b1length += length;
@@ -243,8 +243,6 @@ pim_register_recv (struct interface *ifp,
{
int sentRegisterStop = 0;
struct ip *ip_hdr;
- struct in_addr group = { .s_addr = 0 };
- struct in_addr source = { .s_addr = 0 };
struct prefix sg;
uint32_t *bits;
@@ -288,21 +286,22 @@ pim_register_recv (struct interface *ifp,
*/
#define PIM_MSG_REGISTER_BIT_RESERVED_LEN 4
ip_hdr = (struct ip *)(tlv_buf + PIM_MSG_REGISTER_BIT_RESERVED_LEN);
- source = ip_hdr->ip_src;
- group = ip_hdr->ip_dst;
+ memset (&sg, 0, sizeof (struct prefix));
+ sg.u.sg.src = ip_hdr->ip_src;
+ sg.u.sg.grp = ip_hdr->ip_dst;
- if (I_am_RP (group) && (dest_addr.s_addr == ((RP (group))->rpf_addr.s_addr))) {
+ if (I_am_RP (sg.u.sg.grp) && (dest_addr.s_addr == ((RP (sg.u.sg.grp))->rpf_addr.s_addr))) {
sentRegisterStop = 0;
if (*bits & PIM_REGISTER_BORDER_BIT) {
- struct in_addr pimbr = pim_br_get_pmbr (source, group);
+ struct in_addr pimbr = pim_br_get_pmbr (&sg);
if (PIM_DEBUG_PIM_PACKETS)
zlog_debug("%s: Received Register message with Border bit set", __func__);
if (pimbr.s_addr == pim_br_unknown.s_addr)
- pim_br_set_pmbr(source, group, src_addr);
+ pim_br_set_pmbr(&sg, src_addr);
else if (src_addr.s_addr != pimbr.s_addr) {
- pim_register_stop_send (ifp, source, group, src_addr);
+ pim_register_stop_send (ifp, &sg, src_addr);
if (PIM_DEBUG_PIM_PACKETS)
zlog_debug("%s: Sending register-Stop to %s and dropping mr. packet",
__func__, "Sender");
@@ -311,9 +310,6 @@ pim_register_recv (struct interface *ifp,
}
}
- memset (&sg, 0, sizeof (struct prefix));
- sg.u.sg.src = source;
- sg.u.sg.grp = group;
struct pim_upstream *upstream = pim_upstream_find (&sg);
/*
* If we don't have a place to send ignore the packet
@@ -326,14 +322,14 @@ pim_register_recv (struct interface *ifp,
if (upstream->join_state == PIM_UPSTREAM_PRUNE)
{
- pim_register_stop_send (ifp, source, group, src_addr);
+ pim_register_stop_send (ifp, &sg, src_addr);
return 1;
}
if ((upstream->sptbit == PIM_UPSTREAM_SPTBIT_TRUE) ||
((SwitchToSptDesired(&sg)) &&
(inherited_olist(source, group) == NULL))) {
- pim_register_stop_send (ifp, source, group, src_addr);
+ pim_register_stop_send (ifp, &sg, src_addr);
sentRegisterStop = 1;
}
@@ -349,13 +345,13 @@ pim_register_recv (struct interface *ifp,
if (!(upstream->sptbit == PIM_UPSTREAM_SPTBIT_TRUE) &&
!(*bits & PIM_REGISTER_NR_BIT))
{
- pim_rp_set_upstream_addr (&upstream->upstream_addr, source);
+ pim_rp_set_upstream_addr (&upstream->upstream_addr, sg.u.sg.src);
pim_nexthop_lookup (&upstream->rpf.source_nexthop,
upstream->upstream_addr, NULL);
upstream->rpf.source_nexthop.interface = ifp;
- upstream->sg.u.sg.src.s_addr = source.s_addr;
+ upstream->sg.u.sg.src = sg.u.sg.src;
upstream->rpf.rpf_addr = upstream->rpf.source_nexthop.mrib_nexthop_addr;
- upstream->channel_oil->oil.mfcc_origin = source;
+ upstream->channel_oil->oil.mfcc_origin = sg.u.sg.src;
pim_scan_individual_oil (upstream->channel_oil);
pim_upstream_send_join (upstream);
@@ -363,7 +359,7 @@ pim_register_recv (struct interface *ifp,
//inherited_olist(S,G,rpt)
}
} else {
- pim_register_stop_send (ifp, source, group, src_addr);
+ pim_register_stop_send (ifp, &sg, src_addr);
}
return 1;
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c
index 4931c6c667..60433dfe3d 100644
--- a/pimd/pim_upstream.c
+++ b/pimd/pim_upstream.c
@@ -686,7 +686,7 @@ pim_upstream_keep_alive_timer (struct thread *t)
if (I_am_RP (up->sg.u.sg.grp))
{
- pim_br_clear_pmbr (up->sg.u.sg.src, up->sg.u.sg.grp);
+ pim_br_clear_pmbr (&up->sg);
/*
* We need to do more here :)
* But this is the start.