Lines Matching defs:ifp

330 if_idxmap_alloc(struct ifnet *ifp)
336 refcnt_init(&ifp->if_refcnt);
400 ifp->if_index = index;
421 if_idxmap_insert(struct ifnet *ifp)
424 unsigned int index = ifp->if_index;
431 "%s(%p) index %u vs limit %u", ifp->if_xname, ifp, index,
437 SMR_PTR_SET_LOCKED(&if_map[index], if_ref(ifp));
443 if_idxmap_remove(struct ifnet *ifp)
446 unsigned int index = ifp->if_index;
453 KASSERT(SMR_PTR_GET_LOCKED(&if_map[index]) == ifp);
465 if_put(ifp);
473 if_attachsetup(struct ifnet *ifp)
479 if_addgroup(ifp, IFG_ALL);
482 nd6_ifattach(ifp);
486 pfi_attach_ifnet(ifp);
489 timeout_set(&ifp->if_slowtimo, if_slowtimo, ifp);
490 if_slowtimo(ifp);
492 if_idxmap_insert(ifp);
495 ifidx = ifp->if_index;
497 task_set(&ifp->if_watchdogtask, if_watchdog_task, (void *)ifidx);
498 task_set(&ifp->if_linkstatetask, if_linkstate_task, (void *)ifidx);
501 rtm_ifannounce(ifp, IFAN_ARRIVAL);
506 * is an attachment helper. It must be called after ifp->if_addrlen
511 if_alloc_sadl(struct ifnet *ifp)
522 if_free_sadl(ifp);
524 namelen = strlen(ifp->if_xname);
526 socksize = masklen + ifp->if_addrlen;
534 bcopy(ifp->if_xname, sdl->sdl_data, namelen);
536 sdl->sdl_alen = ifp->if_addrlen;
537 sdl->sdl_index = ifp->if_index;
538 sdl->sdl_type = ifp->if_type;
539 ifp->if_sadl = sdl;
548 if_free_sadl(struct ifnet *ifp)
550 if (ifp->if_sadl == NULL)
553 free(ifp->if_sadl, M_IFADDR, ifp->if_sadl->sdl_len);
554 ifp->if_sadl = NULL;
558 if_attachhead(struct ifnet *ifp)
560 if_attach_common(ifp);
562 TAILQ_INSERT_HEAD(&ifnetlist, ifp, if_list);
563 if_attachsetup(ifp);
568 if_attach(struct ifnet *ifp)
570 if_attach_common(ifp);
572 TAILQ_INSERT_TAIL(&ifnetlist, ifp, if_list);
573 if_attachsetup(ifp);
578 if_attach_queues(struct ifnet *ifp, unsigned int nqs)
584 KASSERT(ifp->if_ifqs == ifp->if_snd.ifq_ifqs);
589 ifp->if_snd.ifq_softc = NULL;
590 map[0] = &ifp->if_snd;
594 ifq_init_maxlen(ifq, ifp->if_snd.ifq_maxlen);
595 ifq_init(ifq, ifp, i);
599 ifp->if_ifqs = map;
600 ifp->if_nifqs = nqs;
604 if_attach_iqueues(struct ifnet *ifp, unsigned int niqs)
614 ifp->if_rcv.ifiq_softc = NULL;
615 map[0] = &ifp->if_rcv;
619 ifiq_init(ifiq, ifp, i);
623 ifp->if_iqs = map;
624 ifp->if_niqs = niqs;
628 if_attach_common(struct ifnet *ifp)
630 KASSERT(ifp->if_ioctl != NULL);
632 TAILQ_INIT(&ifp->if_addrlist);
633 TAILQ_INIT(&ifp->if_maddrlist);
634 TAILQ_INIT(&ifp->if_groups);
636 if (!ISSET(ifp->if_xflags, IFXF_MPSAFE)) {
637 KASSERTMSG(ifp->if_qstart == NULL,
638 "%s: if_qstart set without MPSAFE set", ifp->if_xname);
639 ifp->if_qstart = if_qstart_compat;
641 KASSERTMSG(ifp->if_start == NULL,
642 "%s: if_start set with MPSAFE set", ifp->if_xname);
643 KASSERTMSG(ifp->if_qstart != NULL,
644 "%s: if_qstart not set with MPSAFE set", ifp->if_xname);
647 if_idxmap_alloc(ifp);
649 ifq_init(&ifp->if_snd, ifp, 0);
651 ifp->if_snd.ifq_ifqs[0] = &ifp->if_snd;
652 ifp->if_ifqs = ifp->if_snd.ifq_ifqs;
653 ifp->if_nifqs = 1;
654 if (ifp->if_txmit == 0)
655 ifp->if_txmit = IF_TXMIT_DEFAULT;
657 ifiq_init(&ifp->if_rcv, ifp, 0);
659 ifp->if_rcv.ifiq_ifiqs[0] = &ifp->if_rcv;
660 ifp->if_iqs = ifp->if_rcv.ifiq_ifiqs;
661 ifp->if_niqs = 1;
663 TAILQ_INIT(&ifp->if_addrhooks);
664 TAILQ_INIT(&ifp->if_linkstatehooks);
665 TAILQ_INIT(&ifp->if_detachhooks);
667 if (ifp->if_rtrequest == NULL)
668 ifp->if_rtrequest = if_rtrequest_dummy;
669 if (ifp->if_enqueue == NULL)
670 ifp->if_enqueue = if_enqueue_ifq;
672 if (ifp->if_bpf_mtap == NULL)
673 ifp->if_bpf_mtap = bpf_mtap_ether;
675 ifp->if_llprio = IFQ_DEFPRIO;
679 if_attach_ifq(struct ifnet *ifp, const struct ifq_ops *newops, void *args)
690 ifq_attach(&ifp->if_snd, newops, args);
694 if_start(struct ifnet *ifp)
696 KASSERT(ifp->if_qstart == if_qstart_compat);
697 if_qstart_compat(&ifp->if_snd);
702 struct ifnet *ifp = ifq->ifq_if;
711 * (ifp->if_snd) back to the interface and calling if_start.
716 (*ifp->if_start)(ifp);
722 if_enqueue(struct ifnet *ifp, struct mbuf *m)
728 return (pf_delay_pkt(m, ifp->if_index));
732 if (ifp->if_bridgeidx && (m->m_flags & M_PROTO1) == 0) {
735 error = bridge_enqueue(ifp, m);
744 return ((*ifp->if_enqueue)(ifp, m));
748 if_enqueue_ifq(struct ifnet *ifp, struct mbuf *m)
750 struct ifqueue *ifq = &ifp->if_snd;
753 if (ifp->if_nifqs > 1) {
761 idx = ifq_idx(&ifp->if_snd, ifp->if_nifqs, m);
762 ifq = ifp->if_ifqs[idx];
775 if_input(struct ifnet *ifp, struct mbuf_list *ml)
777 ifiq_input(&ifp->if_rcv, ml);
781 if_input_local(struct ifnet *ifp, struct mbuf *m, sa_family_t af)
794 if (ifp->if_flags & IFF_LOOPBACK) {
795 caddr_t if_bpf = ifp->if_bpf;
815 m->m_pkthdr.ph_ifidx = ifp->if_index;
816 m->m_pkthdr.ph_rtableid = ifp->if_rdomain;
818 if (ISSET(keepcksum, M_TCP_TSO) && m->m_pkthdr.len > ifp->if_mtu) {
819 if (ifp->if_mtu > 0 &&
821 ISSET(ifp->if_capabilities, IFCAP_TSOv4)) ||
823 ISSET(ifp->if_capabilities, IFCAP_TSOv6)))) {
826 (m->m_pkthdr.len + ifp->if_mtu - 1) / ifp->if_mtu);
842 if (ISSET(ifp->if_flags, IFF_LOOPBACK)) {
843 counters_pkt(ifp->if_counters, ifc_opackets, ifc_obytes,
851 ipv4_input(ifp, m);
855 ipv6_input(ifp, m);
860 mpls_input(ifp, m);
864 printf("%s: can't handle af%d\n", ifp->if_xname, af);
873 if_output_ml(struct ifnet *ifp, struct mbuf_list *ml,
880 error = ifp->if_output(ifp, m, dst, rt);
891 if_output_tso(struct ifnet *ifp, struct mbuf **mp, struct sockaddr *dst,
916 error = tcp_if_output_tso(ifp, mp, dst, rt, ifcap, mtu);
923 in_hdr_cksum_out(*mp, ifp);
924 in_proto_cksum_out(*mp, ifp);
928 in6_proto_cksum_out(*mp, ifp);
932 error = ifp->if_output(ifp, *mp, dst, rt);
942 if_output_mq(struct ifnet *ifp, struct mbuf_queue *mq, unsigned int *total,
951 error = if_output_ml(ifp, &ml, dst, rt);
964 if_output_local(struct ifnet *ifp, struct mbuf *m, sa_family_t af)
970 m->m_pkthdr.ph_ifidx = ifp->if_index;
971 m->m_pkthdr.ph_rtableid = ifp->if_rdomain;
976 ifiq = ifp->if_iqs[flow % ifp->if_niqs];
982 if_input_process(struct ifnet *ifp, struct mbuf_list *ml)
989 if (!ISSET(ifp->if_xflags, IFXF_CLONED))
1001 (*ifp->if_input)(ifp, m);
1006 if_vinput(struct ifnet *ifp, struct mbuf *m)
1012 m->m_pkthdr.ph_ifidx = ifp->if_index;
1013 m->m_pkthdr.ph_rtableid = ifp->if_rdomain;
1015 counters_pkt(ifp->if_counters,
1023 if_bpf = ifp->if_bpf;
1025 if ((*ifp->if_bpf_mtap)(if_bpf, m, BPF_DIRECTION_IN)) {
1032 if (__predict_true(!ISSET(ifp->if_xflags, IFXF_MONITOR)))
1033 (*ifp->if_input)(ifp, m);
1123 if_remove(struct ifnet *ifp)
1127 TAILQ_REMOVE(&ifnetlist, ifp, if_list);
1131 if_idxmap_remove(ifp);
1134 refcnt_finalize(&ifp->if_refcnt, "ifrm");
1138 if_deactivate(struct ifnet *ifp)
1147 if_hooks_run(&ifp->if_detachhooks);
1152 if_detachhook_add(struct ifnet *ifp, struct task *t)
1155 TAILQ_INSERT_HEAD(&ifp->if_detachhooks, t, t_entry);
1160 if_detachhook_del(struct ifnet *ifp, struct task *t)
1163 TAILQ_REMOVE(&ifp->if_detachhooks, t, t_entry);
1172 if_detach(struct ifnet *ifp)
1179 if_deactivate(ifp);
1182 if_remove(ifp);
1184 ifp->if_qstart = if_detached_qstart;
1187 ifq_barrier(&ifp->if_snd);
1188 ifq_clr_oactive(&ifp->if_snd);
1191 bpfdetach(ifp);
1196 ifp->if_ioctl = if_detached_ioctl;
1197 ifp->if_watchdog = NULL;
1200 timeout_del(&ifp->if_slowtimo);
1201 task_del(net_tq(ifp->if_index), &ifp->if_watchdogtask);
1204 task_del(net_tq(ifp->if_index), &ifp->if_linkstatetask);
1206 rti_delete(ifp);
1208 if (ifp->if_index == revarp_ifidx)
1212 vif_delete(ifp);
1214 in_ifdetach(ifp);
1216 in6_ifdetach(ifp);
1219 pfi_detach_ifnet(ifp);
1222 while ((ifg = TAILQ_FIRST(&ifp->if_groups)) != NULL)
1223 if_delgroup(ifp, ifg->ifgl_group->ifg_group);
1225 if_free_sadl(ifp);
1228 if (!TAILQ_EMPTY(&ifp->if_addrlist)) {
1230 printf("%s: address list non empty\n", ifp->if_xname);
1232 while ((ifa = TAILQ_FIRST(&ifp->if_addrlist)) != NULL) {
1233 ifa_del(ifp, ifa);
1241 KASSERT(TAILQ_EMPTY(&ifp->if_addrhooks));
1242 KASSERT(TAILQ_EMPTY(&ifp->if_linkstatehooks));
1243 KASSERT(TAILQ_EMPTY(&ifp->if_detachhooks));
1246 nd6_ifdetach(ifp);
1250 rtm_ifannounce(ifp, IFAN_DEPARTURE);
1252 if (ifp->if_counters != NULL)
1253 if_counters_free(ifp);
1255 for (i = 0; i < ifp->if_nifqs; i++)
1256 ifq_destroy(ifp->if_ifqs[i]);
1257 if (ifp->if_ifqs != ifp->if_snd.ifq_ifqs) {
1258 for (i = 1; i < ifp->if_nifqs; i++) {
1259 free(ifp->if_ifqs[i], M_DEVBUF,
1262 free(ifp->if_ifqs, M_DEVBUF,
1263 sizeof(struct ifqueue *) * ifp->if_nifqs);
1266 for (i = 0; i < ifp->if_niqs; i++)
1267 ifiq_destroy(ifp->if_iqs[i]);
1268 if (ifp->if_iqs != ifp->if_rcv.ifiq_ifiqs) {
1269 for (i = 1; i < ifp->if_niqs; i++) {
1270 free(ifp->if_iqs[i], M_DEVBUF,
1273 free(ifp->if_iqs, M_DEVBUF,
1274 sizeof(struct ifiqueue *) * ifp->if_niqs);
1284 struct ifnet *ifp;
1287 ifp = if_get(ifidx);
1288 if (ifp == NULL)
1291 if (ifp0->if_index == ifp->if_index)
1295 if (ifp0->if_bridgeidx != 0 && ifp0->if_bridgeidx == ifp->if_bridgeidx)
1300 ifp0->if_carpdevidx == ifp->if_index) ||
1301 (ifp->if_type == IFT_CARP && ifp->if_carpdevidx == ifp0->if_index))
1305 if_put(ifp);
1316 struct ifnet *ifp;
1325 if ((ifp = if_unit(name)) != NULL) {
1332 if (ret != 0 || (ifp = if_unit(name)) == NULL)
1336 if_addgroup(ifp, ifc->ifc_name);
1338 if_setrdomain(ifp, rdomain);
1342 if_put(ifp);
1354 struct ifnet *ifp;
1366 TAILQ_FOREACH(ifp, &ifnetlist, if_list) {
1367 if (strcmp(ifp->if_xname, name) == 0)
1370 if (ifp == NULL) {
1376 if (ifp->if_flags & IFF_UP) {
1379 if_down(ifp);
1383 ret = (*ifc->ifc_destroy)(ifp);
1526 struct ifnet *ifp;
1533 TAILQ_FOREACH(ifp, &ifnetlist, if_list) {
1534 if (ifp->if_rdomain != rdomain)
1537 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
1555 struct ifnet *ifp;
1561 TAILQ_FOREACH(ifp, &ifnetlist, if_list) {
1562 if (ifp->if_rdomain != rdomain)
1564 if (ifp->if_flags & IFF_POINTOPOINT) {
1565 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
1583 ifaof_ifpforaddr(const struct sockaddr *addr, struct ifnet *ifp)
1593 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
1598 if (ifa->ifa_netmask == 0 || ifp->if_flags & IFF_POINTOPOINT) {
1618 if_rtrequest_dummy(struct ifnet *ifp, int req, struct rtentry *rt)
1627 p2p_rtrequest(struct ifnet *ifp, int req, struct rtentry *rt)
1637 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
1648 lo0ifp = if_get(rtable_loindex(ifp->if_rdomain));
1680 p2p_input(struct ifnet *ifp, struct mbuf *m)
1703 (*input)(ifp, m);
1713 struct ifnet *ifp;
1716 TAILQ_FOREACH(ifp, &ifnetlist, if_list) {
1717 if ((ifp->if_flags & IFF_UP) == 0)
1719 if_down(ifp);
1720 ifrq.ifr_flags = ifp->if_flags;
1721 (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifrq);
1731 if_down(struct ifnet *ifp)
1735 ifp->if_flags &= ~IFF_UP;
1736 getmicrotime(&ifp->if_lastchange);
1737 ifq_purge(&ifp->if_snd);
1739 if_linkstate(ifp);
1747 if_up(struct ifnet *ifp)
1751 ifp->if_flags |= IFF_UP;
1752 getmicrotime(&ifp->if_lastchange);
1756 if (ifp->if_index == rtable_loindex(ifp->if_rdomain))
1757 in6_ifattach(ifp);
1760 if_linkstate(ifp);
1771 struct ifnet *ifp;
1776 ifp = if_get(ifidx);
1777 if (ifp != NULL)
1778 if_linkstate(ifp);
1779 if_put(ifp);
1786 if_linkstate(struct ifnet *ifp)
1791 rtm_ifchg(ifp);
1792 rt_if_track(ifp);
1795 if_hooks_run(&ifp->if_linkstatehooks);
1799 if_linkstatehook_add(struct ifnet *ifp, struct task *t)
1802 TAILQ_INSERT_HEAD(&ifp->if_linkstatehooks, t, t_entry);
1807 if_linkstatehook_del(struct ifnet *ifp, struct task *t)
1810 TAILQ_REMOVE(&ifp->if_linkstatehooks, t, t_entry);
1818 if_link_state_change(struct ifnet *ifp)
1820 task_add(net_tq(ifp->if_index), &ifp->if_linkstatetask);
1831 struct ifnet *ifp = arg;
1834 if (ifp->if_watchdog) {
1835 if (ifp->if_timer > 0 && --ifp->if_timer == 0)
1836 task_add(net_tq(ifp->if_index), &ifp->if_watchdogtask);
1837 timeout_add_sec(&ifp->if_slowtimo, IFNET_SLOWTIMO);
1846 struct ifnet *ifp;
1849 ifp = if_get(ifidx);
1850 if (ifp == NULL)
1855 if (ifp->if_watchdog)
1856 (*ifp->if_watchdog)(ifp);
1860 if_put(ifp);
1869 struct ifnet *ifp;
1873 TAILQ_FOREACH(ifp, &ifnetlist, if_list) {
1874 if (strcmp(ifp->if_xname, name) == 0) {
1875 if_ref(ifp);
1876 return (ifp);
1890 struct ifnet *ifp = NULL;
1898 ifp = SMR_PTR_GET(&if_map[index]);
1899 if (ifp != NULL) {
1900 KASSERT(ifp->if_index == index);
1901 if_ref(ifp);
1906 return (ifp);
1910 if_ref(struct ifnet *ifp)
1912 refcnt_take(&ifp->if_refcnt);
1914 return (ifp);
1918 if_put(struct ifnet *ifp)
1920 if (ifp == NULL)
1923 refcnt_rele_wake(&ifp->if_refcnt);
1927 if_setlladdr(struct ifnet *ifp, const uint8_t *lladdr)
1929 if (ifp->if_sadl == NULL)
1932 memcpy(((struct arpcom *)ifp)->ac_enaddr, lladdr, ETHER_ADDR_LEN);
1933 memcpy(LLADDR(ifp->if_sadl), lladdr, ETHER_ADDR_LEN);
1939 if_createrdomain(int rdomain, struct ifnet *ifp)
1956 if (error && (ifp != loifp || error != EEXIST)) {
1969 if_setrdomain(struct ifnet *ifp, int rdomain)
1977 if (rdomain != ifp->if_rdomain &&
1978 (ifp->if_flags & IFF_LOOPBACK) &&
1979 (ifp->if_index == rtable_loindex(ifp->if_rdomain)))
1989 if (rdomain != ifp->if_rdomain) {
1997 if (ifp->if_flags & IFF_UP) {
1999 if_down(ifp);
2001 rti_delete(ifp);
2003 vif_delete(ifp);
2005 in_ifdetach(ifp);
2007 in6_ifdetach(ifp);
2014 if ((error = (*ifp->if_ioctl)(ifp, SIOCSIFRDOMAIN,
2020 ifp->if_rdomain = rdomain;
2025 if_up(ifp);
2038 struct ifnet *ifp;
2095 ifp = if_unit(ifr->ifr_name);
2096 if (ifp == NULL) {
2100 oif_flags = ifp->if_flags;
2101 oif_xflags = ifp->if_xflags;
2113 in_ifdetach(ifp);
2118 error = in6_ifattach(ifp);
2120 in6_ifdetach(ifp);
2137 !ISSET(ifp->if_xflags, IFXF_AUTOCONF6) &&
2138 !ISSET(ifp->if_xflags, IFXF_AUTOCONF6TEMP)) {
2139 error = in6_ifattach(ifp);
2147 !ISSET(ifp->if_xflags, IFXF_INET6_NOSOII))
2148 ifp->if_xflags |= IFXF_INET6_NOSOII;
2151 ISSET(ifp->if_xflags, IFXF_INET6_NOSOII))
2152 ifp->if_xflags &= ~IFXF_INET6_NOSOII;
2158 !ISSET(ifp->if_xflags, IFXF_MPLS)) {
2160 ifp->if_xflags |= IFXF_MPLS;
2161 ifp->if_ll_output = ifp->if_output;
2162 ifp->if_output = mpls_output;
2165 if (ISSET(ifp->if_xflags, IFXF_MPLS) &&
2168 ifp->if_xflags &= ~IFXF_MPLS;
2169 ifp->if_output = ifp->if_ll_output;
2170 ifp->if_ll_output = NULL;
2176 if (ifp->if_capabilities & IFCAP_WOL) {
2178 !ISSET(ifp->if_xflags, IFXF_WOL)) {
2180 ifp->if_xflags |= IFXF_WOL;
2181 error = ifp->if_wol(ifp, 1);
2184 if (ISSET(ifp->if_xflags, IFXF_WOL) &&
2187 ifp->if_xflags &= ~IFXF_WOL;
2188 error = ifp->if_wol(ifp, 0);
2197 ISSET(ifp->if_xflags, IFXF_LRO))
2198 error = ifsetlro(ifp, ISSET(ifr->ifr_flags, IFXF_LRO));
2201 ifp->if_xflags = (ifp->if_xflags & IFXF_CANTCHANGE) |
2204 if (!ISSET(ifp->if_flags, IFF_UP) &&
2206 ISSET(ifp->if_xflags, IFXF_AUTOCONF4)) ||
2208 ISSET(ifp->if_xflags, IFXF_AUTOCONF6)) ||
2210 ISSET(ifp->if_xflags, IFXF_AUTOCONF6TEMP)))) {
2211 ifr->ifr_flags = ifp->if_flags | IFF_UP;
2224 ifp->if_flags = (ifp->if_flags & IFF_CANTCHANGE) |
2226 error = (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, data);
2228 ifp->if_flags = oif_flags;
2230 ifp->if_xflags = oif_xflags;
2231 } else if (ISSET(oif_flags ^ ifp->if_flags, IFF_UP)) {
2233 if (ISSET(ifp->if_flags, IFF_UP))
2234 if_up(ifp);
2236 if_down(ifp);
2246 ifp->if_metric = ifr->ifr_metric;
2254 error = (*ifp->if_ioctl)(ifp, cmd, data);
2257 rtm_ifchg(ifp);
2266 (void)memset(ifp->if_description, 0, IFDESCRSIZE);
2267 strlcpy(ifp->if_description, ifdescrbuf, IFDESCRSIZE);
2277 rtlabel_unref(ifp->if_rtlabelid);
2278 ifp->if_rtlabelid = rtlabel_name2id(ifrtlabelbuf);
2289 ifp->if_priority = ifr->ifr_metric;
2295 error = if_createrdomain(ifr->ifr_rdomainid, ifp);
2298 error = if_setrdomain(ifp, ifr->ifr_rdomainid);
2307 error = if_addgroup(ifp, ifgr->ifgr_group);
2309 error = (*ifp->if_ioctl)(ifp, cmd, data);
2320 error = (*ifp->if_ioctl)(ifp, cmd, data);
2324 error = if_delgroup(ifp, ifgr->ifgr_group);
2331 if ((ifp->if_sadl == NULL) ||
2338 switch (ifp->if_type) {
2343 error = (*ifp->if_ioctl)(ifp, cmd, data);
2347 error = if_setlladdr(ifp,
2355 ifnewlladdr(ifp);
2358 rtm_ifchg(ifp);
2370 ifp->if_llprio = ifr->ifr_llprio;
2384 error = ((*ifp->if_ioctl)(ifp, cmd, data));
2393 error = ((*ifp->if_ioctl)(ifp, cmd, data));
2448 error = pru_control(so, cmd, data, ifp);
2471 error = ((*ifp->if_ioctl)(ifp, cmd, data));
2476 if (oif_flags != ifp->if_flags || oif_xflags != ifp->if_xflags) {
2478 if (((oif_flags ^ ifp->if_flags) & IFF_UP) == 0)
2479 rtm_ifchg(ifp);
2482 if (((oif_flags ^ ifp->if_flags) & IFF_UP) != 0)
2483 getmicrotime(&ifp->if_lastchange);
2487 if_put(ifp);
2495 struct ifnet *ifp;
2523 ifp = if_unit(ifr->ifr_name);
2526 if (ifp == NULL)
2531 ifr->ifr_flags = ifp->if_flags;
2532 if (ifq_is_oactive(&ifp->if_snd))
2537 ifr->ifr_flags = ifp->if_xflags & ~(IFXF_MPSAFE|IFXF_CLONED);
2541 ifr->ifr_metric = ifp->if_metric;
2545 ifr->ifr_mtu = ifp->if_mtu;
2549 ifr->ifr_hardmtu = ifp->if_hardmtu;
2557 if_getdata(ifp, &ifdata);
2568 strlcpy(ifdescrbuf, ifp->if_description, IFDESCRSIZE);
2577 u_short rtlabelid = READ_ONCE(ifp->if_rtlabelid);
2588 ifr->ifr_metric = ifp->if_priority;
2592 ifr->ifr_rdomainid = ifp->if_rdomain;
2596 error = if_getgroup(data, ifp);
2600 ifr->ifr_llprio = ifp->if_llprio;
2607 if_put(ifp);
2702 struct ifnet *ifp;
2709 TAILQ_FOREACH(ifp, &ifnetlist, if_list) {
2712 if (TAILQ_EMPTY(&ifp->if_addrlist))
2716 &ifp->if_addrlist, ifa_list) {
2729 TAILQ_FOREACH(ifp, &ifnetlist, if_list) {
2732 bcopy(ifp->if_xname, ifr.ifr_name, IFNAMSIZ);
2733 if (TAILQ_EMPTY(&ifp->if_addrlist)) {
2741 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
2775 if_counters_alloc(struct ifnet *ifp)
2777 KASSERT(ifp->if_counters == NULL);
2779 ifp->if_counters = counters_alloc(ifc_ncounters);
2783 if_counters_free(struct ifnet *ifp)
2785 KASSERT(ifp->if_counters != NULL);
2787 counters_free(ifp->if_counters, ifc_ncounters);
2788 ifp->if_counters = NULL;
2792 if_getdata(struct ifnet *ifp, struct if_data *data)
2796 data->ifi_type = ifp->if_type;
2797 data->ifi_addrlen = ifp->if_addrlen;
2798 data->ifi_hdrlen = ifp->if_hdrlen;
2799 data->ifi_link_state = ifp->if_link_state;
2800 data->ifi_mtu = ifp->if_mtu;
2801 data->ifi_metric = ifp->if_metric;
2802 data->ifi_baudrate = ifp->if_baudrate;
2803 data->ifi_capabilities = ifp->if_capabilities;
2804 data->ifi_rdomain = ifp->if_rdomain;
2805 data->ifi_lastchange = ifp->if_lastchange;
2807 data->ifi_ipackets = ifp->if_data_counters[ifc_ipackets];
2808 data->ifi_ierrors = ifp->if_data_counters[ifc_ierrors];
2809 data->ifi_opackets = ifp->if_data_counters[ifc_opackets];
2810 data->ifi_oerrors = ifp->if_data_counters[ifc_oerrors];
2811 data->ifi_collisions = ifp->if_data_counters[ifc_collisions];
2812 data->ifi_ibytes = ifp->if_data_counters[ifc_ibytes];
2813 data->ifi_obytes = ifp->if_data_counters[ifc_obytes];
2814 data->ifi_imcasts = ifp->if_data_counters[ifc_imcasts];
2815 data->ifi_omcasts = ifp->if_data_counters[ifc_omcasts];
2816 data->ifi_iqdrops = ifp->if_data_counters[ifc_iqdrops];
2817 data->ifi_oqdrops = ifp->if_data_counters[ifc_oqdrops];
2818 data->ifi_noproto = ifp->if_data_counters[ifc_noproto];
2820 if (ifp->if_counters != NULL) {
2823 counters_read(ifp->if_counters, counters, nitems(counters),
2840 for (i = 0; i < ifp->if_nifqs; i++) {
2841 struct ifqueue *ifq = ifp->if_ifqs[i];
2846 for (i = 0; i < ifp->if_niqs; i++) {
2847 struct ifiqueue *ifiq = ifp->if_iqs[i];
2864 if_detached_ioctl(struct ifnet *ifp, u_long a, caddr_t b)
2910 if_addgroup(struct ifnet *ifp, const char *groupname)
2922 TAILQ_FOREACH(ifgl, &ifp->if_groups, ifgl_next)
2950 ifgm->ifgm_ifp = ifp;
2953 TAILQ_INSERT_TAIL(&ifp->if_groups, ifgl, ifgl_next);
2966 if_delgroup(struct ifnet *ifp, const char *groupname)
2971 TAILQ_FOREACH(ifgl, &ifp->if_groups, ifgl_next)
2977 TAILQ_REMOVE(&ifp->if_groups, ifgl, ifgl_next);
2980 if (ifgm->ifgm_ifp == ifp)
3011 if_getgroup(caddr_t data, struct ifnet *ifp)
3023 TAILQ_FOREACH(ifgl, &ifp->if_groups, ifgl_next)
3035 TAILQ_FOREACH(ifgl, &ifp->if_groups, ifgl_next) {
3074 struct ifnet *ifp;
3107 TAILQ_FOREACH (ifp, &if_tmplist, if_tmplist) {
3113 strlcpy(ifgrq.ifgrq_member, ifp->if_xname,
3122 while ((ifp = TAILQ_FIRST(&if_tmplist))) {
3123 TAILQ_REMOVE(&if_tmplist, ifp, if_tmplist);
3124 if_put(ifp);
3264 struct ifnet *ifp;
3286 ifp = if_get(rt->rt_ifidx);
3287 if (ifp != NULL) {
3288 if_addgroup(ifp, IFG_EGRESS);
3289 if_put(ifp);
3299 ifp = if_get(rt->rt_ifidx);
3300 if (ifp != NULL) {
3301 if_addgroup(ifp, IFG_EGRESS);
3302 if_put(ifp);
3312 * Set/clear promiscuous mode on interface ifp based on the truth value
3318 ifpromisc(struct ifnet *ifp, int pswitch)
3326 oif_flags = ifp->if_flags;
3327 oif_pcount = ifp->if_pcount;
3329 if (ifp->if_pcount++ != 0)
3331 ifp->if_flags |= IFF_PROMISC;
3333 if (--ifp->if_pcount > 0)
3335 ifp->if_flags &= ~IFF_PROMISC;
3338 if ((ifp->if_flags & IFF_UP) == 0)
3342 ifr.ifr_flags = ifp->if_flags;
3343 error = ((*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr));
3345 ifp->if_flags = oif_flags;
3346 ifp->if_pcount = oif_pcount;
3354 ifsetlro(struct ifnet *ifp, int on)
3362 if ((*ifp->if_ioctl)(ifp, SIOCGIFPARENT, (caddr_t)&parent) != -1) {
3371 if (!ISSET(ifp->if_capabilities, IFCAP_LRO)) {
3379 if (on && !ISSET(ifp->if_xflags, IFXF_LRO)) {
3380 if (ifp->if_type == IFT_ETHER && ether_brport_isset(ifp)) {
3384 SET(ifp->if_xflags, IFXF_LRO);
3385 } else if (!on && ISSET(ifp->if_xflags, IFXF_LRO))
3386 CLR(ifp->if_xflags, IFXF_LRO);
3391 if (ISSET(ifp->if_flags, IFF_UP)) {
3393 CLR(ifp->if_flags, IFF_UP);
3394 ifrq.ifr_flags = ifp->if_flags;
3395 (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifrq);
3398 SET(ifp->if_flags, IFF_UP);
3399 ifrq.ifr_flags = ifp->if_flags;
3400 (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifrq);
3409 ifa_add(struct ifnet *ifp, struct ifaddr *ifa)
3412 TAILQ_INSERT_TAIL(&ifp->if_addrlist, ifa, ifa_list);
3416 ifa_del(struct ifnet *ifp, struct ifaddr *ifa)
3419 TAILQ_REMOVE(&ifp->if_addrlist, ifa, ifa_list);
3423 ifa_update_broadaddr(struct ifnet *ifp, struct ifaddr *ifa, struct sockaddr *sa)
3435 struct ifnet *ifp;
3438 TAILQ_FOREACH(ifp, &ifnetlist, if_list) {
3439 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
3456 printf(" on %s\n", ifp->if_xname);
3463 ifnewlladdr(struct ifnet *ifp)
3475 up = ifp->if_flags & IFF_UP;
3479 ifp->if_flags &= ~IFF_UP;
3480 ifrq.ifr_flags = ifp->if_flags;
3481 (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifrq);
3484 ifp->if_flags |= IFF_UP;
3485 ifrq.ifr_flags = ifp->if_flags;
3486 (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifrq);
3494 ifa = &in6ifa_ifpforlinklocal(ifp, 0)->ia_ifa;
3497 if_hooks_run(&ifp->if_addrhooks);
3498 in6_ifattach(ifp);
3504 ifp->if_flags &= ~IFF_UP;
3505 ifrq.ifr_flags = ifp->if_flags;
3506 (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifrq);
3511 if_addrhook_add(struct ifnet *ifp, struct task *t)
3514 TAILQ_INSERT_TAIL(&ifp->if_addrhooks, t, t_entry);
3519 if_addrhook_del(struct ifnet *ifp, struct task *t)
3522 TAILQ_REMOVE(&ifp->if_addrhooks, t, t_entry);
3527 if_addrhooks_run(struct ifnet *ifp)
3529 if_hooks_run(&ifp->if_addrhooks);