mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 19:02:58 +00:00
* zebra_rib.c, rib.h: Add distance and metric arguments to the
rib_add_ipv6() function so that IPv6 routes in RIB can have correct metric. No IPv6 routing daemon uses distance yet though. * zserv.c, connected.c, kernel_socket.c, rt_netlink.c, rtread_proc.c,zserv.c: Pass metric and distance info to the rib_add_ipv6(). Forwardport from stable branch.
This commit is contained in:
parent
b7395791a3
commit
be61c4eb59
@ -1,3 +1,12 @@
|
|||||||
|
2005-08-27 Hasso Tepper <hasso at quagga.net>
|
||||||
|
|
||||||
|
* zebra_rib.c, rib.h: Add distance and metric arguments to the
|
||||||
|
rib_add_ipv6() function so that IPv6 routes in RIB can have correct
|
||||||
|
metric. No IPv6 routing daemon uses distance yet though.
|
||||||
|
* zserv.c, connected.c, kernel_socket.c, rt_netlink.c,
|
||||||
|
rtread_proc.c,zserv.c: Pass metric and distance info to the
|
||||||
|
rib_add_ipv6().
|
||||||
|
|
||||||
2005-07-29 Paul Jakma <paul.jakma@sun.com>
|
2005-07-29 Paul Jakma <paul.jakma@sun.com>
|
||||||
|
|
||||||
* interface.c: (if_delete_update) should always be available, not
|
* interface.c: (if_delete_update) should always be available, not
|
||||||
|
@ -308,7 +308,7 @@ connected_up_ipv6 (struct interface *ifp, struct connected *ifc)
|
|||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rib_add_ipv6 (ZEBRA_ROUTE_CONNECT, 0, &p, NULL, ifp->ifindex, 0);
|
rib_add_ipv6 (ZEBRA_ROUTE_CONNECT, 0, &p, NULL, ifp->ifindex, 0, 0, 0);
|
||||||
|
|
||||||
rib_update ();
|
rib_update ();
|
||||||
}
|
}
|
||||||
|
@ -654,7 +654,7 @@ rtm_read (struct rt_msghdr *rtm)
|
|||||||
|
|
||||||
if (rtm->rtm_type == RTM_GET || rtm->rtm_type == RTM_ADD)
|
if (rtm->rtm_type == RTM_GET || rtm->rtm_type == RTM_ADD)
|
||||||
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, zebra_flags,
|
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, zebra_flags,
|
||||||
&p, &gate.sin6.sin6_addr, ifindex, 0);
|
&p, &gate.sin6.sin6_addr, ifindex, 0, 0, 0);
|
||||||
else
|
else
|
||||||
rib_delete_ipv6 (ZEBRA_ROUTE_KERNEL, zebra_flags,
|
rib_delete_ipv6 (ZEBRA_ROUTE_KERNEL, zebra_flags,
|
||||||
&p, &gate.sin6.sin6_addr, ifindex, 0);
|
&p, &gate.sin6.sin6_addr, ifindex, 0);
|
||||||
|
@ -244,7 +244,8 @@ static_delete_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
|
|||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
extern int
|
extern int
|
||||||
rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
|
rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
|
||||||
struct in6_addr *gate, unsigned int ifindex, u_int32_t vrf_id);
|
struct in6_addr *gate, unsigned int ifindex, u_int32_t vrf_id,
|
||||||
|
u_int32_t metric, u_char distance);
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
rib_delete_ipv6 (int type, int flags, struct prefix_ipv6 *p,
|
rib_delete_ipv6 (int type, int flags, struct prefix_ipv6 *p,
|
||||||
|
@ -793,7 +793,8 @@ netlink_routing_table (struct sockaddr_nl *snl, struct nlmsghdr *h)
|
|||||||
memcpy (&p.prefix, dest, 16);
|
memcpy (&p.prefix, dest, 16);
|
||||||
p.prefixlen = rtm->rtm_dst_len;
|
p.prefixlen = rtm->rtm_dst_len;
|
||||||
|
|
||||||
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, flags, &p, gate, index, table);
|
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, flags, &p, gate, index, table,
|
||||||
|
metric, 0);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_IPV6 */
|
#endif /* HAVE_IPV6 */
|
||||||
|
|
||||||
@ -943,7 +944,7 @@ netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (h->nlmsg_type == RTM_NEWROUTE)
|
if (h->nlmsg_type == RTM_NEWROUTE)
|
||||||
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, 0);
|
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, 0, 0, 0);
|
||||||
else
|
else
|
||||||
rib_delete_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, 0);
|
rib_delete_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, 0);
|
||||||
}
|
}
|
||||||
|
@ -156,7 +156,8 @@ proc_ipv6_route_read ()
|
|||||||
str2in6_addr (gate, &gateway);
|
str2in6_addr (gate, &gateway);
|
||||||
p.prefixlen = dest_plen;
|
p.prefixlen = dest_plen;
|
||||||
|
|
||||||
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, zebra_flags, &p, &gateway, 0, 0);
|
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, zebra_flags, &p, &gateway, 0, 0,
|
||||||
|
metric, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose (fp);
|
fclose (fp);
|
||||||
|
@ -1748,7 +1748,8 @@ rib_bogus_ipv6 (int type, struct prefix_ipv6 *p,
|
|||||||
|
|
||||||
int
|
int
|
||||||
rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
|
rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
|
||||||
struct in6_addr *gate, unsigned int ifindex, u_int32_t vrf_id)
|
struct in6_addr *gate, unsigned int ifindex, u_int32_t vrf_id,
|
||||||
|
u_int32_t metric, u_char distance)
|
||||||
{
|
{
|
||||||
struct rib *rib;
|
struct rib *rib;
|
||||||
struct rib *same = NULL;
|
struct rib *same = NULL;
|
||||||
@ -1756,9 +1757,6 @@ rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
|
|||||||
struct route_node *rn;
|
struct route_node *rn;
|
||||||
struct nexthop *nexthop;
|
struct nexthop *nexthop;
|
||||||
|
|
||||||
int distance;
|
|
||||||
u_int32_t metric = 0;
|
|
||||||
|
|
||||||
/* Lookup table. */
|
/* Lookup table. */
|
||||||
table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
|
table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
|
||||||
if (! table)
|
if (! table)
|
||||||
@ -1768,7 +1766,8 @@ rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
|
|||||||
apply_mask_ipv6 (p);
|
apply_mask_ipv6 (p);
|
||||||
|
|
||||||
/* Set default distance by route type. */
|
/* Set default distance by route type. */
|
||||||
distance = route_info[type].distance;
|
if (!distance)
|
||||||
|
distance = route_info[type].distance;
|
||||||
|
|
||||||
if (type == ZEBRA_ROUTE_BGP && CHECK_FLAG (flags, ZEBRA_FLAG_IBGP))
|
if (type == ZEBRA_ROUTE_BGP && CHECK_FLAG (flags, ZEBRA_FLAG_IBGP))
|
||||||
distance = 200;
|
distance = 200;
|
||||||
|
@ -999,9 +999,11 @@ zread_ipv6_add (struct zserv *client, u_short length)
|
|||||||
api.metric = 0;
|
api.metric = 0;
|
||||||
|
|
||||||
if (IN6_IS_ADDR_UNSPECIFIED (&nexthop))
|
if (IN6_IS_ADDR_UNSPECIFIED (&nexthop))
|
||||||
rib_add_ipv6 (api.type, api.flags, &p, NULL, ifindex, 0);
|
rib_add_ipv6 (api.type, api.flags, &p, NULL, ifindex, 0, api.metric,
|
||||||
|
api.distance);
|
||||||
else
|
else
|
||||||
rib_add_ipv6 (api.type, api.flags, &p, &nexthop, ifindex, 0);
|
rib_add_ipv6 (api.type, api.flags, &p, &nexthop, ifindex, 0, api.metric,
|
||||||
|
api.distance);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user