提交 ee15ee5d 编写于 作者: D David Ahern 提交者: David S. Miller

net: Add support for l3mdev ops to VRF driver

Signed-off-by: NDavid Ahern <dsa@cumulusnetworks.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 1b69c6d0
...@@ -299,6 +299,7 @@ config NLMON ...@@ -299,6 +299,7 @@ config NLMON
config NET_VRF config NET_VRF
tristate "Virtual Routing and Forwarding (Lite)" tristate "Virtual Routing and Forwarding (Lite)"
depends on IP_MULTIPLE_TABLES && IPV6_MULTIPLE_TABLES depends on IP_MULTIPLE_TABLES && IPV6_MULTIPLE_TABLES
depends on NET_L3_MASTER_DEV
---help--- ---help---
This option enables the support for mapping interfaces into VRF's. The This option enables the support for mapping interfaces into VRF's. The
support enables VRF devices. support enables VRF devices.
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <net/route.h> #include <net/route.h>
#include <net/addrconf.h> #include <net/addrconf.h>
#include <net/vrf.h> #include <net/vrf.h>
#include <net/l3mdev.h>
#define DRV_NAME "vrf" #define DRV_NAME "vrf"
#define DRV_VERSION "1.0" #define DRV_VERSION "1.0"
...@@ -529,6 +530,33 @@ static const struct net_device_ops vrf_netdev_ops = { ...@@ -529,6 +530,33 @@ static const struct net_device_ops vrf_netdev_ops = {
.ndo_del_slave = vrf_del_slave, .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, static void vrf_get_drvinfo(struct net_device *dev,
struct ethtool_drvinfo *info) struct ethtool_drvinfo *info)
{ {
...@@ -546,6 +574,7 @@ static void vrf_setup(struct net_device *dev) ...@@ -546,6 +574,7 @@ static void vrf_setup(struct net_device *dev)
/* Initialize the device structure. */ /* Initialize the device structure. */
dev->netdev_ops = &vrf_netdev_ops; dev->netdev_ops = &vrf_netdev_ops;
dev->l3mdev_ops = &vrf_l3mdev_ops;
dev->ethtool_ops = &vrf_ethtool_ops; dev->ethtool_ops = &vrf_ethtool_ops;
dev->destructor = free_netdev; dev->destructor = free_netdev;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册