aboutsummaryrefslogtreecommitdiffstats
path: root/net/switchdev/switchdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/switchdev/switchdev.c')
-rw-r--r--net/switchdev/switchdev.c42
1 files changed, 0 insertions, 42 deletions
diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
index 7e1357db33d7..362413c9b389 100644
--- a/net/switchdev/switchdev.c
+++ b/net/switchdev/switchdev.c
@@ -174,48 +174,6 @@ static int switchdev_deferred_enqueue(struct net_device *dev,
174 return 0; 174 return 0;
175} 175}
176 176
177/**
178 * switchdev_port_attr_get - Get port attribute
179 *
180 * @dev: port device
181 * @attr: attribute to get
182 */
183int switchdev_port_attr_get(struct net_device *dev, struct switchdev_attr *attr)
184{
185 const struct switchdev_ops *ops = dev->switchdev_ops;
186 struct net_device *lower_dev;
187 struct list_head *iter;
188 struct switchdev_attr first = {
189 .id = SWITCHDEV_ATTR_ID_UNDEFINED
190 };
191 int err = -EOPNOTSUPP;
192
193 if (ops && ops->switchdev_port_attr_get)
194 return ops->switchdev_port_attr_get(dev, attr);
195
196 if (attr->flags & SWITCHDEV_F_NO_RECURSE)
197 return err;
198
199 /* Switch device port(s) may be stacked under
200 * bond/team/vlan dev, so recurse down to get attr on
201 * each port. Return -ENODATA if attr values don't
202 * compare across ports.
203 */
204
205 netdev_for_each_lower_dev(dev, lower_dev, iter) {
206 err = switchdev_port_attr_get(lower_dev, attr);
207 if (err)
208 break;
209 if (first.id == SWITCHDEV_ATTR_ID_UNDEFINED)
210 first = *attr;
211 else if (memcmp(&first, attr, sizeof(*attr)))
212 return -ENODATA;
213 }
214
215 return err;
216}
217EXPORT_SYMBOL_GPL(switchdev_port_attr_get);
218
219static int __switchdev_port_attr_set(struct net_device *dev, 177static int __switchdev_port_attr_set(struct net_device *dev,
220 const struct switchdev_attr *attr, 178 const struct switchdev_attr *attr,
221 struct switchdev_trans *trans) 179 struct switchdev_trans *trans)