Home | History | Annotate | Download | only in net

Lines Matching refs:ec

684 	struct ethercom *ec = (struct ethercom *) ifp;
702 m_claimm(m, &ec->ec_rx_mowner);
828 if (ec->ec_nvlans > 0) {
1078 struct ethercom *ec = (struct ethercom *)ifp;
1091 if (ec->ec_capabilities & ETHERCAP_VLAN_HWTAGGING)
1099 LIST_INIT(&ec->ec_multiaddrs);
1100 SIMPLEQ_INIT(&ec->ec_vids);
1101 ec->ec_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET);
1102 ec->ec_flags = 0;
1107 ec->ec_ifdetach_hooks = simplehook_create(IPL_NET, xnamebuf);
1109 mowner_init_owner(&ec->ec_tx_mowner, ifp->if_xname, "tx");
1110 mowner_init_owner(&ec->ec_rx_mowner, ifp->if_xname, "rx");
1111 MOWNER_ATTACH(&ec->ec_tx_mowner);
1112 MOWNER_ATTACH(&ec->ec_rx_mowner);
1113 ifp->if_mowner = &ec->ec_tx_mowner;
1120 struct ethercom *ec = (void *) ifp;
1134 simplehook_dohooks(ec->ec_ifdetach_hooks);
1135 KASSERT(!simplehook_has_hooks(ec->ec_ifdetach_hooks));
1136 simplehook_destroy(ec->ec_ifdetach_hooks);
1140 ETHER_LOCK(ec);
1141 KASSERT(ec->ec_nvlans == 0);
1142 while ((enm = LIST_FIRST(&ec->ec_multiaddrs)) != NULL) {
1145 ec->ec_multicnt--;
1147 ETHER_UNLOCK(ec);
1149 mutex_obj_free(ec->ec_lock);
1150 ec->ec_lock = NULL;
1153 MOWNER_DETACH(&ec->ec_rx_mowner);
1154 MOWNER_DETACH(&ec->ec_tx_mowner);
1161 struct ethercom *ec;
1167 ec = (struct ethercom *)ifp;
1168 hk = simplehook_establish(ec->ec_ifdetach_hooks,
1178 struct ethercom *ec;
1183 ec = (struct ethercom *)ifp;
1184 simplehook_disestablish(ec->ec_ifdetach_hooks, vhook, lock);
1386 ether_addmulti(const struct sockaddr *sa, struct ethercom *ec)
1396 ETHER_LOCK(ec);
1412 _enm = ether_lookup_multi(addrlo, addrhi, ec);
1428 LIST_INSERT_HEAD(&ec->ec_multiaddrs, enm, enm_list);
1429 ec->ec_multicnt++;
1439 ETHER_UNLOCK(ec);
1449 ether_delmulti(const struct sockaddr *sa, struct ethercom *ec)
1456 ETHER_LOCK(ec);
1464 enm = ether_lookup_multi(addrlo, addrhi, ec);
1481 ec->ec_multicnt--;
1482 ETHER_UNLOCK(ec);
1492 ETHER_UNLOCK(ec);
1497 ether_set_ifflags_cb(struct ethercom *ec, ether_cb_t cb)
1499 ec->ec_ifflags_cb = cb;
1503 ether_set_vlan_cb(struct ethercom *ec, ether_vlancb_t cb)
1506 ec->ec_vlan_cb = cb;
1510 ether_ioctl_reinit(struct ethercom *ec)
1512 struct ifnet *ifp = &ec->ec_if;
1533 if (ec->ec_ifflags_cb != NULL) {
1534 error = (*ec->ec_ifflags_cb)(ec);
1560 struct ethercom *ec = (void *)ifp;
1590 if (ec->ec_capabilities & ETHERCAP_JUMBO_MTU)
1609 return ether_ioctl_reinit(ec);
1614 ifr->ifr_flags |= (ec->ec_flags & ETHER_F_ALLMULTI) ?
1620 eccr->eccr_capabilities = ec->ec_capabilities;
1621 eccr->eccr_capenable = ec->ec_capenable;
1625 if ((eccr->eccr_capenable & ~ec->ec_capabilities) != 0)
1627 if (eccr->eccr_capenable == ec->ec_capenable)
1630 ec->ec_capenable = (ec->ec_capenable & ETHERCAP_CANTCHANGE)
1633 ec->ec_capenable = eccr->eccr_capenable;
1635 return ether_ioctl_reinit(ec);
1637 return ether_addmulti(ifreq_getaddr(cmd, ifr), ec);
1639 return ether_delmulti(ifreq_getaddr(cmd, ifr), ec);
1642 if (ec->ec_mii != NULL)
1643 return ifmedia_ioctl(ifp, ifr, &ec->ec_mii->mii_media,
1645 else if (ec->ec_ifmedia != NULL)
1646 return ifmedia_ioctl(ifp, ifr, ec->ec_ifmedia, cmd);
1676 struct ethercom *ec = (void *)ifp;
1679 if ((ec->ec_capabilities & ETHERCAP_VLAN_MTU) == 0)
1687 ec->ec_capenable |= ETHERCAP_VLAN_MTU;
1696 ec->ec_capenable &= ~ETHERCAP_VLAN_MTU;
1704 struct ethercom *ec = (void *)ifp;
1707 if (ec->ec_nvlans != 0)
1711 if ((ec->ec_capenable & ETHERCAP_VLAN_MTU) == 0)
1717 ec->ec_capenable &= ~ETHERCAP_VLAN_MTU;
1726 ec->ec_capenable |= ETHERCAP_VLAN_MTU;
1736 struct ethercom *ec = (void *)ifp;
1748 ETHER_LOCK(ec);
1749 ec->ec_nvlans++;
1750 SIMPLEQ_INSERT_TAIL(&ec->ec_vids, vidp, vid_list);
1751 ETHER_UNLOCK(ec);
1753 if (ec->ec_nvlans == 1) {
1765 if (ec->ec_vlan_cb != NULL) {
1766 error = (*ec->ec_vlan_cb)(ec, vid, true);
1776 ETHER_LOCK(ec);
1777 ec->ec_nvlans--;
1778 SIMPLEQ_REMOVE(&ec->ec_vids, vidp, vlanid_list, vid_list);
1779 ETHER_UNLOCK(ec);
1795 struct ethercom *ec = (void *)ifp;
1799 ETHER_LOCK(ec);
1800 SIMPLEQ_FOREACH(vidp, &ec->ec_vids, vid_list) {
1802 SIMPLEQ_REMOVE(&ec->ec_vids, vidp,
1804 ec->ec_nvlans--;
1808 ETHER_UNLOCK(ec);
1813 if (ec->ec_vlan_cb != NULL) {
1814 (void)(*ec->ec_vlan_cb)(ec, vidp->vid, false);
1817 if (ec->ec_nvlans == 0) {
1935 struct ethercom *ec;
1958 ec = (struct ethercom *)ifp;
1962 *oldlenp = ec->ec_multicnt * sizeof(*addrs);
1967 * ec->ec_lock is a spin mutex so we cannot call sysctl_copyout, which
1972 multicnt = ec->ec_multicnt;
1982 ETHER_LOCK(ec);
1983 if (multicnt != ec->ec_multicnt) {
1985 ETHER_UNLOCK(ec);
1991 LIST_FOREACH(enm, &ec->ec_multiaddrs, enm_list) {
1998 ETHER_UNLOCK(ec);