summaryrefslogtreecommitdiffstats
path: root/zebra
diff options
context:
space:
mode:
Diffstat (limited to 'zebra')
-rw-r--r--zebra/connected.c2
-rw-r--r--zebra/zebra_rib.c59
2 files changed, 37 insertions, 24 deletions
diff --git a/zebra/connected.c b/zebra/connected.c
index 8bf1d337..ca22a011 100644
--- a/zebra/connected.c
+++ b/zebra/connected.c
@@ -86,7 +86,7 @@ connected_announce (struct interface *ifp, struct connected *ifc)
zebra_interface_address_add_update (ifp, ifc);
- if (if_is_up(ifp))
+ if (if_is_operative(ifp))
{
if (ifc->address->family == AF_INET)
connected_up_ipv4 (ifp, ifc);
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 59b53fa1..5acb644d 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -51,7 +51,7 @@ extern struct zebra_t zebrad;
int rib_process_hold_time = 10;
/* Each route type's string and default distance value. */
-struct
+static const struct
{
int key;
int distance;
@@ -70,7 +70,7 @@ struct
};
/* Vector for routing table. */
-vector vrf_vector;
+static vector vrf_vector;
/* Allocate new VRF. */
static struct vrf *
@@ -401,17 +401,24 @@ nexthop_active_ipv4 (struct rib *rib, struct nexthop *nexthop, int set,
{
/* Directly point connected route. */
newhop = match->nexthop;
- if (newhop && nexthop->type == NEXTHOP_TYPE_IPV4)
- nexthop->ifindex = newhop->ifindex;
- else if (newhop && newhop->type == NEXTHOP_TYPE_IFINDEX)
+ if (newhop)
{
- ifp = if_lookup_by_index (newhop->ifindex);
- return (ifp && if_is_operative (ifp));
- }
- else if (newhop && newhop->type == NEXTHOP_TYPE_IFNAME)
- {
- ifp = if_lookup_by_name(newhop->ifname);
- return (ifp && if_is_operative (ifp));
+ if (nexthop->type == NEXTHOP_TYPE_IPV4)
+ nexthop->ifindex = newhop->ifindex;
+
+ if (newhop->type == NEXTHOP_TYPE_IFINDEX ||
+ newhop->type == NEXTHOP_TYPE_IPV4_IFINDEX)
+ {
+ ifp = if_lookup_by_index (newhop->ifindex);
+ return (ifp && if_is_operative (ifp));
+ }
+
+ if (newhop->type == NEXTHOP_TYPE_IFNAME ||
+ newhop->type == NEXTHOP_TYPE_IPV4_IFNAME)
+ {
+ ifp = if_lookup_by_name(newhop->ifname);
+ return (ifp && if_is_operative (ifp));
+ }
}
return 1;
}
@@ -521,19 +528,25 @@ nexthop_active_ipv6 (struct rib *rib, struct nexthop *nexthop, int set,
/* Directly point connected route. */
newhop = match->nexthop;
- if (newhop && nexthop->type == NEXTHOP_TYPE_IPV6)
- nexthop->ifindex = newhop->ifindex;
- else if (newhop && newhop->type == NEXTHOP_TYPE_IFINDEX)
+ if (newhop)
{
- ifp = if_lookup_by_index (newhop->ifindex);
- return (ifp && if_is_operative (ifp));
+ if (nexthop->type == NEXTHOP_TYPE_IPV4)
+ nexthop->ifindex = newhop->ifindex;
+
+ if (newhop->type == NEXTHOP_TYPE_IFINDEX ||
+ newhop->type == NEXTHOP_TYPE_IPV4_IFINDEX)
+ {
+ ifp = if_lookup_by_index (newhop->ifindex);
+ return (ifp && if_is_operative (ifp));
+ }
+
+ if (newhop->type == NEXTHOP_TYPE_IFNAME ||
+ newhop->type == NEXTHOP_TYPE_IPV4_IFNAME)
+ {
+ ifp = if_lookup_by_name(newhop->ifname);
+ return (ifp && if_is_operative (ifp));
+ }
}
- else if (newhop && newhop->type == NEXTHOP_TYPE_IFNAME)
- {
- ifp = if_lookup_by_name(newhop->ifname);
- return (ifp && if_is_operative (ifp));
- }
-
return 1;
}
else if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_INTERNAL))