Lines Matching defs: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 ifa = 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) {
2105 struct ifnet *ifp;
2110 IFNET_READER_FOREACH(ifp) {
2111 if (if_is_deactivated(ifp))
2113 IFADDR_READER_FOREACH(ifa, ifp) {
2128 ifaof_ifpforaddr(const struct sockaddr *addr, struct ifnet *ifp)
2136 if (if_is_deactivated(ifp))
2142 IFADDR_READER_FOREACH(ifa, ifp) {
2168 ifaof_ifpforaddr_psref(const struct sockaddr *addr, struct ifnet *ifp,
2175 ifa = ifaof_ifpforaddr(addr, ifp);
2193 struct ifnet *ifp;
2198 ifp = rt->rt_ifa->ifa_ifp;
2200 if ((ifa = ifaof_ifpforaddr_psref(dst, ifp, &psref)) != NULL) {
2247 if_link_state_change(struct ifnet *ifp, int link_state)
2260 ifp->if_xname, link_state);
2265 IF_LINK_STATE_CHANGE_LOCK(ifp);
2268 LQ_FIND_UNSET(ifp->if_link_queue, idx);
2279 if (ifp->if_link_state == link_state ||
2280 ifp->if_link_scheduled)
2284 if (LQ_ITEM(ifp->if_link_queue, idx - 1)
2290 if (idx == LQ_MAX(ifp->if_link_queue)) {
2302 lost = LQ_ITEM(ifp->if_link_queue, 0);
2303 LQ_PUSH(ifp->if_link_queue, (uint8_t)link_state);
2305 lost = LQ_ITEM(ifp->if_link_queue, 0);
2306 LQ_STORE(ifp->if_link_queue, 0, LINK_STATE_DOWN);
2309 ifp->if_xname,
2314 LQ_STORE(ifp->if_link_queue, idx, (uint8_t)link_state);
2316 if (ifp->if_link_scheduled)
2319 ifp->if_link_scheduled = true;
2320 workqueue_enqueue(ifnet_link_state_wq, &ifp->if_link_work, NULL);
2323 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2330 if_link_state_change_process(struct ifnet *ifp, int link_state)
2338 IF_LINK_STATE_CHANGE_LOCK(ifp);
2341 if (ifp->if_link_state == link_state) {
2342 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2348 log(LOG_DEBUG, "%s: link state %s (was %s)\n", ifp->if_xname,
2352 ifp->if_link_state == LINK_STATE_UP ? "UP" :
2353 ifp->if_link_state == LINK_STATE_DOWN ? "DOWN" :
2367 ifp->if_link_state == LINK_STATE_UNKNOWN);
2368 ifp->if_link_state = link_state;
2370 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2376 dp->dom_if_link_state_change(ifp,
2382 rt_ifmsg(ifp);
2384 simplehook_dohooks(ifp->if_linkstate_hooks);
2388 dp->dom_if_link_state_change(ifp, link_state);
2400 struct ifnet *ifp = container_of(work, struct ifnet, if_link_work);
2412 IF_LINK_STATE_CHANGE_LOCK(ifp);
2413 LQ_POP(ifp->if_link_queue, state);
2414 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2418 if_link_state_change_process(ifp, state);
2421 IF_LINK_STATE_CHANGE_LOCK(ifp);
2422 if (LQ_ITEM(ifp->if_link_queue, 0) != LINK_STATE_UNSET) {
2423 ifp->if_link_scheduled = true;
2424 workqueue_enqueue(ifnet_link_state_wq, &ifp->if_link_work,
2427 ifp->if_link_scheduled = false;
2428 IF_LINK_STATE_CHANGE_UNLOCK(ifp);
2436 if_linkstate_change_establish(struct ifnet *ifp, void (*fn)(void *), void *arg)
2440 hk = simplehook_establish(ifp->if_linkstate_hooks, fn, arg);
2446 if_linkstate_change_disestablish(struct ifnet *ifp, void *vhook,
2450 simplehook_disestablish(ifp->if_linkstate_hooks, vhook, lock);
2459 if_domain_link_state_change(struct ifnet *ifp, int link_state)
2468 dp->dom_if_link_state_change(ifp, link_state);
2483 struct ifnet *ifp = rt->rt_ifp;
2497 IFADDR_READER_FOREACH(ifa, ifp) {
2531 _if_down(struct ifnet *ifp)
2537 ifp->if_flags &= ~IFF_UP;
2538 nanotime(&ifp->if_lastchange);
2542 IFADDR_READER_FOREACH(ifa, ifp) {
2554 IFQ_PURGE(&ifp->if_snd);
2556 if (ifp->if_carp)
2557 carp_carpdev_state(ifp);
2559 rt_ifmsg(ifp);
2562 dp->dom_if_down(ifp);
2567 if_down_deactivated(struct ifnet *ifp)
2570 KASSERT(if_is_deactivated(ifp));
2571 _if_down(ifp);
2575 if_down_locked(struct ifnet *ifp)
2578 KASSERT(IFNET_LOCKED(ifp));
2579 _if_down(ifp);
2588 if_down(struct ifnet *ifp)
2591 IFNET_LOCK(ifp);
2592 if_down_locked(ifp);
2593 IFNET_UNLOCK(ifp);
2600 if_up_locked(struct ifnet *ifp)
2607 KASSERT(IFNET_LOCKED(ifp));
2609 KASSERT(!if_is_deactivated(ifp));
2610 ifp->if_flags |= IFF_UP;
2611 nanotime(&ifp->if_lastchange);
2614 IFADDR_READER_FOREACH(ifa, ifp)
2618 if (ifp->if_carp)
2619 carp_carpdev_state(ifp);
2621 rt_ifmsg(ifp);
2624 dp->dom_if_up(ifp);
2634 if_slowtimo_countdown(struct ifnet *ifp)
2640 if (ifp->if_timer != 0 && --ifp->if_timer == 0)
2651 struct ifnet *ifp = arg;
2652 struct if_slowtimo_data *isd = ifp->if_slowtimo_data;
2656 if (isd->isd_trigger || if_slowtimo_countdown(ifp)) {
2673 struct ifnet *ifp = isd->isd_ifp;
2677 (*ifp->if_slowtimo)(ifp);
2684 printf("%s: watchdog triggered\n", ifp->if_xname);
2696 struct ifnet *ifp = node.sysctl_data;
2697 struct if_slowtimo_data *isd = ifp->if_slowtimo_data;
2717 sysctl_watchdog_setup(struct ifnet *ifp)
2719 struct sysctllog **clog = &ifp->if_sysctl_log;
2729 CTLFLAG_PERMANENT, CTLTYPE_NODE, ifp->if_xname,
2743 sysctl_if_watchdog, 0, (int *)ifp, 0,
2750 printf("%s: could not attach sysctl watchdog nodes\n", ifp->if_xname);
2759 if_up(struct ifnet *ifp)
2762 IFNET_LOCK(ifp);
2763 if_up_locked(ifp);
2764 IFNET_UNLOCK(ifp);
2768 * Set/clear promiscuous mode on interface ifp based on the truth value
2774 ifpromisc_locked(struct ifnet *ifp, int pswitch)
2779 KASSERT(IFNET_LOCKED(ifp));
2781 pcount = ifp->if_pcount;
2788 if (ifp->if_pcount++ != 0)
2790 nflags = ifp->if_flags | IFF_PROMISC;
2792 if (--ifp->if_pcount > 0)
2794 nflags = ifp->if_flags & ~IFF_PROMISC;
2796 ret = if_flags_set(ifp, nflags);
2799 ifp->if_pcount = pcount;
2806 ifpromisc(struct ifnet *ifp, int pswitch)
2810 IFNET_LOCK(ifp);
2811 e = ifpromisc_locked(ifp, pswitch);
2812 IFNET_UNLOCK(ifp);
2818 * if_ioctl(ifp, cmd, data)
2828 * For all other ioctls, caller must hold ifp->if_ioctl_lock,
2832 if_ioctl(struct ifnet *ifp, u_long cmd, void *data)
2840 KASSERTMSG(IFNET_LOCKED(ifp), "%s", ifp->if_xname);
2843 return (*ifp->if_ioctl)(ifp, cmd, data);
2847 * if_init(ifp)
2849 * Prepare the hardware underlying ifp to process packets
2853 * May sleep. Caller must hold ifp->if_ioctl_lock, a.k.a
2857 if_init(struct ifnet *ifp)
2860 KASSERTMSG(IFNET_LOCKED(ifp), "%s", ifp->if_xname);
2862 return (*ifp->if_init)(ifp);
2866 * if_stop(ifp, disable)
2868 * Stop the hardware underlying ifp from processing packets.
2872 * May sleep. Caller must hold ifp->if_ioctl_lock, a.k.a
2876 if_stop(struct ifnet *ifp, int disable)
2879 KASSERTMSG(IFNET_LOCKED(ifp), "%s", ifp->if_xname);
2881 (*ifp->if_stop)(ifp, disable);
2891 struct ifnet *ifp;
2908 ifp = NULL;
2910 IFNET_READER_FOREACH(ifp) {
2911 if (if_is_deactivated(ifp))
2913 if (strcmp(ifp->if_xname, name) == 0)
2918 return ifp;
2929 struct ifnet *ifp;
2946 ifp = NULL;
2948 IFNET_READER_FOREACH(ifp) {
2949 if (if_is_deactivated(ifp))
2951 if (strcmp(ifp->if_xname, name) == 0) {
2953 psref_acquire(psref, &ifp->if_psref,
2960 return ifp;
2968 if_put(const struct ifnet *ifp, struct psref *psref)
2971 if (ifp == NULL)
2974 psref_release(psref, &ifp->if_psref, ifnet_psref_class);
2978 * Return ifp having idx. Return NULL if not found. Normally if_byindex
2989 * Return ifp having idx. Return NULL if not found or the found ifp is
2995 ifnet_t *ifp;
2997 ifp = _if_byindex(idx);
2998 if (ifp != NULL && if_is_deactivated(ifp))
2999 ifp = NULL;
3000 return ifp;
3011 ifnet_t *ifp;
3014 ifp = if_byindex(idx);
3015 if (__predict_true(ifp != NULL)) {
3017 psref_acquire(psref, &ifp->if_psref, ifnet_psref_class);
3021 return ifp;
3027 ifnet_t *ifp;
3030 IFNET_READER_FOREACH(ifp) {
3031 if (if_is_deactivated(ifp))
3033 if (ifp->if_addrlen != lla_len)
3035 if (memcmp(lla, CLLADDR(ifp->if_sadl), lla_len) == 0) {
3036 psref_acquire(psref, &ifp->if_psref,
3043 return ifp;
3047 * Note that it's safe only if the passed ifp is guaranteed to not be freed,
3048 * for example using pserialize or the ifp is already held or some other
3049 * object is held which guarantes the ifp to not be freed indirectly.
3052 if_acquire(struct ifnet *ifp, struct psref *psref)
3055 KASSERT(ifp->if_index != 0);
3056 psref_acquire(psref, &ifp->if_psref, ifnet_psref_class);
3060 if_held(struct ifnet *ifp)
3063 return psref_held(&ifp->if_psref, ifnet_psref_class);
3073 if_tunnel_check_nesting(struct ifnet *ifp, struct mbuf *m, int limit)
3084 ifp->if_xname, *count);
3097 ifp->if_xname);
3158 if_export_if_data(ifnet_t * const ifp, struct if_data *ifi, bool zero_stats)
3162 if_stats_to_if_data(ifp, ifi, zero_stats);
3164 ifi->ifi_type = ifp->if_type;
3165 ifi->ifi_addrlen = ifp->if_addrlen;
3166 ifi->ifi_hdrlen = ifp->if_hdrlen;
3167 ifi->ifi_link_state = ifp->if_link_state;
3168 ifi->ifi_mtu = ifp->if_mtu;
3169 ifi->ifi_metric = ifp->if_metric;
3170 ifi->ifi_baudrate = ifp->if_baudrate;
3171 ifi->ifi_lastchange = ifp->if_lastchange;
3176 ifioctl_common(struct ifnet *ifp, u_long cmd, void *data)
3188 if ((ifcr->ifcr_capenable & ~ifp->if_capabilities) != 0)
3191 if (ifcr->ifcr_capenable == ifp->if_capenable)
3194 ifp->if_capenable = ifcr->ifcr_capenable;
3197 ifp->if_csum_flags_tx = 0;
3198 ifp->if_csum_flags_rx = 0;
3199 if (ifp->if_capenable & IFCAP_CSUM_IPv4_Tx)
3200 ifp->if_csum_flags_tx |= M_CSUM_IPv4;
3201 if (ifp->if_capenable & IFCAP_CSUM_IPv4_Rx)
3202 ifp->if_csum_flags_rx |= M_CSUM_IPv4;
3204 if (ifp->if_capenable & IFCAP_CSUM_TCPv4_Tx)
3205 ifp->if_csum_flags_tx |= M_CSUM_TCPv4;
3206 if (ifp->if_capenable & IFCAP_CSUM_TCPv4_Rx)
3207 ifp->if_csum_flags_rx |= M_CSUM_TCPv4;
3209 if (ifp->if_capenable & IFCAP_CSUM_UDPv4_Tx)
3210 ifp->if_csum_flags_tx |= M_CSUM_UDPv4;
3211 if (ifp->if_capenable & IFCAP_CSUM_UDPv4_Rx)
3212 ifp->if_csum_flags_rx |= M_CSUM_UDPv4;
3214 if (ifp->if_capenable & IFCAP_CSUM_TCPv6_Tx)
3215 ifp->if_csum_flags_tx |= M_CSUM_TCPv6;
3216 if (ifp->if_capenable & IFCAP_CSUM_TCPv6_Rx)
3217 ifp->if_csum_flags_rx |= M_CSUM_TCPv6;
3219 if (ifp->if_capenable & IFCAP_CSUM_UDPv6_Tx)
3220 ifp->if_csum_flags_tx |= M_CSUM_UDPv6;
3221 if (ifp->if_capenable & IFCAP_CSUM_UDPv6_Rx)
3222 ifp->if_csum_flags_rx |= M_CSUM_UDPv6;
3224 if (ifp->if_capenable & IFCAP_TSOv4)
3225 ifp->if_csum_flags_tx |= M_CSUM_TSOv4;
3226 if (ifp->if_capenable & IFCAP_TSOv6)
3227 ifp->if_csum_flags_tx |= M_CSUM_TSOv6;
3230 if (ifp->if_bridge != NULL)
3231 bridge_calc_csum_flags(ifp->if_bridge);
3234 if (ifp->if_flags & IFF_UP)
3240 * If if_is_mpsafe(ifp), KERNEL_LOCK isn't held here, but if_up
3243 KERNEL_LOCK_IF_IFP_MPSAFE(ifp);
3244 if (ifp->if_flags & IFF_UP && (ifr->ifr_flags & IFF_UP) == 0) {
3246 if_down_locked(ifp);
3249 if (ifr->ifr_flags & IFF_UP && (ifp->if_flags & IFF_UP) == 0) {
3251 if_up_locked(ifp);
3254 KERNEL_UNLOCK_IF_IFP_MPSAFE(ifp);
3255 flags = (ifp->if_flags & IFF_CANTCHANGE) |
3257 if (ifp->if_flags != flags) {
3258 ifp->if_flags = flags;
3260 rt_ifmsg(ifp);
3265 ifr->ifr_flags = ifp->if_flags;
3270 ifr->ifr_metric = ifp->if_metric;
3275 ifr->ifr_mtu = ifp->if_mtu;
3280 ifr->ifr_dlt = ifp->if_dlt;
3285 ifcr->ifcr_capabilities = ifp->if_capabilities;
3286 ifcr->ifcr_capenable = ifp->if_capenable;
3291 ifp->if_metric = ifr->ifr_metric;
3296 if_export_if_data(ifp, &ifdr->ifdr_data, false);
3301 ifr->ifr_index = ifp->if_index;
3306 if_export_if_data(ifp, &ifdr->ifdr_data, true);
3307 getnanotime(&ifp->if_lastchange);
3311 if (ifp->if_mtu == ifr->ifr_mtu)
3313 ifp->if_mtu = ifr->ifr_mtu;
3318 KAUTH_REQ_NETWORK_INTERFACE_SETPRIV, ifp, KAUTH_ARG(cmd),
3344 if (ifp->if_description != NULL)
3345 kmem_free(ifp->if_description, IFDESCRSIZE);
3347 ifp->if_description = descr;
3352 descr = ifp->if_description;
3372 ifaddrpref_ioctl(struct socket *so, u_long cmd, void *data, struct ifnet *ifp)
3387 KAUTH_REQ_NETWORK_INTERFACE_SETPRIV, ifp, KAUTH_ARG(cmd),
3399 if (data == NULL || ifp == NULL) {
3414 IFADDR_READER_FOREACH(ifa, ifp) {
3450 struct ifnet *ifp;
3497 ifp = if_get(ifr->ifr_name, &psref);
3500 KAUTH_REQ_NETWORK_INTERFACE_SETPRIV, ifp,
3502 if (ifp != NULL)
3503 if_put(ifp, &psref);
3530 ifp = if_get(ifr->ifr_name, &psref);
3531 if (ifp == NULL) {
3567 KAUTH_REQ_NETWORK_INTERFACE_SETPRIV, ifp,
3574 oif_flags = ifp->if_flags;
3576 KERNEL_LOCK_UNLESS_IFP_MPSAFE(ifp);
3577 IFNET_LOCK(ifp);
3579 error = if_ioctl(ifp, cmd, data);
3585 KERNEL_LOCK_IF_IFP_MPSAFE(ifp);
3590 cmd, data, ifp);
3591 KERNEL_UNLOCK_IF_IFP_MPSAFE(ifp);
3594 if (((oif_flags ^ ifp->if_flags) & IFF_UP) != 0) {
3595 if ((ifp->if_flags & IFF_UP) != 0) {
3597 if_up_locked(ifp);
3609 IFNET_UNLOCK(ifp);
3610 KERNEL_UNLOCK_UNLESS_IFP_MPSAFE(ifp);
3612 if_put(ifp, &psref);
3650 struct ifnet *ifp;
3669 IFNET_READER_FOREACH(ifp) {
3670 psref_acquire(&psref, &ifp->if_psref, ifnet_psref_class);
3673 (void)strncpy(ifr.ifr_name, ifp->if_xname,
3679 if (IFADDR_READER_EMPTY(ifp)) {
3696 IFADDR_READER_FOREACH(ifa, ifp) {
3720 psref_release(&psref, &ifp->if_psref, ifnet_psref_class);
3735 psref_release(&psref, &ifp->if_psref, ifnet_psref_class);
3774 if_transmit(struct ifnet *ifp, struct mbuf *m)
3782 IFQ_ENQUEUE(&ifp->if_snd, m, error);
3788 net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
3789 if_statadd_ref(ifp, nsr, if_obytes, pktlen);
3791 if_statinc_ref(ifp, nsr, if_omcasts);
3792 IF_STAT_PUTREF(ifp);
3794 if ((ifp->if_flags & IFF_OACTIVE) == 0)
3795 if_start_lock(ifp);
3803 if_transmit_lock(struct ifnet *ifp, struct mbuf *m)
3811 if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
3812 error = if_transmit(ifp, m);
3816 error = (*ifp->if_transmit)(ifp, m);
3820 error = (*ifp->if_transmit)(ifp, m);
3832 ifq_enqueue(struct ifnet *ifp, struct mbuf *m)
3835 return if_transmit_lock(ifp, m);
3842 ifq_enqueue2(struct ifnet *ifp, struct ifqueue *ifq, struct mbuf *m)
3848 && ALTQ_IS_ENABLED(&ifp->if_snd) == 0
3852 IF_DROP(&ifp->if_snd);
3859 IFQ_ENQUEUE(&ifp->if_snd, m, error);
3861 if_statinc(ifp, if_oerrors);
3868 if_addr_init(ifnet_t *ifp, struct ifaddr *ifa, const bool src)
3872 KASSERT(IFNET_LOCKED(ifp));
3873 if (ifp->if_initaddr != NULL)
3874 rc = (*ifp->if_initaddr)(ifp, ifa, src);
3875 else if (src || (rc = if_ioctl(ifp, SIOCSIFDSTADDR, ifa)) == ENOTTY)
3876 rc = if_ioctl(ifp, SIOCINITIFADDR, ifa);
3882 if_do_dad(struct ifnet *ifp)
3884 if ((ifp->if_flags & IFF_LOOPBACK) != 0)
3887 switch (ifp->if_type) {
3906 if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) !=
3915 * if_flags_set(ifp, flags)
3917 * Ask ifp to change ifp->if_flags to flags, as if with the
3920 * May sleep. Caller must hold ifp->if_ioctl_lock, a.k.a
3924 if_flags_set(ifnet_t *ifp, const u_short flags)
3928 KASSERT(IFNET_LOCKED(ifp));
3930 if (ifp->if_setflags != NULL)
3931 rc = (*ifp->if_setflags)(ifp, flags);
3936 chgdflags = ifp->if_flags ^ flags;
3940 ifp->if_flags ^= cantflags;
3947 if (chgdflags == IFF_PROMISC && (ifp->if_flags & IFF_UP) == 0)
3953 rc = if_ioctl(ifp, SIOCSIFFLAGS, &ifr);
3956 ifp->if_flags ^= cantflags;
3963 * if_mcast_op(ifp, cmd, sa)
3974 if_mcast_op(ifnet_t *ifp, const unsigned long cmd, const struct sockaddr *sa)
3988 rc = if_ioctl(ifp, cmd, &ifr);
4056 struct ifnet *ifp;
4065 ifp = if_get_byindex(name[0], &psref);
4066 if (ifp == NULL) {
4071 sdl = ifp->if_sadl;
4087 if_put(ifp, &psref);