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 | } |
