diff options
author | David Ahern <dsa@cumulusnetworks.com> | 2017-02-02 12:37:10 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-04 19:58:14 -0500 |
commit | 3b1137fe74829e021f483756a648cbb87c8a1b4a (patch) | |
tree | 1ecd3c34b17fe500786be8bb88d6b632eb1050b9 /include/net/netlink.h | |
parent | beb1afac518dec5a15dc92ba8f0ca016dcf457b4 (diff) | |
download | lwn-3b1137fe74829e021f483756a648cbb87c8a1b4a.tar.gz lwn-3b1137fe74829e021f483756a648cbb87c8a1b4a.zip |
net: ipv6: Change notifications for multipath add to RTA_MULTIPATH
Change ip6_route_multipath_add to send one notifciation with the full
route encoded with RTA_MULTIPATH instead of a series of individual routes.
This is done by adding a skip_notify flag to the nl_info struct. The
flag is used to skip sending of the notification in the fib code that
actually inserts the route. Once the full route has been added, a
notification is generated with all nexthops.
ip6_route_multipath_add handles 3 use cases: new routes, route replace,
and route append. The multipath notification generated needs to be
consistent with the order of the nexthops and it should be consistent
with the order in a FIB dump which means the route with the first nexthop
needs to be used as the route reference. For the first 2 cases (new and
replace), a reference to the route used to send the notification is
obtained by saving the first route added. For the append case, the last
route added is used to loop back to its first sibling route which is
the first nexthop in the multipath route.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/netlink.h')
-rw-r--r-- | include/net/netlink.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/net/netlink.h b/include/net/netlink.h index d3938f11ae52..b239fcd33d80 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -229,6 +229,7 @@ struct nl_info { struct nlmsghdr *nlh; struct net *nl_net; u32 portid; + bool skip_notify; }; int netlink_rcv_skb(struct sk_buff *skb, |