port.c (e18f4c18ab5b0dd47caaf8377c2e36d66f632a8c) port.c (a8b659e7ff75a6e766bc5691df57ceb26018db9f)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Handling of a single switch port
4 *
5 * Copyright (c) 2017 Savoir-faire Linux Inc.
6 * Vivien Didelot <vivien.didelot@savoirfairelinux.com>
7 */
8

--- 126 unchanged lines hidden (view full) ---

135 flags.val = flags.mask & ~BR_LEARNING;
136
137 for_each_set_bit(flag, &flags.mask, 32) {
138 struct switchdev_brport_flags tmp;
139
140 tmp.val = flags.val & BIT(flag);
141 tmp.mask = BIT(flag);
142
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Handling of a single switch port
4 *
5 * Copyright (c) 2017 Savoir-faire Linux Inc.
6 * Vivien Didelot <vivien.didelot@savoirfairelinux.com>
7 */
8

--- 126 unchanged lines hidden (view full) ---

135 flags.val = flags.mask & ~BR_LEARNING;
136
137 for_each_set_bit(flag, &flags.mask, 32) {
138 struct switchdev_brport_flags tmp;
139
140 tmp.val = flags.val & BIT(flag);
141 tmp.mask = BIT(flag);
142
143 dsa_port_bridge_flags(dp, tmp);
143 dsa_port_bridge_flags(dp, tmp, NULL);
144 }
145}
146
147int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br)
148{
149 struct dsa_notifier_bridge_info info = {
150 .tree_index = dp->ds->dst->index,
151 .sw_index = dp->ds->index,

--- 268 unchanged lines hidden (view full) ---

420 return err;
421
422 dp->ageing_time = ageing_time;
423
424 return 0;
425}
426
427int dsa_port_pre_bridge_flags(const struct dsa_port *dp,
144 }
145}
146
147int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br)
148{
149 struct dsa_notifier_bridge_info info = {
150 .tree_index = dp->ds->dst->index,
151 .sw_index = dp->ds->index,

--- 268 unchanged lines hidden (view full) ---

420 return err;
421
422 dp->ageing_time = ageing_time;
423
424 return 0;
425}
426
427int dsa_port_pre_bridge_flags(const struct dsa_port *dp,
428 struct switchdev_brport_flags flags)
428 struct switchdev_brport_flags flags,
429 struct netlink_ext_ack *extack)
429{
430 struct dsa_switch *ds = dp->ds;
431
430{
431 struct dsa_switch *ds = dp->ds;
432
432 if (!ds->ops->port_egress_floods ||
433 (flags.mask & ~(BR_FLOOD | BR_MCAST_FLOOD)))
433 if (!ds->ops->port_pre_bridge_flags)
434 return -EINVAL;
435
434 return -EINVAL;
435
436 return 0;
436 return ds->ops->port_pre_bridge_flags(ds, dp->index, flags, extack);
437}
438
439int dsa_port_bridge_flags(const struct dsa_port *dp,
437}
438
439int dsa_port_bridge_flags(const struct dsa_port *dp,
440 struct switchdev_brport_flags flags)
440 struct switchdev_brport_flags flags,
441 struct netlink_ext_ack *extack)
441{
442 struct dsa_switch *ds = dp->ds;
442{
443 struct dsa_switch *ds = dp->ds;
443 int port = dp->index;
444 int err = 0;
445
444
446 if (ds->ops->port_egress_floods)
447 err = ds->ops->port_egress_floods(ds, port,
448 flags.val & BR_FLOOD,
449 flags.val & BR_MCAST_FLOOD);
445 if (!ds->ops->port_bridge_flags)
446 return -EINVAL;
450
447
451 return err;
448 return ds->ops->port_bridge_flags(ds, dp->index, flags, extack);
452}
453
449}
450
454int dsa_port_mrouter(struct dsa_port *dp, bool mrouter)
451int dsa_port_mrouter(struct dsa_port *dp, bool mrouter,
452 struct netlink_ext_ack *extack)
455{
456 struct dsa_switch *ds = dp->ds;
453{
454 struct dsa_switch *ds = dp->ds;
457 int port = dp->index;
458
455
459 if (!ds->ops->port_egress_floods)
456 if (!ds->ops->port_set_mrouter)
460 return -EOPNOTSUPP;
461
457 return -EOPNOTSUPP;
458
462 return ds->ops->port_egress_floods(ds, port, true, mrouter);
459 return ds->ops->port_set_mrouter(ds, dp->index, mrouter, extack);
463}
464
465int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu,
466 bool propagate_upstream)
467{
468 struct dsa_notifier_mtu_info info = {
469 .sw_index = dp->ds->index,
470 .propagate_upstream = propagate_upstream,

--- 469 unchanged lines hidden ---
460}
461
462int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu,
463 bool propagate_upstream)
464{
465 struct dsa_notifier_mtu_info info = {
466 .sw_index = dp->ds->index,
467 .propagate_upstream = propagate_upstream,

--- 469 unchanged lines hidden ---