Lines Matching defs:ifp

244 void	(*ng_ether_link_state_p)(struct ifnet *ifp, int state);
245 void (*lagg_linkstate_p)(struct ifnet *ifp, int state);
247 void (*carp_linkstate_p)(struct ifnet *ifp);
251 int (*carp_forus_p)(struct ifnet *ifp, u_char *dhost);
252 int (*carp_output_p)(struct ifnet *ifp, struct mbuf *m,
262 struct ifaddr *(*carp_iamatch6_p)(struct ifnet *ifp, struct in6_addr *taddr6);
263 caddr_t (*carp_macmatch6_p)(struct ifnet *ifp, struct mbuf *m,
280 static int if_transmit_default(struct ifnet *ifp, struct mbuf *m);
368 struct ifnet *ifp;
375 ifp = ck_pr_load_ptr(&ifindex_table[idx].ife_ifnet);
377 if (curvnet != NULL && ifp != NULL && ifp->if_vnet != curvnet)
378 ifp = NULL;
380 return (ifp);
386 struct ifnet *ifp;
388 ifp = ifnet_byindex(idx);
389 if (ifp == NULL || (ifp->if_flags & IFF_DYING))
391 if (!if_try_ref(ifp))
393 return (ifp);
399 struct ifnet *ifp;
406 ifp = ck_pr_load_ptr(&ifindex_table[idx].ife_ifnet);
409 return (ifp);
442 if_link_ifnet(struct ifnet *ifp)
446 CK_STAILQ_INSERT_TAIL(&V_ifnet, ifp, if_link);
454 if_unlink_ifnet(struct ifnet *ifp, bool vmove)
461 if (iter == ifp) {
462 CK_STAILQ_REMOVE(&V_ifnet, ifp, ifnet, if_link);
464 ifp->if_flags |= IFF_DYING;
480 struct ifnet *ifp, *nifp;
504 CK_STAILQ_FOREACH_SAFE(ifp, &V_ifnet, if_link, nifp) {
505 if (ifp->if_home_vnet != ifp->if_vnet) {
506 found = if_unlink_ifnet(ifp, true);
509 pending[i++] = ifp;
534 struct ifnet *ifp;
539 ifp = malloc(sizeof(struct ifnet), M_IFNET,
542 ifp = malloc_domainset(sizeof(struct ifnet), M_IFNET,
544 ifp->if_type = type;
545 ifp->if_alloctype = type;
546 ifp->if_numa_domain = numa_domain;
548 ifp->if_vnet = curvnet;
551 ifp->if_l2com = if_com_alloc[type](type, ifp);
552 KASSERT(ifp->if_l2com, ("%s: if_com_alloc[%u] failed", __func__,
556 IF_ADDR_LOCK_INIT(ifp);
557 TASK_INIT(&ifp->if_linktask, 0, do_link_state_change, ifp);
558 TASK_INIT(&ifp->if_addmultitask, 0, if_siocaddmulti, ifp);
559 ifp->if_afdata_initialized = 0;
560 IF_AFDATA_LOCK_INIT(ifp);
561 CK_STAILQ_INIT(&ifp->if_addrhead);
562 CK_STAILQ_INIT(&ifp->if_multiaddrs);
563 CK_STAILQ_INIT(&ifp->if_groups);
565 mac_ifnet_init(ifp);
567 ifq_init(&ifp->if_snd, ifp);
569 refcount_init(&ifp->if_refcount, 1); /* Index reference. */
571 ifp->if_counters[i] = counter_u64_alloc(M_WAITOK);
572 ifp->if_get_counter = if_get_counter_default;
573 ifp->if_pcp = IFNET_PCP_NONE;
603 ifp->if_index = idx;
604 ifp->if_idxgen = ifindex_table[idx].ife_gencnt;
605 ck_pr_store_ptr(&ifindex_table[idx].ife_ifnet, ifp);
608 return (ifp);
635 struct ifnet *ifp = __containerof(ctx, struct ifnet, if_epoch_ctx);
637 KASSERT((ifp->if_flags & IFF_DYING),
640 if (if_com_free[ifp->if_alloctype] != NULL)
641 if_com_free[ifp->if_alloctype](ifp->if_l2com,
642 ifp->if_alloctype);
645 mac_ifnet_destroy(ifp);
647 IF_AFDATA_DESTROY(ifp);
648 IF_ADDR_LOCK_DESTROY(ifp);
649 ifq_delete(&ifp->if_snd);
652 counter_u64_free(ifp->if_counters[i]);
654 if_freedescr(ifp->if_description);
655 free(ifp->if_hw_addr, M_IFADDR);
656 free(ifp, M_IFNET);
663 if_free(struct ifnet *ifp)
666 ifp->if_flags |= IFF_DYING; /* XXX: Locking */
669 * XXXGL: An interface index is really an alias to ifp pointer.
672 * thread obtaining ifp via ifnet_byindex() inside the network
673 * epoch and then dereferencing ifp while we perform if_free(),
680 MPASS(ifindex_table[ifp->if_index].ife_ifnet == ifp);
681 ck_pr_store_ptr(&ifindex_table[ifp->if_index].ife_ifnet, NULL);
682 ifindex_table[ifp->if_index].ife_gencnt++;
687 if (refcount_release(&ifp->if_refcount))
688 NET_EPOCH_CALL(if_free_deferred, &ifp->if_epoch_ctx);
697 if_ref(struct ifnet *ifp)
702 old = refcount_acquire(&ifp->if_refcount);
703 KASSERT(old > 0, ("%s: ifp %p has 0 refs", __func__, ifp));
707 if_try_ref(struct ifnet *ifp)
710 return (refcount_acquire_if_not_zero(&ifp->if_refcount));
714 if_rele(struct ifnet *ifp)
717 if (!refcount_release(&ifp->if_refcount))
719 NET_EPOCH_CALL(if_free_deferred, &ifp->if_epoch_ctx);
723 ifq_init(struct ifaltq *ifq, struct ifnet *ifp)
726 mtx_init(&ifq->ifq_mtx, ifp->if_xname, "if send queue", MTX_DEF);
735 ifq->altq_ifp = ifp;
767 if_attach(struct ifnet *ifp)
770 if_attach_internal(ifp, false);
777 if_hw_tsomax_common(if_t ifp, struct ifnet_hw_tsomax *pmax)
786 if (pmax->tsomaxbytes == 0 || (ifp->if_hw_tsomax != 0 &&
787 ifp->if_hw_tsomax < pmax->tsomaxbytes)) {
788 pmax->tsomaxbytes = ifp->if_hw_tsomax;
790 if (pmax->tsomaxsegcount == 0 || (ifp->if_hw_tsomaxsegcount != 0 &&
791 ifp->if_hw_tsomaxsegcount < pmax->tsomaxsegcount)) {
792 pmax->tsomaxsegcount = ifp->if_hw_tsomaxsegcount;
794 if (pmax->tsomaxsegsize == 0 || (ifp->if_hw_tsomaxsegsize != 0 &&
795 ifp->if_hw_tsomaxsegsize < pmax->tsomaxsegsize)) {
796 pmax->tsomaxsegsize = ifp->if_hw_tsomaxsegsize;
806 if_hw_tsomax_update(if_t ifp, struct ifnet_hw_tsomax *pmax)
809 if (ifp->if_hw_tsomax != pmax->tsomaxbytes) {
810 ifp->if_hw_tsomax = pmax->tsomaxbytes;
813 if (ifp->if_hw_tsomaxsegsize != pmax->tsomaxsegsize) {
814 ifp->if_hw_tsomaxsegsize = pmax->tsomaxsegsize;
817 if (ifp->if_hw_tsomaxsegcount != pmax->tsomaxsegcount) {
818 ifp->if_hw_tsomaxsegcount = pmax->tsomaxsegcount;
825 if_attach_internal(struct ifnet *ifp, bool vmove)
832 MPASS(ifindex_table[ifp->if_index].ife_ifnet == ifp);
836 ifp->if_vnet = curvnet;
837 if (ifp->if_home_vnet == NULL)
838 ifp->if_home_vnet = curvnet;
841 if_addgroup(ifp, IFG_ALL);
846 if_clone_restoregroup(ifp);
849 getmicrotime(&ifp->if_lastchange);
850 ifp->if_epoch = time_uptime;
852 KASSERT((ifp->if_transmit == NULL && ifp->if_qflush == NULL) ||
853 (ifp->if_transmit != NULL && ifp->if_qflush != NULL),
855 if (ifp->if_transmit == NULL) {
856 ifp->if_transmit = if_transmit_default;
857 ifp->if_qflush = if_qflush;
859 if (ifp->if_input == NULL)
860 ifp->if_input = if_input_default;
862 if (ifp->if_requestencap == NULL)
863 ifp->if_requestencap = if_requestencap_default;
867 mac_ifnet_create(ifp);
873 namelen = strlen(ifp->if_xname);
879 socksize = masklen + ifp->if_addrlen;
888 bcopy(ifp->if_xname, sdl->sdl_data, namelen);
890 sdl->sdl_index = ifp->if_index;
891 sdl->sdl_type = ifp->if_type;
892 ifp->if_addr = ifa;
893 ifa->ifa_ifp = ifp;
900 CK_STAILQ_INSERT_HEAD(&ifp->if_addrhead, ifa, ifa_link);
902 ifp->if_broadcastaddr = NULL;
904 if (ifp->if_type == IFT_ETHER) {
905 ifp->if_hw_addr = malloc(ifp->if_addrlen, M_IFADDR,
911 if (ifp->if_hw_tsomax == 0 &&
912 ifp->if_hw_tsomaxsegcount == 0 &&
913 ifp->if_hw_tsomaxsegsize == 0) {
920 ifp->if_hw_tsomax = min(IP_MAXPACKET, (32 * MCLBYTES) -
922 ifp->if_hw_tsomaxsegcount = 35;
923 ifp->if_hw_tsomaxsegsize = 2048; /* 2K */
926 if (ifp->if_capabilities & IFCAP_TSO) {
927 if_printf(ifp, "Using defaults for TSO: %u/%u/%u\n",
928 ifp->if_hw_tsomax,
929 ifp->if_hw_tsomaxsegcount,
930 ifp->if_hw_tsomaxsegsize);
941 for (ifa = ifp->if_addr; ifa != NULL;
945 sdl->sdl_index = ifp->if_index;
951 if_link_ifnet(ifp);
954 if_attachdomain1(ifp);
956 EVENTHANDLER_INVOKE(ifnet_arrival_event, ifp);
958 devctl_notify("IFNET", ifp->if_xname, "ATTACH", NULL);
972 struct ifnet *ifp;
974 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link)
975 if_attachdomain1(ifp);
981 if_attachdomain1(struct ifnet *ifp)
987 * cannot lock ifp->if_afdata initialization, entirely.
989 IF_AFDATA_LOCK(ifp);
990 if (ifp->if_afdata_initialized >= domain_init_status) {
991 IF_AFDATA_UNLOCK(ifp);
993 __func__, ifp->if_xname);
996 ifp->if_afdata_initialized = domain_init_status;
997 IF_AFDATA_UNLOCK(ifp);
1000 bzero(ifp->if_afdata, sizeof(ifp->if_afdata));
1003 ifp->if_afdata[dp->dom_family] =
1004 (*dp->dom_ifattach)(ifp);
1012 if_purgeaddrs(struct ifnet *ifp)
1024 in6_purge_proxy_ndp(ifp);
1030 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
1045 if (in_control(NULL, SIOCDIFADDR, (caddr_t)&ifr, ifp,
1057 IF_ADDR_WLOCK(ifp);
1058 CK_STAILQ_REMOVE(&ifp->if_addrhead, ifa, ifaddr, ifa_link);
1059 IF_ADDR_WUNLOCK(ifp);
1069 if_purgemaddrs(struct ifnet *ifp)
1073 IF_ADDR_WLOCK(ifp);
1074 while (!CK_STAILQ_EMPTY(&ifp->if_multiaddrs)) {
1075 ifma = CK_STAILQ_FIRST(&ifp->if_multiaddrs);
1076 CK_STAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifmultiaddr, ifma_link);
1077 if_delmulti_locked(ifp, ifma, 1);
1079 IF_ADDR_WUNLOCK(ifp);
1092 if_detach(struct ifnet *ifp)
1096 CURVNET_SET_QUIET(ifp->if_vnet);
1097 found = if_unlink_ifnet(ifp, false);
1100 if_detach_internal(ifp, false);
1117 if_detach_internal(struct ifnet *ifp, bool vmove)
1125 shutdown = VNET_IS_SHUTTING_DOWN(ifp->if_vnet);
1149 if_delgroups(ifp);
1151 taskqueue_drain(taskqueue_swi, &ifp->if_linktask);
1152 taskqueue_drain(taskqueue_swi, &ifp->if_addmultitask);
1154 if_down(ifp);
1163 EVENTHANDLER_INVOKE(ifnet_departure_event, ifp);
1186 if (ALTQ_IS_ENABLED(&ifp->if_snd))
1187 altq_disable(&ifp->if_snd);
1188 if (ALTQ_IS_ATTACHED(&ifp->if_snd))
1189 altq_detach(&ifp->if_snd);
1192 if_purgeaddrs(ifp);
1195 in_ifdetach(ifp);
1200 * Remove all IPv6 kernel structs related to ifp. This should be done
1205 in6_ifdetach(ifp);
1207 if_purgemaddrs(ifp);
1209 EVENTHANDLER_INVOKE(ifnet_departure_event, ifp);
1211 devctl_notify("IFNET", ifp->if_xname, "DETACH", NULL);
1217 if_dead(ifp);
1222 IF_ADDR_WLOCK(ifp);
1223 if (!CK_STAILQ_EMPTY(&ifp->if_addrhead)) {
1224 ifa = CK_STAILQ_FIRST(&ifp->if_addrhead);
1225 CK_STAILQ_REMOVE(&ifp->if_addrhead, ifa, ifaddr, ifa_link);
1226 IF_ADDR_WUNLOCK(ifp);
1229 IF_ADDR_WUNLOCK(ifp);
1232 rt_flushifroutes(ifp);
1242 IF_AFDATA_LOCK(ifp);
1243 i = ifp->if_afdata_initialized;
1244 ifp->if_afdata_initialized = 0;
1245 IF_AFDATA_UNLOCK(ifp);
1249 if (dp->dom_ifdetach && ifp->if_afdata[dp->dom_family]) {
1250 (*dp->dom_ifdetach)(ifp,
1251 ifp->if_afdata[dp->dom_family]);
1252 ifp->if_afdata[dp->dom_family] = NULL;
1265 if_vmove(struct ifnet *ifp, struct vnet *new_vnet)
1274 rc = if_detach_internal(ifp, true);
1282 if (ifp->if_reassign != NULL)
1283 ifp->if_reassign(ifp, new_vnet, NULL);
1289 if_attach_internal(ifp, true);
1298 if_vmove_loan(struct thread *td, struct ifnet *ifp, char *ifname, int jid)
1306 MPASS(ifindex_table[ifp->if_index].ife_ifnet == ifp);
1318 if (pr->pr_vnet == ifp->if_vnet) {
1335 shutdown = VNET_IS_SHUTTING_DOWN(ifp->if_vnet);
1342 found = if_unlink_ifnet(ifp, true);
1350 error = if_vmove(ifp, pr->pr_vnet);
1354 sprintf(ifname, "%s", ifp->if_xname);
1367 struct ifnet *ifp;
1382 ifp = ifunit(ifname); /* XXX Lock to avoid races. */
1383 if (ifp == NULL) {
1391 if (vnet_dst == ifp->if_vnet) {
1398 shutdown = VNET_IS_SHUTTING_DOWN(ifp->if_vnet);
1406 found = if_unlink_ifnet(ifp, true);
1409 error = if_vmove(ifp, vnet_dst);
1415 sprintf(ifname, "%s", ifp->if_xname);
1426 if_addgroup(struct ifnet *ifp, const char *groupname)
1438 CK_STAILQ_FOREACH(ifgl, &ifp->if_groups, ifgl_next)
1475 ifgm->ifgm_ifp = ifp;
1477 IF_ADDR_WLOCK(ifp);
1479 CK_STAILQ_INSERT_TAIL(&ifp->if_groups, ifgl, ifgl_next);
1480 IF_ADDR_WUNLOCK(ifp);
1496 _if_delgroup_locked(struct ifnet *ifp, struct ifg_list *ifgl,
1504 IF_ADDR_WLOCK(ifp);
1505 CK_STAILQ_REMOVE(&ifp->if_groups, ifgl, ifg_list, ifgl_next);
1506 IF_ADDR_WUNLOCK(ifp);
1509 if (ifgm->ifgm_ifp == ifp) {
1539 if_delgroup(struct ifnet *ifp, const char *groupname)
1544 CK_STAILQ_FOREACH(ifgl, &ifp->if_groups, ifgl_next)
1552 _if_delgroup_locked(ifp, ifgl, groupname);
1561 if_delgroups(struct ifnet *ifp)
1567 while ((ifgl = CK_STAILQ_FIRST(&ifp->if_groups)) != NULL) {
1569 _if_delgroup_locked(ifp, ifgl, groupname);
1579 if_getgroup(struct ifgroupreq *ifgr, struct ifnet *ifp)
1588 CK_STAILQ_FOREACH(ifgl, &ifp->if_groups, ifgl_next)
1596 CK_STAILQ_FOREACH(ifgl, &ifp->if_groups, ifgl_next) {
1664 if_get_counter_default(struct ifnet *ifp, ift_counter cnt)
1669 return (counter_u64_fetch(ifp->if_counters[cnt]));
1677 if_inc_counter(struct ifnet *ifp, ift_counter cnt, int64_t inc)
1682 counter_u64_add(ifp->if_counters[cnt], inc);
1689 if_data_copy(struct ifnet *ifp, struct if_data *ifd)
1692 ifd->ifi_type = ifp->if_type;
1694 ifd->ifi_addrlen = ifp->if_addrlen;
1695 ifd->ifi_hdrlen = ifp->if_hdrlen;
1696 ifd->ifi_link_state = ifp->if_link_state;
1699 ifd->ifi_mtu = ifp->if_mtu;
1700 ifd->ifi_metric = ifp->if_metric;
1701 ifd->ifi_baudrate = ifp->if_baudrate;
1702 ifd->ifi_hwassist = ifp->if_hwassist;
1703 ifd->ifi_epoch = ifp->if_epoch;
1704 ifd->ifi_lastchange = ifp->if_lastchange;
1706 ifd->ifi_ipackets = ifp->if_get_counter(ifp, IFCOUNTER_IPACKETS);
1707 ifd->ifi_ierrors = ifp->if_get_counter(ifp, IFCOUNTER_IERRORS);
1708 ifd->ifi_opackets = ifp->if_get_counter(ifp, IFCOUNTER_OPACKETS);
1709 ifd->ifi_oerrors = ifp->if_get_counter(ifp, IFCOUNTER_OERRORS);
1710 ifd->ifi_collisions = ifp->if_get_counter(ifp, IFCOUNTER_COLLISIONS);
1711 ifd->ifi_ibytes = ifp->if_get_counter(ifp, IFCOUNTER_IBYTES);
1712 ifd->ifi_obytes = ifp->if_get_counter(ifp, IFCOUNTER_OBYTES);
1713 ifd->ifi_imcasts = ifp->if_get_counter(ifp, IFCOUNTER_IMCASTS);
1714 ifd->ifi_omcasts = ifp->if_get_counter(ifp, IFCOUNTER_OMCASTS);
1715 ifd->ifi_iqdrops = ifp->if_get_counter(ifp, IFCOUNTER_IQDROPS);
1716 ifd->ifi_oqdrops = ifp->if_get_counter(ifp, IFCOUNTER_OQDROPS);
1717 ifd->ifi_noproto = ifp->if_get_counter(ifp, IFCOUNTER_NOPROTO);
1820 struct ifnet *ifp;
1825 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
1826 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
1833 if ((ifp->if_flags & IFF_BROADCAST) &&
1865 struct ifnet *ifp;
1869 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
1870 if ((fibnum != RT_ALL_FIBS) && (ifp->if_fib != fibnum))
1872 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
1875 if ((ifp->if_flags & IFF_BROADCAST) &&
1895 struct ifnet *ifp;
1899 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
1900 if ((ifp->if_flags & IFF_POINTOPOINT) == 0)
1902 if ((fibnum != RT_ALL_FIBS) && (ifp->if_fib != fibnum))
1904 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
1925 struct ifnet *ifp;
1937 ifp = ifnet_byindex(
1939 return (ifp ? ifp->if_addr : NULL);
1946 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
1947 if ((fibnum != RT_ALL_FIBS) && (ifp->if_fib != fibnum))
1949 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
1955 ifp->if_flags & IFF_POINTOPOINT && !ignore_ptp) {
2014 ifaof_ifpforaddr(const struct sockaddr *addr, struct ifnet *ifp)
2026 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
2038 if (ifp->if_flags & IFF_POINTOPOINT) {
2091 link_init_sdl(struct ifnet *ifp, struct sockaddr *paddr, u_char iftype)
2099 sdl->sdl_index = ifp->if_index;
2110 if_unroute(struct ifnet *ifp, int flag, int fam)
2115 ifp->if_flags &= ~flag;
2116 getmicrotime(&ifp->if_lastchange);
2117 ifp->if_qflush(ifp);
2119 if (ifp->if_carp)
2120 (*carp_linkstate_p)(ifp);
2121 rt_ifmsg(ifp, IFF_UP);
2140 if_link_state_change(struct ifnet *ifp, int link_state)
2143 if (ifp->if_link_state == link_state)
2146 ifp->if_link_state = link_state;
2148 /* XXXGL: reference ifp? */
2149 taskqueue_enqueue(taskqueue_swi, &ifp->if_linktask);
2155 struct ifnet *ifp;
2158 ifp = arg;
2159 link_state = ifp->if_link_state;
2161 CURVNET_SET(ifp->if_vnet);
2162 rt_ifmsg(ifp, 0);
2163 if (ifp->if_vlantrunk != NULL)
2164 (*vlan_link_state_p)(ifp);
2166 if ((ifp->if_type == IFT_ETHER || ifp->if_type == IFT_L2VLAN) &&
2167 ifp->if_l2com != NULL)
2168 (*ng_ether_link_state_p)(ifp, link_state);
2169 if (ifp->if_carp)
2170 (*carp_linkstate_p)(ifp);
2171 if (ifp->if_bridge)
2172 ifp->if_bridge_linkstate(ifp);
2173 if (ifp->if_lagg)
2174 (*lagg_linkstate_p)(ifp, link_state);
2177 devctl_notify("IFNET", ifp->if_xname,
2181 if_printf(ifp, "%d link states coalesced\n", pending);
2183 if_printf(ifp, "link state changed to %s\n",
2185 EVENTHANDLER_INVOKE(ifnet_link_event, ifp, link_state);
2194 if_down(struct ifnet *ifp)
2197 EVENTHANDLER_INVOKE(ifnet_event, ifp, IFNET_EVENT_DOWN);
2198 if_unroute(ifp, IFF_UP, AF_UNSPEC);
2206 if_up(struct ifnet *ifp)
2209 ifp->if_flags |= IFF_UP;
2210 getmicrotime(&ifp->if_lastchange);
2211 if (ifp->if_carp)
2212 (*carp_linkstate_p)(ifp);
2213 rt_ifmsg(ifp, IFF_UP);
2214 EVENTHANDLER_INVOKE(ifnet_event, ifp, IFNET_EVENT_UP);
2221 if_qflush(struct ifnet *ifp)
2226 ifq = &ifp->if_snd;
2251 struct ifnet *ifp;
2254 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
2255 if (strncmp(name, ifp->if_xname, IFNAMSIZ) == 0 &&
2256 !(ifp->if_flags & IFF_DYING))
2259 if (ifp != NULL) {
2260 if_ref(ifp);
2261 MPASS(ifindex_table[ifp->if_index].ife_ifnet == ifp);
2265 return (ifp);
2272 struct ifnet *ifp;
2275 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
2276 if (strncmp(name, ifp->if_xname, IFNAMSIZ) == 0)
2280 return (ifp);
2439 ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
2454 ifr->ifr_index = ifp->if_index;
2458 temp_flags = ifp->if_flags | ifp->if_drv_flags;
2464 ifr->ifr_reqcap = ifp->if_capabilities;
2465 ifr->ifr_curcap = ifp->if_capenable;
2469 if ((ifp->if_capabilities & IFCAP_NV) == 0) {
2477 ifp->if_capabilities, ifp->if_capenable);
2479 ifp->if_capabilities2, ifp->if_capenable2);
2480 error = (*ifp->if_ioctl)(ifp, SIOCGIFCAPNV,
2483 if_printf(ifp,
2516 if_data_copy(ifp, &ifd);
2523 error = mac_ifnet_ioctl_get(td->td_ucred, ifr, ifp);
2528 ifr->ifr_metric = ifp->if_metric;
2532 ifr->ifr_mtu = ifp->if_mtu;
2543 if (ifp->if_description == NULL)
2547 descrlen = strlen(ifp->if_description) + 1;
2551 error = copyout(ifp->if_description,
2583 if_setdescr(ifp, descrbuf);
2584 getmicrotime(&ifp->if_lastchange);
2588 ifr->ifr_fib = ifp->if_fib;
2598 ifp->if_fib = ifr->ifr_fib;
2611 if (ifp->if_flags & IFF_UP &&
2613 if_down(ifp);
2615 (ifp->if_flags & IFF_UP) == 0) {
2624 if ((ifp->if_flags ^ new_flags) & IFF_PPROMISC) {
2626 ifp->if_flags |= IFF_PROMISC;
2627 else if (ifp->if_pcount == 0)
2628 ifp->if_flags &= ~IFF_PROMISC;
2630 if_printf(ifp, "permanently promiscuous mode %s\n",
2634 if ((ifp->if_flags ^ new_flags) & IFF_PALLMULTI) {
2636 ifp->if_flags |= IFF_ALLMULTI;
2637 else if (ifp->if_amcount == 0)
2638 ifp->if_flags &= ~IFF_ALLMULTI;
2640 ifp->if_flags = (ifp->if_flags & IFF_CANTCHANGE) |
2642 if (ifp->if_ioctl) {
2643 (void) (*ifp->if_ioctl)(ifp, cmd, data);
2646 if_up(ifp);
2647 getmicrotime(&ifp->if_lastchange);
2654 if (ifp->if_ioctl == NULL)
2656 if (ifr->ifr_reqcap & ~ifp->if_capabilities)
2658 error = (*ifp->if_ioctl)(ifp, cmd, data);
2660 getmicrotime(&ifp->if_lastchange);
2667 if (ifp->if_ioctl == NULL)
2669 if ((ifp->if_capabilities & IFCAP_NV) == 0)
2686 &ifp->if_capenable, ifcap_nv_bit_names, false);
2688 ~ifp->if_capabilities) != 0) {
2693 &ifp->if_capenable2, ifcap2_nv_bit_names, false);
2695 ~ifp->if_capabilities2) != 0) {
2700 error = (*ifp->if_ioctl)(ifp, SIOCSIFCAPNV,
2707 getmicrotime(&ifp->if_lastchange);
2712 error = mac_ifnet_ioctl_set(td->td_ucred, ifr, ifp);
2724 error = if_rename(ifp, new_name);
2732 error = if_vmove_loan(td, ifp, ifr->ifr_name, ifr->ifr_jid);
2740 ifp->if_metric = ifr->ifr_metric;
2741 getmicrotime(&ifp->if_lastchange);
2748 if (ifp->if_ioctl == NULL)
2750 error = (*ifp->if_ioctl)(ifp, cmd, data);
2752 getmicrotime(&ifp->if_lastchange);
2757 u_long oldmtu = ifp->if_mtu;
2764 if (ifp->if_ioctl == NULL)
2767 if (ifp->if_bridge)
2769 error = (*ifp->if_ioctl)(ifp, cmd, data);
2771 getmicrotime(&ifp->if_lastchange);
2772 rt_ifmsg(ifp, 0);
2774 DEBUGNET_NOTIFY_MTU(ifp);
2780 if (ifp->if_mtu != oldmtu)
2781 if_notifymtu(ifp);
2795 if ((ifp->if_flags & IFF_MULTICAST) == 0)
2814 ifma = if_findmulti(ifp, &ifr->ifr_addr);
2819 error = if_addmulti(ifp, &ifr->ifr_addr, &ifma);
2821 error = if_delmulti(ifp, &ifr->ifr_addr);
2824 getmicrotime(&ifp->if_lastchange);
2837 if (ifp->if_ioctl == NULL)
2839 error = (*ifp->if_ioctl)(ifp, cmd, data);
2841 getmicrotime(&ifp->if_lastchange);
2853 if (ifp->if_ioctl == NULL)
2855 error = (*ifp->if_ioctl)(ifp, cmd, data);
2862 error = if_setlladdr(ifp,
2867 error = if_gethwaddr(ifp, ifr);
2874 error = if_addgroup(ifp,
2885 error = if_getgroup((struct ifgroupreq *)data, ifp);
2894 error = if_delgroup(ifp,
2926 struct ifnet *ifp;
3057 ifp = ifunit_ref(ifr->ifr_name);
3058 if (ifp == NULL) {
3063 error = ifhwioctl(cmd, ifp, data, td);
3067 oif_flags = ifp->if_flags;
3082 error = so->so_proto->pr_control(so, cmd, data, ifp, td);
3083 if (error == EOPNOTSUPP && ifp != NULL && ifp->if_ioctl != NULL &&
3086 error = (*ifp->if_ioctl)(ifp, cmd, data);
3088 if (!(oif_flags & IFF_UP) && (ifp->if_flags & IFF_UP))
3089 if_up(ifp);
3091 if_rele(ifp);
3130 if_rename(struct ifnet *ifp, char *new_name)
3140 if (strcmp(new_name, ifp->if_xname) == 0)
3151 ifp->if_flags |= IFF_RENAMING;
3153 EVENTHANDLER_INVOKE(ifnet_departure_event, ifp);
3155 if_printf(ifp, "changing name to '%s'\n", new_name);
3157 IF_ADDR_WLOCK(ifp);
3158 strlcpy(old_name, ifp->if_xname, sizeof(old_name));
3159 strlcpy(ifp->if_xname, new_name, sizeof(ifp->if_xname));
3160 ifa = ifp->if_addr;
3179 IF_ADDR_WUNLOCK(ifp);
3181 EVENTHANDLER_INVOKE(ifnet_arrival_event, ifp);
3183 ifp->if_flags &= ~IFF_RENAMING;
3200 if_setflag(struct ifnet *ifp, int flag, int pflag, int *refcount, int onswitch)
3220 if (ifp->if_flags & pflag) {
3227 oldflags = ifp->if_flags;
3236 ifp->if_flags |= flag;
3240 ifp->if_flags &= ~flag;
3244 if (ifp->if_ioctl == NULL) {
3248 ifr.ifr_flags = ifp->if_flags & 0xffff;
3249 ifr.ifr_flagshigh = ifp->if_flags >> 16;
3250 error = (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
3254 rt_ifmsg(ifp, flag);
3260 ifp->if_flags = oldflags;
3265 * Set/clear promiscuous mode on interface ifp based on the truth value
3271 ifpromisc(struct ifnet *ifp, int pswitch)
3274 int oldflags = ifp->if_flags;
3276 error = if_setflag(ifp, IFF_PROMISC, IFF_PPROMISC,
3277 &ifp->if_pcount, pswitch);
3279 if (error == 0 && ((ifp->if_flags ^ oldflags) & IFF_PROMISC) &&
3281 if_printf(ifp, "promiscuous mode %s\n",
3282 (ifp->if_flags & IFF_PROMISC) ? "enabled" : "disabled");
3297 struct ifnet *ifp;
3320 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
3330 if (strlcpy(ifr.ifr_name, ifp->if_xname, sizeof(ifr.ifr_name))
3339 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
3398 if_allmulti(struct ifnet *ifp, int onswitch)
3401 return (if_setflag(ifp, IFF_ALLMULTI, IFF_PALLMULTI, &ifp->if_amcount,
3406 if_findmulti(struct ifnet *ifp, const struct sockaddr *sa)
3410 IF_ADDR_LOCK_ASSERT(ifp);
3412 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
3433 if_allocmulti(struct ifnet *ifp, struct sockaddr *sa, struct sockaddr *llsa,
3452 ifma->ifma_ifp = ifp;
3536 if_addmulti(struct ifnet *ifp, struct sockaddr *sa,
3554 IF_ADDR_WLOCK(ifp);
3555 ifma = if_findmulti(ifp, sa);
3560 IF_ADDR_WUNLOCK(ifp);
3575 if (ifp->if_resolvemulti != NULL) {
3579 error = ifp->if_resolvemulti(ifp, &llsa, sa);
3588 ifma = if_allocmulti(ifp, sa, llsa, M_NOWAIT);
3601 ll_ifma = if_findmulti(ifp, llsa);
3603 ll_ifma = if_allocmulti(ifp, llsa, NULL, M_NOWAIT);
3611 CK_STAILQ_INSERT_HEAD(&ifp->if_multiaddrs, ll_ifma,
3624 CK_STAILQ_INSERT_HEAD(&ifp->if_multiaddrs, ifma, ifma_link);
3634 IF_ADDR_WUNLOCK(ifp);
3640 if (ifp->if_ioctl != NULL) {
3642 (void )(*ifp->if_ioctl)(ifp, SIOCADDMULTI, 0);
3644 taskqueue_enqueue(taskqueue_swi, &ifp->if_addmultitask);
3657 IF_ADDR_WUNLOCK(ifp);
3664 struct ifnet *ifp;
3666 ifp = arg;
3669 if_printf(ifp, "%d SIOCADDMULTI coalesced\n", pending);
3671 CURVNET_SET(ifp->if_vnet);
3672 (void )(*ifp->if_ioctl)(ifp, SIOCADDMULTI, 0);
3679 * Returns ENOENT if the entry could not be found. If ifp no longer
3681 * from subsystems which do appropriate locking to hold ifp for the
3686 if_delmulti(struct ifnet *ifp, struct sockaddr *sa)
3691 KASSERT(ifp, ("%s: NULL ifp", __func__));
3693 IF_ADDR_WLOCK(ifp);
3695 ifma = if_findmulti(ifp, sa);
3697 lastref = if_delmulti_locked(ifp, ifma, 0);
3698 IF_ADDR_WUNLOCK(ifp);
3703 if (lastref && ifp->if_ioctl != NULL) {
3704 (void)(*ifp->if_ioctl)(ifp, SIOCDELMULTI, 0);
3715 if_delallmulti(struct ifnet *ifp)
3720 IF_ADDR_WLOCK(ifp);
3721 CK_STAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link, next)
3722 if_delmulti_locked(ifp, ifma, 0);
3723 IF_ADDR_WUNLOCK(ifp);
3736 * It is safe to call this routine if the ifp disappeared.
3741 struct ifnet *ifp;
3747 ifp = ifma->ifma_ifp;
3749 if (ifp == NULL) {
3757 if (ifp == oifp)
3760 if (ifp != oifp)
3761 ifp = NULL;
3767 if (ifp != NULL)
3768 IF_ADDR_WLOCK(ifp);
3770 lastref = if_delmulti_locked(ifp, ifma, flags);
3772 if (ifp != NULL) {
3778 IF_ADDR_WUNLOCK(ifp);
3779 if (lastref && ifp->if_ioctl != NULL) {
3780 (void)(*ifp->if_ioctl)(ifp, SIOCDELMULTI, 0);
3793 if_delmulti_locked(struct ifnet *ifp, struct ifmultiaddr *ifma, int detaching)
3797 if (ifp != NULL && ifma->ifma_ifp != NULL) {
3798 KASSERT(ifma->ifma_ifp == ifp,
3799 ("%s: inconsistent ifp %p", __func__, ifp));
3800 IF_ADDR_WLOCK_ASSERT(ifp);
3803 ifp = ifma->ifma_ifp;
3804 MCDPRINTF("%s freeing %p from %s \n", __func__, ifma, ifp ? ifp->if_xname : "");
3815 printf("%s: detaching ifnet instance %p\n", __func__, ifp);
3818 * ifp may already be nulled out if we are being reentered
3821 if (ifp != NULL) {
3830 if (ifp != NULL && detaching == 0 && (ifma->ifma_flags & IFMA_F_ENQUEUED)) {
3831 CK_STAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifmultiaddr, ifma_link);
3845 if (ifp != NULL) {
3847 CK_STAILQ_REMOVE(&ifp->if_multiaddrs, ll_ifma, ifmultiaddr,
3856 if (ifp) {
3859 CK_STAILQ_FOREACH(ifmatmp, &ifp->if_multiaddrs, ifma_link)
3880 if_setlladdr(struct ifnet *ifp, const u_char *lladdr, int len)
3886 ifa = ifp->if_addr;
3897 switch (ifp->if_type) {
3914 if ((ifp->if_flags & IFF_UP) != 0) {
3915 if (ifp->if_ioctl) {
3916 ifp->if_flags &= ~IFF_UP;
3917 ifr.ifr_flags = ifp->if_flags & 0xffff;
3918 ifr.ifr_flagshigh = ifp->if_flags >> 16;
3919 (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
3920 ifp->if_flags |= IFF_UP;
3921 ifr.ifr_flags = ifp->if_flags & 0xffff;
3922 ifr.ifr_flagshigh = ifp->if_flags >> 16;
3923 (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
3926 EVENTHANDLER_INVOKE(iflladdr_event, ifp);
3943 if_requestencap_default(struct ifnet *ifp, struct if_encap_req *req)
3976 if_tunnel_check_nesting(struct ifnet *ifp, struct mbuf *m, uint32_t cookie,
3985 if (*(struct ifnet **)(mtag + 1) == ifp) {
3986 log(LOG_NOTICE, "%s: loop detected\n", if_name(ifp));
3994 if_name(ifp), count);
4000 *(struct ifnet **)(mtag + 1) = ifp;
4012 if_gethwaddr(struct ifnet *ifp, struct ifreq *ifr)
4014 if (ifp->if_hw_addr == NULL)
4017 switch (ifp->if_type) {
4020 bcopy(ifp->if_hw_addr, ifr->ifr_addr.sa_data, ifp->if_addrlen);
4034 if_initname(struct ifnet *ifp, const char *name, int unit)
4036 ifp->if_dname = name;
4037 ifp->if_dunit = unit;
4039 snprintf(ifp->if_xname, IFNAMSIZ, "%s%d", name, unit);
4041 strlcpy(ifp->if_xname, name, IFNAMSIZ);
4045 if_vlog(struct ifnet *ifp, int pri, const char *fmt, va_list ap)
4049 snprintf(if_fmt, sizeof(if_fmt), "%s: %s", ifp->if_xname, fmt);
4056 if_printf(struct ifnet *ifp, const char *fmt, ...)
4061 if_vlog(ifp, LOG_INFO, fmt, ap);
4067 if_log(struct ifnet *ifp, int pri, const char *fmt, ...)
4072 if_vlog(ifp, pri, fmt, ap);
4078 if_start(struct ifnet *ifp)
4081 (*(ifp)->if_start)(ifp);
4089 if_transmit_default(struct ifnet *ifp, struct mbuf *m)
4093 IFQ_HANDOFF(ifp, m, error);
4098 if_input_default(struct ifnet *ifp __unused, struct mbuf *m)
4104 if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp, int adjust)
4111 if_inc_counter(ifp, IFCOUNTER_OQDROPS, 1);
4115 if (ifp != NULL) {
4116 if_inc_counter(ifp, IFCOUNTER_OBYTES, m->m_pkthdr.len + adjust);
4118 if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1);
4119 active = ifp->if_drv_flags & IFF_DRV_OACTIVE;
4123 if (ifp != NULL && !active)
4124 (*(ifp)->if_start)(ifp);
4164 if_setbaudrate(struct ifnet *ifp, uint64_t baudrate)
4168 oldbrate = ifp->if_baudrate;
4169 ifp->if_baudrate = baudrate;
4174 if_getbaudrate(const if_t ifp)
4176 return (ifp->if_baudrate);
4180 if_setcapabilities(if_t ifp, int capabilities)
4182 ifp->if_capabilities = capabilities;
4187 if_setcapabilitiesbit(if_t ifp, int setbit, int clearbit)
4189 ifp->if_capabilities &= ~clearbit;
4190 ifp->if_capabilities |= setbit;
4195 if_getcapabilities(const if_t ifp)
4197 return (ifp->if_capabilities);
4201 if_setcapenable(if_t ifp, int capabilities)
4203 ifp->if_capenable = capabilities;
4208 if_setcapenablebit(if_t ifp, int setcap, int clearcap)
4210 ifp->if_capenable &= ~clearcap;
4211 ifp->if_capenable |= setcap;
4216 if_setcapabilities2(if_t ifp, int capabilities)
4218 ifp->if_capabilities2 = capabilities;
4223 if_setcapabilities2bit(if_t ifp, int setbit, int clearbit)
4225 ifp->if_capabilities2 &= ~clearbit;
4226 ifp->if_capabilities2 |= setbit;
4231 if_getcapabilities2(const if_t ifp)
4233 return (ifp->if_capabilities2);
4237 if_setcapenable2(if_t ifp, int capabilities2)
4239 ifp->if_capenable2 = capabilities2;
4244 if_setcapenable2bit(if_t ifp, int setcap, int clearcap)
4246 ifp->if_capenable2 &= ~clearcap;
4247 ifp->if_capenable2 |= setcap;
4252 if_getdname(const if_t ifp)
4254 return (ifp->if_dname);
4258 if_setdname(if_t ifp, const char *dname)
4260 ifp->if_dname = dname;
4264 if_name(if_t ifp)
4266 return (ifp->if_xname);
4270 if_setname(if_t ifp, const char *name)
4272 if (strlen(name) > sizeof(ifp->if_xname) - 1)
4274 strcpy(ifp->if_xname, name);
4280 if_togglecapenable(if_t ifp, int togglecap)
4282 ifp->if_capenable ^= togglecap;
4287 if_getcapenable(const if_t ifp)
4289 return (ifp->if_capenable);
4293 if_togglecapenable2(if_t ifp, int togglecap)
4295 ifp->if_capenable2 ^= togglecap;
4300 if_getcapenable2(const if_t ifp)
4302 return (ifp->if_capenable2);
4306 if_getdunit(const if_t ifp)
4308 return (ifp->if_dunit);
4312 if_getindex(const if_t ifp)
4314 return (ifp->if_index);
4318 if_getidxgen(const if_t ifp)
4320 return (ifp->if_idxgen);
4324 if_getdescr(if_t ifp)
4326 return (ifp->if_description);
4330 if_setdescr(if_t ifp, char *descrbuf)
4333 char *odescrbuf = ifp->if_description;
4334 ifp->if_description = descrbuf;
4354 if_getalloctype(const if_t ifp)
4356 return (ifp->if_alloctype);
4360 if_setlastchange(if_t ifp)
4362 getmicrotime(&ifp->if_lastchange);
4372 if_setdev(if_t ifp, void *dev)
4378 if_setdrvflagbits(if_t ifp, int set_flags, int clear_flags)
4380 ifp->if_drv_flags &= ~clear_flags;
4381 ifp->if_drv_flags |= set_flags;
4387 if_getdrvflags(const if_t ifp)
4389 return (ifp->if_drv_flags);
4393 if_setdrvflags(if_t ifp, int flags)
4395 ifp->if_drv_flags = flags;
4400 if_setflags(if_t ifp, int flags)
4402 ifp->if_flags = flags;
4407 if_setflagbits(if_t ifp, int set, int clear)
4409 ifp->if_flags &= ~clear;
4410 ifp->if_flags |= set;
4415 if_getflags(const if_t ifp)
4417 return (ifp->if_flags);
4421 if_clearhwassist(if_t ifp)
4423 ifp->if_hwassist = 0;
4428 if_sethwassistbits(if_t ifp, int toset, int toclear)
4430 ifp->if_hwassist &= ~toclear;
4431 ifp->if_hwassist |= toset;
4437 if_sethwassist(if_t ifp, int hwassist_bit)
4439 ifp->if_hwassist = hwassist_bit;
4444 if_gethwassist(const if_t ifp)
4446 return (ifp->if_hwassist);
4450 if_togglehwassist(if_t ifp, int toggle_bits)
4452 ifp->if_hwassist ^= toggle_bits;
4457 if_setmtu(if_t ifp, int mtu)
4459 ifp->if_mtu = mtu;
4464 if_notifymtu(if_t ifp)
4467 nd6_setmtu(ifp);
4469 rt_updatemtu(ifp);
4473 if_getmtu(const if_t ifp)
4475 return (ifp->if_mtu);
4479 if_getmtu_family(const if_t ifp, int family)
4485 return (dp->dom_ifmtu(ifp));
4488 return (ifp->if_mtu);
4497 if_lladdr_count(if_t ifp)
4505 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link)
4516 if_t ifp;
4523 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
4524 error = cb(ifp, cb_arg);
4555 struct ifnet *ifp;
4568 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
4569 if (match_cb != NULL && !match_cb(ifp, match_arg))
4572 if (if_try_ref(ifp))
4573 match_array[match_count++] = ifp;
4604 if_t ifp;
4609 ifp = CK_STAILQ_FIRST(&V_ifnet);
4610 if (ifp != NULL)
4611 iter->context[0] = CK_STAILQ_NEXT(ifp, if_link);
4614 return (ifp);
4634 if_foreach_lladdr(if_t ifp, iflladdr_cb_t cb, void *cb_arg)
4644 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
4656 if_llmaddr_count(if_t ifp)
4664 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
4673 if_maddr_empty(if_t ifp)
4676 return (CK_STAILQ_EMPTY(&ifp->if_multiaddrs));
4680 if_foreach_llmaddr(if_t ifp, iflladdr_cb_t cb, void *cb_arg)
4690 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
4702 if_foreach_addr_type(if_t ifp, int type, if_addr_cb_t cb, void *cb_arg)
4712 CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
4723 ifa_iter_start(if_t ifp, struct ifa_iter *iter)
4730 ifa = CK_STAILQ_FIRST(&ifp->if_addrhead);
4755 if_setsoftc(if_t ifp, void *softc)
4757 ifp->if_softc = softc;
4762 if_getsoftc(const if_t ifp)
4764 return (ifp->if_softc);
4768 if_setrcvif(struct mbuf *m, if_t ifp)
4772 m->m_pkthdr.rcvif = (struct ifnet *)ifp;
4788 if_sendq_empty(if_t ifp)
4790 return (IFQ_DRV_IS_EMPTY(&ifp->if_snd));
4794 if_getifaddr(const if_t ifp)
4796 return (ifp->if_addr);
4800 if_setsendqready(if_t ifp)
4802 IFQ_SET_READY(&ifp->if_snd);
4807 if_setsendqlen(if_t ifp, int tx_desc_count)
4809 IFQ_SET_MAXLEN(&ifp->if_snd, tx_desc_count);
4810 ifp->if_snd.ifq_drv_maxlen = tx_desc_count;
4815 if_setnetmapadapter(if_t ifp, struct netmap_adapter *na)
4817 ifp->if_netmap = na;
4821 if_getnetmapadapter(if_t ifp)
4823 return (ifp->if_netmap);
4827 if_vlantrunkinuse(if_t ifp)
4829 return (ifp->if_vlantrunk != NULL);
4833 if_init(if_t ifp, void *ctx)
4835 (*ifp->if_init)(ctx);
4839 if_input(if_t ifp, struct mbuf* sendmp)
4841 (*ifp->if_input)(ifp, sendmp);
4845 if_transmit(if_t ifp, struct mbuf *m)
4847 return ((*ifp->if_transmit)(ifp, m));
4851 if_resolvemulti(if_t ifp, struct sockaddr **srcs, struct sockaddr *dst)
4853 if (ifp->if_resolvemulti == NULL)
4856 return (ifp->if_resolvemulti(ifp, srcs, dst));
4860 if_ioctl(if_t ifp, u_long cmd, void *data)
4862 if (ifp->if_ioctl == NULL)
4865 return (ifp->if_ioctl(ifp, cmd, data));
4869 if_dequeue(if_t ifp)
4873 IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
4878 if_sendq_prepend(if_t ifp, struct mbuf *m)
4880 IFQ_DRV_PREPEND(&ifp->if_snd, m);
4885 if_setifheaderlen(if_t ifp, int len)
4887 ifp->if_hdrlen = len;
4892 if_getlladdr(const if_t ifp)
4894 return (IF_LLADDR(ifp));
4904 if_vlancap(if_t ifp)
4906 VLAN_CAPABILITIES(ifp);
4910 if_sethwtsomax(if_t ifp, u_int if_hw_tsomax)
4912 ifp->if_hw_tsomax = if_hw_tsomax;
4917 if_sethwtsomaxsegcount(if_t ifp, u_int if_hw_tsomaxsegcount)
4919 ifp->if_hw_tsomaxsegcount = if_hw_tsomaxsegcount;
4924 if_sethwtsomaxsegsize(if_t ifp, u_int if_hw_tsomaxsegsize)
4926 ifp->if_hw_tsomaxsegsize = if_hw_tsomaxsegsize;
4931 if_gethwtsomax(const if_t ifp)
4933 return (ifp->if_hw_tsomax);
4937 if_gethwtsomaxsegcount(const if_t ifp)
4939 return (ifp->if_hw_tsomaxsegcount);
4943 if_gethwtsomaxsegsize(const if_t ifp)
4945 return (ifp->if_hw_tsomaxsegsize);
4949 if_setinitfn(if_t ifp, if_init_fn_t init_fn)
4951 ifp->if_init = init_fn;
4955 if_setinputfn(if_t ifp, if_input_fn_t input_fn)
4957 ifp->if_input = input_fn;
4961 if_getinputfn(if_t ifp)
4963 return (ifp->if_input);
4967 if_setioctlfn(if_t ifp, if_ioctl_fn_t ioctl_fn)
4969 ifp->if_ioctl = ioctl_fn;
4973 if_setoutputfn(if_t ifp, if_output_fn_t output_fn)
4975 ifp->if_output = output_fn;
4979 if_setstartfn(if_t ifp, if_start_fn_t start_fn)
4981 ifp->if_start = start_fn;
4985 if_getstartfn(if_t ifp)
4987 return (ifp->if_start);
4991 if_settransmitfn(if_t ifp, if_transmit_fn_t start_fn)
4993 ifp->if_transmit = start_fn;
4997 if_gettransmitfn(if_t ifp)
4999 return (ifp->if_transmit);
5003 if_setqflushfn(if_t ifp, if_qflush_fn_t flush_fn)
5005 ifp->if_qflush = flush_fn;
5009 if_setsndtagallocfn(if_t ifp, if_snd_tag_alloc_t alloc_fn)
5011 ifp->if_snd_tag_alloc = alloc_fn;
5015 if_snd_tag_alloc(if_t ifp, union if_snd_tag_alloc_params *params,
5018 if (ifp->if_snd_tag_alloc == NULL)
5020 return (ifp->if_snd_tag_alloc(ifp, params, mstp));
5024 if_setgetcounterfn(if_t ifp, if_get_counter_t fn)
5026 ifp->if_get_counter = fn;
5030 if_setreassignfn(if_t ifp, if_reassign_fn_t fn)
5032 ifp->if_reassign = fn;
5036 if_setratelimitqueryfn(if_t ifp, if_ratelimit_query_t fn)
5038 ifp->if_ratelimit_query = fn;
5042 if_setdebugnet_methods(if_t ifp, struct debugnet_methods *m)
5044 ifp->if_debugnet_methods = m;
5048 if_getmaclabel(if_t ifp)
5050 return (ifp->if_label);
5054 if_setmaclabel(if_t ifp, struct label *label)
5056 ifp->if_label = label;
5060 if_gettype(if_t ifp)
5062 return (ifp->if_type);
5066 if_getllsoftc(if_t ifp)
5068 return (ifp->if_llsoftc);
5072 if_setllsoftc(if_t ifp, void *llsoftc)
5074 ifp->if_llsoftc = llsoftc;
5078 if_getlinkstate(if_t ifp)
5080 return (ifp->if_link_state);
5084 if_getbroadcastaddr(if_t ifp)
5086 return (ifp->if_broadcastaddr);
5090 if_setbroadcastaddr(if_t ifp, const uint8_t *addr)
5092 ifp->if_broadcastaddr = addr;
5096 if_getnumadomain(if_t ifp)
5098 return (ifp->if_numa_domain);
5102 if_getcounter(if_t ifp, ift_counter counter)
5104 return (ifp->if_get_counter(ifp, counter));
5108 if_altq_is_enabled(if_t ifp)
5110 return (ALTQ_IS_ENABLED(&ifp->if_snd));
5114 if_getvnet(if_t ifp)
5116 return (ifp->if_vnet);
5120 if_getafdata(if_t ifp, int af)
5122 return (ifp->if_afdata[af]);
5126 if_getfib(if_t ifp)
5128 return (ifp->if_fib);
5132 if_getaddrlen(if_t ifp)
5134 return (ifp->if_addrlen);
5138 if_getbpf(if_t ifp)
5140 return (ifp->if_bpf);
5144 if_getvlantrunk(if_t ifp)
5146 return (ifp->if_vlantrunk);
5150 if_getpcp(if_t ifp)
5152 return (ifp->if_pcp);
5156 if_getl2com(if_t ifp)
5158 return (ifp->if_l2com);
5162 if_setipsec_accel_methods(if_t ifp, const struct if_ipsec_accel_methods *m)
5164 ifp->if_ipsec_accel_m = m;
5169 if_show_ifnet(struct ifnet *ifp)
5171 if (ifp == NULL)
5173 db_printf("%s:\n", ifp->if_xname);
5174 #define IF_DB_PRINTF(f, e) db_printf(" %s = " f "\n", #e, ifp->e);
5230 struct ifnet *ifp;
5234 ifp = ifindex_table[idx].ife_ifnet;
5235 if (ifp == NULL)
5237 db_printf( "%20s ifp=%p\n", ifp->if_xname, ifp);