#include "log.h"
#include "memory.h"
+#include "vrf.h"
#include "if.h"
#include "linklist.h"
#include "command.h"
struct isis_circuit *circuit;
int i;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
if (ifp->ifindex == IFINDEX_DELETED)
continue;
#include "log.h"
/* List of interfaces in only the default VRF */
-struct list *iflist;
int ptm_enable = 0;
/* One for each program. This structure is needed to store hooks. */
/* Initialize interface list. */
void
-if_init (vrf_id_t vrf_id, struct list **intf_list)
+if_init (struct list **intf_list)
{
*intf_list = list_new ();
#if 0
#endif /* ifaddr_ipv4_table */
(*intf_list)->cmp = (int (*)(void *, void *))if_cmp_func;
-
- if (vrf_id == VRF_DEFAULT)
- iflist = *intf_list;
}
void
-if_terminate (vrf_id_t vrf_id, struct list **intf_list)
+if_terminate (struct list **intf_list)
{
for (;;)
{
list_delete (*intf_list);
*intf_list = NULL;
-
- if (vrf_id == VRF_DEFAULT)
- iflist = NULL;
}
extern int if_is_pointopoint (struct interface *);
extern int if_is_multicast (struct interface *);
extern void if_add_hook (int, int (*)(struct interface *));
-extern void if_init (vrf_id_t, struct list **);
-extern void if_terminate (vrf_id_t, struct list **);
+extern void if_init (struct list **);
+extern void if_terminate (struct list **);
extern void if_dump_all (void);
extern const char *if_flag_dump(unsigned long);
#endif
/* Exported variables. */
-extern struct list *iflist;
extern struct cmd_element interface_desc_cmd;
extern struct cmd_element no_interface_desc_cmd;
extern struct cmd_element interface_cmd;
return NULL;
}
-/* Create new interface structure. */
+/* Create new vrf structure. */
struct vrf *
vrf_create (const char *name, size_t namelen)
{
vrf->node = rn;
/* Initialize interfaces. */
- if_init (vrf_id, &vrf->iflist);
+ if_init (&vrf->iflist);
}
if (vrf_master.vrf_new_hook && name) {
(*vrf_master.vrf_delete_hook) (vrf->vrf_id, vrf->name, &vrf->info);
if (CHECK_FLAG (vrf->status, VRF_ACTIVE))
- if_terminate (vrf->vrf_id, &vrf->iflist);
+ if_terminate (&vrf->iflist);
if (vrf->node)
{
{
struct vrf * vrf = vrf_lookup (vrf_id);
if (vrf && !vrf->iflist)
- if_init (vrf_id, &vrf->iflist);
+ if_init (&vrf->iflist);
}
/* Free the interface list of the specified VRF. */
{
struct vrf * vrf = vrf_lookup (vrf_id);
if (vrf && vrf->iflist)
- if_terminate (vrf->vrf_id, &vrf->iflist);
+ if_terminate (&vrf->iflist);
}
/*
bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
/* Replay the neighbor, if BFD is enabled on the interface*/
- for (ALL_LIST_ELEMENTS_RO (iflist, inode, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), inode, ifp))
{
oi = (struct ospf6_interface *) ifp->info;
}
else
{
- for (ALL_LIST_ELEMENTS_RO (iflist, i, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), i, ifp))
ospf6_interface_show (vty, ifp);
}
struct ospf6_interface *oi;
struct interface *ifp;
- for (ALL_LIST_ELEMENTS_RO (iflist, i, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), i, ifp))
{
oi = (struct ospf6_interface *) ifp->info;
if (oi == NULL)
struct ospf6_interface *oi;
struct interface *ifp;
- for (ALL_LIST_ELEMENTS_RO (iflist, i, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), i, ifp))
{
oi = (struct ospf6_interface *) ifp->info;
if (oi == NULL)
if (argc == 0) /* Clear all the ospfv3 interfaces. */
{
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
ospf6_interface_clear (vty, ifp);
}
else /* Interface name is specified. */
if (ospf6)
ospf6_delete (ospf6);
- for (ALL_LIST_ELEMENTS_RO(iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
if (ifp->info != NULL)
ospf6_interface_delete(ifp->info);
ospf_if_init ()
{
/* Initialize Zebra interface data structure. */
- om->iflist = iflist;
+ om->iflist = vrf_iflist (VRF_DEFAULT);
if_add_hook (IF_NEW_HOOK, ospf_if_new_hook);
if_add_hook (IF_DELETE_HOOK, ospf_if_delete_hook);
}
#include "linklist.h"
#include "prefix.h"
+#include "vrf.h"
#include "if.h"
#include "table.h"
#include "memory.h"
/* Show All Interfaces. */
if (argc == 0)
{
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+ for (ALL_LIST_ELEMENTS (vrf_iflist (VRF_DEFAULT), node, nnode, ifp))
show_mpls_te_link_sub (vty, ifp);
}
/* Interface name is specified. */
if (argc == (iface_argv + 1))
{
/* Show All Interfaces.*/
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
if (ospf_oi_count(ifp))
{
else if (argv[iface_argv] && strcmp(argv[iface_argv], "json") == 0)
{
/* Show All Interfaces. */
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
if (ospf_oi_count(ifp))
{
struct ospf_if_params *params;
struct ospf *ospf = ospf_lookup();
- for (ALL_LIST_ELEMENTS_RO (iflist, n1, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), n1, ifp))
{
if (memcmp (ifp->name, "VLINK", 5) == 0)
continue;
if (argc == 0) /* Clear all the ospfv2 interfaces. */
{
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
ospf_interface_clear(ifp);
}
else /* Interface name is specified. */
list_delete (ospf->vlinks);
/* Remove any ospf interface config params */
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
struct ospf_if_params *params;
struct listnode *node;
struct interface *ifp;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
struct listnode *cnode;
struct connected *connected;
struct interface *ifp;
struct rip_interface *ri;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
ri = ifp->info;
struct interface *ifp;
struct rip_interface *ri;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
ri = ifp->info;
struct interface *ifp;
struct listnode *node, *nnode;
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+ for (ALL_LIST_ELEMENTS (vrf_iflist (VRF_DEFAULT), node, nnode, ifp))
rip_if_down (ifp);
}
struct listnode *node, *nnode;
/* Check each interface. */
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+ for (ALL_LIST_ELEMENTS (vrf_iflist (VRF_DEFAULT), node, nnode, ifp))
rip_enable_apply (ifp);
}
struct interface *ifp;
struct listnode *node, *nnode;
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+ for (ALL_LIST_ELEMENTS (vrf_iflist (VRF_DEFAULT), node, nnode, ifp))
rip_passive_interface_apply (ifp);
}
struct listnode *node;
struct interface *ifp;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
struct rip_interface *ri;
#include <zebra.h>
+#include "vrf.h"
#include "if.h"
#include "command.h"
#include "prefix.h"
/* If nexthop address matches local configured address then it is
invalid nexthop. */
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, ifc))
{
struct prefix_ipv4 *p;
/* Send RIP update to each interface. */
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
if (if_is_loopback (ifp))
continue;
vty_out (vty, " Interface Send Recv Key-chain%s", VTY_NEWLINE);
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
ri = ifp->info;
{
int found_passive = 0;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
ri = ifp->info;
struct interface *ifp;
struct listnode *node, *nnode;
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+ for (ALL_LIST_ELEMENTS (vrf_iflist (VRF_DEFAULT), node, nnode, ifp))
rip_distribute_update_interface (ifp);
}
/* ARGSUSED */
struct interface *ifp;
struct listnode *node, *nnode;
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+ for (ALL_LIST_ELEMENTS (vrf_iflist (VRF_DEFAULT), node, nnode, ifp))
rip_if_rmap_update_interface (ifp);
rip_routemap_update_redistribute ();
struct interface *ifp;
struct ripng_interface *ri;
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+ for (ALL_LIST_ELEMENTS (vrf_iflist (VRF_DEFAULT), node, nnode, ifp))
{
ri = ifp->info;
struct interface *ifp;
struct ripng_interface *ri;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
ri = ifp->info;
struct interface *ifp;
struct listnode *node;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
ripng_enable_apply (ifp);
}
struct interface *ifp;
struct listnode *node;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
ripng_passive_interface_apply (ifp);
}
struct ripng_interface *ri;
int write = 0;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
ri = ifp->info;
zlog_debug ("RIPng update timer expired!");
/* Supply routes to each interface. */
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
ri = ifp->info;
/* Split Horizon processing is done when generating triggered
updates as well as normal updates (see section 2.6). */
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
ri = ifp->info;
vty_out (vty, " Interface Send Recv%s", VTY_NEWLINE);
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
{
struct ripng_interface *ri;
struct interface *ifp;
struct listnode *node;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
ripng_distribute_update_interface (ifp);
}
struct interface *ifp;
struct listnode *node;
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
ripng_if_rmap_update_interface (ifp);
ripng_routemap_update_redistribute ();
struct interface *ifp;
struct zebra_if *zi;
struct irdp_interface *irdp;
+ vrf_iter_t iter;
zlog_info("IRDP: Received shutdown notification.");
-
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
- {
- zi = ifp->info;
-
- if (!zi)
- continue;
- irdp = &zi->irdp;
- if (!irdp)
- continue;
-
- if (irdp->flags & IF_ACTIVE )
- {
- irdp->flags |= IF_SHUTDOWN;
- irdp_advert_off(ifp);
- }
- }
+
+ for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
+ for (ALL_LIST_ELEMENTS (vrf_iter2iflist (iter), node, nnode, ifp))
+ {
+ zi = ifp->info;
+
+ if (!zi)
+ continue;
+ irdp = &zi->irdp;
+ if (!irdp)
+ continue;
+
+ if (irdp->flags & IF_ACTIVE )
+ {
+ irdp->flags |= IF_SHUTDOWN;
+ irdp_advert_off(ifp);
+ }
+ }
}
#endif /* HAVE_IRDP */
{
struct listnode *i;
struct interface *ifp;
+ vrf_iter_t iter;
ptm_cb.ptm_enable = 1;
- for (ALL_LIST_ELEMENTS_RO (iflist, i, ifp))
- if (!ifp->ptm_enable)
- {
- ifp->ptm_enable = 1;
- /* Assign a default unknown status */
- ifp->ptm_status = ZEBRA_PTM_STATUS_UNKNOWN;
- }
+ for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iter2iflist (iter), i, ifp))
+ if (!ifp->ptm_enable)
+ {
+ ifp->ptm_enable = 1;
+ /* Assign a default unknown status */
+ ifp->ptm_status = ZEBRA_PTM_STATUS_UNKNOWN;
+ }
zebra_ptm_connect(NULL);
struct listnode *i;
struct interface *ifp;
int send_linkup;
+ vrf_iter_t iter;
- for (ALL_LIST_ELEMENTS_RO (iflist, i, ifp))
- {
- send_linkup = 0;
- if (ifp->ptm_enable)
- {
- if (!if_is_operative(ifp))
- send_linkup = 1;
-
- if (ptm_disable)
- ifp->ptm_enable = 0;
- ifp->ptm_status = ZEBRA_PTM_STATUS_UNKNOWN;
-
- if (if_is_operative (ifp) && send_linkup) {
- if (IS_ZEBRA_DEBUG_EVENT)
- zlog_debug ("%s: Bringing up interface %s", __func__,
- ifp->name);
- if_up (ifp);
- }
- }
- }
+ for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
+ for (ALL_LIST_ELEMENTS_RO (vrf_iter2iflist (iter), i, ifp))
+ {
+ send_linkup = 0;
+ if (ifp->ptm_enable)
+ {
+ if (!if_is_operative(ifp))
+ send_linkup = 1;
+
+ if (ptm_disable)
+ ifp->ptm_enable = 0;
+ ifp->ptm_status = ZEBRA_PTM_STATUS_UNKNOWN;
+
+ if (if_is_operative (ifp) && send_linkup)
+ {
+ if (IS_ZEBRA_DEBUG_EVENT)
+ zlog_debug ("%s: Bringing up interface %s", __func__,
+ ifp->name);
+ if_up (ifp);
+ }
+ }
+ }
}