diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2017-07-10 23:22:46 +0200 |
|---|---|---|
| committer | David Lamparter <equinox@opensourcerouting.org> | 2017-07-10 23:22:46 +0200 |
| commit | 1c95bad18a0256bc7f85db773a39bbc7484078de (patch) | |
| tree | 6230beb732c4faeac5a5a81530a8f043746172ad /zebra/rt_netlink.c | |
| parent | 4ad79cbd11be1d08a73bf0fd389139dbedee76bc (diff) | |
| parent | 7fb9d20fcfe5619a2dfb05085f9da5590820ecb5 (diff) | |
Merge branch 'evpn-prep'
First 12-and-a-half commits from PR #619
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'zebra/rt_netlink.c')
| -rw-r--r-- | zebra/rt_netlink.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 0adbe2c27f..471f650588 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -600,6 +600,25 @@ netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h, return 0; } +/* Request for specific route information from the kernel */ +static int +netlink_request_route (struct zebra_ns *zns, int family, int type) +{ + struct + { + struct nlmsghdr n; + struct rtmsg rtm; + } req; + + /* Form the request, specifying filter (rtattr) if needed. */ + memset (&req, 0, sizeof (req)); + req.n.nlmsg_type = type; + req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)); + req.rtm.rtm_family = family; + + return netlink_request (&zns->netlink_cmd, &req.n); +} + /* Routing table read function using netlink interface. Only called bootstrap time. */ int @@ -608,7 +627,7 @@ netlink_route_read (struct zebra_ns *zns) int ret; /* Get IPv4 routing table. */ - ret = netlink_request (AF_INET, RTM_GETROUTE, &zns->netlink_cmd); + ret = netlink_request_route (zns, AF_INET, RTM_GETROUTE); if (ret < 0) return ret; ret = netlink_parse_info (netlink_route_change_read_unicast, &zns->netlink_cmd, zns, 0, 1); @@ -616,7 +635,7 @@ netlink_route_read (struct zebra_ns *zns) return ret; /* Get IPv6 routing table. */ - ret = netlink_request (AF_INET6, RTM_GETROUTE, &zns->netlink_cmd); + ret = netlink_request_route (zns, AF_INET6, RTM_GETROUTE); if (ret < 0) return ret; ret = netlink_parse_info (netlink_route_change_read_unicast, &zns->netlink_cmd, zns, 0, 1); |
