Commit ee15ee5d authored by David Ahern's avatar David Ahern Committed by David S. Miller

net: Add support for l3mdev ops to VRF driver

Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1b69c6d0
......@@ -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.
......
......@@ -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"
......@@ -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)
{
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment