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 --- |