mcast.wi_len = (ETHER_ADDR_LEN * 16) + 1;
mcast.wi_len = ((ETHER_ADDR_LEN / 2) * 16) + 1;
wi_setmulti(sc)	struct wi_softc		*sc;{	struct ifnet		*ifp;	int			i = 0;	struct wi_ltv_mcast	mcast;	struct ether_multistep	step;	struct ether_multi	*enm;	ifp = &sc->arpcom.ac_if;	bzero((char *)&mcast, sizeof(mcast));	mcast.wi_type = WI_RID_MCAST;	mcast.wi_len = (ETHER_ADDR_LEN * 16) + 1;	if (ifp->if_flags & IFF_ALLMULTI || ifp->if_flags & IFF_PROMISC) {		wi_write_record(sc, (struct wi_ltv_gen *)&mcast);		return;	}	ETHER_FIRST_MULTI(step, &sc->arpcom, enm);	while (enm != NULL) {		if (i >= 16) {			bzero((char *)&mcast, sizeof(mcast));			break;		}		/* Punt on ranges. */		if (bcmp(enm->enm_addrlo, enm->enm_addrhi,		    sizeof(enm->enm_addrlo)) != 0)			break;		bcopy(enm->enm_addrlo, (char *)&mcast.wi_mcast[i],		    ETHER_ADDR_LEN);		i++;		ETHER_NEXT_MULTI(step, enm);	}	mcast.wi_len = (i * 3) + 1;	wi_write_record(sc, (struct wi_ltv_gen *)&mcast);	return;}