Skip to content

Commit

Permalink
net: Add support for l3mdev ops to VRF driver
Browse files Browse the repository at this point in the history
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David Ahern authored and David S. Miller committed Sep 30, 2015
1 parent 1b69c6d commit ee15ee5
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/net/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,7 @@ config NLMON
config NET_VRF
tristate "Virtual Routing and Forwarding (Lite)"
depends on IP_MULTIPLE_TABLES && IPV6_MULTIPLE_TABLES
depends on NET_L3_MASTER_DEV
---help---
This option enables the support for mapping interfaces into VRF's. The
support enables VRF devices.
Expand Down
29 changes: 29 additions & 0 deletions drivers/net/vrf.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <net/route.h>
#include <net/addrconf.h>
#include <net/vrf.h>
#include <net/l3mdev.h>

#define DRV_NAME "vrf"
#define DRV_VERSION "1.0"
Expand Down Expand Up @@ -529,6 +530,33 @@ static const struct net_device_ops vrf_netdev_ops = {
.ndo_del_slave = vrf_del_slave,
};

static u32 vrf_fib_table(const struct net_device *dev)
{
struct net_vrf *vrf = netdev_priv(dev);

return vrf->tb_id;
}

static struct rtable *vrf_get_rtable(const struct net_device *dev,
const struct flowi4 *fl4)
{
struct rtable *rth = NULL;

if (!(fl4->flowi4_flags & FLOWI_FLAG_VRFSRC)) {
struct net_vrf *vrf = netdev_priv(dev);

rth = vrf->rth;
atomic_inc(&rth->dst.__refcnt);
}

return rth;
}

static const struct l3mdev_ops vrf_l3mdev_ops = {
.l3mdev_fib_table = vrf_fib_table,
.l3mdev_get_rtable = vrf_get_rtable,
};

static void vrf_get_drvinfo(struct net_device *dev,
struct ethtool_drvinfo *info)
{
Expand All @@ -546,6 +574,7 @@ static void vrf_setup(struct net_device *dev)

/* Initialize the device structure. */
dev->netdev_ops = &vrf_netdev_ops;
dev->l3mdev_ops = &vrf_l3mdev_ops;
dev->ethtool_ops = &vrf_ethtool_ops;
dev->destructor = free_netdev;

Expand Down

0 comments on commit ee15ee5

Please sign in to comment.