aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2008-11-20 23:52:10 -0500
committerDavid S. Miller <davem@davemloft.net>2008-11-20 23:52:10 -0500
commit2f90b8657ec942d1880f720e0177ee71df7c8e3c (patch)
tree844114b22c548fedbab67e53b09b2efcf170563a /include/linux
parent9db66bdcc83749affe61c61eb8ff3cf08f42afec (diff)
ixgbe: this patch adds support for DCB to the kernel and ixgbe driver
This adds support for Data Center Bridging (DCB) features in the ixgbe driver and adds an rtnetlink interface for configuring DCB to the kernel. The DCB feature support included are Priority Grouping (PG) - which allows bandwidth guarantees to be allocated to groups to traffic based on the 802.1q priority, and Priority Based Flow Control (PFC) - which introduces a new MAC control PAUSE frame which works at granularity of the 802.1p priority instead of the link (IEEE 802.3x). Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/dcbnl.h230
-rw-r--r--include/linux/netdevice.h8
-rw-r--r--include/linux/rtnetlink.h5
3 files changed, 243 insertions, 0 deletions
diff --git a/include/linux/dcbnl.h b/include/linux/dcbnl.h
new file mode 100644
index 000000000000..32d32c1ee410
--- /dev/null
+++ b/include/linux/dcbnl.h
@@ -0,0 +1,230 @@
1/*
2 * Copyright (c) 2008, Intel Corporation.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 * more details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 * Place - Suite 330, Boston, MA 02111-1307 USA.
16 *
17 * Author: Lucy Liu <lucy.liu@intel.com>
18 */
19
20#ifndef __LINUX_DCBNL_H__
21#define __LINUX_DCBNL_H__
22
23#define DCB_PROTO_VERSION 1
24
25struct dcbmsg {
26 unsigned char dcb_family;
27 __u8 cmd;
28 __u16 dcb_pad;
29};
30
31/**
32 * enum dcbnl_commands - supported DCB commands
33 *
34 * @DCB_CMD_UNDEFINED: unspecified command to catch errors
35 * @DCB_CMD_GSTATE: request the state of DCB in the device
36 * @DCB_CMD_SSTATE: set the state of DCB in the device
37 * @DCB_CMD_PGTX_GCFG: request the priority group configuration for Tx
38 * @DCB_CMD_PGTX_SCFG: set the priority group configuration for Tx
39 * @DCB_CMD_PGRX_GCFG: request the priority group configuration for Rx
40 * @DCB_CMD_PGRX_SCFG: set the priority group configuration for Rx
41 * @DCB_CMD_PFC_GCFG: request the priority flow control configuration
42 * @DCB_CMD_PFC_SCFG: set the priority flow control configuration
43 * @DCB_CMD_SET_ALL: apply all changes to the underlying device
44 * @DCB_CMD_GPERM_HWADDR: get the permanent MAC address of the underlying
45 * device. Only useful when using bonding.
46 */
47enum dcbnl_commands {
48 DCB_CMD_UNDEFINED,
49
50 DCB_CMD_GSTATE,
51 DCB_CMD_SSTATE,
52
53 DCB_CMD_PGTX_GCFG,
54 DCB_CMD_PGTX_SCFG,
55 DCB_CMD_PGRX_GCFG,
56 DCB_CMD_PGRX_SCFG,
57
58 DCB_CMD_PFC_GCFG,
59 DCB_CMD_PFC_SCFG,
60
61 DCB_CMD_SET_ALL,
62 DCB_CMD_GPERM_HWADDR,
63
64 __DCB_CMD_ENUM_MAX,
65 DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1,
66};
67
68
69/**
70 * enum dcbnl_attrs - DCB top-level netlink attributes
71 *
72 * @DCB_ATTR_UNDEFINED: unspecified attribute to catch errors
73 * @DCB_ATTR_IFNAME: interface name of the underlying device (NLA_STRING)
74 * @DCB_ATTR_STATE: enable state of DCB in the device (NLA_U8)
75 * @DCB_ATTR_PFC_STATE: enable state of PFC in the device (NLA_U8)
76 * @DCB_ATTR_PFC_CFG: priority flow control configuration (NLA_NESTED)
77 * @DCB_ATTR_NUM_TC: number of traffic classes supported in the device (NLA_U8)
78 * @DCB_ATTR_PG_CFG: priority group configuration (NLA_NESTED)
79 * @DCB_ATTR_SET_ALL: bool to commit changes to hardware or not (NLA_U8)
80 * @DCB_ATTR_PERM_HWADDR: MAC address of the physical device (NLA_NESTED)
81 */
82enum dcbnl_attrs {
83 DCB_ATTR_UNDEFINED,
84
85 DCB_ATTR_IFNAME,
86 DCB_ATTR_STATE,
87 DCB_ATTR_PFC_STATE,
88 DCB_ATTR_PFC_CFG,
89 DCB_ATTR_NUM_TC,
90 DCB_ATTR_PG_CFG,
91 DCB_ATTR_SET_ALL,
92 DCB_ATTR_PERM_HWADDR,
93
94 __DCB_ATTR_ENUM_MAX,
95 DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1,
96};
97
98/**
99 * enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs
100 *
101 * @DCB_PFC_UP_ATTR_UNDEFINED: unspecified attribute to catch errors
102 * @DCB_PFC_UP_ATTR_0: Priority Flow Control value for User Priority 0 (NLA_U8)
103 * @DCB_PFC_UP_ATTR_1: Priority Flow Control value for User Priority 1 (NLA_U8)
104 * @DCB_PFC_UP_ATTR_2: Priority Flow Control value for User Priority 2 (NLA_U8)
105 * @DCB_PFC_UP_ATTR_3: Priority Flow Control value for User Priority 3 (NLA_U8)
106 * @DCB_PFC_UP_ATTR_4: Priority Flow Control value for User Priority 4 (NLA_U8)
107 * @DCB_PFC_UP_ATTR_5: Priority Flow Control value for User Priority 5 (NLA_U8)
108 * @DCB_PFC_UP_ATTR_6: Priority Flow Control value for User Priority 6 (NLA_U8)
109 * @DCB_PFC_UP_ATTR_7: Priority Flow Control value for User Priority 7 (NLA_U8)
110 * @DCB_PFC_UP_ATTR_MAX: highest attribute number currently defined
111 * @DCB_PFC_UP_ATTR_ALL: apply to all priority flow control attrs (NLA_FLAG)
112 *
113 */
114enum dcbnl_pfc_up_attrs {
115 DCB_PFC_UP_ATTR_UNDEFINED,
116
117 DCB_PFC_UP_ATTR_0,
118 DCB_PFC_UP_ATTR_1,
119 DCB_PFC_UP_ATTR_2,
120 DCB_PFC_UP_ATTR_3,
121 DCB_PFC_UP_ATTR_4,
122 DCB_PFC_UP_ATTR_5,
123 DCB_PFC_UP_ATTR_6,
124 DCB_PFC_UP_ATTR_7,
125 DCB_PFC_UP_ATTR_ALL,
126
127 __DCB_PFC_UP_ATTR_ENUM_MAX,
128 DCB_PFC_UP_ATTR_MAX = __DCB_PFC_UP_ATTR_ENUM_MAX - 1,
129};
130
131/**
132 * enum dcbnl_pg_attrs - DCB Priority Group attributes
133 *
134 * @DCB_PG_ATTR_UNDEFINED: unspecified attribute to catch errors
135 * @DCB_PG_ATTR_TC_0: Priority Group Traffic Class 0 configuration (NLA_NESTED)
136 * @DCB_PG_ATTR_TC_1: Priority Group Traffic Class 1 configuration (NLA_NESTED)
137 * @DCB_PG_ATTR_TC_2: Priority Group Traffic Class 2 configuration (NLA_NESTED)
138 * @DCB_PG_ATTR_TC_3: Priority Group Traffic Class 3 configuration (NLA_NESTED)
139 * @DCB_PG_ATTR_TC_4: Priority Group Traffic Class 4 configuration (NLA_NESTED)
140 * @DCB_PG_ATTR_TC_5: Priority Group Traffic Class 5 configuration (NLA_NESTED)
141 * @DCB_PG_ATTR_TC_6: Priority Group Traffic Class 6 configuration (NLA_NESTED)
142 * @DCB_PG_ATTR_TC_7: Priority Group Traffic Class 7 configuration (NLA_NESTED)
143 * @DCB_PG_ATTR_TC_MAX: highest attribute number currently defined
144 * @DCB_PG_ATTR_TC_ALL: apply to all traffic classes (NLA_NESTED)
145 * @DCB_PG_ATTR_BW_ID_0: Percent of link bandwidth for Priority Group 0 (NLA_U8)
146 * @DCB_PG_ATTR_BW_ID_1: Percent of link bandwidth for Priority Group 1 (NLA_U8)
147 * @DCB_PG_ATTR_BW_ID_2: Percent of link bandwidth for Priority Group 2 (NLA_U8)
148 * @DCB_PG_ATTR_BW_ID_3: Percent of link bandwidth for Priority Group 3 (NLA_U8)
149 * @DCB_PG_ATTR_BW_ID_4: Percent of link bandwidth for Priority Group 4 (NLA_U8)
150 * @DCB_PG_ATTR_BW_ID_5: Percent of link bandwidth for Priority Group 5 (NLA_U8)
151 * @DCB_PG_ATTR_BW_ID_6: Percent of link bandwidth for Priority Group 6 (NLA_U8)
152 * @DCB_PG_ATTR_BW_ID_7: Percent of link bandwidth for Priority Group 7 (NLA_U8)
153 * @DCB_PG_ATTR_BW_ID_MAX: highest attribute number currently defined
154 * @DCB_PG_ATTR_BW_ID_ALL: apply to all priority groups (NLA_FLAG)
155 *
156 */
157enum dcbnl_pg_attrs {
158 DCB_PG_ATTR_UNDEFINED,
159
160 DCB_PG_ATTR_TC_0,
161 DCB_PG_ATTR_TC_1,
162 DCB_PG_ATTR_TC_2,
163 DCB_PG_ATTR_TC_3,
164 DCB_PG_ATTR_TC_4,
165 DCB_PG_ATTR_TC_5,
166 DCB_PG_ATTR_TC_6,
167 DCB_PG_ATTR_TC_7,
168 DCB_PG_ATTR_TC_MAX,
169 DCB_PG_ATTR_TC_ALL,
170
171 DCB_PG_ATTR_BW_ID_0,
172 DCB_PG_ATTR_BW_ID_1,
173 DCB_PG_ATTR_BW_ID_2,
174 DCB_PG_ATTR_BW_ID_3,
175 DCB_PG_ATTR_BW_ID_4,
176 DCB_PG_ATTR_BW_ID_5,
177 DCB_PG_ATTR_BW_ID_6,
178 DCB_PG_ATTR_BW_ID_7,
179 DCB_PG_ATTR_BW_ID_MAX,
180 DCB_PG_ATTR_BW_ID_ALL,
181
182 __DCB_PG_ATTR_ENUM_MAX,
183 DCB_PG_ATTR_MAX = __DCB_PG_ATTR_ENUM_MAX - 1,
184};
185
186/**
187 * enum dcbnl_tc_attrs - DCB Traffic Class attributes
188 *
189 * @DCB_TC_ATTR_PARAM_UNDEFINED: unspecified attribute to catch errors
190 * @DCB_TC_ATTR_PARAM_PGID: (NLA_U8) Priority group the traffic class belongs to
191 * Valid values are: 0-7
192 * @DCB_TC_ATTR_PARAM_UP_MAPPING: (NLA_U8) Traffic class to user priority map
193 * Some devices may not support changing the
194 * user priority map of a TC.
195 * @DCB_TC_ATTR_PARAM_STRICT_PRIO: (NLA_U8) Strict priority setting
196 * 0 - none
197 * 1 - group strict
198 * 2 - link strict
199 * @DCB_TC_ATTR_PARAM_BW_PCT: optional - (NLA_U8) If supported by the device and
200 * not configured to use link strict priority,
201 * this is the percentage of bandwidth of the
202 * priority group this traffic class belongs to
203 * @DCB_TC_ATTR_PARAM_ALL: (NLA_FLAG) all traffic class parameters
204 *
205 */
206enum dcbnl_tc_attrs {
207 DCB_TC_ATTR_PARAM_UNDEFINED,
208
209 DCB_TC_ATTR_PARAM_PGID,
210 DCB_TC_ATTR_PARAM_UP_MAPPING,
211 DCB_TC_ATTR_PARAM_STRICT_PRIO,
212 DCB_TC_ATTR_PARAM_BW_PCT,
213 DCB_TC_ATTR_PARAM_ALL,
214
215 __DCB_TC_ATTR_PARAM_ENUM_MAX,
216 DCB_TC_ATTR_PARAM_MAX = __DCB_TC_ATTR_PARAM_ENUM_MAX - 1,
217};
218
219/**
220 * enum dcb_general_attr_values - general DCB attribute values
221 *
222 * @DCB_ATTR_UNDEFINED: value used to indicate an attribute is not supported
223 *
224 */
225enum dcb_general_attr_values {
226 DCB_ATTR_VALUE_UNDEFINED = 0xff
227};
228
229
230#endif /* __LINUX_DCBNL_H__ */
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index d8fb23679ee3..6095af572dfd 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -43,6 +43,9 @@
43 43
44#include <net/net_namespace.h> 44#include <net/net_namespace.h>
45#include <net/dsa.h> 45#include <net/dsa.h>
46#ifdef CONFIG_DCBNL
47#include <net/dcbnl.h>
48#endif
46 49
47struct vlan_group; 50struct vlan_group;
48struct ethtool_ops; 51struct ethtool_ops;
@@ -843,6 +846,11 @@ struct net_device
843#define GSO_MAX_SIZE 65536 846#define GSO_MAX_SIZE 65536
844 unsigned int gso_max_size; 847 unsigned int gso_max_size;
845 848
849#ifdef CONFIG_DCBNL
850 /* Data Center Bridging netlink ops */
851 struct dcbnl_rtnl_ops *dcbnl_ops;
852#endif
853
846#ifdef CONFIG_COMPAT_NET_DEV_OPS 854#ifdef CONFIG_COMPAT_NET_DEV_OPS
847 struct { 855 struct {
848 int (*init)(struct net_device *dev); 856 int (*init)(struct net_device *dev);
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index 2b3d51c6ec9c..e88f7058b3a1 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -107,6 +107,11 @@ enum {
107 RTM_GETADDRLABEL, 107 RTM_GETADDRLABEL,
108#define RTM_GETADDRLABEL RTM_GETADDRLABEL 108#define RTM_GETADDRLABEL RTM_GETADDRLABEL
109 109
110 RTM_GETDCB = 78,
111#define RTM_GETDCB RTM_GETDCB
112 RTM_SETDCB,
113#define RTM_SETDCB RTM_SETDCB
114
110 __RTM_MAX, 115 __RTM_MAX,
111#define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1) 116#define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1)
112}; 117};