diff options
| -rw-r--r-- | zebra/rt_netlink.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 7652f80a..eb9eae3a 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -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);      }  | 
