Lines Matching refs:ifp
169 * XXX reusing (ifp)->if_snd->ifq_lock rather than having another spin mutex
177 #define IF_LINK_STATE_CHANGE_LOCK(ifp) \
178 mutex_enter((ifp)->if_snd.ifq_lock)
179 #define IF_LINK_STATE_CHANGE_UNLOCK(ifp) \
180 mutex_exit((ifp)->if_snd.ifq_lock)
375 if_free(ifnet_t *ifp)
378 kmem_free(ifp, sizeof(ifnet_t));
382 if_initname(struct ifnet *ifp, const char *name, int unit)
385 (void)snprintf(ifp->if_xname, sizeof(ifp->if_xname),
395 if_nulloutput(struct ifnet *ifp, struct mbuf *m,
403 if_nullinput(struct ifnet *ifp, struct mbuf *m)
410 if_nullstart(struct ifnet *ifp)
417 if_nulltransmit(struct ifnet *ifp, struct mbuf *m)
425 if_nullioctl(struct ifnet *ifp, u_long cmd, void *data)
432 if_nullinit(struct ifnet *ifp)
439 if_nullstop(struct ifnet *ifp, int disable)
446 if_nullslowtimo(struct ifnet *ifp)
453 if_nulldrain(struct ifnet *ifp)
460 if_set_sadl(struct ifnet *ifp, const void *lla, u_char addrlen, bool factory)
465 ifp->if_addrlen = addrlen;
466 if_alloc_sadl(ifp);
467 ifa = ifp->if_dl;
470 (void)sockaddr_dl_setaddr(sdl, sdl->sdl_len, lla, ifp->if_addrlen);
472 KASSERT(ifp->if_hwdl == NULL);
473 ifp->if_hwdl = ifp->if_dl;
474 ifaref(ifp->if_hwdl);
480 if_dl_create(const struct ifnet *ifp, const struct sockaddr_dl **sdlp)
487 namelen = strlen(ifp->if_xname);
488 addrlen = ifp->if_addrlen;
497 sockaddr_dl_init(sdl, socksize, ifp->if_index, ifp->if_type,
498 ifp->if_xname, namelen, NULL, addrlen);
513 if_sadl_setrefs(struct ifnet *ifp, struct ifaddr *ifa)
517 ifp->if_dl = ifa;
520 ifp->if_sadl = sdl;
525 * is an attachment helper. It must be called after ifp->if_addrlen
530 if_alloc_sadl(struct ifnet *ifp)
540 if (ifp->if_sadl != NULL)
541 if_free_sadl(ifp, 0);
543 ifa = if_dl_create(ifp, &sdl);
545 ifa_insert(ifp, ifa);
546 if_sadl_setrefs(ifp, ifa);
550 if_deactivate_sadl(struct ifnet *ifp)
554 KASSERT(ifp->if_dl != NULL);
556 ifa = ifp->if_dl;
558 ifp->if_sadl = NULL;
560 ifp->if_dl = NULL;
565 if_replace_sadl(struct ifnet *ifp, struct ifaddr *ifa)
569 KASSERT(ifp->if_dl != NULL);
571 old = ifp->if_dl;
575 ifp->if_dl = ifa;
576 ifp->if_sadl = satosdl(ifa->ifa_addr);
582 if_activate_sadl(struct ifnet *ifp, struct ifaddr *ifa0,
592 if_replace_sadl(ifp, ifa0);
595 IFADDR_READER_FOREACH(ifa, ifp) {
616 if_free_sadl(struct ifnet *ifp, int factory)
620 if (factory && ifp->if_hwdl != NULL) {
621 ifp->if_hwdl;
622 ifp->if_hwdl = NULL;
626 ifa = ifp->if_dl;
628 KASSERT(ifp->if_sadl == NULL);
632 KASSERT(ifp->if_sadl != NULL);
636 ifa_remove(ifp, ifa);
637 if_deactivate_sadl(ifp);
642 if_getindex(ifnet_t *ifp)
647 ifp->if_index_gen = index_gen++;
648 snprintf(xnamebuf, sizeof(xnamebuf), "%s-lshk", ifp->if_xname);
649 ifp->if_linkstate_hooks = simplehook_create(IPL_NET,
652 ifp->if_index = if_index;
657 while (if_byindex(ifp->if_index)) {
680 ifp->if_index = if_index;
687 if (ifindex2ifnet == NULL || ifp->if_index >= if_indexlim) {
692 while (ifp->if_index >= if_indexlim)
705 ifindex2ifnet[ifp->if_index] = ifp;
715 * if_initialize(ifp);
716 * ether_ifattach(ifp, enaddr);
717 * if_register(ifp);
720 if_initialize(ifnet_t *ifp)
724 TAILQ_INIT(&ifp->if_addrlist);
731 if (ifp->if_snd.ifq_maxlen == 0)
732 ifp->if_snd.ifq_maxlen = ifqmaxlen;
734 ifp->if_broadcastaddr = 0; /* reliably crash if used uninitialized */
736 ifp->if_link_state = LINK_STATE_UNKNOWN;
737 ifp->if_link_queue = -1; /* all bits set, see link_state_change() */
738 ifp->if_link_scheduled = false;
740 ifp->if_capenable = 0;
741 ifp->if_csum_flags_tx = 0;
742 ifp->if_csum_flags_rx = 0;
745 ifp->if_snd.altq_type = 0;
746 ifp->if_snd.altq_disc = NULL;
747 ifp->if_snd.altq_flags &= ALTQF_CANTCHANGE;
748 ifp->if_snd.altq_tbr = NULL;
749 ifp->if_snd.altq_ifp = ifp;
752 IFQ_LOCK_INIT(&ifp->if_snd);
754 ifp->if_pfil = pfil_head_create(PFIL_TYPE_IFNET, ifp);
755 pfil_run_ifhooks(if_pfil, PFIL_IFNET_ATTACH, ifp);
757 IF_AFDATA_LOCK_INIT(ifp);
759 PSLIST_ENTRY_INIT(ifp, if_pslist_entry);
760 PSLIST_INIT(&ifp->if_addr_pslist);
761 psref_target_init(&ifp->if_psref, ifnet_psref_class);
762 ifp->if_ioctl_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
763 LIST_INIT(&ifp->if_multiaddrs);
764 if_stats_init(ifp);
767 if_getindex(ifp);
775 if_register(ifnet_t *ifp)
781 if (ifp->if_ioctl == NULL)
782 ifp->if_ioctl = ifioctl_common;
783 if (ifp->if_stop == NULL)
784 ifp->if_stop = if_nullstop;
786 sysctl_sndq_setup(&ifp->if_sysctl_log, ifp->if_xname, &ifp->if_snd);
789 if_attachdomain1(ifp);
792 rt_ifannouncemsg(ifp, IFAN_ARRIVAL);
794 if (ifp->if_slowtimo != NULL) {
800 callout_setfunc(&isd->isd_ch, if_slowtimo_intr, ifp);
801 isd->isd_ifp = ifp;
803 ifp->if_slowtimo_data = isd;
805 if_slowtimo_intr(ifp);
807 sysctl_watchdog_setup(ifp);
810 if (ifp->if_transmit == NULL || ifp->if_transmit == if_nulltransmit)
811 ifp->if_transmit = if_transmit;
814 TAILQ_INSERT_TAIL(&ifnet_list, ifp, if_list);
815 IFNET_WRITER_INSERT_TAIL(ifp);
842 struct ifnet *ifp = ipq->ipq_ifp;
846 if_statinc(ifp, if_ipackets);
847 bpf_mtap(ifp, m, BPF_D_IN);
849 ifp->_if_input(ifp, m);
863 if_percpuq_create(struct ifnet *ifp)
868 flags |= if_is_mpsafe(ifp) ? SOFTINT_MPSAFE : 0;
871 ipq->ipq_ifp = ifp;
876 sysctl_percpuq_setup(&ifp->if_sysctl_log, ifp->if_xname, ipq);
1042 * Call ifp->if_start (or equivalent) in a dedicated softint for
1049 struct ifnet *ifp = ids->ids_ifp;
1051 ids->ids_if_start(ifp);
1058 if_deferred_start_common(struct ifnet *ifp)
1061 if_start_lock(ifp);
1066 if_snd_is_used(struct ifnet *ifp)
1069 return ALTQ_IS_ENABLED(&ifp->if_snd) ||
1070 ifp->if_transmit == if_transmit ||
1071 ifp->if_transmit == NULL ||
1072 ifp->if_transmit == if_nulltransmit;
1079 if_schedule_deferred_start(struct ifnet *ifp)
1082 KASSERT(ifp->if_deferred_start != NULL);
1084 if (if_snd_is_used(ifp) && IFQ_IS_EMPTY(&ifp->if_snd))
1087 softint_schedule(ifp->if_deferred_start->ids_si);
1096 if_deferred_start_init(struct ifnet *ifp, void (*func)(struct ifnet *))
1101 flags |= if_is_mpsafe(ifp) ? SOFTINT_MPSAFE : 0;
1104 ids->ids_ifp = ifp;
1111 ifp->if_deferred_start = ids;
1115 if_deferred_start_destroy(struct ifnet *ifp)
1118 if (ifp->if_deferred_start == NULL)
1121 softint_disestablish(ifp->if_deferred_start->ids_si);
1122 kmem_free(ifp->if_deferred_start, sizeof(*ifp->if_deferred_start));
1123 ifp->if_deferred_start = NULL;
1132 if_input(struct ifnet *ifp, struct mbuf *m)
1135 KASSERT(ifp->if_percpuq == NULL);
1138 if_statinc(ifp, if_ipackets);
1139 bpf_mtap(ifp, m, BPF_D_IN);
1141 ifp->_if_input(ifp, m);
1153 if_attach(ifnet_t *ifp)
1156 if_initialize(ifp);
1157 ifp->if_percpuq = if_percpuq_create(ifp);
1158 if_register(ifp);
1164 struct ifnet *ifp;
1168 IFNET_READER_FOREACH(ifp) {
1170 psref_acquire(&psref, &ifp->if_psref, ifnet_psref_class);
1172 if_attachdomain1(ifp);
1174 psref_release(&psref, &ifp->if_psref, ifnet_psref_class);
1181 if_attachdomain1(struct ifnet *ifp)
1187 memset(ifp->if_afdata, 0, sizeof(ifp->if_afdata));
1190 ifp->if_afdata[dp->dom_family] =
1191 (*dp->dom_ifattach)(ifp);
1202 if_deactivate(struct ifnet *ifp)
1206 ifp->if_output = if_nulloutput;
1207 ifp->_if_input = if_nullinput;
1208 ifp->if_start = if_nullstart;
1209 ifp->if_transmit = if_nulltransmit;
1210 ifp->if_ioctl = if_nullioctl;
1211 ifp->if_init = if_nullinit;
1212 ifp->if_stop = if_nullstop;
1213 if (ifp->if_slowtimo)
1214 ifp->if_slowtimo = if_nullslowtimo;
1215 ifp->if_drain = if_nulldrain;
1218 ifp->if_snd.ifq_maxlen = 0;
1224 if_is_deactivated(const struct ifnet *ifp)
1227 return ifp->if_output == if_nulloutput;
1231 if_purgeaddrs(struct ifnet *ifp, int family,
1238 for (ifa = IFADDR_READER_FIRST(ifp); ifa; ifa = nifa) {
1257 if_build_ifa_list(struct ifnet *ifp)
1265 IFADDR_READER_FOREACH(ifa, ifp)
1270 IFADDR_READER_FOREACH(ifa, ifp) {
1277 if_check_and_free_ifa_list(struct ifnet *ifp)
1315 if_detach(struct ifnet *ifp)
1327 if_build_ifa_list(ifp);
1337 sysctl_teardown(&ifp->if_sysctl_log);
1339 IFNET_LOCK(ifp);
1348 IF_LINK_STATE_CHANGE_LOCK(ifp);
1349 ifp->if_link_queue = -1; /* all bits set, see link_state_change() */
1350 ifp->if_link_scheduled = true;
1351 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
1352 workqueue_wait(ifnet_link_state_wq, &ifp->if_link_work);
1354 if_deactivate(ifp);
1355 IFNET_UNLOCK(ifp);
1363 ifindex2ifnet[ifp->if_index] = NULL;
1364 TAILQ_REMOVE(&ifnet_list, ifp, if_list);
1365 IFNET_WRITER_REMOVE(ifp);
1369 if (ifp->if_slowtimo != NULL) {
1370 struct if_slowtimo_data *isd = ifp->if_slowtimo_data;
1381 ifp->if_slowtimo_data = NULL; /* paraonia */
1382 ifp->if_slowtimo = NULL; /* paranoia */
1384 if_deferred_start_destroy(ifp);
1389 if_down_deactivated(ifp);
1392 if (ALTQ_IS_ENABLED(&ifp->if_snd))
1393 altq_disable(&ifp->if_snd);
1394 if (ALTQ_IS_ATTACHED(&ifp->if_snd))
1395 altq_detach(&ifp->if_snd);
1400 if (ifp->if_carp != NULL && ifp->if_type != IFT_CARP)
1401 carp_ifdetach(ifp);
1434 IFADDR_WRITER_FOREACH(ifa, ifp) {
1452 * ifp->if_addrlist.
1459 (void) (*pr->pr_usrreqs->pr_purgeif)(&so, ifp);
1470 ifa_remove(ifp, ifa);
1475 if_free_sadl(ifp, 1);
1478 IFADDR_WRITER_FOREACH(ifa, ifp) {
1481 ifa_remove(ifp, ifa);
1487 rt_delete_matched_entries(i, if_delroute_matcher, ifp, false);
1490 if (dp->dom_ifdetach != NULL && ifp->if_afdata[dp->dom_family])
1492 void *p = ifp->if_afdata[dp->dom_family];
1494 ifp->if_afdata[dp->dom_family] = NULL;
1495 (*dp->dom_ifdetach)(ifp, p);
1516 (void)(*pr->pr_usrreqs->pr_purgeif)(&so, ifp);
1524 psref_target_destroy(&ifp->if_psref, ifnet_psref_class);
1525 PSLIST_ENTRY_DESTROY(ifp, if_pslist_entry);
1527 pfil_run_ifhooks(if_pfil, PFIL_IFNET_DETACH, ifp);
1528 (void)pfil_head_destroy(ifp->if_pfil);
1531 rt_ifannouncemsg(ifp, IFAN_DEPARTURE);
1533 IF_AFDATA_LOCK_DESTROY(ifp);
1535 if (ifp->if_percpuq != NULL) {
1536 if_percpuq_destroy(ifp->if_percpuq);
1537 ifp->if_percpuq = NULL;
1540 mutex_obj_free(ifp->if_ioctl_lock);
1541 ifp->if_ioctl_lock = NULL;
1542 mutex_obj_free(ifp->if_snd.ifq_lock);
1543 if_stats_fini(ifp);
1544 KASSERT(!simplehook_has_hooks(ifp->if_linkstate_hooks));
1545 simplehook_destroy(ifp->if_linkstate_hooks);
1550 if_check_and_free_ifa_list(ifp);
1561 struct ifnet *ifp = (struct ifnet *)v;
1563 if (rt->rt_ifp == ifp)
1576 struct ifnet *ifp;
1586 ifp = if_get(name, &psref);
1587 if (ifp != NULL) {
1588 if_put(ifp, &psref);
1602 struct ifnet *ifp;
1616 ifp = if_get(name, &psref);
1617 if (ifp == NULL)
1621 IFNET_LOCK(ifp);
1622 if_ioctlfn = ifp->if_ioctl;
1623 ifp->if_ioctl = if_nullioctl;
1624 IFNET_UNLOCK(ifp);
1627 * We cannot call ifc_destroy with holding ifp.
1628 * Releasing ifp here is safe thanks to if_clone_mtx.
1630 if_put(ifp, &psref);
1632 error = (*ifc->ifc_destroy)(ifp);
1636 IFNET_LOCK(ifp);
1637 ifp->if_ioctl = if_ioctlfn;
1638 IFNET_UNLOCK(ifp);
1816 ifa_insert(struct ifnet *ifp, struct ifaddr *ifa)
1819 ifa->ifa_ifp = ifp;
1828 KASSERT(!if_is_mpsafe(ifp) || !ISSET(ifp->if_flags, IFF_RUNNING) ||
1829 IFNET_LOCKED(ifp));
1831 TAILQ_INSERT_TAIL(&ifp->if_addrlist, ifa, ifa_list);
1833 IFADDR_WRITER_INSERT_TAIL(ifp, ifa);
1839 ifa_remove(struct ifnet *ifp, struct ifaddr *ifa)
1842 KASSERT(ifa->ifa_ifp == ifp);
1848 KASSERT(!if_is_mpsafe(ifp) || if_is_deactivated(ifp) ||
1849 IFNET_LOCKED(ifp));
1851 TAILQ_REMOVE(&ifp->if_addrlist, ifa, ifa_list);
1905 struct ifnet *ifp;
1908 IFNET_READER_FOREACH(ifp) {
1909 if (if_is_deactivated(ifp))
1911 IFADDR_READER_FOREACH(ifa, ifp) {
1916 if ((ifp->if_flags & IFF_BROADCAST) &&
1948 struct ifnet *ifp;
1951 IFNET_READER_FOREACH(ifp) {
1952 if (if_is_deactivated(ifp))
1954 if ((ifp->if_flags & IFF_POINTOPOINT) == 0)
1956 IFADDR_READER_FOREACH(ifa, ifp) {
1990 struct ifnet *ifp;
2008 IFNET_READER_FOREACH(ifp) {
2009 if (if_is_deactivated(ifp))
2012 ifp);
2026 IFNET_READER_FOREACH(ifp) {
2027 if (if_is_deactivated(ifp))
2029 IFADDR_READER_FOREACH(ifa, ifp) {
2100 if_first_addr(const struct ifnet *ifp, const int af)
2104 IFADDR_READER_FOREACH(ifa, ifp) {
2112 if_first_addr_psref(const struct ifnet *ifp, const int af, struct psref *psref)
2118 ifa = if_first_addr(ifp, af);
2131 ifaof_ifpforaddr(const struct sockaddr *addr, struct ifnet *ifp)
2139 if (if_is_deactivated(ifp))
2145 IFADDR_READER_FOREACH(ifa, ifp) {
2171 ifaof_ifpforaddr_psref(const struct sockaddr *addr, struct ifnet *ifp,
2178 ifa = ifaof_ifpforaddr(addr, ifp);
2196 struct ifnet *ifp;
2201 ifp = rt->rt_ifa->ifa_ifp;
2203 if ((ifa = ifaof_ifpforaddr_psref(dst, ifp, &psref)) != NULL) {
2250 if_link_state_change(struct ifnet *ifp, int link_state)
2263 ifp->if_xname, link_state);
2268 IF_LINK_STATE_CHANGE_LOCK(ifp);
2271 LQ_FIND_UNSET(ifp->if_link_queue, idx);
2282 if (ifp->if_link_state == link_state ||
2283 ifp->if_link_scheduled)
2287 if (LQ_ITEM(ifp->if_link_queue, idx - 1)
2293 if (idx == LQ_MAX(ifp->if_link_queue)) {
2305 lost = LQ_ITEM(ifp->if_link_queue, 0);
2306 LQ_PUSH(ifp->if_link_queue, (uint8_t)link_state);
2308 lost = LQ_ITEM(ifp->if_link_queue, 0);
2309 LQ_STORE(ifp->if_link_queue, 0, LINK_STATE_DOWN);
2312 ifp->if_xname,
2317 LQ_STORE(ifp->if_link_queue, idx, (uint8_t)link_state);
2319 if (ifp->if_link_scheduled)
2322 ifp->if_link_scheduled = true;
2323 workqueue_enqueue(ifnet_link_state_wq, &ifp->if_link_work, NULL);
2326 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2333 if_link_state_change_process(struct ifnet *ifp, int link_state)
2341 IF_LINK_STATE_CHANGE_LOCK(ifp);
2344 if (ifp->if_link_state == link_state) {
2345 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2351 log(LOG_DEBUG, "%s: link state %s (was %s)\n", ifp->if_xname,
2355 ifp->if_link_state == LINK_STATE_UP ? "UP" :
2356 ifp->if_link_state == LINK_STATE_DOWN ? "DOWN" :
2370 ifp->if_link_state == LINK_STATE_UNKNOWN);
2371 ifp->if_link_state = link_state;
2373 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2379 dp->dom_if_link_state_change(ifp,
2385 rt_ifmsg(ifp);
2387 simplehook_dohooks(ifp->if_linkstate_hooks);
2391 dp->dom_if_link_state_change(ifp, link_state);
2403 struct ifnet *ifp = container_of(work, struct ifnet, if_link_work);
2415 IF_LINK_STATE_CHANGE_LOCK(ifp);
2416 LQ_POP(ifp->if_link_queue, state);
2417 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2421 IFNET_LOCK(ifp);
2422 if_link_state_change_process(ifp, state);
2423 IFNET_UNLOCK(ifp);
2426 IF_LINK_STATE_CHANGE_LOCK(ifp);
2427 if (LQ_ITEM(ifp->if_link_queue, 0) != LINK_STATE_UNSET) {
2428 ifp->if_link_scheduled = true;
2429 workqueue_enqueue(ifnet_link_state_wq, &ifp->if_link_work,
2432 ifp->if_link_scheduled = false;
2433 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2441 if_linkstate_change_establish(struct ifnet *ifp, void (*fn)(void *), void *arg)
2445 hk = simplehook_establish(ifp->if_linkstate_hooks, fn, arg);
2451 if_linkstate_change_disestablish(struct ifnet *ifp, void *vhook,
2455 simplehook_disestablish(ifp->if_linkstate_hooks, vhook, lock);
2464 if_domain_link_state_change(struct ifnet *ifp, int link_state)
2473 dp->dom_if_link_state_change(ifp, link_state);
2488 struct ifnet *ifp = rt->rt_ifp;
2502 IFADDR_READER_FOREACH(ifa, ifp) {
2536 _if_down(struct ifnet *ifp)
2542 ifp->if_flags &= ~IFF_UP;
2543 nanotime(&ifp->if_lastchange);
2547 IFADDR_READER_FOREACH(ifa, ifp) {
2559 IFQ_PURGE(&ifp->if_snd);
2561 if (ifp->if_carp)
2562 carp_carpdev_state(ifp);
2564 rt_ifmsg(ifp);
2567 dp->dom_if_down(ifp);
2572 if_down_deactivated(struct ifnet *ifp)
2575 KASSERT(if_is_deactivated(ifp));
2576 _if_down(ifp);
2580 if_down_locked(struct ifnet *ifp)
2583 KASSERT(IFNET_LOCKED(ifp));
2584 _if_down(ifp);
2593 if_down(struct ifnet *ifp)
2596 IFNET_LOCK(ifp);
2597 if_down_locked(ifp);
2598 IFNET_UNLOCK(ifp);
2605 if_up_locked(struct ifnet *ifp)
2612 KASSERT(IFNET_LOCKED(ifp));
2614 KASSERT(!if_is_deactivated(ifp));
2615 ifp->if_flags |= IFF_UP;
2616 nanotime(&ifp->if_lastchange);
2619 IFADDR_READER_FOREACH(ifa, ifp)
2623 if (ifp->if_carp)
2624 carp_carpdev_state(ifp);
2626 rt_ifmsg(ifp);
2629 dp->dom_if_up(ifp);
2639 if_slowtimo_countdown(struct ifnet *ifp)
2645 if (ifp->if_timer != 0 && --ifp->if_timer == 0)
2656 struct ifnet *ifp = arg;
2657 struct if_slowtimo_data *isd = ifp->if_slowtimo_data;
2661 if (isd->isd_trigger || if_slowtimo_countdown(ifp)) {
2678 struct ifnet *ifp = isd->isd_ifp;
2682 (*ifp->if_slowtimo)(ifp);
2689 printf("%s: watchdog triggered\n", ifp->if_xname);
2701 struct ifnet *ifp = node.sysctl_data;
2702 struct if_slowtimo_data *isd = ifp->if_slowtimo_data;
2722 sysctl_watchdog_setup(struct ifnet *ifp)
2724 struct sysctllog **clog = &ifp->if_sysctl_log;
2734 CTLFLAG_PERMANENT, CTLTYPE_NODE, ifp->if_xname,
2748 sysctl_if_watchdog, 0, (int *)ifp, 0,
2755 printf("%s: could not attach sysctl watchdog nodes\n", ifp->if_xname);
2764 if_up(struct ifnet *ifp)
2767 IFNET_LOCK(ifp);
2768 if_up_locked(ifp);
2769 IFNET_UNLOCK(ifp);
2773 * Set/clear promiscuous mode on interface ifp based on the truth value
2779 ifpromisc_locked(struct ifnet *ifp, int pswitch)
2784 KASSERT(IFNET_LOCKED(ifp));
2786 pcount = ifp->if_pcount;
2793 if (ifp->if_pcount++ != 0)
2795 nflags = ifp->if_flags | IFF_PROMISC;
2797 if (--ifp->if_pcount > 0)
2799 nflags = ifp->if_flags & ~IFF_PROMISC;
2801 ret = if_flags_set(ifp, nflags);
2804 ifp->if_pcount = pcount;
2811 ifpromisc(struct ifnet *ifp, int pswitch)
2815 IFNET_LOCK(ifp);
2816 e = ifpromisc_locked(ifp, pswitch);
2817 IFNET_UNLOCK(ifp);
2823 * if_ioctl(ifp, cmd, data)
2833 * For all other ioctls, caller must hold ifp->if_ioctl_lock,
2837 if_ioctl(struct ifnet *ifp, u_long cmd, void *data)
2845 KASSERTMSG(IFNET_LOCKED(ifp), "%s", ifp->if_xname);
2848 return (*ifp->if_ioctl)(ifp, cmd, data);
2852 * if_init(ifp)
2854 * Prepare the hardware underlying ifp to process packets
2858 * May sleep. Caller must hold ifp->if_ioctl_lock, a.k.a
2862 if_init(struct ifnet *ifp)
2865 KASSERTMSG(IFNET_LOCKED(ifp), "%s", ifp->if_xname);
2867 return (*ifp->if_init)(ifp);
2871 * if_stop(ifp, disable)
2873 * Stop the hardware underlying ifp from processing packets.
2877 * May sleep. Caller must hold ifp->if_ioctl_lock, a.k.a
2881 if_stop(struct ifnet *ifp, int disable)
2884 KASSERTMSG(IFNET_LOCKED(ifp), "%s", ifp->if_xname);
2886 (*ifp->if_stop)(ifp, disable);
2896 struct ifnet *ifp;
2913 ifp = NULL;
2915 IFNET_READER_FOREACH(ifp) {
2916 if (if_is_deactivated(ifp))
2918 if (strcmp(ifp->if_xname, name) == 0)
2923 return ifp;
2934 struct ifnet *ifp;
2951 ifp = NULL;
2953 IFNET_READER_FOREACH(ifp) {
2954 if (if_is_deactivated(ifp))
2956 if (strcmp(ifp->if_xname, name) == 0) {
2958 psref_acquire(psref, &ifp->if_psref,
2965 return ifp;
2973 if_put(const struct ifnet *ifp, struct psref *psref)
2976 if (ifp == NULL)
2979 psref_release(psref, &ifp->if_psref, ifnet_psref_class);
2983 * Return ifp having idx. Return NULL if not found. Normally if_byindex
2994 * Return ifp having idx. Return NULL if not found or the found ifp is
3000 ifnet_t *ifp;
3002 ifp = _if_byindex(idx);
3003 if (ifp != NULL && if_is_deactivated(ifp))
3004 ifp = NULL;
3005 return ifp;
3016 ifnet_t *ifp;
3019 ifp = if_byindex(idx);
3020 if (__predict_true(ifp != NULL)) {
3022 psref_acquire(psref, &ifp->if_psref, ifnet_psref_class);
3026 return ifp;
3032 ifnet_t *ifp;
3035 IFNET_READER_FOREACH(ifp) {
3036 if (if_is_deactivated(ifp))
3038 if (ifp->if_addrlen != lla_len)
3040 if (memcmp(lla, CLLADDR(ifp->if_sadl), lla_len) == 0) {
3041 psref_acquire(psref, &ifp->if_psref,
3048 return ifp;
3052 * Note that it's safe only if the passed ifp is guaranteed to not be freed,
3053 * for example using pserialize or the ifp is already held or some other
3054 * object is held which guarantes the ifp to not be freed indirectly.
3057 if_acquire(struct ifnet *ifp, struct psref *psref)
3060 KASSERT(ifp->if_index != 0);
3061 psref_acquire(psref, &ifp->if_psref, ifnet_psref_class);
3065 if_held(struct ifnet *ifp)
3068 return psref_held(&ifp->if_psref, ifnet_psref_class);
3078 if_tunnel_check_nesting(struct ifnet *ifp, struct mbuf *m, int limit)
3089 ifp->if_xname, *count);
3102 ifp->if_xname);
3163 if_export_if_data(ifnet_t * const ifp, struct if_data *ifi, bool zero_stats)
3167 if_stats_to_if_data(ifp, ifi, zero_stats);
3169 ifi->ifi_type = ifp->if_type;
3170 ifi->ifi_addrlen = ifp->if_addrlen;
3171 ifi->ifi_hdrlen = ifp->if_hdrlen;
3172 ifi->ifi_link_state = ifp->if_link_state;
3173 ifi->ifi_mtu = ifp->if_mtu;
3174 ifi->ifi_metric = ifp->if_metric;
3175 ifi->ifi_baudrate = ifp->if_baudrate;
3176 ifi->ifi_lastchange = ifp->if_lastchange;
3181 ifioctl_common(struct ifnet *ifp, u_long cmd, void *data)
3193 if ((ifcr->ifcr_capenable & ~ifp->if_capabilities) != 0)
3196 if (ifcr->ifcr_capenable == ifp->if_capenable)
3199 ifp->if_capenable = ifcr->ifcr_capenable;
3202 ifp->if_csum_flags_tx = 0;
3203 ifp->if_csum_flags_rx = 0;
3204 if (ifp->if_capenable & IFCAP_CSUM_IPv4_Tx)
3205 ifp->if_csum_flags_tx |= M_CSUM_IPv4;
3206 if (ifp->if_capenable & IFCAP_CSUM_IPv4_Rx)
3207 ifp->if_csum_flags_rx |= M_CSUM_IPv4;
3209 if (ifp->if_capenable & IFCAP_CSUM_TCPv4_Tx)
3210 ifp->if_csum_flags_tx |= M_CSUM_TCPv4;
3211 if (ifp->if_capenable & IFCAP_CSUM_TCPv4_Rx)
3212 ifp->if_csum_flags_rx |= M_CSUM_TCPv4;
3214 if (ifp->if_capenable & IFCAP_CSUM_UDPv4_Tx)
3215 ifp->if_csum_flags_tx |= M_CSUM_UDPv4;
3216 if (ifp->if_capenable & IFCAP_CSUM_UDPv4_Rx)
3217 ifp->if_csum_flags_rx |= M_CSUM_UDPv4;
3219 if (ifp->if_capenable & IFCAP_CSUM_TCPv6_Tx)
3220 ifp->if_csum_flags_tx |= M_CSUM_TCPv6;
3221 if (ifp->if_capenable & IFCAP_CSUM_TCPv6_Rx)
3222 ifp->if_csum_flags_rx |= M_CSUM_TCPv6;
3224 if (ifp->if_capenable & IFCAP_CSUM_UDPv6_Tx)
3225 ifp->if_csum_flags_tx |= M_CSUM_UDPv6;
3226 if (ifp->if_capenable & IFCAP_CSUM_UDPv6_Rx)
3227 ifp->if_csum_flags_rx |= M_CSUM_UDPv6;
3229 if (ifp->if_capenable & IFCAP_TSOv4)
3230 ifp->if_csum_flags_tx |= M_CSUM_TSOv4;
3231 if (ifp->if_capenable & IFCAP_TSOv6)
3232 ifp->if_csum_flags_tx |= M_CSUM_TSOv6;
3235 if (ifp->if_bridge != NULL)
3236 bridge_calc_csum_flags(ifp->if_bridge);
3239 if (ifp->if_flags & IFF_UP)
3245 * If if_is_mpsafe(ifp), KERNEL_LOCK isn't held here, but if_up
3248 KERNEL_LOCK_IF_IFP_MPSAFE(ifp);
3249 if (ifp->if_flags & IFF_UP && (ifr->ifr_flags & IFF_UP) == 0) {
3251 if_down_locked(ifp);
3254 if (ifr->ifr_flags & IFF_UP && (ifp->if_flags & IFF_UP) == 0) {
3256 if_up_locked(ifp);
3259 KERNEL_UNLOCK_IF_IFP_MPSAFE(ifp);
3260 flags = (ifp->if_flags & IFF_CANTCHANGE) |
3262 if (ifp->if_flags != flags) {
3263 ifp->if_flags = flags;
3265 rt_ifmsg(ifp);
3270 ifr->ifr_flags = ifp->if_flags;
3275 ifr->ifr_metric = ifp->if_metric;
3280 ifr->ifr_mtu = ifp->if_mtu;
3285 ifr->ifr_dlt = ifp->if_dlt;
3290 ifcr->ifcr_capabilities = ifp->if_capabilities;
3291 ifcr->ifcr_capenable = ifp->if_capenable;
3296 ifp->if_metric = ifr->ifr_metric;
3301 if_export_if_data(ifp, &ifdr->ifdr_data, false);
3306 ifr->ifr_index = ifp->if_index;
3311 if_export_if_data(ifp, &ifdr->ifdr_data, true);
3312 getnanotime(&ifp->if_lastchange);
3316 if (ifp->if_mtu == ifr->ifr_mtu)
3318 ifp->if_mtu = ifr->ifr_mtu;
3323 KAUTH_REQ_NETWORK_INTERFACE_SETPRIV, ifp, KAUTH_ARG(cmd),
3349 if (ifp->if_description != NULL)
3350 kmem_free(ifp->if_description, IFDESCRSIZE);
3352 ifp->if_description = descr;
3357 descr = ifp->if_description;
3377 ifaddrpref_ioctl(struct socket *so, u_long cmd, void *data, struct ifnet *ifp)
3392 KAUTH_REQ_NETWORK_INTERFACE_SETPRIV, ifp, KAUTH_ARG(cmd),
3404 if (data == NULL || ifp == NULL) {
3419 IFADDR_READER_FOREACH(ifa, ifp) {
3455 struct ifnet *ifp;
3502 ifp = if_get(ifr->ifr_name, &psref);
3505 KAUTH_REQ_NETWORK_INTERFACE_SETPRIV, ifp,
3507 if (ifp != NULL)
3508 if_put(ifp, &psref);
3535 ifp = if_get(ifr->ifr_name, &psref);
3536 if (ifp == NULL) {
3572 KAUTH_REQ_NETWORK_INTERFACE_SETPRIV, ifp,
3579 oif_flags = ifp->if_flags;
3581 KERNEL_LOCK_UNLESS_IFP_MPSAFE(ifp);
3582 IFNET_LOCK(ifp);
3584 error = if_ioctl(ifp, cmd, data);
3590 KERNEL_LOCK_IF_IFP_MPSAFE(ifp);
3595 cmd, data, ifp);
3596 KERNEL_UNLOCK_IF_IFP_MPSAFE(ifp);
3599 if (((oif_flags ^ ifp->if_flags) & IFF_UP) != 0) {
3600 if ((ifp->if_flags & IFF_UP) != 0) {
3602 if_up_locked(ifp);
3614 IFNET_UNLOCK(ifp);
3615 KERNEL_UNLOCK_UNLESS_IFP_MPSAFE(ifp);
3617 if_put(ifp, &psref);
3655 struct ifnet *ifp;
3674 IFNET_READER_FOREACH(ifp) {
3675 psref_acquire(&psref, &ifp->if_psref, ifnet_psref_class);
3678 (void)strncpy(ifr.ifr_name, ifp->if_xname,
3684 if (IFADDR_READER_EMPTY(ifp)) {
3701 IFADDR_READER_FOREACH(ifa, ifp) {
3725 psref_release(&psref, &ifp->if_psref, ifnet_psref_class);
3740 psref_release(&psref, &ifp->if_psref, ifnet_psref_class);
3779 if_transmit(struct ifnet *ifp, struct mbuf *m)
3787 IFQ_ENQUEUE(&ifp->if_snd, m, error);
3793 net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
3794 if_statadd_ref(ifp, nsr, if_obytes, pktlen);
3796 if_statinc_ref(ifp, nsr, if_omcasts);
3797 IF_STAT_PUTREF(ifp);
3799 if ((ifp->if_flags & IFF_OACTIVE) == 0)
3800 if_start_lock(ifp);
3808 if_transmit_lock(struct ifnet *ifp, struct mbuf *m)
3816 if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
3817 error = if_transmit(ifp, m);
3821 error = (*ifp->if_transmit)(ifp, m);
3825 error = (*ifp->if_transmit)(ifp, m);
3837 ifq_enqueue(struct ifnet *ifp, struct mbuf *m)
3840 return if_transmit_lock(ifp, m);
3847 ifq_enqueue2(struct ifnet *ifp, struct ifqueue *ifq, struct mbuf *m)
3853 && ALTQ_IS_ENABLED(&ifp->if_snd) == 0
3857 IF_DROP(&ifp->if_snd);
3864 IFQ_ENQUEUE(&ifp->if_snd, m, error);
3866 if_statinc(ifp, if_oerrors);
3873 if_addr_init(ifnet_t *ifp, struct ifaddr *ifa, const bool src)
3877 KASSERT(IFNET_LOCKED(ifp));
3878 if (ifp->if_initaddr != NULL)
3879 rc = (*ifp->if_initaddr)(ifp, ifa, src);
3880 else if (src || (rc = if_ioctl(ifp, SIOCSIFDSTADDR, ifa)) == ENOTTY)
3881 rc = if_ioctl(ifp, SIOCINITIFADDR, ifa);
3887 if_do_dad(struct ifnet *ifp)
3889 if ((ifp->if_flags & IFF_LOOPBACK) != 0)
3892 switch (ifp->if_type) {
3911 if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) !=
3920 * if_flags_set(ifp, flags)
3922 * Ask ifp to change ifp->if_flags to flags, as if with the
3925 * May sleep. Caller must hold ifp->if_ioctl_lock, a.k.a
3929 if_flags_set(ifnet_t *ifp, const u_short flags)
3933 KASSERT(IFNET_LOCKED(ifp));
3935 if (ifp->if_setflags != NULL)
3936 rc = (*ifp->if_setflags)(ifp, flags);
3941 chgdflags = ifp->if_flags ^ flags;
3945 ifp->if_flags ^= cantflags;
3952 if (chgdflags == IFF_PROMISC && (ifp->if_flags & IFF_UP) == 0)
3958 rc = if_ioctl(ifp, SIOCSIFFLAGS, &ifr);
3961 ifp->if_flags ^= cantflags;
3968 * if_mcast_op(ifp, cmd, sa)
3979 if_mcast_op(ifnet_t *ifp, const unsigned long cmd, const struct sockaddr *sa)
3993 rc = if_ioctl(ifp, cmd, &ifr);
4061 struct ifnet *ifp;
4070 ifp = if_get_byindex(name[0], &psref);
4071 if (ifp == NULL) {
4076 sdl = ifp->if_sadl;
4092 if_put(ifp, &psref);