summaryrefslogtreecommitdiff
path: root/zebra
diff options
context:
space:
mode:
authorMathieu Goessens <gebura@poolp.org>2009-06-23 15:59:45 +0100
committerPaul Jakma <paul@quagga.net>2009-06-23 15:59:45 +0100
commitd13c3b4fcf802f904ef47ad82fdc9763fc704fdf (patch)
treeb95426a542d8b931b731d8138b296c22ec9ac05e /zebra
parentba803bd51cdf3decfc740b3d7287fe51228f78fb (diff)
[zebra] linux policy routing support with ipv6
Quagga support linux policy routing (ip route ... table $X) with zebra.conf table $X option. It works fine on ipv4. On ipv6 the parameter is ignored (table 0 is used). * zebra/...: Pass appropriate table arg to rib_{add,delete}_ipv6
Diffstat (limited to 'zebra')
-rw-r--r--zebra/connected.c2
-rw-r--r--zebra/rt_netlink.c4
-rw-r--r--zebra/zserv.c8
3 files changed, 7 insertions, 7 deletions
diff --git a/zebra/connected.c b/zebra/connected.c
index c776408a..95399fa1 100644
--- a/zebra/connected.c
+++ b/zebra/connected.c
@@ -342,7 +342,7 @@ connected_up_ipv6 (struct interface *ifp, struct connected *ifc)
return;
#endif
- rib_add_ipv6 (ZEBRA_ROUTE_CONNECT, 0, &p, NULL, ifp->ifindex, 0,
+ rib_add_ipv6 (ZEBRA_ROUTE_CONNECT, 0, &p, NULL, ifp->ifindex, RT_TABLE_MAIN,
ifp->metric, 0);
rib_update ();
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
index 03df28c1..7652f80a 100644
--- a/zebra/rt_netlink.c
+++ b/zebra/rt_netlink.c
@@ -889,9 +889,9 @@ netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h)
}
if (h->nlmsg_type == RTM_NEWROUTE)
- rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, 0, 0, 0);
+ rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, table, 0, 0);
else
- rib_delete_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, 0);
+ rib_delete_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, table);
}
#endif /* HAVE_IPV6 */
diff --git a/zebra/zserv.c b/zebra/zserv.c
index 05380d62..a566e6d4 100644
--- a/zebra/zserv.c
+++ b/zebra/zserv.c
@@ -964,10 +964,10 @@ zread_ipv6_add (struct zserv *client, u_short length)
api.metric = 0;
if (IN6_IS_ADDR_UNSPECIFIED (&nexthop))
- rib_add_ipv6 (api.type, api.flags, &p, NULL, ifindex, 0, api.metric,
+ rib_add_ipv6 (api.type, api.flags, &p, NULL, ifindex, zebrad.rtm_table_default, api.metric,
api.distance);
else
- rib_add_ipv6 (api.type, api.flags, &p, &nexthop, ifindex, 0, api.metric,
+ rib_add_ipv6 (api.type, api.flags, &p, &nexthop, ifindex, zebrad.rtm_table_default, api.metric,
api.distance);
return 0;
}
@@ -1030,9 +1030,9 @@ zread_ipv6_delete (struct zserv *client, u_short length)
api.metric = 0;
if (IN6_IS_ADDR_UNSPECIFIED (&nexthop))
- rib_delete_ipv6 (api.type, api.flags, &p, NULL, ifindex, 0);
+ rib_delete_ipv6 (api.type, api.flags, &p, NULL, ifindex, client->rtm_table);
else
- rib_delete_ipv6 (api.type, api.flags, &p, &nexthop, ifindex, 0);
+ rib_delete_ipv6 (api.type, api.flags, &p, &nexthop, ifindex, client->rtm_table);
return 0;
}