Deleted Added
full compact
20c20
< __FBSDID("$FreeBSD: head/sys/net/if_lagg.c 169227 2007-05-03 08:56:20Z thompsa $");
---
> __FBSDID("$FreeBSD: head/sys/net/if_lagg.c 169327 2007-05-07 00:18:56Z thompsa $");
841,847c841
< struct ifnet *trifp = sc->sc_ifp;
< struct ifnet *ifp;
< struct ifmultiaddr *ifma, *rifma = NULL;
< struct lagg_port *lp;
< struct lagg_mc *mc;
< struct sockaddr_dl sdl;
< int error;
---
> struct lagg_port *lp;
851,856d844
< bzero((char *)&sdl, sizeof(sdl));
< sdl.sdl_len = sizeof(sdl);
< sdl.sdl_family = AF_LINK;
< sdl.sdl_type = IFT_ETHER;
< sdl.sdl_alen = ETHER_ADDR_LEN;
<
860,882c848,850
< /* Now program new ones. */
< TAILQ_FOREACH(ifma, &trifp->if_multiaddrs, ifma_link) {
< if (ifma->ifma_addr->sa_family != AF_LINK)
< continue;
< mc = malloc(sizeof(struct lagg_mc), M_DEVBUF, M_NOWAIT);
< if (mc == NULL)
< return (ENOMEM);
< bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
< (char *)&mc->mc_addr, ETHER_ADDR_LEN);
< SLIST_INSERT_HEAD(&sc->sc_mc_head, mc, mc_entries);
< bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
< LLADDR(&sdl), ETHER_ADDR_LEN);
<
< /* do all the ports */
< SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
< ifp = lp->lp_ifp;
< sdl.sdl_index = ifp->if_index;
< error = if_addmulti(ifp, (struct sockaddr *)&sdl, &rifma);
< if (error)
< return (error);
< }
< }
<
---
> SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
> lagg_ether_cmdmulti(lp, 1);
> }
890,894c858,863
< struct ifnet *ifp = lp->lp_ifp;;
< struct lagg_mc *mc;
< struct ifmultiaddr *rifma = NULL;
< struct sockaddr_dl sdl;
< int error;
---
> struct ifnet *ifp = lp->lp_ifp;
> struct ifnet *trifp = sc->sc_ifp;
> struct lagg_mc *mc;
> struct ifmultiaddr *ifma, *rifma = NULL;
> struct sockaddr_dl sdl;
> int error;
905,906c874,879
< SLIST_FOREACH(mc, &sc->sc_mc_head, mc_entries) {
< bcopy((char *)&mc->mc_addr, LLADDR(&sdl), ETHER_ADDR_LEN);
---
> if (set) {
> TAILQ_FOREACH(ifma, &trifp->if_multiaddrs, ifma_link) {
> if (ifma->ifma_addr->sa_family != AF_LINK)
> continue;
> bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
> LLADDR(&sdl), ETHER_ADDR_LEN);
908d880
< if (set)
910,916c882,888
< else
< error = if_delmulti(ifp, (struct sockaddr *)&sdl);
<
< if (error) {
< printf("cmdmulti error on %s, set = %d\n",
< ifp->if_xname, set);
< return (error);
---
> if (error)
> return (error);
> mc = malloc(sizeof(struct lagg_mc), M_DEVBUF, M_NOWAIT);
> if (mc == NULL)
> return (ENOMEM);
> mc->mc_ifma = rifma;
> SLIST_INSERT_HEAD(&lp->lp_mc_head, mc, mc_entries);
917a890,895
> } else {
> while ((mc = SLIST_FIRST(&lp->lp_mc_head)) != NULL) {
> SLIST_REMOVE(&lp->lp_mc_head, mc, lagg_mc, mc_entries);
> if_delmulti_ifma(mc->mc_ifma);
> free(mc, M_DEVBUF);
> }
926d903
< struct lagg_mc *mc;
930d906
< /* remove from ports */
933,937d908
<
< while ((mc = SLIST_FIRST(&sc->sc_mc_head)) != NULL) {
< SLIST_REMOVE(&sc->sc_mc_head, mc, lagg_mc, mc_entries);
< free(mc, M_DEVBUF);
< }