switchdev: add swdev ops
authorScott Feldman <sfeldma@gmail.com>
Mon, 16 Mar 2015 04:07:14 +0000 (21:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 16 Mar 2015 04:14:42 +0000 (00:14 -0400)
As discussed at netconf, introduce swdev_ops as first step to move switchdev
ops from ndo to swdev.  This will keep switchdev from cluttering up ndo ops
space.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h
include/net/switchdev.h

index ddab1a2a07a0bc11f840f81bd36ad38adcdd0012..9e8a2a933c68f4e3df3d25e836e95426d2f5ae19 100644 (file)
@@ -1577,6 +1577,9 @@ struct net_device {
        const struct net_device_ops *netdev_ops;
        const struct ethtool_ops *ethtool_ops;
        const struct forwarding_accel_ops *fwd_ops;
+#ifdef CONFIG_NET_SWITCHDEV
+       const struct swdev_ops *swdev_ops;
+#endif
 
        const struct header_ops *header_ops;
 
index 1a9382febcc3b3ab3e63a183ccc49d647dc8e83e..e5de53f92482976f49d882e9e4383ea55a67a842 100644 (file)
 #include <linux/netdevice.h>
 #include <linux/notifier.h>
 
+struct fib_info;
+
+/**
+ * struct switchdev_ops - switchdev operations
+ *
+ * int (*swdev_parent_id_get)(struct net_device *dev,
+ *                           struct netdev_phys_item_id *psid);
+ *     Called to get an ID of the switch chip this port is part of.
+ *     If driver implements this, it indicates that it represents a port
+ *     of a switch chip.
+ *
+ * int (*swdev_port_stp_update)(struct net_device *dev, u8 state);
+ *     Called to notify switch device port of bridge port STP
+ *     state change.
+ *
+ * int (*swdev_fib_ipv4_add)(struct net_device *dev, __be32 dst,
+ *                          int dst_len, struct fib_info *fi,
+ *                          u8 tos, u8 type, u32 nlflags, u32 tb_id);
+ *     Called to add/modify IPv4 route to switch device.
+ *
+ * int (*swdev_fib_ipv4_del)(struct net_device *dev, __be32 dst,
+ *                          int dst_len, struct fib_info *fi,
+ *                          u8 tos, u8 type, u32 tb_id);
+ *     Called to delete IPv4 route from switch device.
+ */
+struct swdev_ops {
+       int     (*swdev_parent_id_get)(struct net_device *dev,
+                                      struct netdev_phys_item_id *psid);
+       int     (*swdev_port_stp_update)(struct net_device *dev, u8 state);
+       int     (*swdev_fib_ipv4_add)(struct net_device *dev, __be32 dst,
+                                     int dst_len, struct fib_info *fi,
+                                     u8 tos, u8 type, u32 nlflags,
+                                     u32 tb_id);
+       int     (*swdev_fib_ipv4_del)(struct net_device *dev, __be32 dst,
+                                     int dst_len, struct fib_info *fi,
+                                     u8 tos, u8 type, u32 tb_id);
+};
+
 enum netdev_switch_notifier_type {
        NETDEV_SWITCH_FDB_ADD = 1,
        NETDEV_SWITCH_FDB_DEL,