diff options
author | Scott Feldman <sfeldma@gmail.com> | 2015-03-09 16:59:09 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-03-09 23:56:52 -0400 |
commit | f8f2147150de303e814c0452075d467734d3544b (patch) | |
tree | 96d28922f4b9d1643da9c50d0532652c3dc14167 /net/switchdev | |
parent | bf0b211256be342e92d3ee5c5a1fb8d42f3928bb (diff) |
switchdev: add netlink flags to IPv4 FIB add op
Pass in the netlink flags (NLM_F_*) into switchdev driver for IPv4 FIB add op
to allow driver to 1) optimize hardware updates, 2) handle ip route prepend
and append commands correctly.
Suggested-by: Jamal Hadi Salim <jhs@mojatatu.com>
Suggested-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: Scott Feldman <sfeldma@gmail.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/switchdev')
-rw-r--r-- | net/switchdev/switchdev.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c index aba6aa2656d8..8cf42a69baf4 100644 --- a/net/switchdev/switchdev.c +++ b/net/switchdev/switchdev.c | |||
@@ -1,6 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * net/switchdev/switchdev.c - Switch device API | 2 | * net/switchdev/switchdev.c - Switch device API |
3 | * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us> | 3 | * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us> |
4 | * Copyright (c) 2014-2015 Scott Feldman <sfeldma@gmail.com> | ||
4 | * | 5 | * |
5 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
@@ -294,12 +295,13 @@ static struct net_device *netdev_switch_get_dev_by_nhs(struct fib_info *fi) | |||
294 | * @fi: route FIB info structure | 295 | * @fi: route FIB info structure |
295 | * @tos: route TOS | 296 | * @tos: route TOS |
296 | * @type: route type | 297 | * @type: route type |
298 | * @nlflags: netlink flags passed in (NLM_F_*) | ||
297 | * @tb_id: route table ID | 299 | * @tb_id: route table ID |
298 | * | 300 | * |
299 | * Add IPv4 route entry to switch device. | 301 | * Add IPv4 route entry to switch device. |
300 | */ | 302 | */ |
301 | int netdev_switch_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi, | 303 | int netdev_switch_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi, |
302 | u8 tos, u8 type, u32 tb_id) | 304 | u8 tos, u8 type, u32 nlflags, u32 tb_id) |
303 | { | 305 | { |
304 | struct net_device *dev; | 306 | struct net_device *dev; |
305 | const struct net_device_ops *ops; | 307 | const struct net_device_ops *ops; |
@@ -324,7 +326,8 @@ int netdev_switch_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi, | |||
324 | 326 | ||
325 | if (ops->ndo_switch_fib_ipv4_add) { | 327 | if (ops->ndo_switch_fib_ipv4_add) { |
326 | err = ops->ndo_switch_fib_ipv4_add(dev, htonl(dst), dst_len, | 328 | err = ops->ndo_switch_fib_ipv4_add(dev, htonl(dst), dst_len, |
327 | fi, tos, type, tb_id); | 329 | fi, tos, type, nlflags, |
330 | tb_id); | ||
328 | if (!err) | 331 | if (!err) |
329 | fi->fib_flags |= RTNH_F_EXTERNAL; | 332 | fi->fib_flags |= RTNH_F_EXTERNAL; |
330 | } | 333 | } |