| 567 | } |
| 568 | |
| 569 | void |
| 570 | infiniband_ifattach(struct ifnet *ifp, const uint8_t *lla, const uint8_t *llb) |
| 571 | { |
| 572 | struct sockaddr_dl *sdl; |
| 573 | struct ifaddr *ifa; |
| 574 | int i; |
| 575 | |
| 576 | ifp->if_addrlen = INFINIBAND_ADDR_LEN; |
| 577 | ifp->if_hdrlen = INFINIBAND_HDR_LEN; |
| 578 | ifp->if_mtu = INFINIBAND_MTU; |
| 579 | if_attach(ifp); |
| 580 | ifp->if_output = infiniband_output; |
| 581 | ifp->if_input = infiniband_input; |
| 582 | ifp->if_resolvemulti = infiniband_resolvemulti; |
| 583 | ifp->if_requestencap = infiniband_requestencap; |
| 584 | |
| 585 | if (ifp->if_baudrate == 0) |
| 586 | ifp->if_baudrate = IF_Gbps(10); /* default value */ |
| 587 | if (llb != NULL) |
| 588 | ifp->if_broadcastaddr = llb; |
| 589 | |
| 590 | ifa = ifp->if_addr; |
| 591 | KASSERT(ifa != NULL, ("%s: no lladdr!\n", __func__)); |
| 592 | sdl = (struct sockaddr_dl *)ifa->ifa_addr; |
| 593 | sdl->sdl_type = IFT_INFINIBAND; |
| 594 | sdl->sdl_alen = ifp->if_addrlen; |
| 595 | |
| 596 | if (lla != NULL) { |
| 597 | memcpy(LLADDR(sdl), lla, ifp->if_addrlen); |
| 598 | |
| 599 | if (ifp->if_hw_addr != NULL) |
| 600 | memcpy(ifp->if_hw_addr, lla, ifp->if_addrlen); |
| 601 | } else { |
| 602 | lla = LLADDR(sdl); |
| 603 | } |
| 604 | |
| 605 | /* Attach ethernet compatible network device */ |
| 606 | bpfattach(ifp, DLT_EN10MB, ETHER_HDR_LEN); |
| 607 | |
| 608 | /* Announce Infiniband MAC address if non-zero. */ |
| 609 | for (i = 0; i < ifp->if_addrlen; i++) |
| 610 | if (lla[i] != 0) |
| 611 | break; |
| 612 | if (i != ifp->if_addrlen) |
| 613 | if_printf(ifp, "Infiniband address: %20D\n", lla, ":"); |
| 614 | |
| 615 | /* Add necessary bits are setup; announce it now. */ |
| 616 | EVENTHANDLER_INVOKE(infiniband_ifattach_event, ifp); |
| 617 | |
| 618 | if (IS_DEFAULT_VNET(curvnet)) |
| 619 | devctl_notify("INFINIBAND", ifp->if_xname, "IFATTACH", NULL); |
| 620 | } |
| 621 | |
| 622 | /* |
| 623 | * Perform common duties while detaching an Infiniband interface |
no test coverage detected