slave.c (76898B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * net/dsa/slave.c - Slave device handling 4 * Copyright (c) 2008-2009 Marvell Semiconductor 5 */ 6 7#include <linux/list.h> 8#include <linux/etherdevice.h> 9#include <linux/netdevice.h> 10#include <linux/phy.h> 11#include <linux/phy_fixed.h> 12#include <linux/phylink.h> 13#include <linux/of_net.h> 14#include <linux/of_mdio.h> 15#include <linux/mdio.h> 16#include <net/rtnetlink.h> 17#include <net/pkt_cls.h> 18#include <net/selftests.h> 19#include <net/tc_act/tc_mirred.h> 20#include <linux/if_bridge.h> 21#include <linux/if_hsr.h> 22#include <net/dcbnl.h> 23#include <linux/netpoll.h> 24 25#include "dsa_priv.h" 26 27static void dsa_slave_standalone_event_work(struct work_struct *work) 28{ 29 struct dsa_standalone_event_work *standalone_work = 30 container_of(work, struct dsa_standalone_event_work, work); 31 const unsigned char *addr = standalone_work->addr; 32 struct net_device *dev = standalone_work->dev; 33 struct dsa_port *dp = dsa_slave_to_port(dev); 34 struct switchdev_obj_port_mdb mdb; 35 struct dsa_switch *ds = dp->ds; 36 u16 vid = standalone_work->vid; 37 int err; 38 39 switch (standalone_work->event) { 40 case DSA_UC_ADD: 41 err = dsa_port_standalone_host_fdb_add(dp, addr, vid); 42 if (err) { 43 dev_err(ds->dev, 44 "port %d failed to add %pM vid %d to fdb: %d\n", 45 dp->index, addr, vid, err); 46 break; 47 } 48 break; 49 50 case DSA_UC_DEL: 51 err = dsa_port_standalone_host_fdb_del(dp, addr, vid); 52 if (err) { 53 dev_err(ds->dev, 54 "port %d failed to delete %pM vid %d from fdb: %d\n", 55 dp->index, addr, vid, err); 56 } 57 58 break; 59 case DSA_MC_ADD: 60 ether_addr_copy(mdb.addr, addr); 61 mdb.vid = vid; 62 63 err = dsa_port_standalone_host_mdb_add(dp, &mdb); 64 if (err) { 65 dev_err(ds->dev, 66 "port %d failed to add %pM vid %d to mdb: %d\n", 67 dp->index, addr, vid, err); 68 break; 69 } 70 break; 71 case DSA_MC_DEL: 72 ether_addr_copy(mdb.addr, addr); 73 mdb.vid = vid; 74 75 err = dsa_port_standalone_host_mdb_del(dp, &mdb); 76 if (err) { 77 dev_err(ds->dev, 78 "port %d failed to delete %pM vid %d from mdb: %d\n", 79 dp->index, addr, vid, err); 80 } 81 82 break; 83 } 84 85 kfree(standalone_work); 86} 87 88static int dsa_slave_schedule_standalone_work(struct net_device *dev, 89 enum dsa_standalone_event event, 90 const unsigned char *addr, 91 u16 vid) 92{ 93 struct dsa_standalone_event_work *standalone_work; 94 95 standalone_work = kzalloc(sizeof(*standalone_work), GFP_ATOMIC); 96 if (!standalone_work) 97 return -ENOMEM; 98 99 INIT_WORK(&standalone_work->work, dsa_slave_standalone_event_work); 100 standalone_work->event = event; 101 standalone_work->dev = dev; 102 103 ether_addr_copy(standalone_work->addr, addr); 104 standalone_work->vid = vid; 105 106 dsa_schedule_work(&standalone_work->work); 107 108 return 0; 109} 110 111static int dsa_slave_sync_uc(struct net_device *dev, 112 const unsigned char *addr) 113{ 114 struct net_device *master = dsa_slave_to_master(dev); 115 struct dsa_port *dp = dsa_slave_to_port(dev); 116 117 dev_uc_add(master, addr); 118 119 if (!dsa_switch_supports_uc_filtering(dp->ds)) 120 return 0; 121 122 return dsa_slave_schedule_standalone_work(dev, DSA_UC_ADD, addr, 0); 123} 124 125static int dsa_slave_unsync_uc(struct net_device *dev, 126 const unsigned char *addr) 127{ 128 struct net_device *master = dsa_slave_to_master(dev); 129 struct dsa_port *dp = dsa_slave_to_port(dev); 130 131 dev_uc_del(master, addr); 132 133 if (!dsa_switch_supports_uc_filtering(dp->ds)) 134 return 0; 135 136 return dsa_slave_schedule_standalone_work(dev, DSA_UC_DEL, addr, 0); 137} 138 139static int dsa_slave_sync_mc(struct net_device *dev, 140 const unsigned char *addr) 141{ 142 struct net_device *master = dsa_slave_to_master(dev); 143 struct dsa_port *dp = dsa_slave_to_port(dev); 144 145 dev_mc_add(master, addr); 146 147 if (!dsa_switch_supports_mc_filtering(dp->ds)) 148 return 0; 149 150 return dsa_slave_schedule_standalone_work(dev, DSA_MC_ADD, addr, 0); 151} 152 153static int dsa_slave_unsync_mc(struct net_device *dev, 154 const unsigned char *addr) 155{ 156 struct net_device *master = dsa_slave_to_master(dev); 157 struct dsa_port *dp = dsa_slave_to_port(dev); 158 159 dev_mc_del(master, addr); 160 161 if (!dsa_switch_supports_mc_filtering(dp->ds)) 162 return 0; 163 164 return dsa_slave_schedule_standalone_work(dev, DSA_MC_DEL, addr, 0); 165} 166 167/* slave mii_bus handling ***************************************************/ 168static int dsa_slave_phy_read(struct mii_bus *bus, int addr, int reg) 169{ 170 struct dsa_switch *ds = bus->priv; 171 172 if (ds->phys_mii_mask & (1 << addr)) 173 return ds->ops->phy_read(ds, addr, reg); 174 175 return 0xffff; 176} 177 178static int dsa_slave_phy_write(struct mii_bus *bus, int addr, int reg, u16 val) 179{ 180 struct dsa_switch *ds = bus->priv; 181 182 if (ds->phys_mii_mask & (1 << addr)) 183 return ds->ops->phy_write(ds, addr, reg, val); 184 185 return 0; 186} 187 188void dsa_slave_mii_bus_init(struct dsa_switch *ds) 189{ 190 ds->slave_mii_bus->priv = (void *)ds; 191 ds->slave_mii_bus->name = "dsa slave smi"; 192 ds->slave_mii_bus->read = dsa_slave_phy_read; 193 ds->slave_mii_bus->write = dsa_slave_phy_write; 194 snprintf(ds->slave_mii_bus->id, MII_BUS_ID_SIZE, "dsa-%d.%d", 195 ds->dst->index, ds->index); 196 ds->slave_mii_bus->parent = ds->dev; 197 ds->slave_mii_bus->phy_mask = ~ds->phys_mii_mask; 198} 199 200 201/* slave device handling ****************************************************/ 202static int dsa_slave_get_iflink(const struct net_device *dev) 203{ 204 return dsa_slave_to_master(dev)->ifindex; 205} 206 207static int dsa_slave_open(struct net_device *dev) 208{ 209 struct net_device *master = dsa_slave_to_master(dev); 210 struct dsa_port *dp = dsa_slave_to_port(dev); 211 struct dsa_switch *ds = dp->ds; 212 int err; 213 214 err = dev_open(master, NULL); 215 if (err < 0) { 216 netdev_err(dev, "failed to open master %s\n", master->name); 217 goto out; 218 } 219 220 if (dsa_switch_supports_uc_filtering(ds)) { 221 err = dsa_port_standalone_host_fdb_add(dp, dev->dev_addr, 0); 222 if (err) 223 goto out; 224 } 225 226 if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) { 227 err = dev_uc_add(master, dev->dev_addr); 228 if (err < 0) 229 goto del_host_addr; 230 } 231 232 err = dsa_port_enable_rt(dp, dev->phydev); 233 if (err) 234 goto del_unicast; 235 236 return 0; 237 238del_unicast: 239 if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) 240 dev_uc_del(master, dev->dev_addr); 241del_host_addr: 242 if (dsa_switch_supports_uc_filtering(ds)) 243 dsa_port_standalone_host_fdb_del(dp, dev->dev_addr, 0); 244out: 245 return err; 246} 247 248static int dsa_slave_close(struct net_device *dev) 249{ 250 struct net_device *master = dsa_slave_to_master(dev); 251 struct dsa_port *dp = dsa_slave_to_port(dev); 252 struct dsa_switch *ds = dp->ds; 253 254 dsa_port_disable_rt(dp); 255 256 if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) 257 dev_uc_del(master, dev->dev_addr); 258 259 if (dsa_switch_supports_uc_filtering(ds)) 260 dsa_port_standalone_host_fdb_del(dp, dev->dev_addr, 0); 261 262 return 0; 263} 264 265static void dsa_slave_manage_host_flood(struct net_device *dev) 266{ 267 bool mc = dev->flags & (IFF_PROMISC | IFF_ALLMULTI); 268 struct dsa_port *dp = dsa_slave_to_port(dev); 269 bool uc = dev->flags & IFF_PROMISC; 270 271 dsa_port_set_host_flood(dp, uc, mc); 272} 273 274static void dsa_slave_change_rx_flags(struct net_device *dev, int change) 275{ 276 struct net_device *master = dsa_slave_to_master(dev); 277 struct dsa_port *dp = dsa_slave_to_port(dev); 278 struct dsa_switch *ds = dp->ds; 279 280 if (change & IFF_ALLMULTI) 281 dev_set_allmulti(master, 282 dev->flags & IFF_ALLMULTI ? 1 : -1); 283 if (change & IFF_PROMISC) 284 dev_set_promiscuity(master, 285 dev->flags & IFF_PROMISC ? 1 : -1); 286 287 if (dsa_switch_supports_uc_filtering(ds) && 288 dsa_switch_supports_mc_filtering(ds)) 289 dsa_slave_manage_host_flood(dev); 290} 291 292static void dsa_slave_set_rx_mode(struct net_device *dev) 293{ 294 __dev_mc_sync(dev, dsa_slave_sync_mc, dsa_slave_unsync_mc); 295 __dev_uc_sync(dev, dsa_slave_sync_uc, dsa_slave_unsync_uc); 296} 297 298static int dsa_slave_set_mac_address(struct net_device *dev, void *a) 299{ 300 struct net_device *master = dsa_slave_to_master(dev); 301 struct dsa_port *dp = dsa_slave_to_port(dev); 302 struct dsa_switch *ds = dp->ds; 303 struct sockaddr *addr = a; 304 int err; 305 306 if (!is_valid_ether_addr(addr->sa_data)) 307 return -EADDRNOTAVAIL; 308 309 /* If the port is down, the address isn't synced yet to hardware or 310 * to the DSA master, so there is nothing to change. 311 */ 312 if (!(dev->flags & IFF_UP)) 313 goto out_change_dev_addr; 314 315 if (dsa_switch_supports_uc_filtering(ds)) { 316 err = dsa_port_standalone_host_fdb_add(dp, addr->sa_data, 0); 317 if (err) 318 return err; 319 } 320 321 if (!ether_addr_equal(addr->sa_data, master->dev_addr)) { 322 err = dev_uc_add(master, addr->sa_data); 323 if (err < 0) 324 goto del_unicast; 325 } 326 327 if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) 328 dev_uc_del(master, dev->dev_addr); 329 330 if (dsa_switch_supports_uc_filtering(ds)) 331 dsa_port_standalone_host_fdb_del(dp, dev->dev_addr, 0); 332 333out_change_dev_addr: 334 eth_hw_addr_set(dev, addr->sa_data); 335 336 return 0; 337 338del_unicast: 339 if (dsa_switch_supports_uc_filtering(ds)) 340 dsa_port_standalone_host_fdb_del(dp, addr->sa_data, 0); 341 342 return err; 343} 344 345struct dsa_slave_dump_ctx { 346 struct net_device *dev; 347 struct sk_buff *skb; 348 struct netlink_callback *cb; 349 int idx; 350}; 351 352static int 353dsa_slave_port_fdb_do_dump(const unsigned char *addr, u16 vid, 354 bool is_static, void *data) 355{ 356 struct dsa_slave_dump_ctx *dump = data; 357 u32 portid = NETLINK_CB(dump->cb->skb).portid; 358 u32 seq = dump->cb->nlh->nlmsg_seq; 359 struct nlmsghdr *nlh; 360 struct ndmsg *ndm; 361 362 if (dump->idx < dump->cb->args[2]) 363 goto skip; 364 365 nlh = nlmsg_put(dump->skb, portid, seq, RTM_NEWNEIGH, 366 sizeof(*ndm), NLM_F_MULTI); 367 if (!nlh) 368 return -EMSGSIZE; 369 370 ndm = nlmsg_data(nlh); 371 ndm->ndm_family = AF_BRIDGE; 372 ndm->ndm_pad1 = 0; 373 ndm->ndm_pad2 = 0; 374 ndm->ndm_flags = NTF_SELF; 375 ndm->ndm_type = 0; 376 ndm->ndm_ifindex = dump->dev->ifindex; 377 ndm->ndm_state = is_static ? NUD_NOARP : NUD_REACHABLE; 378 379 if (nla_put(dump->skb, NDA_LLADDR, ETH_ALEN, addr)) 380 goto nla_put_failure; 381 382 if (vid && nla_put_u16(dump->skb, NDA_VLAN, vid)) 383 goto nla_put_failure; 384 385 nlmsg_end(dump->skb, nlh); 386 387skip: 388 dump->idx++; 389 return 0; 390 391nla_put_failure: 392 nlmsg_cancel(dump->skb, nlh); 393 return -EMSGSIZE; 394} 395 396static int 397dsa_slave_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb, 398 struct net_device *dev, struct net_device *filter_dev, 399 int *idx) 400{ 401 struct dsa_port *dp = dsa_slave_to_port(dev); 402 struct dsa_slave_dump_ctx dump = { 403 .dev = dev, 404 .skb = skb, 405 .cb = cb, 406 .idx = *idx, 407 }; 408 int err; 409 410 err = dsa_port_fdb_dump(dp, dsa_slave_port_fdb_do_dump, &dump); 411 *idx = dump.idx; 412 413 return err; 414} 415 416static int dsa_slave_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 417{ 418 struct dsa_slave_priv *p = netdev_priv(dev); 419 struct dsa_switch *ds = p->dp->ds; 420 int port = p->dp->index; 421 422 /* Pass through to switch driver if it supports timestamping */ 423 switch (cmd) { 424 case SIOCGHWTSTAMP: 425 if (ds->ops->port_hwtstamp_get) 426 return ds->ops->port_hwtstamp_get(ds, port, ifr); 427 break; 428 case SIOCSHWTSTAMP: 429 if (ds->ops->port_hwtstamp_set) 430 return ds->ops->port_hwtstamp_set(ds, port, ifr); 431 break; 432 } 433 434 return phylink_mii_ioctl(p->dp->pl, ifr, cmd); 435} 436 437static int dsa_slave_port_attr_set(struct net_device *dev, const void *ctx, 438 const struct switchdev_attr *attr, 439 struct netlink_ext_ack *extack) 440{ 441 struct dsa_port *dp = dsa_slave_to_port(dev); 442 int ret; 443 444 if (ctx && ctx != dp) 445 return 0; 446 447 switch (attr->id) { 448 case SWITCHDEV_ATTR_ID_PORT_STP_STATE: 449 if (!dsa_port_offloads_bridge_port(dp, attr->orig_dev)) 450 return -EOPNOTSUPP; 451 452 ret = dsa_port_set_state(dp, attr->u.stp_state, true); 453 break; 454 case SWITCHDEV_ATTR_ID_PORT_MST_STATE: 455 if (!dsa_port_offloads_bridge_port(dp, attr->orig_dev)) 456 return -EOPNOTSUPP; 457 458 ret = dsa_port_set_mst_state(dp, &attr->u.mst_state, extack); 459 break; 460 case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING: 461 if (!dsa_port_offloads_bridge_dev(dp, attr->orig_dev)) 462 return -EOPNOTSUPP; 463 464 ret = dsa_port_vlan_filtering(dp, attr->u.vlan_filtering, 465 extack); 466 break; 467 case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME: 468 if (!dsa_port_offloads_bridge_dev(dp, attr->orig_dev)) 469 return -EOPNOTSUPP; 470 471 ret = dsa_port_ageing_time(dp, attr->u.ageing_time); 472 break; 473 case SWITCHDEV_ATTR_ID_BRIDGE_MST: 474 if (!dsa_port_offloads_bridge_dev(dp, attr->orig_dev)) 475 return -EOPNOTSUPP; 476 477 ret = dsa_port_mst_enable(dp, attr->u.mst, extack); 478 break; 479 case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS: 480 if (!dsa_port_offloads_bridge_port(dp, attr->orig_dev)) 481 return -EOPNOTSUPP; 482 483 ret = dsa_port_pre_bridge_flags(dp, attr->u.brport_flags, 484 extack); 485 break; 486 case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS: 487 if (!dsa_port_offloads_bridge_port(dp, attr->orig_dev)) 488 return -EOPNOTSUPP; 489 490 ret = dsa_port_bridge_flags(dp, attr->u.brport_flags, extack); 491 break; 492 case SWITCHDEV_ATTR_ID_VLAN_MSTI: 493 if (!dsa_port_offloads_bridge_dev(dp, attr->orig_dev)) 494 return -EOPNOTSUPP; 495 496 ret = dsa_port_vlan_msti(dp, &attr->u.vlan_msti); 497 break; 498 default: 499 ret = -EOPNOTSUPP; 500 break; 501 } 502 503 return ret; 504} 505 506/* Must be called under rcu_read_lock() */ 507static int 508dsa_slave_vlan_check_for_8021q_uppers(struct net_device *slave, 509 const struct switchdev_obj_port_vlan *vlan) 510{ 511 struct net_device *upper_dev; 512 struct list_head *iter; 513 514 netdev_for_each_upper_dev_rcu(slave, upper_dev, iter) { 515 u16 vid; 516 517 if (!is_vlan_dev(upper_dev)) 518 continue; 519 520 vid = vlan_dev_vlan_id(upper_dev); 521 if (vid == vlan->vid) 522 return -EBUSY; 523 } 524 525 return 0; 526} 527 528static int dsa_slave_vlan_add(struct net_device *dev, 529 const struct switchdev_obj *obj, 530 struct netlink_ext_ack *extack) 531{ 532 struct dsa_port *dp = dsa_slave_to_port(dev); 533 struct switchdev_obj_port_vlan *vlan; 534 int err; 535 536 if (dsa_port_skip_vlan_configuration(dp)) { 537 NL_SET_ERR_MSG_MOD(extack, "skipping configuration of VLAN"); 538 return 0; 539 } 540 541 vlan = SWITCHDEV_OBJ_PORT_VLAN(obj); 542 543 /* Deny adding a bridge VLAN when there is already an 802.1Q upper with 544 * the same VID. 545 */ 546 if (br_vlan_enabled(dsa_port_bridge_dev_get(dp))) { 547 rcu_read_lock(); 548 err = dsa_slave_vlan_check_for_8021q_uppers(dev, vlan); 549 rcu_read_unlock(); 550 if (err) { 551 NL_SET_ERR_MSG_MOD(extack, 552 "Port already has a VLAN upper with this VID"); 553 return err; 554 } 555 } 556 557 return dsa_port_vlan_add(dp, vlan, extack); 558} 559 560/* Offload a VLAN installed on the bridge or on a foreign interface by 561 * installing it as a VLAN towards the CPU port. 562 */ 563static int dsa_slave_host_vlan_add(struct net_device *dev, 564 const struct switchdev_obj *obj, 565 struct netlink_ext_ack *extack) 566{ 567 struct dsa_port *dp = dsa_slave_to_port(dev); 568 struct switchdev_obj_port_vlan vlan; 569 570 /* Do nothing if this is a software bridge */ 571 if (!dp->bridge) 572 return -EOPNOTSUPP; 573 574 if (dsa_port_skip_vlan_configuration(dp)) { 575 NL_SET_ERR_MSG_MOD(extack, "skipping configuration of VLAN"); 576 return 0; 577 } 578 579 vlan = *SWITCHDEV_OBJ_PORT_VLAN(obj); 580 581 /* Even though drivers often handle CPU membership in special ways, 582 * it doesn't make sense to program a PVID, so clear this flag. 583 */ 584 vlan.flags &= ~BRIDGE_VLAN_INFO_PVID; 585 586 return dsa_port_host_vlan_add(dp, &vlan, extack); 587} 588 589static int dsa_slave_port_obj_add(struct net_device *dev, const void *ctx, 590 const struct switchdev_obj *obj, 591 struct netlink_ext_ack *extack) 592{ 593 struct dsa_port *dp = dsa_slave_to_port(dev); 594 int err; 595 596 if (ctx && ctx != dp) 597 return 0; 598 599 switch (obj->id) { 600 case SWITCHDEV_OBJ_ID_PORT_MDB: 601 if (!dsa_port_offloads_bridge_port(dp, obj->orig_dev)) 602 return -EOPNOTSUPP; 603 604 err = dsa_port_mdb_add(dp, SWITCHDEV_OBJ_PORT_MDB(obj)); 605 break; 606 case SWITCHDEV_OBJ_ID_HOST_MDB: 607 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev)) 608 return -EOPNOTSUPP; 609 610 err = dsa_port_bridge_host_mdb_add(dp, SWITCHDEV_OBJ_PORT_MDB(obj)); 611 break; 612 case SWITCHDEV_OBJ_ID_PORT_VLAN: 613 if (dsa_port_offloads_bridge_port(dp, obj->orig_dev)) 614 err = dsa_slave_vlan_add(dev, obj, extack); 615 else 616 err = dsa_slave_host_vlan_add(dev, obj, extack); 617 break; 618 case SWITCHDEV_OBJ_ID_MRP: 619 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev)) 620 return -EOPNOTSUPP; 621 622 err = dsa_port_mrp_add(dp, SWITCHDEV_OBJ_MRP(obj)); 623 break; 624 case SWITCHDEV_OBJ_ID_RING_ROLE_MRP: 625 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev)) 626 return -EOPNOTSUPP; 627 628 err = dsa_port_mrp_add_ring_role(dp, 629 SWITCHDEV_OBJ_RING_ROLE_MRP(obj)); 630 break; 631 default: 632 err = -EOPNOTSUPP; 633 break; 634 } 635 636 return err; 637} 638 639static int dsa_slave_vlan_del(struct net_device *dev, 640 const struct switchdev_obj *obj) 641{ 642 struct dsa_port *dp = dsa_slave_to_port(dev); 643 struct switchdev_obj_port_vlan *vlan; 644 645 if (dsa_port_skip_vlan_configuration(dp)) 646 return 0; 647 648 vlan = SWITCHDEV_OBJ_PORT_VLAN(obj); 649 650 return dsa_port_vlan_del(dp, vlan); 651} 652 653static int dsa_slave_host_vlan_del(struct net_device *dev, 654 const struct switchdev_obj *obj) 655{ 656 struct dsa_port *dp = dsa_slave_to_port(dev); 657 struct switchdev_obj_port_vlan *vlan; 658 659 /* Do nothing if this is a software bridge */ 660 if (!dp->bridge) 661 return -EOPNOTSUPP; 662 663 if (dsa_port_skip_vlan_configuration(dp)) 664 return 0; 665 666 vlan = SWITCHDEV_OBJ_PORT_VLAN(obj); 667 668 return dsa_port_host_vlan_del(dp, vlan); 669} 670 671static int dsa_slave_port_obj_del(struct net_device *dev, const void *ctx, 672 const struct switchdev_obj *obj) 673{ 674 struct dsa_port *dp = dsa_slave_to_port(dev); 675 int err; 676 677 if (ctx && ctx != dp) 678 return 0; 679 680 switch (obj->id) { 681 case SWITCHDEV_OBJ_ID_PORT_MDB: 682 if (!dsa_port_offloads_bridge_port(dp, obj->orig_dev)) 683 return -EOPNOTSUPP; 684 685 err = dsa_port_mdb_del(dp, SWITCHDEV_OBJ_PORT_MDB(obj)); 686 break; 687 case SWITCHDEV_OBJ_ID_HOST_MDB: 688 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev)) 689 return -EOPNOTSUPP; 690 691 err = dsa_port_bridge_host_mdb_del(dp, SWITCHDEV_OBJ_PORT_MDB(obj)); 692 break; 693 case SWITCHDEV_OBJ_ID_PORT_VLAN: 694 if (dsa_port_offloads_bridge_port(dp, obj->orig_dev)) 695 err = dsa_slave_vlan_del(dev, obj); 696 else 697 err = dsa_slave_host_vlan_del(dev, obj); 698 break; 699 case SWITCHDEV_OBJ_ID_MRP: 700 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev)) 701 return -EOPNOTSUPP; 702 703 err = dsa_port_mrp_del(dp, SWITCHDEV_OBJ_MRP(obj)); 704 break; 705 case SWITCHDEV_OBJ_ID_RING_ROLE_MRP: 706 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev)) 707 return -EOPNOTSUPP; 708 709 err = dsa_port_mrp_del_ring_role(dp, 710 SWITCHDEV_OBJ_RING_ROLE_MRP(obj)); 711 break; 712 default: 713 err = -EOPNOTSUPP; 714 break; 715 } 716 717 return err; 718} 719 720static inline netdev_tx_t dsa_slave_netpoll_send_skb(struct net_device *dev, 721 struct sk_buff *skb) 722{ 723#ifdef CONFIG_NET_POLL_CONTROLLER 724 struct dsa_slave_priv *p = netdev_priv(dev); 725 726 return netpoll_send_skb(p->netpoll, skb); 727#else 728 BUG(); 729 return NETDEV_TX_OK; 730#endif 731} 732 733static void dsa_skb_tx_timestamp(struct dsa_slave_priv *p, 734 struct sk_buff *skb) 735{ 736 struct dsa_switch *ds = p->dp->ds; 737 738 if (!(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) 739 return; 740 741 if (!ds->ops->port_txtstamp) 742 return; 743 744 ds->ops->port_txtstamp(ds, p->dp->index, skb); 745} 746 747netdev_tx_t dsa_enqueue_skb(struct sk_buff *skb, struct net_device *dev) 748{ 749 /* SKB for netpoll still need to be mangled with the protocol-specific 750 * tag to be successfully transmitted 751 */ 752 if (unlikely(netpoll_tx_running(dev))) 753 return dsa_slave_netpoll_send_skb(dev, skb); 754 755 /* Queue the SKB for transmission on the parent interface, but 756 * do not modify its EtherType 757 */ 758 skb->dev = dsa_slave_to_master(dev); 759 dev_queue_xmit(skb); 760 761 return NETDEV_TX_OK; 762} 763EXPORT_SYMBOL_GPL(dsa_enqueue_skb); 764 765static int dsa_realloc_skb(struct sk_buff *skb, struct net_device *dev) 766{ 767 int needed_headroom = dev->needed_headroom; 768 int needed_tailroom = dev->needed_tailroom; 769 770 /* For tail taggers, we need to pad short frames ourselves, to ensure 771 * that the tail tag does not fail at its role of being at the end of 772 * the packet, once the master interface pads the frame. Account for 773 * that pad length here, and pad later. 774 */ 775 if (unlikely(needed_tailroom && skb->len < ETH_ZLEN)) 776 needed_tailroom += ETH_ZLEN - skb->len; 777 /* skb_headroom() returns unsigned int... */ 778 needed_headroom = max_t(int, needed_headroom - skb_headroom(skb), 0); 779 needed_tailroom = max_t(int, needed_tailroom - skb_tailroom(skb), 0); 780 781 if (likely(!needed_headroom && !needed_tailroom && !skb_cloned(skb))) 782 /* No reallocation needed, yay! */ 783 return 0; 784 785 return pskb_expand_head(skb, needed_headroom, needed_tailroom, 786 GFP_ATOMIC); 787} 788 789static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev) 790{ 791 struct dsa_slave_priv *p = netdev_priv(dev); 792 struct sk_buff *nskb; 793 794 dev_sw_netstats_tx_add(dev, 1, skb->len); 795 796 memset(skb->cb, 0, sizeof(skb->cb)); 797 798 /* Handle tx timestamp if any */ 799 dsa_skb_tx_timestamp(p, skb); 800 801 if (dsa_realloc_skb(skb, dev)) { 802 dev_kfree_skb_any(skb); 803 return NETDEV_TX_OK; 804 } 805 806 /* needed_tailroom should still be 'warm' in the cache line from 807 * dsa_realloc_skb(), which has also ensured that padding is safe. 808 */ 809 if (dev->needed_tailroom) 810 eth_skb_pad(skb); 811 812 /* Transmit function may have to reallocate the original SKB, 813 * in which case it must have freed it. Only free it here on error. 814 */ 815 nskb = p->xmit(skb, dev); 816 if (!nskb) { 817 kfree_skb(skb); 818 return NETDEV_TX_OK; 819 } 820 821 return dsa_enqueue_skb(nskb, dev); 822} 823 824/* ethtool operations *******************************************************/ 825 826static void dsa_slave_get_drvinfo(struct net_device *dev, 827 struct ethtool_drvinfo *drvinfo) 828{ 829 strlcpy(drvinfo->driver, "dsa", sizeof(drvinfo->driver)); 830 strlcpy(drvinfo->fw_version, "N/A", sizeof(drvinfo->fw_version)); 831 strlcpy(drvinfo->bus_info, "platform", sizeof(drvinfo->bus_info)); 832} 833 834static int dsa_slave_get_regs_len(struct net_device *dev) 835{ 836 struct dsa_port *dp = dsa_slave_to_port(dev); 837 struct dsa_switch *ds = dp->ds; 838 839 if (ds->ops->get_regs_len) 840 return ds->ops->get_regs_len(ds, dp->index); 841 842 return -EOPNOTSUPP; 843} 844 845static void 846dsa_slave_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *_p) 847{ 848 struct dsa_port *dp = dsa_slave_to_port(dev); 849 struct dsa_switch *ds = dp->ds; 850 851 if (ds->ops->get_regs) 852 ds->ops->get_regs(ds, dp->index, regs, _p); 853} 854 855static int dsa_slave_nway_reset(struct net_device *dev) 856{ 857 struct dsa_port *dp = dsa_slave_to_port(dev); 858 859 return phylink_ethtool_nway_reset(dp->pl); 860} 861 862static int dsa_slave_get_eeprom_len(struct net_device *dev) 863{ 864 struct dsa_port *dp = dsa_slave_to_port(dev); 865 struct dsa_switch *ds = dp->ds; 866 867 if (ds->cd && ds->cd->eeprom_len) 868 return ds->cd->eeprom_len; 869 870 if (ds->ops->get_eeprom_len) 871 return ds->ops->get_eeprom_len(ds); 872 873 return 0; 874} 875 876static int dsa_slave_get_eeprom(struct net_device *dev, 877 struct ethtool_eeprom *eeprom, u8 *data) 878{ 879 struct dsa_port *dp = dsa_slave_to_port(dev); 880 struct dsa_switch *ds = dp->ds; 881 882 if (ds->ops->get_eeprom) 883 return ds->ops->get_eeprom(ds, eeprom, data); 884 885 return -EOPNOTSUPP; 886} 887 888static int dsa_slave_set_eeprom(struct net_device *dev, 889 struct ethtool_eeprom *eeprom, u8 *data) 890{ 891 struct dsa_port *dp = dsa_slave_to_port(dev); 892 struct dsa_switch *ds = dp->ds; 893 894 if (ds->ops->set_eeprom) 895 return ds->ops->set_eeprom(ds, eeprom, data); 896 897 return -EOPNOTSUPP; 898} 899 900static void dsa_slave_get_strings(struct net_device *dev, 901 uint32_t stringset, uint8_t *data) 902{ 903 struct dsa_port *dp = dsa_slave_to_port(dev); 904 struct dsa_switch *ds = dp->ds; 905 906 if (stringset == ETH_SS_STATS) { 907 int len = ETH_GSTRING_LEN; 908 909 strncpy(data, "tx_packets", len); 910 strncpy(data + len, "tx_bytes", len); 911 strncpy(data + 2 * len, "rx_packets", len); 912 strncpy(data + 3 * len, "rx_bytes", len); 913 if (ds->ops->get_strings) 914 ds->ops->get_strings(ds, dp->index, stringset, 915 data + 4 * len); 916 } else if (stringset == ETH_SS_TEST) { 917 net_selftest_get_strings(data); 918 } 919 920} 921 922static void dsa_slave_get_ethtool_stats(struct net_device *dev, 923 struct ethtool_stats *stats, 924 uint64_t *data) 925{ 926 struct dsa_port *dp = dsa_slave_to_port(dev); 927 struct dsa_switch *ds = dp->ds; 928 struct pcpu_sw_netstats *s; 929 unsigned int start; 930 int i; 931 932 for_each_possible_cpu(i) { 933 u64 tx_packets, tx_bytes, rx_packets, rx_bytes; 934 935 s = per_cpu_ptr(dev->tstats, i); 936 do { 937 start = u64_stats_fetch_begin_irq(&s->syncp); 938 tx_packets = s->tx_packets; 939 tx_bytes = s->tx_bytes; 940 rx_packets = s->rx_packets; 941 rx_bytes = s->rx_bytes; 942 } while (u64_stats_fetch_retry_irq(&s->syncp, start)); 943 data[0] += tx_packets; 944 data[1] += tx_bytes; 945 data[2] += rx_packets; 946 data[3] += rx_bytes; 947 } 948 if (ds->ops->get_ethtool_stats) 949 ds->ops->get_ethtool_stats(ds, dp->index, data + 4); 950} 951 952static int dsa_slave_get_sset_count(struct net_device *dev, int sset) 953{ 954 struct dsa_port *dp = dsa_slave_to_port(dev); 955 struct dsa_switch *ds = dp->ds; 956 957 if (sset == ETH_SS_STATS) { 958 int count = 0; 959 960 if (ds->ops->get_sset_count) { 961 count = ds->ops->get_sset_count(ds, dp->index, sset); 962 if (count < 0) 963 return count; 964 } 965 966 return count + 4; 967 } else if (sset == ETH_SS_TEST) { 968 return net_selftest_get_count(); 969 } 970 971 return -EOPNOTSUPP; 972} 973 974static void dsa_slave_get_eth_phy_stats(struct net_device *dev, 975 struct ethtool_eth_phy_stats *phy_stats) 976{ 977 struct dsa_port *dp = dsa_slave_to_port(dev); 978 struct dsa_switch *ds = dp->ds; 979 980 if (ds->ops->get_eth_phy_stats) 981 ds->ops->get_eth_phy_stats(ds, dp->index, phy_stats); 982} 983 984static void dsa_slave_get_eth_mac_stats(struct net_device *dev, 985 struct ethtool_eth_mac_stats *mac_stats) 986{ 987 struct dsa_port *dp = dsa_slave_to_port(dev); 988 struct dsa_switch *ds = dp->ds; 989 990 if (ds->ops->get_eth_mac_stats) 991 ds->ops->get_eth_mac_stats(ds, dp->index, mac_stats); 992} 993 994static void 995dsa_slave_get_eth_ctrl_stats(struct net_device *dev, 996 struct ethtool_eth_ctrl_stats *ctrl_stats) 997{ 998 struct dsa_port *dp = dsa_slave_to_port(dev); 999 struct dsa_switch *ds = dp->ds; 1000 1001 if (ds->ops->get_eth_ctrl_stats) 1002 ds->ops->get_eth_ctrl_stats(ds, dp->index, ctrl_stats); 1003} 1004 1005static void dsa_slave_net_selftest(struct net_device *ndev, 1006 struct ethtool_test *etest, u64 *buf) 1007{ 1008 struct dsa_port *dp = dsa_slave_to_port(ndev); 1009 struct dsa_switch *ds = dp->ds; 1010 1011 if (ds->ops->self_test) { 1012 ds->ops->self_test(ds, dp->index, etest, buf); 1013 return; 1014 } 1015 1016 net_selftest(ndev, etest, buf); 1017} 1018 1019static void dsa_slave_get_wol(struct net_device *dev, struct ethtool_wolinfo *w) 1020{ 1021 struct dsa_port *dp = dsa_slave_to_port(dev); 1022 struct dsa_switch *ds = dp->ds; 1023 1024 phylink_ethtool_get_wol(dp->pl, w); 1025 1026 if (ds->ops->get_wol) 1027 ds->ops->get_wol(ds, dp->index, w); 1028} 1029 1030static int dsa_slave_set_wol(struct net_device *dev, struct ethtool_wolinfo *w) 1031{ 1032 struct dsa_port *dp = dsa_slave_to_port(dev); 1033 struct dsa_switch *ds = dp->ds; 1034 int ret = -EOPNOTSUPP; 1035 1036 phylink_ethtool_set_wol(dp->pl, w); 1037 1038 if (ds->ops->set_wol) 1039 ret = ds->ops->set_wol(ds, dp->index, w); 1040 1041 return ret; 1042} 1043 1044static int dsa_slave_set_eee(struct net_device *dev, struct ethtool_eee *e) 1045{ 1046 struct dsa_port *dp = dsa_slave_to_port(dev); 1047 struct dsa_switch *ds = dp->ds; 1048 int ret; 1049 1050 /* Port's PHY and MAC both need to be EEE capable */ 1051 if (!dev->phydev || !dp->pl) 1052 return -ENODEV; 1053 1054 if (!ds->ops->set_mac_eee) 1055 return -EOPNOTSUPP; 1056 1057 ret = ds->ops->set_mac_eee(ds, dp->index, e); 1058 if (ret) 1059 return ret; 1060 1061 return phylink_ethtool_set_eee(dp->pl, e); 1062} 1063 1064static int dsa_slave_get_eee(struct net_device *dev, struct ethtool_eee *e) 1065{ 1066 struct dsa_port *dp = dsa_slave_to_port(dev); 1067 struct dsa_switch *ds = dp->ds; 1068 int ret; 1069 1070 /* Port's PHY and MAC both need to be EEE capable */ 1071 if (!dev->phydev || !dp->pl) 1072 return -ENODEV; 1073 1074 if (!ds->ops->get_mac_eee) 1075 return -EOPNOTSUPP; 1076 1077 ret = ds->ops->get_mac_eee(ds, dp->index, e); 1078 if (ret) 1079 return ret; 1080 1081 return phylink_ethtool_get_eee(dp->pl, e); 1082} 1083 1084static int dsa_slave_get_link_ksettings(struct net_device *dev, 1085 struct ethtool_link_ksettings *cmd) 1086{ 1087 struct dsa_port *dp = dsa_slave_to_port(dev); 1088 1089 return phylink_ethtool_ksettings_get(dp->pl, cmd); 1090} 1091 1092static int dsa_slave_set_link_ksettings(struct net_device *dev, 1093 const struct ethtool_link_ksettings *cmd) 1094{ 1095 struct dsa_port *dp = dsa_slave_to_port(dev); 1096 1097 return phylink_ethtool_ksettings_set(dp->pl, cmd); 1098} 1099 1100static void dsa_slave_get_pauseparam(struct net_device *dev, 1101 struct ethtool_pauseparam *pause) 1102{ 1103 struct dsa_port *dp = dsa_slave_to_port(dev); 1104 1105 phylink_ethtool_get_pauseparam(dp->pl, pause); 1106} 1107 1108static int dsa_slave_set_pauseparam(struct net_device *dev, 1109 struct ethtool_pauseparam *pause) 1110{ 1111 struct dsa_port *dp = dsa_slave_to_port(dev); 1112 1113 return phylink_ethtool_set_pauseparam(dp->pl, pause); 1114} 1115 1116#ifdef CONFIG_NET_POLL_CONTROLLER 1117static int dsa_slave_netpoll_setup(struct net_device *dev, 1118 struct netpoll_info *ni) 1119{ 1120 struct net_device *master = dsa_slave_to_master(dev); 1121 struct dsa_slave_priv *p = netdev_priv(dev); 1122 struct netpoll *netpoll; 1123 int err = 0; 1124 1125 netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL); 1126 if (!netpoll) 1127 return -ENOMEM; 1128 1129 err = __netpoll_setup(netpoll, master); 1130 if (err) { 1131 kfree(netpoll); 1132 goto out; 1133 } 1134 1135 p->netpoll = netpoll; 1136out: 1137 return err; 1138} 1139 1140static void dsa_slave_netpoll_cleanup(struct net_device *dev) 1141{ 1142 struct dsa_slave_priv *p = netdev_priv(dev); 1143 struct netpoll *netpoll = p->netpoll; 1144 1145 if (!netpoll) 1146 return; 1147 1148 p->netpoll = NULL; 1149 1150 __netpoll_free(netpoll); 1151} 1152 1153static void dsa_slave_poll_controller(struct net_device *dev) 1154{ 1155} 1156#endif 1157 1158static struct dsa_mall_tc_entry * 1159dsa_slave_mall_tc_entry_find(struct net_device *dev, unsigned long cookie) 1160{ 1161 struct dsa_slave_priv *p = netdev_priv(dev); 1162 struct dsa_mall_tc_entry *mall_tc_entry; 1163 1164 list_for_each_entry(mall_tc_entry, &p->mall_tc_list, list) 1165 if (mall_tc_entry->cookie == cookie) 1166 return mall_tc_entry; 1167 1168 return NULL; 1169} 1170 1171static int 1172dsa_slave_add_cls_matchall_mirred(struct net_device *dev, 1173 struct tc_cls_matchall_offload *cls, 1174 bool ingress) 1175{ 1176 struct netlink_ext_ack *extack = cls->common.extack; 1177 struct dsa_port *dp = dsa_slave_to_port(dev); 1178 struct dsa_slave_priv *p = netdev_priv(dev); 1179 struct dsa_mall_mirror_tc_entry *mirror; 1180 struct dsa_mall_tc_entry *mall_tc_entry; 1181 struct dsa_switch *ds = dp->ds; 1182 struct flow_action_entry *act; 1183 struct dsa_port *to_dp; 1184 int err; 1185 1186 if (!ds->ops->port_mirror_add) 1187 return -EOPNOTSUPP; 1188 1189 if (!flow_action_basic_hw_stats_check(&cls->rule->action, 1190 cls->common.extack)) 1191 return -EOPNOTSUPP; 1192 1193 act = &cls->rule->action.entries[0]; 1194 1195 if (!act->dev) 1196 return -EINVAL; 1197 1198 if (!dsa_slave_dev_check(act->dev)) 1199 return -EOPNOTSUPP; 1200 1201 mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL); 1202 if (!mall_tc_entry) 1203 return -ENOMEM; 1204 1205 mall_tc_entry->cookie = cls->cookie; 1206 mall_tc_entry->type = DSA_PORT_MALL_MIRROR; 1207 mirror = &mall_tc_entry->mirror; 1208 1209 to_dp = dsa_slave_to_port(act->dev); 1210 1211 mirror->to_local_port = to_dp->index; 1212 mirror->ingress = ingress; 1213 1214 err = ds->ops->port_mirror_add(ds, dp->index, mirror, ingress, extack); 1215 if (err) { 1216 kfree(mall_tc_entry); 1217 return err; 1218 } 1219 1220 list_add_tail(&mall_tc_entry->list, &p->mall_tc_list); 1221 1222 return err; 1223} 1224 1225static int 1226dsa_slave_add_cls_matchall_police(struct net_device *dev, 1227 struct tc_cls_matchall_offload *cls, 1228 bool ingress) 1229{ 1230 struct netlink_ext_ack *extack = cls->common.extack; 1231 struct dsa_port *dp = dsa_slave_to_port(dev); 1232 struct dsa_slave_priv *p = netdev_priv(dev); 1233 struct dsa_mall_policer_tc_entry *policer; 1234 struct dsa_mall_tc_entry *mall_tc_entry; 1235 struct dsa_switch *ds = dp->ds; 1236 struct flow_action_entry *act; 1237 int err; 1238 1239 if (!ds->ops->port_policer_add) { 1240 NL_SET_ERR_MSG_MOD(extack, 1241 "Policing offload not implemented"); 1242 return -EOPNOTSUPP; 1243 } 1244 1245 if (!ingress) { 1246 NL_SET_ERR_MSG_MOD(extack, 1247 "Only supported on ingress qdisc"); 1248 return -EOPNOTSUPP; 1249 } 1250 1251 if (!flow_action_basic_hw_stats_check(&cls->rule->action, 1252 cls->common.extack)) 1253 return -EOPNOTSUPP; 1254 1255 list_for_each_entry(mall_tc_entry, &p->mall_tc_list, list) { 1256 if (mall_tc_entry->type == DSA_PORT_MALL_POLICER) { 1257 NL_SET_ERR_MSG_MOD(extack, 1258 "Only one port policer allowed"); 1259 return -EEXIST; 1260 } 1261 } 1262 1263 act = &cls->rule->action.entries[0]; 1264 1265 mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL); 1266 if (!mall_tc_entry) 1267 return -ENOMEM; 1268 1269 mall_tc_entry->cookie = cls->cookie; 1270 mall_tc_entry->type = DSA_PORT_MALL_POLICER; 1271 policer = &mall_tc_entry->policer; 1272 policer->rate_bytes_per_sec = act->police.rate_bytes_ps; 1273 policer->burst = act->police.burst; 1274 1275 err = ds->ops->port_policer_add(ds, dp->index, policer); 1276 if (err) { 1277 kfree(mall_tc_entry); 1278 return err; 1279 } 1280 1281 list_add_tail(&mall_tc_entry->list, &p->mall_tc_list); 1282 1283 return err; 1284} 1285 1286static int dsa_slave_add_cls_matchall(struct net_device *dev, 1287 struct tc_cls_matchall_offload *cls, 1288 bool ingress) 1289{ 1290 int err = -EOPNOTSUPP; 1291 1292 if (cls->common.protocol == htons(ETH_P_ALL) && 1293 flow_offload_has_one_action(&cls->rule->action) && 1294 cls->rule->action.entries[0].id == FLOW_ACTION_MIRRED) 1295 err = dsa_slave_add_cls_matchall_mirred(dev, cls, ingress); 1296 else if (flow_offload_has_one_action(&cls->rule->action) && 1297 cls->rule->action.entries[0].id == FLOW_ACTION_POLICE) 1298 err = dsa_slave_add_cls_matchall_police(dev, cls, ingress); 1299 1300 return err; 1301} 1302 1303static void dsa_slave_del_cls_matchall(struct net_device *dev, 1304 struct tc_cls_matchall_offload *cls) 1305{ 1306 struct dsa_port *dp = dsa_slave_to_port(dev); 1307 struct dsa_mall_tc_entry *mall_tc_entry; 1308 struct dsa_switch *ds = dp->ds; 1309 1310 mall_tc_entry = dsa_slave_mall_tc_entry_find(dev, cls->cookie); 1311 if (!mall_tc_entry) 1312 return; 1313 1314 list_del(&mall_tc_entry->list); 1315 1316 switch (mall_tc_entry->type) { 1317 case DSA_PORT_MALL_MIRROR: 1318 if (ds->ops->port_mirror_del) 1319 ds->ops->port_mirror_del(ds, dp->index, 1320 &mall_tc_entry->mirror); 1321 break; 1322 case DSA_PORT_MALL_POLICER: 1323 if (ds->ops->port_policer_del) 1324 ds->ops->port_policer_del(ds, dp->index); 1325 break; 1326 default: 1327 WARN_ON(1); 1328 } 1329 1330 kfree(mall_tc_entry); 1331} 1332 1333static int dsa_slave_setup_tc_cls_matchall(struct net_device *dev, 1334 struct tc_cls_matchall_offload *cls, 1335 bool ingress) 1336{ 1337 if (cls->common.chain_index) 1338 return -EOPNOTSUPP; 1339 1340 switch (cls->command) { 1341 case TC_CLSMATCHALL_REPLACE: 1342 return dsa_slave_add_cls_matchall(dev, cls, ingress); 1343 case TC_CLSMATCHALL_DESTROY: 1344 dsa_slave_del_cls_matchall(dev, cls); 1345 return 0; 1346 default: 1347 return -EOPNOTSUPP; 1348 } 1349} 1350 1351static int dsa_slave_add_cls_flower(struct net_device *dev, 1352 struct flow_cls_offload *cls, 1353 bool ingress) 1354{ 1355 struct dsa_port *dp = dsa_slave_to_port(dev); 1356 struct dsa_switch *ds = dp->ds; 1357 int port = dp->index; 1358 1359 if (!ds->ops->cls_flower_add) 1360 return -EOPNOTSUPP; 1361 1362 return ds->ops->cls_flower_add(ds, port, cls, ingress); 1363} 1364 1365static int dsa_slave_del_cls_flower(struct net_device *dev, 1366 struct flow_cls_offload *cls, 1367 bool ingress) 1368{ 1369 struct dsa_port *dp = dsa_slave_to_port(dev); 1370 struct dsa_switch *ds = dp->ds; 1371 int port = dp->index; 1372 1373 if (!ds->ops->cls_flower_del) 1374 return -EOPNOTSUPP; 1375 1376 return ds->ops->cls_flower_del(ds, port, cls, ingress); 1377} 1378 1379static int dsa_slave_stats_cls_flower(struct net_device *dev, 1380 struct flow_cls_offload *cls, 1381 bool ingress) 1382{ 1383 struct dsa_port *dp = dsa_slave_to_port(dev); 1384 struct dsa_switch *ds = dp->ds; 1385 int port = dp->index; 1386 1387 if (!ds->ops->cls_flower_stats) 1388 return -EOPNOTSUPP; 1389 1390 return ds->ops->cls_flower_stats(ds, port, cls, ingress); 1391} 1392 1393static int dsa_slave_setup_tc_cls_flower(struct net_device *dev, 1394 struct flow_cls_offload *cls, 1395 bool ingress) 1396{ 1397 switch (cls->command) { 1398 case FLOW_CLS_REPLACE: 1399 return dsa_slave_add_cls_flower(dev, cls, ingress); 1400 case FLOW_CLS_DESTROY: 1401 return dsa_slave_del_cls_flower(dev, cls, ingress); 1402 case FLOW_CLS_STATS: 1403 return dsa_slave_stats_cls_flower(dev, cls, ingress); 1404 default: 1405 return -EOPNOTSUPP; 1406 } 1407} 1408 1409static int dsa_slave_setup_tc_block_cb(enum tc_setup_type type, void *type_data, 1410 void *cb_priv, bool ingress) 1411{ 1412 struct net_device *dev = cb_priv; 1413 1414 if (!tc_can_offload(dev)) 1415 return -EOPNOTSUPP; 1416 1417 switch (type) { 1418 case TC_SETUP_CLSMATCHALL: 1419 return dsa_slave_setup_tc_cls_matchall(dev, type_data, ingress); 1420 case TC_SETUP_CLSFLOWER: 1421 return dsa_slave_setup_tc_cls_flower(dev, type_data, ingress); 1422 default: 1423 return -EOPNOTSUPP; 1424 } 1425} 1426 1427static int dsa_slave_setup_tc_block_cb_ig(enum tc_setup_type type, 1428 void *type_data, void *cb_priv) 1429{ 1430 return dsa_slave_setup_tc_block_cb(type, type_data, cb_priv, true); 1431} 1432 1433static int dsa_slave_setup_tc_block_cb_eg(enum tc_setup_type type, 1434 void *type_data, void *cb_priv) 1435{ 1436 return dsa_slave_setup_tc_block_cb(type, type_data, cb_priv, false); 1437} 1438 1439static LIST_HEAD(dsa_slave_block_cb_list); 1440 1441static int dsa_slave_setup_tc_block(struct net_device *dev, 1442 struct flow_block_offload *f) 1443{ 1444 struct flow_block_cb *block_cb; 1445 flow_setup_cb_t *cb; 1446 1447 if (f->binder_type == FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS) 1448 cb = dsa_slave_setup_tc_block_cb_ig; 1449 else if (f->binder_type == FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS) 1450 cb = dsa_slave_setup_tc_block_cb_eg; 1451 else 1452 return -EOPNOTSUPP; 1453 1454 f->driver_block_list = &dsa_slave_block_cb_list; 1455 1456 switch (f->command) { 1457 case FLOW_BLOCK_BIND: 1458 if (flow_block_cb_is_busy(cb, dev, &dsa_slave_block_cb_list)) 1459 return -EBUSY; 1460 1461 block_cb = flow_block_cb_alloc(cb, dev, dev, NULL); 1462 if (IS_ERR(block_cb)) 1463 return PTR_ERR(block_cb); 1464 1465 flow_block_cb_add(block_cb, f); 1466 list_add_tail(&block_cb->driver_list, &dsa_slave_block_cb_list); 1467 return 0; 1468 case FLOW_BLOCK_UNBIND: 1469 block_cb = flow_block_cb_lookup(f->block, cb, dev); 1470 if (!block_cb) 1471 return -ENOENT; 1472 1473 flow_block_cb_remove(block_cb, f); 1474 list_del(&block_cb->driver_list); 1475 return 0; 1476 default: 1477 return -EOPNOTSUPP; 1478 } 1479} 1480 1481static int dsa_slave_setup_ft_block(struct dsa_switch *ds, int port, 1482 void *type_data) 1483{ 1484 struct dsa_port *cpu_dp = dsa_to_port(ds, port)->cpu_dp; 1485 struct net_device *master = cpu_dp->master; 1486 1487 if (!master->netdev_ops->ndo_setup_tc) 1488 return -EOPNOTSUPP; 1489 1490 return master->netdev_ops->ndo_setup_tc(master, TC_SETUP_FT, type_data); 1491} 1492 1493static int dsa_slave_setup_tc(struct net_device *dev, enum tc_setup_type type, 1494 void *type_data) 1495{ 1496 struct dsa_port *dp = dsa_slave_to_port(dev); 1497 struct dsa_switch *ds = dp->ds; 1498 1499 switch (type) { 1500 case TC_SETUP_BLOCK: 1501 return dsa_slave_setup_tc_block(dev, type_data); 1502 case TC_SETUP_FT: 1503 return dsa_slave_setup_ft_block(ds, dp->index, type_data); 1504 default: 1505 break; 1506 } 1507 1508 if (!ds->ops->port_setup_tc) 1509 return -EOPNOTSUPP; 1510 1511 return ds->ops->port_setup_tc(ds, dp->index, type, type_data); 1512} 1513 1514static int dsa_slave_get_rxnfc(struct net_device *dev, 1515 struct ethtool_rxnfc *nfc, u32 *rule_locs) 1516{ 1517 struct dsa_port *dp = dsa_slave_to_port(dev); 1518 struct dsa_switch *ds = dp->ds; 1519 1520 if (!ds->ops->get_rxnfc) 1521 return -EOPNOTSUPP; 1522 1523 return ds->ops->get_rxnfc(ds, dp->index, nfc, rule_locs); 1524} 1525 1526static int dsa_slave_set_rxnfc(struct net_device *dev, 1527 struct ethtool_rxnfc *nfc) 1528{ 1529 struct dsa_port *dp = dsa_slave_to_port(dev); 1530 struct dsa_switch *ds = dp->ds; 1531 1532 if (!ds->ops->set_rxnfc) 1533 return -EOPNOTSUPP; 1534 1535 return ds->ops->set_rxnfc(ds, dp->index, nfc); 1536} 1537 1538static int dsa_slave_get_ts_info(struct net_device *dev, 1539 struct ethtool_ts_info *ts) 1540{ 1541 struct dsa_slave_priv *p = netdev_priv(dev); 1542 struct dsa_switch *ds = p->dp->ds; 1543 1544 if (!ds->ops->get_ts_info) 1545 return -EOPNOTSUPP; 1546 1547 return ds->ops->get_ts_info(ds, p->dp->index, ts); 1548} 1549 1550static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto, 1551 u16 vid) 1552{ 1553 struct dsa_port *dp = dsa_slave_to_port(dev); 1554 struct switchdev_obj_port_vlan vlan = { 1555 .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN, 1556 .vid = vid, 1557 /* This API only allows programming tagged, non-PVID VIDs */ 1558 .flags = 0, 1559 }; 1560 struct netlink_ext_ack extack = {0}; 1561 int ret; 1562 1563 /* User port... */ 1564 ret = dsa_port_vlan_add(dp, &vlan, &extack); 1565 if (ret) { 1566 if (extack._msg) 1567 netdev_err(dev, "%s\n", extack._msg); 1568 return ret; 1569 } 1570 1571 /* And CPU port... */ 1572 ret = dsa_port_host_vlan_add(dp, &vlan, &extack); 1573 if (ret) { 1574 if (extack._msg) 1575 netdev_err(dev, "CPU port %d: %s\n", dp->cpu_dp->index, 1576 extack._msg); 1577 return ret; 1578 } 1579 1580 return 0; 1581} 1582 1583static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, 1584 u16 vid) 1585{ 1586 struct dsa_port *dp = dsa_slave_to_port(dev); 1587 struct switchdev_obj_port_vlan vlan = { 1588 .vid = vid, 1589 /* This API only allows programming tagged, non-PVID VIDs */ 1590 .flags = 0, 1591 }; 1592 int err; 1593 1594 err = dsa_port_vlan_del(dp, &vlan); 1595 if (err) 1596 return err; 1597 1598 return dsa_port_host_vlan_del(dp, &vlan); 1599} 1600 1601static int dsa_slave_restore_vlan(struct net_device *vdev, int vid, void *arg) 1602{ 1603 __be16 proto = vdev ? vlan_dev_vlan_proto(vdev) : htons(ETH_P_8021Q); 1604 1605 return dsa_slave_vlan_rx_add_vid(arg, proto, vid); 1606} 1607 1608static int dsa_slave_clear_vlan(struct net_device *vdev, int vid, void *arg) 1609{ 1610 __be16 proto = vdev ? vlan_dev_vlan_proto(vdev) : htons(ETH_P_8021Q); 1611 1612 return dsa_slave_vlan_rx_kill_vid(arg, proto, vid); 1613} 1614 1615/* Keep the VLAN RX filtering list in sync with the hardware only if VLAN 1616 * filtering is enabled. The baseline is that only ports that offload a 1617 * VLAN-aware bridge are VLAN-aware, and standalone ports are VLAN-unaware, 1618 * but there are exceptions for quirky hardware. 1619 * 1620 * If ds->vlan_filtering_is_global = true, then standalone ports which share 1621 * the same switch with other ports that offload a VLAN-aware bridge are also 1622 * inevitably VLAN-aware. 1623 * 1624 * To summarize, a DSA switch port offloads: 1625 * 1626 * - If standalone (this includes software bridge, software LAG): 1627 * - if ds->needs_standalone_vlan_filtering = true, OR if 1628 * (ds->vlan_filtering_is_global = true AND there are bridges spanning 1629 * this switch chip which have vlan_filtering=1) 1630 * - the 8021q upper VLANs 1631 * - else (standalone VLAN filtering is not needed, VLAN filtering is not 1632 * global, or it is, but no port is under a VLAN-aware bridge): 1633 * - no VLAN (any 8021q upper is a software VLAN) 1634 * 1635 * - If under a vlan_filtering=0 bridge which it offload: 1636 * - if ds->configure_vlan_while_not_filtering = true (default): 1637 * - the bridge VLANs. These VLANs are committed to hardware but inactive. 1638 * - else (deprecated): 1639 * - no VLAN. The bridge VLANs are not restored when VLAN awareness is 1640 * enabled, so this behavior is broken and discouraged. 1641 * 1642 * - If under a vlan_filtering=1 bridge which it offload: 1643 * - the bridge VLANs 1644 * - the 8021q upper VLANs 1645 */ 1646int dsa_slave_manage_vlan_filtering(struct net_device *slave, 1647 bool vlan_filtering) 1648{ 1649 int err; 1650 1651 if (vlan_filtering) { 1652 slave->features |= NETIF_F_HW_VLAN_CTAG_FILTER; 1653 1654 err = vlan_for_each(slave, dsa_slave_restore_vlan, slave); 1655 if (err) { 1656 vlan_for_each(slave, dsa_slave_clear_vlan, slave); 1657 slave->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER; 1658 return err; 1659 } 1660 } else { 1661 err = vlan_for_each(slave, dsa_slave_clear_vlan, slave); 1662 if (err) 1663 return err; 1664 1665 slave->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER; 1666 } 1667 1668 return 0; 1669} 1670 1671struct dsa_hw_port { 1672 struct list_head list; 1673 struct net_device *dev; 1674 int old_mtu; 1675}; 1676 1677static int dsa_hw_port_list_set_mtu(struct list_head *hw_port_list, int mtu) 1678{ 1679 const struct dsa_hw_port *p; 1680 int err; 1681 1682 list_for_each_entry(p, hw_port_list, list) { 1683 if (p->dev->mtu == mtu) 1684 continue; 1685 1686 err = dev_set_mtu(p->dev, mtu); 1687 if (err) 1688 goto rollback; 1689 } 1690 1691 return 0; 1692 1693rollback: 1694 list_for_each_entry_continue_reverse(p, hw_port_list, list) { 1695 if (p->dev->mtu == p->old_mtu) 1696 continue; 1697 1698 if (dev_set_mtu(p->dev, p->old_mtu)) 1699 netdev_err(p->dev, "Failed to restore MTU\n"); 1700 } 1701 1702 return err; 1703} 1704 1705static void dsa_hw_port_list_free(struct list_head *hw_port_list) 1706{ 1707 struct dsa_hw_port *p, *n; 1708 1709 list_for_each_entry_safe(p, n, hw_port_list, list) 1710 kfree(p); 1711} 1712 1713/* Make the hardware datapath to/from @dev limited to a common MTU */ 1714static void dsa_bridge_mtu_normalization(struct dsa_port *dp) 1715{ 1716 struct list_head hw_port_list; 1717 struct dsa_switch_tree *dst; 1718 int min_mtu = ETH_MAX_MTU; 1719 struct dsa_port *other_dp; 1720 int err; 1721 1722 if (!dp->ds->mtu_enforcement_ingress) 1723 return; 1724 1725 if (!dp->bridge) 1726 return; 1727 1728 INIT_LIST_HEAD(&hw_port_list); 1729 1730 /* Populate the list of ports that are part of the same bridge 1731 * as the newly added/modified port 1732 */ 1733 list_for_each_entry(dst, &dsa_tree_list, list) { 1734 list_for_each_entry(other_dp, &dst->ports, list) { 1735 struct dsa_hw_port *hw_port; 1736 struct net_device *slave; 1737 1738 if (other_dp->type != DSA_PORT_TYPE_USER) 1739 continue; 1740 1741 if (!dsa_port_bridge_same(dp, other_dp)) 1742 continue; 1743 1744 if (!other_dp->ds->mtu_enforcement_ingress) 1745 continue; 1746 1747 slave = other_dp->slave; 1748 1749 if (min_mtu > slave->mtu) 1750 min_mtu = slave->mtu; 1751 1752 hw_port = kzalloc(sizeof(*hw_port), GFP_KERNEL); 1753 if (!hw_port) 1754 goto out; 1755 1756 hw_port->dev = slave; 1757 hw_port->old_mtu = slave->mtu; 1758 1759 list_add(&hw_port->list, &hw_port_list); 1760 } 1761 } 1762 1763 /* Attempt to configure the entire hardware bridge to the newly added 1764 * interface's MTU first, regardless of whether the intention of the 1765 * user was to raise or lower it. 1766 */ 1767 err = dsa_hw_port_list_set_mtu(&hw_port_list, dp->slave->mtu); 1768 if (!err) 1769 goto out; 1770 1771 /* Clearly that didn't work out so well, so just set the minimum MTU on 1772 * all hardware bridge ports now. If this fails too, then all ports will 1773 * still have their old MTU rolled back anyway. 1774 */ 1775 dsa_hw_port_list_set_mtu(&hw_port_list, min_mtu); 1776 1777out: 1778 dsa_hw_port_list_free(&hw_port_list); 1779} 1780 1781int dsa_slave_change_mtu(struct net_device *dev, int new_mtu) 1782{ 1783 struct net_device *master = dsa_slave_to_master(dev); 1784 struct dsa_port *dp = dsa_slave_to_port(dev); 1785 struct dsa_port *cpu_dp = dp->cpu_dp; 1786 struct dsa_switch *ds = dp->ds; 1787 struct dsa_port *other_dp; 1788 int largest_mtu = 0; 1789 int new_master_mtu; 1790 int old_master_mtu; 1791 int mtu_limit; 1792 int cpu_mtu; 1793 int err; 1794 1795 if (!ds->ops->port_change_mtu) 1796 return -EOPNOTSUPP; 1797 1798 dsa_tree_for_each_user_port(other_dp, ds->dst) { 1799 int slave_mtu; 1800 1801 /* During probe, this function will be called for each slave 1802 * device, while not all of them have been allocated. That's 1803 * ok, it doesn't change what the maximum is, so ignore it. 1804 */ 1805 if (!other_dp->slave) 1806 continue; 1807 1808 /* Pretend that we already applied the setting, which we 1809 * actually haven't (still haven't done all integrity checks) 1810 */ 1811 if (dp == other_dp) 1812 slave_mtu = new_mtu; 1813 else 1814 slave_mtu = other_dp->slave->mtu; 1815 1816 if (largest_mtu < slave_mtu) 1817 largest_mtu = slave_mtu; 1818 } 1819 1820 mtu_limit = min_t(int, master->max_mtu, dev->max_mtu); 1821 old_master_mtu = master->mtu; 1822 new_master_mtu = largest_mtu + dsa_tag_protocol_overhead(cpu_dp->tag_ops); 1823 if (new_master_mtu > mtu_limit) 1824 return -ERANGE; 1825 1826 /* If the master MTU isn't over limit, there's no need to check the CPU 1827 * MTU, since that surely isn't either. 1828 */ 1829 cpu_mtu = largest_mtu; 1830 1831 /* Start applying stuff */ 1832 if (new_master_mtu != old_master_mtu) { 1833 err = dev_set_mtu(master, new_master_mtu); 1834 if (err < 0) 1835 goto out_master_failed; 1836 1837 /* We only need to propagate the MTU of the CPU port to 1838 * upstream switches, so emit a notifier which updates them. 1839 */ 1840 err = dsa_port_mtu_change(cpu_dp, cpu_mtu); 1841 if (err) 1842 goto out_cpu_failed; 1843 } 1844 1845 err = ds->ops->port_change_mtu(ds, dp->index, new_mtu); 1846 if (err) 1847 goto out_port_failed; 1848 1849 dev->mtu = new_mtu; 1850 1851 dsa_bridge_mtu_normalization(dp); 1852 1853 return 0; 1854 1855out_port_failed: 1856 if (new_master_mtu != old_master_mtu) 1857 dsa_port_mtu_change(cpu_dp, old_master_mtu - 1858 dsa_tag_protocol_overhead(cpu_dp->tag_ops)); 1859out_cpu_failed: 1860 if (new_master_mtu != old_master_mtu) 1861 dev_set_mtu(master, old_master_mtu); 1862out_master_failed: 1863 return err; 1864} 1865 1866static int __maybe_unused 1867dsa_slave_dcbnl_set_default_prio(struct net_device *dev, struct dcb_app *app) 1868{ 1869 struct dsa_port *dp = dsa_slave_to_port(dev); 1870 struct dsa_switch *ds = dp->ds; 1871 unsigned long mask, new_prio; 1872 int err, port = dp->index; 1873 1874 if (!ds->ops->port_set_default_prio) 1875 return -EOPNOTSUPP; 1876 1877 err = dcb_ieee_setapp(dev, app); 1878 if (err) 1879 return err; 1880 1881 mask = dcb_ieee_getapp_mask(dev, app); 1882 new_prio = __fls(mask); 1883 1884 err = ds->ops->port_set_default_prio(ds, port, new_prio); 1885 if (err) { 1886 dcb_ieee_delapp(dev, app); 1887 return err; 1888 } 1889 1890 return 0; 1891} 1892 1893static int __maybe_unused 1894dsa_slave_dcbnl_add_dscp_prio(struct net_device *dev, struct dcb_app *app) 1895{ 1896 struct dsa_port *dp = dsa_slave_to_port(dev); 1897 struct dsa_switch *ds = dp->ds; 1898 unsigned long mask, new_prio; 1899 int err, port = dp->index; 1900 u8 dscp = app->protocol; 1901 1902 if (!ds->ops->port_add_dscp_prio) 1903 return -EOPNOTSUPP; 1904 1905 if (dscp >= 64) { 1906 netdev_err(dev, "DSCP APP entry with protocol value %u is invalid\n", 1907 dscp); 1908 return -EINVAL; 1909 } 1910 1911 err = dcb_ieee_setapp(dev, app); 1912 if (err) 1913 return err; 1914 1915 mask = dcb_ieee_getapp_mask(dev, app); 1916 new_prio = __fls(mask); 1917 1918 err = ds->ops->port_add_dscp_prio(ds, port, dscp, new_prio); 1919 if (err) { 1920 dcb_ieee_delapp(dev, app); 1921 return err; 1922 } 1923 1924 return 0; 1925} 1926 1927static int __maybe_unused dsa_slave_dcbnl_ieee_setapp(struct net_device *dev, 1928 struct dcb_app *app) 1929{ 1930 switch (app->selector) { 1931 case IEEE_8021QAZ_APP_SEL_ETHERTYPE: 1932 switch (app->protocol) { 1933 case 0: 1934 return dsa_slave_dcbnl_set_default_prio(dev, app); 1935 default: 1936 return -EOPNOTSUPP; 1937 } 1938 break; 1939 case IEEE_8021QAZ_APP_SEL_DSCP: 1940 return dsa_slave_dcbnl_add_dscp_prio(dev, app); 1941 default: 1942 return -EOPNOTSUPP; 1943 } 1944} 1945 1946static int __maybe_unused 1947dsa_slave_dcbnl_del_default_prio(struct net_device *dev, struct dcb_app *app) 1948{ 1949 struct dsa_port *dp = dsa_slave_to_port(dev); 1950 struct dsa_switch *ds = dp->ds; 1951 unsigned long mask, new_prio; 1952 int err, port = dp->index; 1953 1954 if (!ds->ops->port_set_default_prio) 1955 return -EOPNOTSUPP; 1956 1957 err = dcb_ieee_delapp(dev, app); 1958 if (err) 1959 return err; 1960 1961 mask = dcb_ieee_getapp_mask(dev, app); 1962 new_prio = mask ? __fls(mask) : 0; 1963 1964 err = ds->ops->port_set_default_prio(ds, port, new_prio); 1965 if (err) { 1966 dcb_ieee_setapp(dev, app); 1967 return err; 1968 } 1969 1970 return 0; 1971} 1972 1973static int __maybe_unused 1974dsa_slave_dcbnl_del_dscp_prio(struct net_device *dev, struct dcb_app *app) 1975{ 1976 struct dsa_port *dp = dsa_slave_to_port(dev); 1977 struct dsa_switch *ds = dp->ds; 1978 int err, port = dp->index; 1979 u8 dscp = app->protocol; 1980 1981 if (!ds->ops->port_del_dscp_prio) 1982 return -EOPNOTSUPP; 1983 1984 err = dcb_ieee_delapp(dev, app); 1985 if (err) 1986 return err; 1987 1988 err = ds->ops->port_del_dscp_prio(ds, port, dscp, app->priority); 1989 if (err) { 1990 dcb_ieee_setapp(dev, app); 1991 return err; 1992 } 1993 1994 return 0; 1995} 1996 1997static int __maybe_unused dsa_slave_dcbnl_ieee_delapp(struct net_device *dev, 1998 struct dcb_app *app) 1999{ 2000 switch (app->selector) { 2001 case IEEE_8021QAZ_APP_SEL_ETHERTYPE: 2002 switch (app->protocol) { 2003 case 0: 2004 return dsa_slave_dcbnl_del_default_prio(dev, app); 2005 default: 2006 return -EOPNOTSUPP; 2007 } 2008 break; 2009 case IEEE_8021QAZ_APP_SEL_DSCP: 2010 return dsa_slave_dcbnl_del_dscp_prio(dev, app); 2011 default: 2012 return -EOPNOTSUPP; 2013 } 2014} 2015 2016/* Pre-populate the DCB application priority table with the priorities 2017 * configured during switch setup, which we read from hardware here. 2018 */ 2019static int dsa_slave_dcbnl_init(struct net_device *dev) 2020{ 2021 struct dsa_port *dp = dsa_slave_to_port(dev); 2022 struct dsa_switch *ds = dp->ds; 2023 int port = dp->index; 2024 int err; 2025 2026 if (ds->ops->port_get_default_prio) { 2027 int prio = ds->ops->port_get_default_prio(ds, port); 2028 struct dcb_app app = { 2029 .selector = IEEE_8021QAZ_APP_SEL_ETHERTYPE, 2030 .protocol = 0, 2031 .priority = prio, 2032 }; 2033 2034 if (prio < 0) 2035 return prio; 2036 2037 err = dcb_ieee_setapp(dev, &app); 2038 if (err) 2039 return err; 2040 } 2041 2042 if (ds->ops->port_get_dscp_prio) { 2043 int protocol; 2044 2045 for (protocol = 0; protocol < 64; protocol++) { 2046 struct dcb_app app = { 2047 .selector = IEEE_8021QAZ_APP_SEL_DSCP, 2048 .protocol = protocol, 2049 }; 2050 int prio; 2051 2052 prio = ds->ops->port_get_dscp_prio(ds, port, protocol); 2053 if (prio == -EOPNOTSUPP) 2054 continue; 2055 if (prio < 0) 2056 return prio; 2057 2058 app.priority = prio; 2059 2060 err = dcb_ieee_setapp(dev, &app); 2061 if (err) 2062 return err; 2063 } 2064 } 2065 2066 return 0; 2067} 2068 2069static const struct ethtool_ops dsa_slave_ethtool_ops = { 2070 .get_drvinfo = dsa_slave_get_drvinfo, 2071 .get_regs_len = dsa_slave_get_regs_len, 2072 .get_regs = dsa_slave_get_regs, 2073 .nway_reset = dsa_slave_nway_reset, 2074 .get_link = ethtool_op_get_link, 2075 .get_eeprom_len = dsa_slave_get_eeprom_len, 2076 .get_eeprom = dsa_slave_get_eeprom, 2077 .set_eeprom = dsa_slave_set_eeprom, 2078 .get_strings = dsa_slave_get_strings, 2079 .get_ethtool_stats = dsa_slave_get_ethtool_stats, 2080 .get_sset_count = dsa_slave_get_sset_count, 2081 .get_eth_phy_stats = dsa_slave_get_eth_phy_stats, 2082 .get_eth_mac_stats = dsa_slave_get_eth_mac_stats, 2083 .get_eth_ctrl_stats = dsa_slave_get_eth_ctrl_stats, 2084 .set_wol = dsa_slave_set_wol, 2085 .get_wol = dsa_slave_get_wol, 2086 .set_eee = dsa_slave_set_eee, 2087 .get_eee = dsa_slave_get_eee, 2088 .get_link_ksettings = dsa_slave_get_link_ksettings, 2089 .set_link_ksettings = dsa_slave_set_link_ksettings, 2090 .get_pauseparam = dsa_slave_get_pauseparam, 2091 .set_pauseparam = dsa_slave_set_pauseparam, 2092 .get_rxnfc = dsa_slave_get_rxnfc, 2093 .set_rxnfc = dsa_slave_set_rxnfc, 2094 .get_ts_info = dsa_slave_get_ts_info, 2095 .self_test = dsa_slave_net_selftest, 2096}; 2097 2098static const struct dcbnl_rtnl_ops __maybe_unused dsa_slave_dcbnl_ops = { 2099 .ieee_setapp = dsa_slave_dcbnl_ieee_setapp, 2100 .ieee_delapp = dsa_slave_dcbnl_ieee_delapp, 2101}; 2102 2103static struct devlink_port *dsa_slave_get_devlink_port(struct net_device *dev) 2104{ 2105 struct dsa_port *dp = dsa_slave_to_port(dev); 2106 2107 return &dp->devlink_port; 2108} 2109 2110static void dsa_slave_get_stats64(struct net_device *dev, 2111 struct rtnl_link_stats64 *s) 2112{ 2113 struct dsa_port *dp = dsa_slave_to_port(dev); 2114 struct dsa_switch *ds = dp->ds; 2115 2116 if (ds->ops->get_stats64) 2117 ds->ops->get_stats64(ds, dp->index, s); 2118 else 2119 dev_get_tstats64(dev, s); 2120} 2121 2122static int dsa_slave_fill_forward_path(struct net_device_path_ctx *ctx, 2123 struct net_device_path *path) 2124{ 2125 struct dsa_port *dp = dsa_slave_to_port(ctx->dev); 2126 struct dsa_port *cpu_dp = dp->cpu_dp; 2127 2128 path->dev = ctx->dev; 2129 path->type = DEV_PATH_DSA; 2130 path->dsa.proto = cpu_dp->tag_ops->proto; 2131 path->dsa.port = dp->index; 2132 ctx->dev = cpu_dp->master; 2133 2134 return 0; 2135} 2136 2137static const struct net_device_ops dsa_slave_netdev_ops = { 2138 .ndo_open = dsa_slave_open, 2139 .ndo_stop = dsa_slave_close, 2140 .ndo_start_xmit = dsa_slave_xmit, 2141 .ndo_change_rx_flags = dsa_slave_change_rx_flags, 2142 .ndo_set_rx_mode = dsa_slave_set_rx_mode, 2143 .ndo_set_mac_address = dsa_slave_set_mac_address, 2144 .ndo_fdb_dump = dsa_slave_fdb_dump, 2145 .ndo_eth_ioctl = dsa_slave_ioctl, 2146 .ndo_get_iflink = dsa_slave_get_iflink, 2147#ifdef CONFIG_NET_POLL_CONTROLLER 2148 .ndo_netpoll_setup = dsa_slave_netpoll_setup, 2149 .ndo_netpoll_cleanup = dsa_slave_netpoll_cleanup, 2150 .ndo_poll_controller = dsa_slave_poll_controller, 2151#endif 2152 .ndo_setup_tc = dsa_slave_setup_tc, 2153 .ndo_get_stats64 = dsa_slave_get_stats64, 2154 .ndo_vlan_rx_add_vid = dsa_slave_vlan_rx_add_vid, 2155 .ndo_vlan_rx_kill_vid = dsa_slave_vlan_rx_kill_vid, 2156 .ndo_get_devlink_port = dsa_slave_get_devlink_port, 2157 .ndo_change_mtu = dsa_slave_change_mtu, 2158 .ndo_fill_forward_path = dsa_slave_fill_forward_path, 2159}; 2160 2161static struct device_type dsa_type = { 2162 .name = "dsa", 2163}; 2164 2165void dsa_port_phylink_mac_change(struct dsa_switch *ds, int port, bool up) 2166{ 2167 const struct dsa_port *dp = dsa_to_port(ds, port); 2168 2169 if (dp->pl) 2170 phylink_mac_change(dp->pl, up); 2171} 2172EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_change); 2173 2174static void dsa_slave_phylink_fixed_state(struct phylink_config *config, 2175 struct phylink_link_state *state) 2176{ 2177 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config); 2178 struct dsa_switch *ds = dp->ds; 2179 2180 /* No need to check that this operation is valid, the callback would 2181 * not be called if it was not. 2182 */ 2183 ds->ops->phylink_fixed_state(ds, dp->index, state); 2184} 2185 2186/* slave device setup *******************************************************/ 2187static int dsa_slave_phy_connect(struct net_device *slave_dev, int addr, 2188 u32 flags) 2189{ 2190 struct dsa_port *dp = dsa_slave_to_port(slave_dev); 2191 struct dsa_switch *ds = dp->ds; 2192 2193 slave_dev->phydev = mdiobus_get_phy(ds->slave_mii_bus, addr); 2194 if (!slave_dev->phydev) { 2195 netdev_err(slave_dev, "no phy at %d\n", addr); 2196 return -ENODEV; 2197 } 2198 2199 slave_dev->phydev->dev_flags |= flags; 2200 2201 return phylink_connect_phy(dp->pl, slave_dev->phydev); 2202} 2203 2204static int dsa_slave_phy_setup(struct net_device *slave_dev) 2205{ 2206 struct dsa_port *dp = dsa_slave_to_port(slave_dev); 2207 struct device_node *port_dn = dp->dn; 2208 struct dsa_switch *ds = dp->ds; 2209 u32 phy_flags = 0; 2210 int ret; 2211 2212 dp->pl_config.dev = &slave_dev->dev; 2213 dp->pl_config.type = PHYLINK_NETDEV; 2214 2215 /* The get_fixed_state callback takes precedence over polling the 2216 * link GPIO in PHYLINK (see phylink_get_fixed_state). Only set 2217 * this if the switch provides such a callback. 2218 */ 2219 if (ds->ops->phylink_fixed_state) { 2220 dp->pl_config.get_fixed_state = dsa_slave_phylink_fixed_state; 2221 dp->pl_config.poll_fixed_state = true; 2222 } 2223 2224 ret = dsa_port_phylink_create(dp); 2225 if (ret) 2226 return ret; 2227 2228 if (ds->ops->get_phy_flags) 2229 phy_flags = ds->ops->get_phy_flags(ds, dp->index); 2230 2231 ret = phylink_of_phy_connect(dp->pl, port_dn, phy_flags); 2232 if (ret == -ENODEV && ds->slave_mii_bus) { 2233 /* We could not connect to a designated PHY or SFP, so try to 2234 * use the switch internal MDIO bus instead 2235 */ 2236 ret = dsa_slave_phy_connect(slave_dev, dp->index, phy_flags); 2237 } 2238 if (ret) { 2239 netdev_err(slave_dev, "failed to connect to PHY: %pe\n", 2240 ERR_PTR(ret)); 2241 phylink_destroy(dp->pl); 2242 } 2243 2244 return ret; 2245} 2246 2247void dsa_slave_setup_tagger(struct net_device *slave) 2248{ 2249 struct dsa_port *dp = dsa_slave_to_port(slave); 2250 struct dsa_slave_priv *p = netdev_priv(slave); 2251 const struct dsa_port *cpu_dp = dp->cpu_dp; 2252 struct net_device *master = cpu_dp->master; 2253 const struct dsa_switch *ds = dp->ds; 2254 2255 slave->needed_headroom = cpu_dp->tag_ops->needed_headroom; 2256 slave->needed_tailroom = cpu_dp->tag_ops->needed_tailroom; 2257 /* Try to save one extra realloc later in the TX path (in the master) 2258 * by also inheriting the master's needed headroom and tailroom. 2259 * The 8021q driver also does this. 2260 */ 2261 slave->needed_headroom += master->needed_headroom; 2262 slave->needed_tailroom += master->needed_tailroom; 2263 2264 p->xmit = cpu_dp->tag_ops->xmit; 2265 2266 slave->features = master->vlan_features | NETIF_F_HW_TC; 2267 slave->hw_features |= NETIF_F_HW_TC; 2268 slave->features |= NETIF_F_LLTX; 2269 if (slave->needed_tailroom) 2270 slave->features &= ~(NETIF_F_SG | NETIF_F_FRAGLIST); 2271 if (ds->needs_standalone_vlan_filtering) 2272 slave->features |= NETIF_F_HW_VLAN_CTAG_FILTER; 2273} 2274 2275int dsa_slave_suspend(struct net_device *slave_dev) 2276{ 2277 struct dsa_port *dp = dsa_slave_to_port(slave_dev); 2278 2279 if (!netif_running(slave_dev)) 2280 return 0; 2281 2282 netif_device_detach(slave_dev); 2283 2284 rtnl_lock(); 2285 phylink_stop(dp->pl); 2286 rtnl_unlock(); 2287 2288 return 0; 2289} 2290 2291int dsa_slave_resume(struct net_device *slave_dev) 2292{ 2293 struct dsa_port *dp = dsa_slave_to_port(slave_dev); 2294 2295 if (!netif_running(slave_dev)) 2296 return 0; 2297 2298 netif_device_attach(slave_dev); 2299 2300 rtnl_lock(); 2301 phylink_start(dp->pl); 2302 rtnl_unlock(); 2303 2304 return 0; 2305} 2306 2307int dsa_slave_create(struct dsa_port *port) 2308{ 2309 const struct dsa_port *cpu_dp = port->cpu_dp; 2310 struct net_device *master = cpu_dp->master; 2311 struct dsa_switch *ds = port->ds; 2312 const char *name = port->name; 2313 struct net_device *slave_dev; 2314 struct dsa_slave_priv *p; 2315 int ret; 2316 2317 if (!ds->num_tx_queues) 2318 ds->num_tx_queues = 1; 2319 2320 slave_dev = alloc_netdev_mqs(sizeof(struct dsa_slave_priv), name, 2321 NET_NAME_UNKNOWN, ether_setup, 2322 ds->num_tx_queues, 1); 2323 if (slave_dev == NULL) 2324 return -ENOMEM; 2325 2326 slave_dev->ethtool_ops = &dsa_slave_ethtool_ops; 2327#if IS_ENABLED(CONFIG_DCB) 2328 slave_dev->dcbnl_ops = &dsa_slave_dcbnl_ops; 2329#endif 2330 if (!is_zero_ether_addr(port->mac)) 2331 eth_hw_addr_set(slave_dev, port->mac); 2332 else 2333 eth_hw_addr_inherit(slave_dev, master); 2334 slave_dev->priv_flags |= IFF_NO_QUEUE; 2335 if (dsa_switch_supports_uc_filtering(ds)) 2336 slave_dev->priv_flags |= IFF_UNICAST_FLT; 2337 slave_dev->netdev_ops = &dsa_slave_netdev_ops; 2338 if (ds->ops->port_max_mtu) 2339 slave_dev->max_mtu = ds->ops->port_max_mtu(ds, port->index); 2340 SET_NETDEV_DEVTYPE(slave_dev, &dsa_type); 2341 2342 SET_NETDEV_DEV(slave_dev, port->ds->dev); 2343 slave_dev->dev.of_node = port->dn; 2344 slave_dev->vlan_features = master->vlan_features; 2345 2346 p = netdev_priv(slave_dev); 2347 slave_dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); 2348 if (!slave_dev->tstats) { 2349 free_netdev(slave_dev); 2350 return -ENOMEM; 2351 } 2352 2353 ret = gro_cells_init(&p->gcells, slave_dev); 2354 if (ret) 2355 goto out_free; 2356 2357 p->dp = port; 2358 INIT_LIST_HEAD(&p->mall_tc_list); 2359 port->slave = slave_dev; 2360 dsa_slave_setup_tagger(slave_dev); 2361 2362 netif_carrier_off(slave_dev); 2363 2364 ret = dsa_slave_phy_setup(slave_dev); 2365 if (ret) { 2366 netdev_err(slave_dev, 2367 "error %d setting up PHY for tree %d, switch %d, port %d\n", 2368 ret, ds->dst->index, ds->index, port->index); 2369 goto out_gcells; 2370 } 2371 2372 rtnl_lock(); 2373 2374 ret = dsa_slave_change_mtu(slave_dev, ETH_DATA_LEN); 2375 if (ret && ret != -EOPNOTSUPP) 2376 dev_warn(ds->dev, "nonfatal error %d setting MTU to %d on port %d\n", 2377 ret, ETH_DATA_LEN, port->index); 2378 2379 ret = register_netdevice(slave_dev); 2380 if (ret) { 2381 netdev_err(master, "error %d registering interface %s\n", 2382 ret, slave_dev->name); 2383 rtnl_unlock(); 2384 goto out_phy; 2385 } 2386 2387 if (IS_ENABLED(CONFIG_DCB)) { 2388 ret = dsa_slave_dcbnl_init(slave_dev); 2389 if (ret) { 2390 netdev_err(slave_dev, 2391 "failed to initialize DCB: %pe\n", 2392 ERR_PTR(ret)); 2393 rtnl_unlock(); 2394 goto out_unregister; 2395 } 2396 } 2397 2398 ret = netdev_upper_dev_link(master, slave_dev, NULL); 2399 2400 rtnl_unlock(); 2401 2402 if (ret) 2403 goto out_unregister; 2404 2405 return 0; 2406 2407out_unregister: 2408 unregister_netdev(slave_dev); 2409out_phy: 2410 rtnl_lock(); 2411 phylink_disconnect_phy(p->dp->pl); 2412 rtnl_unlock(); 2413 phylink_destroy(p->dp->pl); 2414out_gcells: 2415 gro_cells_destroy(&p->gcells); 2416out_free: 2417 free_percpu(slave_dev->tstats); 2418 free_netdev(slave_dev); 2419 port->slave = NULL; 2420 return ret; 2421} 2422 2423void dsa_slave_destroy(struct net_device *slave_dev) 2424{ 2425 struct net_device *master = dsa_slave_to_master(slave_dev); 2426 struct dsa_port *dp = dsa_slave_to_port(slave_dev); 2427 struct dsa_slave_priv *p = netdev_priv(slave_dev); 2428 2429 netif_carrier_off(slave_dev); 2430 rtnl_lock(); 2431 netdev_upper_dev_unlink(master, slave_dev); 2432 unregister_netdevice(slave_dev); 2433 phylink_disconnect_phy(dp->pl); 2434 rtnl_unlock(); 2435 2436 phylink_destroy(dp->pl); 2437 gro_cells_destroy(&p->gcells); 2438 free_percpu(slave_dev->tstats); 2439 free_netdev(slave_dev); 2440} 2441 2442bool dsa_slave_dev_check(const struct net_device *dev) 2443{ 2444 return dev->netdev_ops == &dsa_slave_netdev_ops; 2445} 2446EXPORT_SYMBOL_GPL(dsa_slave_dev_check); 2447 2448static int dsa_slave_changeupper(struct net_device *dev, 2449 struct netdev_notifier_changeupper_info *info) 2450{ 2451 struct dsa_port *dp = dsa_slave_to_port(dev); 2452 struct netlink_ext_ack *extack; 2453 int err = NOTIFY_DONE; 2454 2455 extack = netdev_notifier_info_to_extack(&info->info); 2456 2457 if (netif_is_bridge_master(info->upper_dev)) { 2458 if (info->linking) { 2459 err = dsa_port_bridge_join(dp, info->upper_dev, extack); 2460 if (!err) 2461 dsa_bridge_mtu_normalization(dp); 2462 if (err == -EOPNOTSUPP) { 2463 NL_SET_ERR_MSG_MOD(extack, 2464 "Offloading not supported"); 2465 err = 0; 2466 } 2467 err = notifier_from_errno(err); 2468 } else { 2469 dsa_port_bridge_leave(dp, info->upper_dev); 2470 err = NOTIFY_OK; 2471 } 2472 } else if (netif_is_lag_master(info->upper_dev)) { 2473 if (info->linking) { 2474 err = dsa_port_lag_join(dp, info->upper_dev, 2475 info->upper_info, extack); 2476 if (err == -EOPNOTSUPP) { 2477 NL_SET_ERR_MSG_MOD(info->info.extack, 2478 "Offloading not supported"); 2479 err = 0; 2480 } 2481 err = notifier_from_errno(err); 2482 } else { 2483 dsa_port_lag_leave(dp, info->upper_dev); 2484 err = NOTIFY_OK; 2485 } 2486 } else if (is_hsr_master(info->upper_dev)) { 2487 if (info->linking) { 2488 err = dsa_port_hsr_join(dp, info->upper_dev); 2489 if (err == -EOPNOTSUPP) { 2490 NL_SET_ERR_MSG_MOD(info->info.extack, 2491 "Offloading not supported"); 2492 err = 0; 2493 } 2494 err = notifier_from_errno(err); 2495 } else { 2496 dsa_port_hsr_leave(dp, info->upper_dev); 2497 err = NOTIFY_OK; 2498 } 2499 } 2500 2501 return err; 2502} 2503 2504static int dsa_slave_prechangeupper(struct net_device *dev, 2505 struct netdev_notifier_changeupper_info *info) 2506{ 2507 struct dsa_port *dp = dsa_slave_to_port(dev); 2508 2509 if (netif_is_bridge_master(info->upper_dev) && !info->linking) 2510 dsa_port_pre_bridge_leave(dp, info->upper_dev); 2511 else if (netif_is_lag_master(info->upper_dev) && !info->linking) 2512 dsa_port_pre_lag_leave(dp, info->upper_dev); 2513 /* dsa_port_pre_hsr_leave is not yet necessary since hsr cannot be 2514 * meaningfully enslaved to a bridge yet 2515 */ 2516 2517 return NOTIFY_DONE; 2518} 2519 2520static int 2521dsa_slave_lag_changeupper(struct net_device *dev, 2522 struct netdev_notifier_changeupper_info *info) 2523{ 2524 struct net_device *lower; 2525 struct list_head *iter; 2526 int err = NOTIFY_DONE; 2527 struct dsa_port *dp; 2528 2529 netdev_for_each_lower_dev(dev, lower, iter) { 2530 if (!dsa_slave_dev_check(lower)) 2531 continue; 2532 2533 dp = dsa_slave_to_port(lower); 2534 if (!dp->lag) 2535 /* Software LAG */ 2536 continue; 2537 2538 err = dsa_slave_changeupper(lower, info); 2539 if (notifier_to_errno(err)) 2540 break; 2541 } 2542 2543 return err; 2544} 2545 2546/* Same as dsa_slave_lag_changeupper() except that it calls 2547 * dsa_slave_prechangeupper() 2548 */ 2549static int 2550dsa_slave_lag_prechangeupper(struct net_device *dev, 2551 struct netdev_notifier_changeupper_info *info) 2552{ 2553 struct net_device *lower; 2554 struct list_head *iter; 2555 int err = NOTIFY_DONE; 2556 struct dsa_port *dp; 2557 2558 netdev_for_each_lower_dev(dev, lower, iter) { 2559 if (!dsa_slave_dev_check(lower)) 2560 continue; 2561 2562 dp = dsa_slave_to_port(lower); 2563 if (!dp->lag) 2564 /* Software LAG */ 2565 continue; 2566 2567 err = dsa_slave_prechangeupper(lower, info); 2568 if (notifier_to_errno(err)) 2569 break; 2570 } 2571 2572 return err; 2573} 2574 2575static int 2576dsa_prevent_bridging_8021q_upper(struct net_device *dev, 2577 struct netdev_notifier_changeupper_info *info) 2578{ 2579 struct netlink_ext_ack *ext_ack; 2580 struct net_device *slave, *br; 2581 struct dsa_port *dp; 2582 2583 ext_ack = netdev_notifier_info_to_extack(&info->info); 2584 2585 if (!is_vlan_dev(dev)) 2586 return NOTIFY_DONE; 2587 2588 slave = vlan_dev_real_dev(dev); 2589 if (!dsa_slave_dev_check(slave)) 2590 return NOTIFY_DONE; 2591 2592 dp = dsa_slave_to_port(slave); 2593 br = dsa_port_bridge_dev_get(dp); 2594 if (!br) 2595 return NOTIFY_DONE; 2596 2597 /* Deny enslaving a VLAN device into a VLAN-aware bridge */ 2598 if (br_vlan_enabled(br) && 2599 netif_is_bridge_master(info->upper_dev) && info->linking) { 2600 NL_SET_ERR_MSG_MOD(ext_ack, 2601 "Cannot enslave VLAN device into VLAN aware bridge"); 2602 return notifier_from_errno(-EINVAL); 2603 } 2604 2605 return NOTIFY_DONE; 2606} 2607 2608static int 2609dsa_slave_check_8021q_upper(struct net_device *dev, 2610 struct netdev_notifier_changeupper_info *info) 2611{ 2612 struct dsa_port *dp = dsa_slave_to_port(dev); 2613 struct net_device *br = dsa_port_bridge_dev_get(dp); 2614 struct bridge_vlan_info br_info; 2615 struct netlink_ext_ack *extack; 2616 int err = NOTIFY_DONE; 2617 u16 vid; 2618 2619 if (!br || !br_vlan_enabled(br)) 2620 return NOTIFY_DONE; 2621 2622 extack = netdev_notifier_info_to_extack(&info->info); 2623 vid = vlan_dev_vlan_id(info->upper_dev); 2624 2625 /* br_vlan_get_info() returns -EINVAL or -ENOENT if the 2626 * device, respectively the VID is not found, returning 2627 * 0 means success, which is a failure for us here. 2628 */ 2629 err = br_vlan_get_info(br, vid, &br_info); 2630 if (err == 0) { 2631 NL_SET_ERR_MSG_MOD(extack, 2632 "This VLAN is already configured by the bridge"); 2633 return notifier_from_errno(-EBUSY); 2634 } 2635 2636 return NOTIFY_DONE; 2637} 2638 2639static int 2640dsa_slave_prechangeupper_sanity_check(struct net_device *dev, 2641 struct netdev_notifier_changeupper_info *info) 2642{ 2643 struct dsa_switch *ds; 2644 struct dsa_port *dp; 2645 int err; 2646 2647 if (!dsa_slave_dev_check(dev)) 2648 return dsa_prevent_bridging_8021q_upper(dev, info); 2649 2650 dp = dsa_slave_to_port(dev); 2651 ds = dp->ds; 2652 2653 if (ds->ops->port_prechangeupper) { 2654 err = ds->ops->port_prechangeupper(ds, dp->index, info); 2655 if (err) 2656 return notifier_from_errno(err); 2657 } 2658 2659 if (is_vlan_dev(info->upper_dev)) 2660 return dsa_slave_check_8021q_upper(dev, info); 2661 2662 return NOTIFY_DONE; 2663} 2664 2665static int dsa_slave_netdevice_event(struct notifier_block *nb, 2666 unsigned long event, void *ptr) 2667{ 2668 struct net_device *dev = netdev_notifier_info_to_dev(ptr); 2669 2670 switch (event) { 2671 case NETDEV_PRECHANGEUPPER: { 2672 struct netdev_notifier_changeupper_info *info = ptr; 2673 int err; 2674 2675 err = dsa_slave_prechangeupper_sanity_check(dev, info); 2676 if (err != NOTIFY_DONE) 2677 return err; 2678 2679 if (dsa_slave_dev_check(dev)) 2680 return dsa_slave_prechangeupper(dev, ptr); 2681 2682 if (netif_is_lag_master(dev)) 2683 return dsa_slave_lag_prechangeupper(dev, ptr); 2684 2685 break; 2686 } 2687 case NETDEV_CHANGEUPPER: 2688 if (dsa_slave_dev_check(dev)) 2689 return dsa_slave_changeupper(dev, ptr); 2690 2691 if (netif_is_lag_master(dev)) 2692 return dsa_slave_lag_changeupper(dev, ptr); 2693 2694 break; 2695 case NETDEV_CHANGELOWERSTATE: { 2696 struct netdev_notifier_changelowerstate_info *info = ptr; 2697 struct dsa_port *dp; 2698 int err; 2699 2700 if (!dsa_slave_dev_check(dev)) 2701 break; 2702 2703 dp = dsa_slave_to_port(dev); 2704 2705 err = dsa_port_lag_change(dp, info->lower_state_info); 2706 return notifier_from_errno(err); 2707 } 2708 case NETDEV_CHANGE: 2709 case NETDEV_UP: { 2710 /* Track state of master port. 2711 * DSA driver may require the master port (and indirectly 2712 * the tagger) to be available for some special operation. 2713 */ 2714 if (netdev_uses_dsa(dev)) { 2715 struct dsa_port *cpu_dp = dev->dsa_ptr; 2716 struct dsa_switch_tree *dst = cpu_dp->ds->dst; 2717 2718 /* Track when the master port is UP */ 2719 dsa_tree_master_oper_state_change(dst, dev, 2720 netif_oper_up(dev)); 2721 2722 /* Track when the master port is ready and can accept 2723 * packet. 2724 * NETDEV_UP event is not enough to flag a port as ready. 2725 * We also have to wait for linkwatch_do_dev to dev_activate 2726 * and emit a NETDEV_CHANGE event. 2727 * We check if a master port is ready by checking if the dev 2728 * have a qdisc assigned and is not noop. 2729 */ 2730 dsa_tree_master_admin_state_change(dst, dev, 2731 !qdisc_tx_is_noop(dev)); 2732 2733 return NOTIFY_OK; 2734 } 2735 2736 return NOTIFY_DONE; 2737 } 2738 case NETDEV_GOING_DOWN: { 2739 struct dsa_port *dp, *cpu_dp; 2740 struct dsa_switch_tree *dst; 2741 LIST_HEAD(close_list); 2742 2743 if (!netdev_uses_dsa(dev)) 2744 return NOTIFY_DONE; 2745 2746 cpu_dp = dev->dsa_ptr; 2747 dst = cpu_dp->ds->dst; 2748 2749 dsa_tree_master_admin_state_change(dst, dev, false); 2750 2751 list_for_each_entry(dp, &dst->ports, list) { 2752 if (!dsa_port_is_user(dp)) 2753 continue; 2754 2755 list_add(&dp->slave->close_list, &close_list); 2756 } 2757 2758 dev_close_many(&close_list, true); 2759 2760 return NOTIFY_OK; 2761 } 2762 default: 2763 break; 2764 } 2765 2766 return NOTIFY_DONE; 2767} 2768 2769static void 2770dsa_fdb_offload_notify(struct dsa_switchdev_event_work *switchdev_work) 2771{ 2772 struct switchdev_notifier_fdb_info info = {}; 2773 2774 info.addr = switchdev_work->addr; 2775 info.vid = switchdev_work->vid; 2776 info.offloaded = true; 2777 call_switchdev_notifiers(SWITCHDEV_FDB_OFFLOADED, 2778 switchdev_work->orig_dev, &info.info, NULL); 2779} 2780 2781static void dsa_slave_switchdev_event_work(struct work_struct *work) 2782{ 2783 struct dsa_switchdev_event_work *switchdev_work = 2784 container_of(work, struct dsa_switchdev_event_work, work); 2785 const unsigned char *addr = switchdev_work->addr; 2786 struct net_device *dev = switchdev_work->dev; 2787 u16 vid = switchdev_work->vid; 2788 struct dsa_switch *ds; 2789 struct dsa_port *dp; 2790 int err; 2791 2792 dp = dsa_slave_to_port(dev); 2793 ds = dp->ds; 2794 2795 switch (switchdev_work->event) { 2796 case SWITCHDEV_FDB_ADD_TO_DEVICE: 2797 if (switchdev_work->host_addr) 2798 err = dsa_port_bridge_host_fdb_add(dp, addr, vid); 2799 else if (dp->lag) 2800 err = dsa_port_lag_fdb_add(dp, addr, vid); 2801 else 2802 err = dsa_port_fdb_add(dp, addr, vid); 2803 if (err) { 2804 dev_err(ds->dev, 2805 "port %d failed to add %pM vid %d to fdb: %d\n", 2806 dp->index, addr, vid, err); 2807 break; 2808 } 2809 dsa_fdb_offload_notify(switchdev_work); 2810 break; 2811 2812 case SWITCHDEV_FDB_DEL_TO_DEVICE: 2813 if (switchdev_work->host_addr) 2814 err = dsa_port_bridge_host_fdb_del(dp, addr, vid); 2815 else if (dp->lag) 2816 err = dsa_port_lag_fdb_del(dp, addr, vid); 2817 else 2818 err = dsa_port_fdb_del(dp, addr, vid); 2819 if (err) { 2820 dev_err(ds->dev, 2821 "port %d failed to delete %pM vid %d from fdb: %d\n", 2822 dp->index, addr, vid, err); 2823 } 2824 2825 break; 2826 } 2827 2828 kfree(switchdev_work); 2829} 2830 2831static bool dsa_foreign_dev_check(const struct net_device *dev, 2832 const struct net_device *foreign_dev) 2833{ 2834 const struct dsa_port *dp = dsa_slave_to_port(dev); 2835 struct dsa_switch_tree *dst = dp->ds->dst; 2836 2837 if (netif_is_bridge_master(foreign_dev)) 2838 return !dsa_tree_offloads_bridge_dev(dst, foreign_dev); 2839 2840 if (netif_is_bridge_port(foreign_dev)) 2841 return !dsa_tree_offloads_bridge_port(dst, foreign_dev); 2842 2843 /* Everything else is foreign */ 2844 return true; 2845} 2846 2847static int dsa_slave_fdb_event(struct net_device *dev, 2848 struct net_device *orig_dev, 2849 unsigned long event, const void *ctx, 2850 const struct switchdev_notifier_fdb_info *fdb_info) 2851{ 2852 struct dsa_switchdev_event_work *switchdev_work; 2853 struct dsa_port *dp = dsa_slave_to_port(dev); 2854 bool host_addr = fdb_info->is_local; 2855 struct dsa_switch *ds = dp->ds; 2856 2857 if (ctx && ctx != dp) 2858 return 0; 2859 2860 if (!dp->bridge) 2861 return 0; 2862 2863 if (switchdev_fdb_is_dynamically_learned(fdb_info)) { 2864 if (dsa_port_offloads_bridge_port(dp, orig_dev)) 2865 return 0; 2866 2867 /* FDB entries learned by the software bridge or by foreign 2868 * bridge ports should be installed as host addresses only if 2869 * the driver requests assisted learning. 2870 */ 2871 if (!ds->assisted_learning_on_cpu_port) 2872 return 0; 2873 } 2874 2875 /* Also treat FDB entries on foreign interfaces bridged with us as host 2876 * addresses. 2877 */ 2878 if (dsa_foreign_dev_check(dev, orig_dev)) 2879 host_addr = true; 2880 2881 /* Check early that we're not doing work in vain. 2882 * Host addresses on LAG ports still require regular FDB ops, 2883 * since the CPU port isn't in a LAG. 2884 */ 2885 if (dp->lag && !host_addr) { 2886 if (!ds->ops->lag_fdb_add || !ds->ops->lag_fdb_del) 2887 return -EOPNOTSUPP; 2888 } else { 2889 if (!ds->ops->port_fdb_add || !ds->ops->port_fdb_del) 2890 return -EOPNOTSUPP; 2891 } 2892 2893 switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC); 2894 if (!switchdev_work) 2895 return -ENOMEM; 2896 2897 netdev_dbg(dev, "%s FDB entry towards %s, addr %pM vid %d%s\n", 2898 event == SWITCHDEV_FDB_ADD_TO_DEVICE ? "Adding" : "Deleting", 2899 orig_dev->name, fdb_info->addr, fdb_info->vid, 2900 host_addr ? " as host address" : ""); 2901 2902 INIT_WORK(&switchdev_work->work, dsa_slave_switchdev_event_work); 2903 switchdev_work->event = event; 2904 switchdev_work->dev = dev; 2905 switchdev_work->orig_dev = orig_dev; 2906 2907 ether_addr_copy(switchdev_work->addr, fdb_info->addr); 2908 switchdev_work->vid = fdb_info->vid; 2909 switchdev_work->host_addr = host_addr; 2910 2911 dsa_schedule_work(&switchdev_work->work); 2912 2913 return 0; 2914} 2915 2916/* Called under rcu_read_lock() */ 2917static int dsa_slave_switchdev_event(struct notifier_block *unused, 2918 unsigned long event, void *ptr) 2919{ 2920 struct net_device *dev = switchdev_notifier_info_to_dev(ptr); 2921 int err; 2922 2923 switch (event) { 2924 case SWITCHDEV_PORT_ATTR_SET: 2925 err = switchdev_handle_port_attr_set(dev, ptr, 2926 dsa_slave_dev_check, 2927 dsa_slave_port_attr_set); 2928 return notifier_from_errno(err); 2929 case SWITCHDEV_FDB_ADD_TO_DEVICE: 2930 case SWITCHDEV_FDB_DEL_TO_DEVICE: 2931 err = switchdev_handle_fdb_event_to_device(dev, event, ptr, 2932 dsa_slave_dev_check, 2933 dsa_foreign_dev_check, 2934 dsa_slave_fdb_event); 2935 return notifier_from_errno(err); 2936 default: 2937 return NOTIFY_DONE; 2938 } 2939 2940 return NOTIFY_OK; 2941} 2942 2943static int dsa_slave_switchdev_blocking_event(struct notifier_block *unused, 2944 unsigned long event, void *ptr) 2945{ 2946 struct net_device *dev = switchdev_notifier_info_to_dev(ptr); 2947 int err; 2948 2949 switch (event) { 2950 case SWITCHDEV_PORT_OBJ_ADD: 2951 err = switchdev_handle_port_obj_add_foreign(dev, ptr, 2952 dsa_slave_dev_check, 2953 dsa_foreign_dev_check, 2954 dsa_slave_port_obj_add); 2955 return notifier_from_errno(err); 2956 case SWITCHDEV_PORT_OBJ_DEL: 2957 err = switchdev_handle_port_obj_del_foreign(dev, ptr, 2958 dsa_slave_dev_check, 2959 dsa_foreign_dev_check, 2960 dsa_slave_port_obj_del); 2961 return notifier_from_errno(err); 2962 case SWITCHDEV_PORT_ATTR_SET: 2963 err = switchdev_handle_port_attr_set(dev, ptr, 2964 dsa_slave_dev_check, 2965 dsa_slave_port_attr_set); 2966 return notifier_from_errno(err); 2967 } 2968 2969 return NOTIFY_DONE; 2970} 2971 2972static struct notifier_block dsa_slave_nb __read_mostly = { 2973 .notifier_call = dsa_slave_netdevice_event, 2974}; 2975 2976struct notifier_block dsa_slave_switchdev_notifier = { 2977 .notifier_call = dsa_slave_switchdev_event, 2978}; 2979 2980struct notifier_block dsa_slave_switchdev_blocking_notifier = { 2981 .notifier_call = dsa_slave_switchdev_blocking_event, 2982}; 2983 2984int dsa_slave_register_notifier(void) 2985{ 2986 struct notifier_block *nb; 2987 int err; 2988 2989 err = register_netdevice_notifier(&dsa_slave_nb); 2990 if (err) 2991 return err; 2992 2993 err = register_switchdev_notifier(&dsa_slave_switchdev_notifier); 2994 if (err) 2995 goto err_switchdev_nb; 2996 2997 nb = &dsa_slave_switchdev_blocking_notifier; 2998 err = register_switchdev_blocking_notifier(nb); 2999 if (err) 3000 goto err_switchdev_blocking_nb; 3001 3002 return 0; 3003 3004err_switchdev_blocking_nb: 3005 unregister_switchdev_notifier(&dsa_slave_switchdev_notifier); 3006err_switchdev_nb: 3007 unregister_netdevice_notifier(&dsa_slave_nb); 3008 return err; 3009} 3010 3011void dsa_slave_unregister_notifier(void) 3012{ 3013 struct notifier_block *nb; 3014 int err; 3015 3016 nb = &dsa_slave_switchdev_blocking_notifier; 3017 err = unregister_switchdev_blocking_notifier(nb); 3018 if (err) 3019 pr_err("DSA: failed to unregister switchdev blocking notifier (%d)\n", err); 3020 3021 err = unregister_switchdev_notifier(&dsa_slave_switchdev_notifier); 3022 if (err) 3023 pr_err("DSA: failed to unregister switchdev notifier (%d)\n", err); 3024 3025 err = unregister_netdevice_notifier(&dsa_slave_nb); 3026 if (err) 3027 pr_err("DSA: failed to unregister slave notifier (%d)\n", err); 3028}