aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJiri Pirko <jiri@resnulli.us>2014-11-28 08:34:17 -0500
committerDavid S. Miller <davem@davemloft.net>2014-12-02 23:01:20 -0500
commit007f790c8276271de26416f90d55561bcc96588a (patch)
tree03a55b7897402e9daa8af64ea2c81d5236f77367 /net
parent02637fce3e0103ba086b9c33b6d529e69460e4b6 (diff)
net: introduce generic switch devices support
The goal of this is to provide a possibility to support various switch chips. Drivers should implement relevant ndos to do so. Now there is only one ndo defined: - for getting physical switch id is in place. Note that user can use random port netdevice to access the switch. Signed-off-by: Jiri Pirko <jiri@resnulli.us> Reviewed-by: Thomas Graf <tgraf@suug.ch> Acked-by: Andy Gospodarek <gospo@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/Kconfig1
-rw-r--r--net/Makefile3
-rw-r--r--net/switchdev/Kconfig13
-rw-r--r--net/switchdev/Makefile5
-rw-r--r--net/switchdev/switchdev.c33
5 files changed, 55 insertions, 0 deletions
diff --git a/net/Kconfig b/net/Kconfig
index 99815b5454bf..ff9ffc17fa0e 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -228,6 +228,7 @@ source "net/vmw_vsock/Kconfig"
228source "net/netlink/Kconfig" 228source "net/netlink/Kconfig"
229source "net/mpls/Kconfig" 229source "net/mpls/Kconfig"
230source "net/hsr/Kconfig" 230source "net/hsr/Kconfig"
231source "net/switchdev/Kconfig"
231 232
232config RPS 233config RPS
233 boolean 234 boolean
diff --git a/net/Makefile b/net/Makefile
index 7ed1970074b0..95fc694e4ddc 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -73,3 +73,6 @@ obj-$(CONFIG_OPENVSWITCH) += openvswitch/
73obj-$(CONFIG_VSOCKETS) += vmw_vsock/ 73obj-$(CONFIG_VSOCKETS) += vmw_vsock/
74obj-$(CONFIG_NET_MPLS_GSO) += mpls/ 74obj-$(CONFIG_NET_MPLS_GSO) += mpls/
75obj-$(CONFIG_HSR) += hsr/ 75obj-$(CONFIG_HSR) += hsr/
76ifneq ($(CONFIG_NET_SWITCHDEV),)
77obj-y += switchdev/
78endif
diff --git a/net/switchdev/Kconfig b/net/switchdev/Kconfig
new file mode 100644
index 000000000000..155754588fd6
--- /dev/null
+++ b/net/switchdev/Kconfig
@@ -0,0 +1,13 @@
1#
2# Configuration for Switch device support
3#
4
5config NET_SWITCHDEV
6 boolean "Switch (and switch-ish) device support (EXPERIMENTAL)"
7 depends on INET
8 ---help---
9 This module provides glue between core networking code and device
10 drivers in order to support hardware switch chips in very generic
11 meaning of the word "switch". This include devices supporting L2/L3 but
12 also various flow offloading chips, including switches embedded into
13 SR-IOV NICs.
diff --git a/net/switchdev/Makefile b/net/switchdev/Makefile
new file mode 100644
index 000000000000..5ed63ed324d0
--- /dev/null
+++ b/net/switchdev/Makefile
@@ -0,0 +1,5 @@
1#
2# Makefile for the Switch device API
3#
4
5obj-$(CONFIG_NET_SWITCHDEV) += switchdev.o
diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
new file mode 100644
index 000000000000..66973deaae56
--- /dev/null
+++ b/net/switchdev/switchdev.c
@@ -0,0 +1,33 @@
1/*
2 * net/switchdev/switchdev.c - Switch device API
3 * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 */
10
11#include <linux/kernel.h>
12#include <linux/types.h>
13#include <linux/init.h>
14#include <linux/netdevice.h>
15#include <net/switchdev.h>
16
17/**
18 * netdev_switch_parent_id_get - Get ID of a switch
19 * @dev: port device
20 * @psid: switch ID
21 *
22 * Get ID of a switch this port is part of.
23 */
24int netdev_switch_parent_id_get(struct net_device *dev,
25 struct netdev_phys_item_id *psid)
26{
27 const struct net_device_ops *ops = dev->netdev_ops;
28
29 if (!ops->ndo_switch_parent_id_get)
30 return -EOPNOTSUPP;
31 return ops->ndo_switch_parent_id_get(dev, psid);
32}
33EXPORT_SYMBOL(netdev_switch_parent_id_get);