mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-11-01 12:47:16 +00:00
zebra: fix loss of metric for Linux routes
* rt_netlink.c
* netlink_route_change(): fetch metric information like
netlink_routing_table() does and pass it further
This commit is contained in:
parent
3c9cfcdebf
commit
83d1614952
@ -768,6 +768,8 @@ netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h)
|
||||
|
||||
int index;
|
||||
int table;
|
||||
int metric;
|
||||
|
||||
void *dest;
|
||||
void *gate;
|
||||
void *src;
|
||||
@ -825,6 +827,7 @@ netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h)
|
||||
}
|
||||
|
||||
index = 0;
|
||||
metric = 0;
|
||||
dest = NULL;
|
||||
gate = NULL;
|
||||
src = NULL;
|
||||
@ -843,6 +846,9 @@ netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h)
|
||||
if (tb[RTA_PREFSRC])
|
||||
src = RTA_DATA (tb[RTA_PREFSRC]);
|
||||
|
||||
if (h->nlmsg_type == RTM_NEWROUTE && tb[RTA_PRIORITY])
|
||||
metric = *(int *) RTA_DATA(tb[RTA_PRIORITY]);
|
||||
|
||||
if (rtm->rtm_family == AF_INET)
|
||||
{
|
||||
struct prefix_ipv4 p;
|
||||
@ -861,7 +867,7 @@ netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h)
|
||||
}
|
||||
|
||||
if (h->nlmsg_type == RTM_NEWROUTE)
|
||||
rib_add_ipv4 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, src, index, table, 0, 0);
|
||||
rib_add_ipv4 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, src, index, table, metric, 0);
|
||||
else
|
||||
rib_delete_ipv4 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, table);
|
||||
}
|
||||
@ -889,7 +895,7 @@ 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, table, 0, 0);
|
||||
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, table, metric, 0);
|
||||
else
|
||||
rib_delete_ipv6 (ZEBRA_ROUTE_KERNEL, 0, &p, gate, index, table);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user