pim_ifchannel_delete_on_noinfo(ifp);
}
-static void pim_show_assert(struct vty *vty)
+static void pim_show_assert(struct pim_instance *pim, struct vty *vty)
{
struct pim_interface *pim_ifp;
struct pim_ifchannel *ch;
vty_out(vty,
"Interface Address Source Group State Winner Uptime Timer\n");
- for (ALL_LIST_ELEMENTS_RO(pim_ifchannel_list, ch_node, ch)) {
+ for (ALL_LIST_ELEMENTS_RO(pim->ifchannel_list, ch_node, ch)) {
char ch_src_str[INET_ADDRSTRLEN];
char ch_grp_str[INET_ADDRSTRLEN];
char winner_str[INET_ADDRSTRLEN];
} /* scan interface channels */
}
-static void pim_show_assert_internal(struct vty *vty)
+static void pim_show_assert_internal(struct pim_instance *pim, struct vty *vty)
{
struct pim_interface *pim_ifp;
struct listnode *ch_node;
vty_out(vty,
"Interface Address Source Group CA eCA ATD eATD\n");
- for (ALL_LIST_ELEMENTS_RO(pim_ifchannel_list, ch_node, ch)) {
+ for (ALL_LIST_ELEMENTS_RO(pim->ifchannel_list, ch_node, ch)) {
pim_ifp = ch->interface->info;
if (!pim_ifp)
} /* scan interface channels */
}
-static void pim_show_assert_metric(struct vty *vty)
+static void pim_show_assert_metric(struct pim_instance *pim, struct vty *vty)
{
struct pim_interface *pim_ifp;
struct listnode *ch_node;
vty_out(vty,
"Interface Address Source Group RPT Pref Metric Address \n");
- for (ALL_LIST_ELEMENTS_RO(pim_ifchannel_list, ch_node, ch)) {
+ for (ALL_LIST_ELEMENTS_RO(pim->ifchannel_list, ch_node, ch)) {
pim_ifp = ch->interface->info;
if (!pim_ifp)
} /* scan interface channels */
}
-static void pim_show_assert_winner_metric(struct vty *vty)
+static void pim_show_assert_winner_metric(struct pim_instance *pim,
+ struct vty *vty)
{
struct pim_interface *pim_ifp;
struct listnode *ch_node;
vty_out(vty,
"Interface Address Source Group RPT Pref Metric Address \n");
- for (ALL_LIST_ELEMENTS_RO(pim_ifchannel_list, ch_node, ch)) {
+ for (ALL_LIST_ELEMENTS_RO(pim->ifchannel_list, ch_node, ch)) {
pim_ifp = ch->interface->info;
if (!pim_ifp)
json_object_boolean_true_add(json, "lanDelayEnabled");
}
-static void pim_show_membership(struct vty *vty, u_char uj)
+static void pim_show_membership(struct pim_instance *pim, struct vty *vty,
+ u_char uj)
{
struct pim_interface *pim_ifp;
struct listnode *ch_node;
json = json_object_new_object();
- for (ALL_LIST_ELEMENTS_RO(pim_ifchannel_list, ch_node, ch)) {
+ for (ALL_LIST_ELEMENTS_RO(pim->ifchannel_list, ch_node, ch)) {
pim_ifp = ch->interface->info;
}
}
-static void pim_show_join(struct vty *vty, u_char uj)
+static void pim_show_join(struct pim_instance *pim, struct vty *vty, u_char uj)
{
struct pim_interface *pim_ifp;
struct in_addr ifaddr;
vty_out(vty,
"Interface Address Source Group State Uptime Expire Prune\n");
- for (ALL_LIST_ELEMENTS_RO(pim_ifchannel_list, ch_node, ch)) {
+ for (ALL_LIST_ELEMENTS_RO(pim->ifchannel_list, ch_node, ch)) {
pim_ifp = ch->interface->info;
}
}
-static void pim_show_join_desired(struct vty *vty, u_char uj)
+static void pim_show_join_desired(struct pim_instance *pim, struct vty *vty,
+ u_char uj)
{
struct listnode *chnode;
struct pim_interface *pim_ifp;
"Interface Source Group LostAssert Joins PimInclude JoinDesired EvalJD\n");
/* scan per-interface (S,G) state */
- for (ALL_LIST_ELEMENTS_RO(pim_ifchannel_list, chnode, ch)) {
+ for (ALL_LIST_ELEMENTS_RO(pim->ifchannel_list, chnode, ch)) {
/* scan all interfaces */
pim_ifp = ch->interface->info;
if (!pim_ifp)
PIM_STR
"PIM interface assert\n")
{
- pim_show_assert(vty);
+ pim_show_assert(pimg, vty);
return CMD_SUCCESS;
}
PIM_STR
"PIM interface internal assert state\n")
{
- pim_show_assert_internal(vty);
+ pim_show_assert_internal(pimg, vty);
return CMD_SUCCESS;
}
PIM_STR
"PIM interface assert metric\n")
{
- pim_show_assert_metric(vty);
+ pim_show_assert_metric(pimg, vty);
return CMD_SUCCESS;
}
PIM_STR
"PIM interface assert winner metric\n")
{
- pim_show_assert_winner_metric(vty);
+ pim_show_assert_winner_metric(pimg, vty);
return CMD_SUCCESS;
}
JSON_STR)
{
u_char uj = use_json(argc, argv);
- pim_show_join(vty, uj);
+ pim_show_join(pimg, vty, uj);
return CMD_SUCCESS;
}
JSON_STR)
{
u_char uj = use_json(argc, argv);
- pim_show_membership(vty, uj);
+ pim_show_membership(pimg, vty, uj);
return CMD_SUCCESS;
}
"JavaScript Object Notation\n")
{
u_char uj = use_json(argc, argv);
- pim_show_join_desired(vty, uj);
+ pim_show_join_desired(pimg, vty, uj);
return CMD_SUCCESS;
}
#include "pim_rp.h"
#include "pim_nht.h"
-struct list *pim_ifchannel_list = NULL;
-static int pim_iface_vif_index[MAXVIFS];
-
static void pim_if_igmp_join_del_all(struct interface *ifp);
static int igmp_join_sock(const char *ifname, ifindex_t ifindex,
struct in_addr group_addr,
struct in_addr source_addr);
-void pim_if_init(void)
+void pim_if_init(struct pim_instance *pim)
{
int i;
for (i = 0; i < MAXVIFS; i++)
- pim_iface_vif_index[i] = 0;
+ pim->iface_vif_index[i] = 0;
- pim_ifchannel_list = list_new();
- pim_ifchannel_list->cmp =
+ pim->ifchannel_list = list_new();
+ pim->ifchannel_list->cmp =
(int (*)(void *, void *))pim_ifchannel_compare;
}
-void pim_if_terminate(void)
+void pim_if_terminate(struct pim_instance *pim)
{
- if (pim_ifchannel_list)
- list_free(pim_ifchannel_list);
+ if (pim->ifchannel_list)
+ list_free(pim->ifchannel_list);
}
static void *if_list_clean(struct pim_interface *pim_ifp)
static int pim_iface_next_vif_index(struct interface *ifp)
{
+ struct pim_interface *pim_ifp = ifp->info;
+ struct pim_instance *pim = pim_ifp->pim;
int i;
+
/*
* The pimreg vif is always going to be in index 0
* of the table.
return 0;
for (i = 1; i < MAXVIFS; i++) {
- if (pim_iface_vif_index[i] == 0)
+ if (pim->iface_vif_index[i] == 0)
return i;
}
return MAXVIFS;
return -5;
}
- pim_iface_vif_index[pim_ifp->mroute_vif_index] = 1;
+ pim_ifp->pim->iface_vif_index[pim_ifp->mroute_vif_index] = 1;
return 0;
}
/*
Update vif_index
*/
- pim_iface_vif_index[pim_ifp->mroute_vif_index] = 0;
+ pim_ifp->pim->iface_vif_index[pim_ifp->mroute_vif_index] = 0;
pim_ifp->mroute_vif_index = -1;
return 0;
}
-void pim_if_add_vif_all()
-{
- struct listnode *ifnode;
- struct listnode *ifnextnode;
- struct interface *ifp;
-
- for (ALL_LIST_ELEMENTS(vrf_iflist(pimg->vrf_id), ifnode, ifnextnode,
- ifp)) {
- if (!ifp->info)
- continue;
-
- pim_if_add_vif(ifp);
- }
-}
-
-void pim_if_del_vif_all()
-{
- struct listnode *ifnode;
- struct listnode *ifnextnode;
- struct interface *ifp;
-
- for (ALL_LIST_ELEMENTS(vrf_iflist(pimg->vrf_id), ifnode, ifnextnode,
- ifp)) {
- if (!ifp->info)
- continue;
-
- pim_if_del_vif(ifp);
- }
-}
-
// DBS - VRF Revist
struct interface *pim_if_find_by_vif_index(ifindex_t vif_index)
{
*/
listnode_delete(pim_ifp->pim_ifchannel_list, ch);
hash_release(pim_ifp->pim_ifchannel_hash, ch);
- listnode_delete(pim_ifchannel_list, ch);
+ listnode_delete(pim_ifp->pim->ifchannel_list, ch);
if (PIM_DEBUG_PIM_TRACE)
zlog_debug("%s: ifchannel entry %s is deleted ",
/* Attach to list */
listnode_add_sort(pim_ifp->pim_ifchannel_list, ch);
ch = hash_get(pim_ifp->pim_ifchannel_hash, ch, hash_alloc_intern);
- listnode_add_sort(pim_ifchannel_list, ch);
+ listnode_add_sort(pim_ifp->pim->ifchannel_list, ch);
listnode_add_sort(up->ifchannels, ch);
}
if (pim->spt.switchover == PIM_SPT_INFINITY) {
- if (pimg->spt.plist) {
+ if (pim->spt.plist) {
struct prefix_list *plist = prefix_list_lookup(
AFI_IP, pim->spt.plist);
struct prefix g;
struct listnode *ifnode;
struct interface *ifp;
struct pim_interface *new_pim_ifp = new_ifp->info;
+ struct pim_instance *pim = new_pim_ifp->pim;
- for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pimg->vrf_id), ifnode, ifp)) {
+ for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), ifnode, ifp)) {
struct pim_interface *loop_pim_ifp = ifp->info;
struct listnode *ch_node;
struct pim_ifchannel *ch;