zebra: mrib: static route support
With the MRIB being independent from the Unicast RIB, there's currently
now way to add static routes to the MRIB. Address that by adding a
separate set of commands for MRIB static routes.
Combines these original patches:
- zebra: mrib: ip mroute command to add unicast route to MRIB for multicast RPF.
- zebra: mrib: no ip mroute: Fix removal of static multicast RPF route.
- zebra: mrib: remove unused static_add/delete_ipv4
- zebra: Cleanups to zebra_rib.
- pimd: Merge pim-only branch.
Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 08ce964..a07036e 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -2276,14 +2276,14 @@
/* Install static route into rib. */
static void
-static_install_ipv4 (struct prefix *p, struct static_ipv4 *si)
+static_install_ipv4 (safi_t safi, struct prefix *p, struct static_ipv4 *si)
{
struct rib *rib;
struct route_node *rn;
struct route_table *table;
/* Lookup table. */
- table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+ table = vrf_table (AFI_IP, safi, 0);
if (! table)
return;
@@ -2368,7 +2368,7 @@
/* Uninstall static route from RIB. */
static void
-static_uninstall_ipv4 (struct prefix *p, struct static_ipv4 *si)
+static_uninstall_ipv4 (safi_t safi, struct prefix *p, struct static_ipv4 *si)
{
struct route_node *rn;
struct rib *rib;
@@ -2376,7 +2376,7 @@
struct route_table *table;
/* Lookup table. */
- table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+ table = vrf_table (AFI_IP, safi, 0);
if (! table)
return;
@@ -2427,10 +2427,10 @@
route_unlock_node (rn);
}
-/* Add static route into static route configuration. */
int
-static_add_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
- u_char flags, u_char distance, u_int32_t vrf_id)
+static_add_ipv4_safi (safi_t safi, struct prefix *p, struct in_addr *gate,
+ const char *ifname, u_char flags, u_char distance,
+ u_int32_t vrf_id)
{
u_char type = 0;
struct route_node *rn;
@@ -2441,7 +2441,7 @@
struct route_table *stable;
/* Lookup table. */
- stable = vrf_static_table (AFI_IP, SAFI_UNICAST, vrf_id);
+ stable = vrf_static_table (AFI_IP, safi, vrf_id);
if (! stable)
return -1;
@@ -2475,7 +2475,7 @@
/* Distance changed. */
if (update)
- static_delete_ipv4 (p, gate, ifname, update->distance, vrf_id);
+ static_delete_ipv4_safi (safi, p, gate, ifname, update->distance, vrf_id);
/* Make new static route structure. */
si = XCALLOC (MTYPE_STATIC_IPV4, sizeof (struct static_ipv4));
@@ -2517,15 +2517,14 @@
si->next = cp;
/* Install into rib. */
- static_install_ipv4 (p, si);
+ static_install_ipv4 (safi, p, si);
return 1;
}
-/* Delete static route from static route configuration. */
int
-static_delete_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
- u_char distance, u_int32_t vrf_id)
+static_delete_ipv4_safi (safi_t safi, struct prefix *p, struct in_addr *gate,
+ const char *ifname, u_char distance, u_int32_t vrf_id)
{
u_char type = 0;
struct route_node *rn;
@@ -2533,7 +2532,7 @@
struct route_table *stable;
/* Lookup table. */
- stable = vrf_static_table (AFI_IP, SAFI_UNICAST, vrf_id);
+ stable = vrf_static_table (AFI_IP, safi, vrf_id);
if (! stable)
return -1;
@@ -2565,7 +2564,7 @@
}
/* Install into rib. */
- static_uninstall_ipv4 (p, si);
+ static_uninstall_ipv4 (safi, p, si);
/* Unlink static route from linked list. */
if (si->prev)
@@ -2586,7 +2585,6 @@
return 1;
}
-
#ifdef HAVE_IPV6
static int
rib_bogus_ipv6 (int type, struct prefix_ipv6 *p,