diff options
author | Jiri Pirko <jiri@resnulli.us> | 2014-11-28 08:34:17 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-12-02 23:01:20 -0500 |
commit | 007f790c8276271de26416f90d55561bcc96588a (patch) | |
tree | 03a55b7897402e9daa8af64ea2c81d5236f77367 /net | |
parent | 02637fce3e0103ba086b9c33b6d529e69460e4b6 (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/Kconfig | 1 | ||||
-rw-r--r-- | net/Makefile | 3 | ||||
-rw-r--r-- | net/switchdev/Kconfig | 13 | ||||
-rw-r--r-- | net/switchdev/Makefile | 5 | ||||
-rw-r--r-- | net/switchdev/switchdev.c | 33 |
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" | |||
228 | source "net/netlink/Kconfig" | 228 | source "net/netlink/Kconfig" |
229 | source "net/mpls/Kconfig" | 229 | source "net/mpls/Kconfig" |
230 | source "net/hsr/Kconfig" | 230 | source "net/hsr/Kconfig" |
231 | source "net/switchdev/Kconfig" | ||
231 | 232 | ||
232 | config RPS | 233 | config 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/ | |||
73 | obj-$(CONFIG_VSOCKETS) += vmw_vsock/ | 73 | obj-$(CONFIG_VSOCKETS) += vmw_vsock/ |
74 | obj-$(CONFIG_NET_MPLS_GSO) += mpls/ | 74 | obj-$(CONFIG_NET_MPLS_GSO) += mpls/ |
75 | obj-$(CONFIG_HSR) += hsr/ | 75 | obj-$(CONFIG_HSR) += hsr/ |
76 | ifneq ($(CONFIG_NET_SWITCHDEV),) | ||
77 | obj-y += switchdev/ | ||
78 | endif | ||
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 | |||
5 | config 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 | |||
5 | obj-$(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 | */ | ||
24 | int 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 | } | ||
33 | EXPORT_SYMBOL(netdev_switch_parent_id_get); | ||