{
struct mfcctl mc;
struct pim_interface *pim_ifp = ifp->info;
- struct in_addr rpg;
+ struct pim_rpf *rpg;
rpg = RP(msg->im_dst);
/*
* the Interface type is SSM we don't need to
* do anything here
*/
- if ((rpg.s_addr == INADDR_NONE) ||
+ if ((rpg->rpf_addr.s_addr == INADDR_NONE) ||
(!pim_ifp) ||
(!PIM_I_am_DR(pim_ifp)) ||
(pim_ifp->itype == PIM_INTERFACE_SSM))
{
struct pim_interface *pim_ifp = ifp->info;
struct in_addr group;
- struct in_addr rpg;
+ struct pim_rpf *rpg;
const struct ip *ip_hdr;
ip_hdr = (const struct ip *)buf;
rpg = RP(group);
- if ((rpg.s_addr == INADDR_NONE) ||
+ if ((rpg->rpf_addr.s_addr == INADDR_NONE) ||
(!pim_ifp) ||
(!PIM_I_am_DR(pim_ifp)) ||
(pim_ifp->itype == PIM_INTERFACE_SSM)) {
source = ip_hdr->ip_src;
group = ip_hdr->ip_dst;
- if (I_am_RP (group) && (dest_addr.s_addr == (RP (group).s_addr))) {
+ if (I_am_RP (group) && (dest_addr.s_addr == ((RP (group))->rpf_addr.s_addr))) {
sentRegisterStop = 0;
if (*bits && PIM_REGISTER_BORDER_BIT) {
#include "pimd.h"
#include "pim_str.h"
#include "pim_rp.h"
+#include "pim_str.h"
+#include "pim_rpf.h"
static int i_am_rp = 0;
*
* Return the RP that the Group belongs too.
*/
-struct in_addr
+struct pim_rpf *
pim_rp_g (struct in_addr group)
{
/*
* For staticly configured RP, it is always the qpim_rp
*/
- return(qpim_rp.rpf_addr);
+ pim_nexthop_lookup(&qpim_rp.source_nexthop, qpim_rp.rpf_addr);
+ return(&qpim_rp);
}
/*
void pim_rp_check_rp (struct in_addr old, struct in_addr new);
int pim_rp_i_am_rp (struct in_addr group);
int pim_rp_set_upstream_addr (struct in_addr *up, struct in_addr source);
-struct in_addr pim_rp_g (struct in_addr group);
+struct pim_rpf *pim_rp_g (struct in_addr group);
#define I_am_RP(G) pim_rp_i_am_rp ((G))
#define RP(G) pim_rp_g ((G))