diff options
author | Mathieu Goessens <gebura@poolp.org> | 2009-06-23 15:59:45 +0100 |
---|---|---|
committer | Paul Jakma <paul@quagga.net> | 2009-06-23 15:59:45 +0100 |
commit | d13c3b4fcf802f904ef47ad82fdc9763fc704fdf (patch) | |
tree | b95426a542d8b931b731d8138b296c22ec9ac05e | |
parent | ba803bd51cdf3decfc740b3d7287fe51228f78fb (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
-rw-r--r-- | zebra/connected.c | 2 | ||||
-rw-r--r-- | zebra/rt_netlink.c | 4 | ||||
-rw-r--r-- | zebra/zserv.c | 8 |
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; } |