diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-01-27 13:33:08 -0500 | 
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-03-01 08:08:05 -0500 | 
| commit | 936ebf0a2dd70f59bf846bad9f1a0fe04c87e37e (patch) | |
| tree | 2404d340c89ffb565afc6355130f149bbd9d055d /zebra/rt_netlink.c | |
| parent | f9c5f9f77107e82313661a50a6dc4e58906b799f (diff) | |
zebra: Add knowledge of whether or not we are acting under startup conditions
The reading if unicast routes from the kernel acts subtly differently
between reading in the routes from the kernel on startup and
reading a new route or getting a response for a route.
Add startup flag(currently ignored) so that we can start
consolidating the functionality.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'zebra/rt_netlink.c')
| -rw-r--r-- | zebra/rt_netlink.c | 24 | 
1 files changed, 12 insertions, 12 deletions
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index d88dc05b28..7eacec6958 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -127,7 +127,7 @@ vrf_lookup_by_table (u_int32_t table_id)  /* Looking up routing table by netlink interface. */  static int  netlink_routing_table (struct sockaddr_nl *snl, struct nlmsghdr *h, -                       ns_id_t ns_id) +                       ns_id_t ns_id, int startup)  {    int len;    struct rtmsg *rtm; @@ -321,7 +321,7 @@ netlink_routing_table (struct sockaddr_nl *snl, struct nlmsghdr *h,  /* Routing information change from the kernel. */  static int  netlink_route_change_read_unicast (struct sockaddr_nl *snl, struct nlmsghdr *h, -                      ns_id_t ns_id) +                                   ns_id_t ns_id, int startup)  {    int len;    struct rtmsg *rtm; @@ -545,7 +545,7 @@ static struct mcast_route_data *mroute = NULL;  static int  netlink_route_change_read_multicast (struct sockaddr_nl *snl, struct nlmsghdr *h, -				     ns_id_t ns_id) +                                     ns_id_t ns_id, int startup)  {    int len;    struct rtmsg *rtm; @@ -629,7 +629,7 @@ netlink_route_change_read_multicast (struct sockaddr_nl *snl, struct nlmsghdr *h  int  netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h, -		      ns_id_t ns_id) +		      ns_id_t ns_id, int startup)  {    int len;    vrf_id_t vrf_id = ns_id; @@ -665,10 +665,10 @@ netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h,    switch (rtm->rtm_type)      {      case RTN_UNICAST: -      netlink_route_change_read_unicast (snl, h, ns_id); +      netlink_route_change_read_unicast (snl, h, ns_id, startup);        break;      case RTN_MULTICAST: -      netlink_route_change_read_multicast (snl, h, ns_id); +      netlink_route_change_read_multicast (snl, h, ns_id, startup);        break;      default:        return 0; @@ -689,7 +689,7 @@ netlink_route_read (struct zebra_ns *zns)    ret = netlink_request (AF_INET, RTM_GETROUTE, &zns->netlink_cmd);    if (ret < 0)      return ret; -  ret = netlink_parse_info (netlink_routing_table, &zns->netlink_cmd, zns, 0); +  ret = netlink_parse_info (netlink_routing_table, &zns->netlink_cmd, zns, 0, 1);    if (ret < 0)      return ret; @@ -697,7 +697,7 @@ netlink_route_read (struct zebra_ns *zns)    ret = netlink_request (AF_INET6, RTM_GETROUTE, &zns->netlink_cmd);    if (ret < 0)      return ret; -  ret = netlink_parse_info (netlink_routing_table, &zns->netlink_cmd, zns, 0); +  ret = netlink_parse_info (netlink_routing_table, &zns->netlink_cmd, zns, 0, 1);    if (ret < 0)      return ret; @@ -1244,7 +1244,7 @@ netlink_neigh_update (int cmd, int ifindex, uint32_t addr, char *lla, int llalen    addattr_l(&req.n, sizeof(req), NDA_DST, &addr, 4);    addattr_l(&req.n, sizeof(req), NDA_LLADDR, lla, llalen); -  return netlink_talk (netlink_talk_filter, &req.n, &zns->netlink_cmd, zns); +  return netlink_talk (netlink_talk_filter, &req.n, &zns->netlink_cmd, zns, 0);  }  /* Routing table change via netlink interface. */ @@ -1542,7 +1542,7 @@ skip:    snl.nl_family = AF_NETLINK;    /* Talk to netlink socket. */ -  return netlink_talk (netlink_talk_filter, &req.n, &zns->netlink_cmd, zns); +  return netlink_talk (netlink_talk_filter, &req.n, &zns->netlink_cmd, zns, 0);  }  int @@ -1572,7 +1572,7 @@ kernel_get_ipmr_sg_stats (void *in)    addattr_l (&req.n, sizeof (req), RTA_SRC, &mroute->sg.src.s_addr, 4);    addattr_l (&req.n, sizeof (req), RTA_DST, &mroute->sg.grp.s_addr, 4); -  suc = netlink_talk (netlink_route_change_read_multicast, &req.n, &zns->netlink_cmd, zns); +  suc = netlink_talk (netlink_route_change_read_multicast, &req.n, &zns->netlink_cmd, zns, 0);    mroute = NULL;    return suc; @@ -1766,7 +1766,7 @@ netlink_mpls_multipath (int cmd, zebra_lsp_t *lsp)      }    /* Talk to netlink socket. */ -  return netlink_talk (netlink_talk_filter, &req.n, &zns->netlink_cmd, zns); +  return netlink_talk (netlink_talk_filter, &req.n, &zns->netlink_cmd, zns, 0);  }  /*  | 
