summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvneesh Sachdev <avneesh@opensourcerouting.org>2012-11-13 22:49:01 +0000
committerDavid Lamparter <equinox@opensourcerouting.org>2012-11-30 21:41:17 +0100
commit324ed1f87aedf30a45aea951edb2e717c5f9b7fb (patch)
tree3e23528caf97c699bc2403a7e87443005f87f446
parentb9c24cd23091e817942d4eaab95712e84dbec8aa (diff)
zebra: include intf when sending IPv4 nexthop to FPM
* zebra/zebra_fpm_netlink.c Change the zebra FPM code to include an interface index when encoding a nexthop even if the protocol only provided a gateway address (e.g, NEXTHOP_TYPE_IPV4). Signed-off-by: Avneesh Sachdev <avneesh@opensourcerouting.org> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
-rw-r--r--zebra/zebra_fpm_netlink.c23
1 files changed, 6 insertions, 17 deletions
diff --git a/zebra/zebra_fpm_netlink.c b/zebra/zebra_fpm_netlink.c
index 90d3afb2..67bcf0a1 100644
--- a/zebra/zebra_fpm_netlink.c
+++ b/zebra/zebra_fpm_netlink.c
@@ -167,6 +167,7 @@ netlink_route_info_add_nh (netlink_route_info_t *ri, struct nexthop *nexthop)
{
nhi.recursive = 1;
nhi.type = nexthop->rtype;
+ nhi.if_index = nexthop->rifindex;
if (nexthop->rtype == NEXTHOP_TYPE_IPV4
|| nexthop->rtype == NEXTHOP_TYPE_IPV4_IFINDEX)
@@ -186,15 +187,9 @@ netlink_route_info_add_nh (netlink_route_info_t *ri, struct nexthop *nexthop)
#endif /* HAVE_IPV6 */
if (nexthop->rtype == NEXTHOP_TYPE_IFINDEX
- || nexthop->rtype == NEXTHOP_TYPE_IFNAME
- || nexthop->rtype == NEXTHOP_TYPE_IPV4_IFINDEX
- || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFINDEX
- || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFNAME)
+ || nexthop->rtype == NEXTHOP_TYPE_IFNAME)
{
- nhi.if_index = nexthop->rifindex;
- if ((nexthop->rtype == NEXTHOP_TYPE_IPV4_IFINDEX
- || nexthop->rtype == NEXTHOP_TYPE_IFINDEX)
- && nexthop->src.ipv4.s_addr)
+ if (nexthop->src.ipv4.s_addr)
src = &nexthop->src;
}
@@ -203,6 +198,7 @@ netlink_route_info_add_nh (netlink_route_info_t *ri, struct nexthop *nexthop)
nhi.recursive = 0;
nhi.type = nexthop->type;
+ nhi.if_index = nexthop->ifindex;
if (nexthop->type == NEXTHOP_TYPE_IPV4
|| nexthop->type == NEXTHOP_TYPE_IPV4_IFINDEX)
@@ -220,20 +216,13 @@ netlink_route_info_add_nh (netlink_route_info_t *ri, struct nexthop *nexthop)
nhi.gateway = &nexthop->gate;
}
#endif /* HAVE_IPV6 */
+
if (nexthop->type == NEXTHOP_TYPE_IFINDEX
- || nexthop->type == NEXTHOP_TYPE_IFNAME
- || nexthop->type == NEXTHOP_TYPE_IPV4_IFINDEX)
+ || nexthop->type == NEXTHOP_TYPE_IFNAME)
{
- nhi.if_index = nexthop->ifindex;
-
if (nexthop->src.ipv4.s_addr)
src = &nexthop->src;
}
- else if (nexthop->type == NEXTHOP_TYPE_IPV6_IFINDEX
- || nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME)
- {
- nhi.if_index = nexthop->ifindex;
- }
/*
* Fall through...