aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/netdevice.h
diff options
context:
space:
mode:
authorScott Feldman <scofeldm@cisco.com>2010-05-18 01:49:55 -0400
committerDavid S. Miller <davem@davemloft.net>2010-05-18 01:49:55 -0400
commit57b610805ce92dbd79fc97509f80fa5391b99623 (patch)
tree0d022d63c81d73b51e6001758d4353d0518a01e1 /include/linux/netdevice.h
parentee289b6440c3b0ccb9459495783e8c299bec6604 (diff)
net: Add netlink support for virtual port management (was iovnl)
Add new netdev ops ndo_{set|get}_vf_port to allow setting of port-profile on a netdev interface. Extends netlink socket RTM_SETLINK/ RTM_GETLINK with two new sub msgs called IFLA_VF_PORTS and IFLA_PORT_SELF (added to end of IFLA_cmd list). These are both nested atrtibutes using this layout: [IFLA_NUM_VF] [IFLA_VF_PORTS] [IFLA_VF_PORT] [IFLA_PORT_*], ... [IFLA_VF_PORT] [IFLA_PORT_*], ... ... [IFLA_PORT_SELF] [IFLA_PORT_*], ... These attributes are design to be set and get symmetrically. VF_PORTS is a list of VF_PORTs, one for each VF, when dealing with an SR-IOV device. PORT_SELF is for the PF of the SR-IOV device, in case it wants to also have a port-profile, or for the case where the VF==PF, like in enic patch 2/2 of this patch set. A port-profile is used to configure/enable the external switch virtual port backing the netdev interface, not to configure the host-facing side of the netdev. A port-profile is an identifier known to the switch. How port- profiles are installed on the switch or how available port-profiles are made know to the host is outside the scope of this patch. There are two types of port-profiles specs in the netlink msg. The first spec is for 802.1Qbg (pre-)standard, VDP protocol. The second spec is for devices that run a similar protocol as VDP but in firmware, thus hiding the protocol details. In either case, the specs have much in common and makes sense to define the netlink msg as the union of the two specs. For example, both specs have a notition of associating/deassociating a port-profile. And both specs require some information from the hypervisor manager, such as client port instance ID. The general flow is the port-profile is applied to a host netdev interface using RTM_SETLINK, the receiver of the RTM_SETLINK msg communicates with the switch, and the switch virtual port backing the host netdev interface is configured/enabled based on the settings defined by the port-profile. What those settings comprise, and how those settings are managed is again outside the scope of this patch, since this patch only deals with the first step in the flow. Signed-off-by: Scott Feldman <scofeldm@cisco.com> Signed-off-by: Roopa Prabhu <roprabhu@cisco.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r--include/linux/netdevice.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index c1b2341897c2..c3487a6bdf99 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -686,6 +686,9 @@ struct netdev_rx_queue {
686 * int (*ndo_set_vf_tx_rate)(struct net_device *dev, int vf, int rate); 686 * int (*ndo_set_vf_tx_rate)(struct net_device *dev, int vf, int rate);
687 * int (*ndo_get_vf_config)(struct net_device *dev, 687 * int (*ndo_get_vf_config)(struct net_device *dev,
688 * int vf, struct ifla_vf_info *ivf); 688 * int vf, struct ifla_vf_info *ivf);
689 * int (*ndo_set_vf_port)(struct net_device *dev, int vf,
690 * struct nlattr *port[]);
691 * int (*ndo_get_vf_port)(struct net_device *dev, int vf, struct sk_buff *skb);
689 */ 692 */
690#define HAVE_NET_DEVICE_OPS 693#define HAVE_NET_DEVICE_OPS
691struct net_device_ops { 694struct net_device_ops {
@@ -735,6 +738,11 @@ struct net_device_ops {
735 int (*ndo_get_vf_config)(struct net_device *dev, 738 int (*ndo_get_vf_config)(struct net_device *dev,
736 int vf, 739 int vf,
737 struct ifla_vf_info *ivf); 740 struct ifla_vf_info *ivf);
741 int (*ndo_set_vf_port)(struct net_device *dev,
742 int vf,
743 struct nlattr *port[]);
744 int (*ndo_get_vf_port)(struct net_device *dev,
745 int vf, struct sk_buff *skb);
738#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) 746#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
739 int (*ndo_fcoe_enable)(struct net_device *dev); 747 int (*ndo_fcoe_enable)(struct net_device *dev);
740 int (*ndo_fcoe_disable)(struct net_device *dev); 748 int (*ndo_fcoe_disable)(struct net_device *dev);