*** 559,564 **** --- 559,565 ---- ifp->if_name = "ep"; ifp->if_mtu = ETHERMTU; ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_NOTRAILERS; + ifp->if_flags |= IFF_MULTICAST; ifp->if_init = epinit; ifp->if_output = ether_output; ifp->if_start = epstart; *************** *** 1336,1341 **** --- 1337,1363 ---- ifp->if_mtu = ifr->ifr_mtu; } break; + + case SIOCADDMULTI: + case SIOCDELMULTI: + /* + * Update our multicast listeners + */ + if (cmd == SIOCADDMULTI) { + ether_addmulti(ifr, &sc->arpcom); + } else { + ether_delmulti(ifr, &sc->arpcom); + } + + if (error == ENETRESET) { + /* + * Multicast list has changed; set the + * hardware filter accordingly + */ + epreset(ifp->if_unit); + error = 0; + } + break; default: error = EINVAL;