Lines Matching refs:ill

148 static void	ipsq_flush(ill_t *ill);
154 static ipif_t *ipif_allocate(ill_t *ill, int id, uint_t ire_type,
167 static int ipif_set_values_tail(ill_t *ill, ipif_t *ipif, mblk_t *mp,
178 static int ill_dl_up(ill_t *ill, ipif_t *ipif, mblk_t *mp, queue_t *q);
179 static void ill_dl_down(ill_t *ill);
180 static void ill_down(ill_t *ill);
182 static void ill_free_mib(ill_t *ill);
184 static void ill_phyint_reinit(ill_t *ill);
227 static void ill_dlpi_clear_deferred(ill_t *ill);
310 ill_allocate_mibs(ill_t *ill) in ill_allocate_mibs() argument
313 if (ill->ill_ip_mib != NULL) { in ill_allocate_mibs()
314 if (ill->ill_isv6) in ill_allocate_mibs()
315 ASSERT(ill->ill_icmp6_mib != NULL); in ill_allocate_mibs()
319 ill->ill_ip_mib = kmem_zalloc(sizeof (*ill->ill_ip_mib), in ill_allocate_mibs()
321 if (ill->ill_ip_mib == NULL) { in ill_allocate_mibs()
326 SET_MIB(ill->ill_ip_mib->ipIfStatsEntrySize, in ill_allocate_mibs()
328 if (ill->ill_isv6) { in ill_allocate_mibs()
329 ill->ill_ip_mib->ipIfStatsIPVersion = MIB2_INETADDRESSTYPE_ipv6; in ill_allocate_mibs()
330 SET_MIB(ill->ill_ip_mib->ipIfStatsAddrEntrySize, in ill_allocate_mibs()
332 SET_MIB(ill->ill_ip_mib->ipIfStatsRouteEntrySize, in ill_allocate_mibs()
334 SET_MIB(ill->ill_ip_mib->ipIfStatsNetToMediaEntrySize, in ill_allocate_mibs()
336 SET_MIB(ill->ill_ip_mib->ipIfStatsMemberEntrySize, in ill_allocate_mibs()
338 SET_MIB(ill->ill_ip_mib->ipIfStatsGroupSourceEntrySize, in ill_allocate_mibs()
341 ill->ill_ip_mib->ipIfStatsIPVersion = MIB2_INETADDRESSTYPE_ipv4; in ill_allocate_mibs()
342 SET_MIB(ill->ill_ip_mib->ipIfStatsAddrEntrySize, in ill_allocate_mibs()
344 SET_MIB(ill->ill_ip_mib->ipIfStatsRouteEntrySize, in ill_allocate_mibs()
346 SET_MIB(ill->ill_ip_mib->ipIfStatsNetToMediaEntrySize, in ill_allocate_mibs()
348 SET_MIB(ill->ill_ip_mib->ipIfStatsMemberEntrySize, in ill_allocate_mibs()
350 SET_MIB(ill->ill_ip_mib->ipIfStatsGroupSourceEntrySize, in ill_allocate_mibs()
360 ill->ill_icmp6_mib = kmem_zalloc(sizeof (*ill->ill_icmp6_mib), in ill_allocate_mibs()
362 if (ill->ill_icmp6_mib == NULL) { in ill_allocate_mibs()
363 kmem_free(ill->ill_ip_mib, sizeof (*ill->ill_ip_mib)); in ill_allocate_mibs()
364 ill->ill_ip_mib = NULL; in ill_allocate_mibs()
368 ill->ill_icmp6_mib->ipv6IfIcmpEntrySize = in ill_allocate_mibs()
384 ill_delete(ill_t *ill) in ill_delete() argument
388 ip_stack_t *ipst = ill->ill_ipst; in ill_delete()
397 ipsq_flush(ill); in ill_delete()
412 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) in ill_delete()
419 nce_flush(ill, B_TRUE); in ill_delete()
422 reset_mrt_ill(ill); in ill_delete()
424 update_conn_ill(ill, ipst); in ill_delete()
430 ip_purge_allmulti(ill); in ill_delete()
435 if (IS_UNDER_IPMP(ill)) in ill_delete()
436 ipmp_ill_leave_illgrp(ill); in ill_delete()
442 ill_down(ill); in ill_delete()
445 sctp_update_ill(ill, SCTP_ILL_REMOVE); in ill_delete()
454 if (ill->ill_isv6) in ill_delete()
455 dce_cleanup(ill->ill_phyint->phyint_ifindex, ipst); in ill_delete()
462 if (ill->ill_usesrc_grp_next != NULL) { in ill_delete()
463 if (ill->ill_usesrc_ifindex == 0) { /* usesrc ILL ? */ in ill_delete()
464 ill_disband_usesrc_group(ill); in ill_delete()
466 prev_ill = ill_prev_usesrc(ill); in ill_delete()
468 ill->ill_usesrc_grp_next; in ill_delete()
477 ill_t *ill = ipif->ipif_ill; in ipif_non_duplicate() local
478 mutex_enter(&ill->ill_lock); in ipif_non_duplicate()
481 ASSERT(ill->ill_ipif_dup_count > 0); in ipif_non_duplicate()
482 ill->ill_ipif_dup_count--; in ipif_non_duplicate()
484 mutex_exit(&ill->ill_lock); in ipif_non_duplicate()
492 ill_delete_tail(ill_t *ill) in ill_delete_tail() argument
496 ip_stack_t *ipst = ill->ill_ipst; in ill_delete_tail()
498 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ill_delete_tail()
503 ASSERT(ill->ill_ipif_dup_count == 0); in ill_delete_tail()
512 mutex_enter(&ill->ill_lock); in ill_delete_tail()
513 while (ill->ill_state_flags & ILL_DL_UNBIND_IN_PROGRESS) in ill_delete_tail()
514 cv_wait(&ill->ill_cv, &ill->ill_lock); in ill_delete_tail()
515 mutex_exit(&ill->ill_lock); in ill_delete_tail()
516 ASSERT(!(ill->ill_capabilities & in ill_delete_tail()
519 if (ill->ill_net_type != IRE_LOOPBACK) in ill_delete_tail()
520 qprocsoff(ill->ill_rq); in ill_delete_tail()
529 ipsq_flush(ill); in ill_delete_tail()
534 if (ill->ill_hcksum_capab != NULL) { in ill_delete_tail()
535 kmem_free(ill->ill_hcksum_capab, sizeof (ill_hcksum_capab_t)); in ill_delete_tail()
536 ill->ill_hcksum_capab = NULL; in ill_delete_tail()
539 if (ill->ill_zerocopy_capab != NULL) { in ill_delete_tail()
540 kmem_free(ill->ill_zerocopy_capab, in ill_delete_tail()
542 ill->ill_zerocopy_capab = NULL; in ill_delete_tail()
545 if (ill->ill_lso_capab != NULL) { in ill_delete_tail()
546 kmem_free(ill->ill_lso_capab, sizeof (ill_lso_capab_t)); in ill_delete_tail()
547 ill->ill_lso_capab = NULL; in ill_delete_tail()
550 if (ill->ill_dld_capab != NULL) { in ill_delete_tail()
551 kmem_free(ill->ill_dld_capab, sizeof (ill_dld_capab_t)); in ill_delete_tail()
552 ill->ill_dld_capab = NULL; in ill_delete_tail()
556 if (ill->ill_allowed_ips != NULL) { in ill_delete_tail()
557 ASSERT(ill->ill_allowed_ips_cnt > 0); in ill_delete_tail()
558 kmem_free(ill->ill_allowed_ips, in ill_delete_tail()
559 ill->ill_allowed_ips_cnt * sizeof (in6_addr_t)); in ill_delete_tail()
560 ill->ill_allowed_ips = NULL; in ill_delete_tail()
561 ill->ill_allowed_ips_cnt = 0; in ill_delete_tail()
564 while (ill->ill_ipif != NULL) in ill_delete_tail()
565 ipif_free_tail(ill->ill_ipif); in ill_delete_tail()
583 if (IS_IPMP(ill)) { in ill_delete_tail()
584 ipmp_illgrp_destroy(ill->ill_grp); in ill_delete_tail()
585 ill->ill_grp = NULL; in ill_delete_tail()
588 if (ill->ill_mphysaddr_list != NULL) { in ill_delete_tail()
591 mpa = ill->ill_mphysaddr_list; in ill_delete_tail()
592 ill->ill_mphysaddr_list = NULL; in ill_delete_tail()
604 (void) ill_glist_delete(ill); in ill_delete_tail()
606 if (ill->ill_frag_ptr != NULL) { in ill_delete_tail()
610 mutex_destroy(&ill->ill_frag_hash_tbl[count].ipfb_lock); in ill_delete_tail()
612 mi_free(ill->ill_frag_ptr); in ill_delete_tail()
613 ill->ill_frag_ptr = NULL; in ill_delete_tail()
614 ill->ill_frag_hash_tbl = NULL; in ill_delete_tail()
617 freemsg(ill->ill_nd_lla_mp); in ill_delete_tail()
619 mpp = &ill->ill_first_mp_to_free; in ill_delete_tail()
633 } while (mpp++ != &ill->ill_last_mp_to_free); in ill_delete_tail()
635 ill_free_mib(ill); in ill_delete_tail()
638 ill_trace_cleanup(ill); in ill_delete_tail()
642 ire_increment_multicast_generation(ipst, ill->ill_isv6); in ill_delete_tail()
645 netstack_rele(ill->ill_ipst->ips_netstack); in ill_delete_tail()
646 ill->ill_ipst = NULL; in ill_delete_tail()
650 ill_free_mib(ill_t *ill) in ill_free_mib() argument
652 ip_stack_t *ipst = ill->ill_ipst; in ill_free_mib()
659 if (ill->ill_ip_mib != NULL) { in ill_free_mib()
660 if (ill->ill_isv6) { in ill_free_mib()
662 ill->ill_ip_mib); in ill_free_mib()
665 ill->ill_ip_mib); in ill_free_mib()
668 kmem_free(ill->ill_ip_mib, sizeof (*ill->ill_ip_mib)); in ill_free_mib()
669 ill->ill_ip_mib = NULL; in ill_free_mib()
671 if (ill->ill_icmp6_mib != NULL) { in ill_free_mib()
673 ill->ill_icmp6_mib); in ill_free_mib()
674 kmem_free(ill->ill_icmp6_mib, sizeof (*ill->ill_icmp6_mib)); in ill_free_mib()
675 ill->ill_icmp6_mib = NULL; in ill_free_mib()
859 ipsq_pending_mp_cleanup(ill_t *ill, conn_t *connp) in ipsq_pending_mp_cleanup() argument
867 ASSERT(IAM_WRITER_ILL(ill)); in ipsq_pending_mp_cleanup()
868 ipx = ill->ill_phyint->phyint_ipsq->ipsq_xop; in ipsq_pending_mp_cleanup()
890 if (mp == NULL && ill->ill_error == 0) { in ipsq_pending_mp_cleanup()
938 ipsq_xopq_mp_cleanup(ill_t *ill, conn_t *connp) in ipsq_xopq_mp_cleanup() argument
947 ASSERT(IAM_WRITER_ILL(ill)); in ipsq_xopq_mp_cleanup()
951 wq = ill->ill_wq; in ipsq_xopq_mp_cleanup()
960 ipsq = ill->ill_phyint->phyint_ipsq; in ipsq_xopq_mp_cleanup()
1026 ill_t *ill; in conn_ioctl_cleanup() local
1040 ill = connp->conn_oper_pending_ill; in conn_ioctl_cleanup()
1041 if (ill == NULL) { in conn_ioctl_cleanup()
1051 refheld = ill_waiter_inc(ill); in conn_ioctl_cleanup()
1054 if (ipsq_enter(ill, B_TRUE, NEW_OP)) { in conn_ioctl_cleanup()
1055 ill_waiter_dcr(ill); in conn_ioctl_cleanup()
1062 if (!ipsq_pending_mp_cleanup(ill, connp)) in conn_ioctl_cleanup()
1063 ipsq_xopq_mp_cleanup(ill, connp); in conn_ioctl_cleanup()
1064 ipsq = ill->ill_phyint->phyint_ipsq; in conn_ioctl_cleanup()
1080 ill_waiter_dcr(ill); in conn_ioctl_cleanup()
1093 ill_t *ill = (ill_t *)arg; in conn_cleanup_ill() local
1096 if (connp->conn_dhcpinit_ill == ill) { in conn_cleanup_ill()
1098 ASSERT(ill->ill_dhcpinit != 0); in conn_cleanup_ill()
1099 atomic_dec_32(&ill->ill_dhcpinit); in conn_cleanup_ill()
1100 ill_set_inputfn(ill); in conn_cleanup_ill()
1106 ill_down_ipifs_tail(ill_t *ill) in ill_down_ipifs_tail() argument
1111 ASSERT(IAM_WRITER_ILL(ill)); in ill_down_ipifs_tail()
1112 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ill_down_ipifs_tail()
1142 ill_t *ill = q->q_ptr; in ill_down_start() local
1145 ASSERT(IAM_WRITER_ILL(ill)); in ill_down_start()
1160 (void) ipsq_pending_mp_cleanup(ill, NULL); in ill_down_start()
1161 ill_dlpi_clear_deferred(ill); in ill_down_start()
1163 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) in ill_down_start()
1166 ill_down(ill); in ill_down_start()
1172 ipcl_walk(conn_ixa_cleanup, (void *)B_TRUE, ill->ill_ipst); in ill_down_start()
1175 if (ill->ill_isv6) in ill_down_start()
1176 dce_cleanup(ill->ill_phyint->phyint_ifindex, ill->ill_ipst); in ill_down_start()
1178 ipsq_current_start(ill->ill_phyint->phyint_ipsq, ill->ill_ipif, 0); in ill_down_start()
1183 mutex_enter(&ill->ill_lock); in ill_down_start()
1184 if (!ill_is_quiescent(ill)) { in ill_down_start()
1186 (void) ipsq_pending_mp_add(NULL, ill->ill_ipif, ill->ill_rq, in ill_down_start()
1188 mutex_exit(&ill->ill_lock); in ill_down_start()
1191 mutex_exit(&ill->ill_lock); in ill_down_start()
1196 ill_down(ill_t *ill) in ill_down() argument
1199 ip_stack_t *ipst = ill->ill_ipst; in ill_down()
1205 ill_delete_ires(ill); in ill_down()
1207 ire_walk_ill(0, 0, ill_downi, ill, ill); in ill_down()
1210 ipcl_walk(conn_cleanup_ill, (caddr_t)ill, ipst); in ill_down()
1215 mutex_enter(&ill->ill_saved_ire_lock); in ill_down()
1216 mp = ill->ill_saved_ire_mp; in ill_down()
1217 ill->ill_saved_ire_mp = NULL; in ill_down()
1218 ill->ill_saved_ire_cnt = 0; in ill_down()
1219 mutex_exit(&ill->ill_saved_ire_lock); in ill_down()
1235 ill_t *ill = (ill_t *)ill_arg; in ill_downi() local
1240 if (nce != NULL && nce->nce_ill == ill) in ill_downi()
1247 if (ire->ire_ill == ill) { in ill_downi()
1270 ill_t *ill = (ill_t *)ill_arg; in ill_downi_if_clone() local
1273 if (ire->ire_ill == ill) in ill_downi_if_clone()
1279 ill_fastpath_ack(ill_t *ill, mblk_t *mp) in ill_fastpath_ack() argument
1286 mutex_enter(&ill->ill_lock); in ill_fastpath_ack()
1287 if (ill->ill_dlpi_fastpath_state == IDS_INPROGRESS) in ill_fastpath_ack()
1288 ill->ill_dlpi_fastpath_state = IDS_OK; in ill_fastpath_ack()
1289 mutex_exit(&ill->ill_lock); in ill_fastpath_ack()
1297 nce_fastpath_update(ill, mp); in ill_fastpath_ack()
1309 ill_fastpath_probe(ill_t *ill, mblk_t *dlur_mp) in ill_fastpath_probe() argument
1317 mutex_enter(&ill->ill_lock); in ill_fastpath_probe()
1318 switch (ill->ill_dlpi_fastpath_state) { in ill_fastpath_probe()
1324 mutex_exit(&ill->ill_lock); in ill_fastpath_probe()
1328 ill->ill_dlpi_fastpath_state = IDS_INPROGRESS; in ill_fastpath_probe()
1333 mutex_exit(&ill->ill_lock); in ill_fastpath_probe()
1348 char *, "DL_IOC_HDR_INFO", ill_t *, ill); in ill_fastpath_probe()
1349 putnext(ill->ill_wq, mp); in ill_fastpath_probe()
1354 ill_capability_probe(ill_t *ill) in ill_capability_probe() argument
1358 ASSERT(IAM_WRITER_ILL(ill)); in ill_capability_probe()
1360 if (ill->ill_dlpi_capab_state != IDCS_UNKNOWN && in ill_capability_probe()
1361 ill->ill_dlpi_capab_state != IDCS_FAILED) in ill_capability_probe()
1369 if (ill->ill_capab_reset_mp != NULL) { in ill_capability_probe()
1370 freemsg(ill->ill_capab_reset_mp); in ill_capability_probe()
1371 ill->ill_capab_reset_mp = NULL; in ill_capability_probe()
1380 ill_capability_send(ill, mp); in ill_capability_probe()
1381 ill->ill_dlpi_capab_state = IDCS_PROBE_SENT; in ill_capability_probe()
1385 ill_capability_reset(ill_t *ill, boolean_t reneg) in ill_capability_reset() argument
1387 ASSERT(IAM_WRITER_ILL(ill)); in ill_capability_reset()
1389 if (ill->ill_dlpi_capab_state != IDCS_OK) in ill_capability_reset()
1392 ill->ill_dlpi_capab_state = reneg ? IDCS_RENEG : IDCS_RESET_SENT; in ill_capability_reset()
1394 ill_capability_send(ill, ill->ill_capab_reset_mp); in ill_capability_reset()
1395 ill->ill_capab_reset_mp = NULL; in ill_capability_reset()
1401 ill->ill_capabilities &= ~(ILL_CAPAB_HCKSUM | ILL_CAPAB_ZEROCOPY); in ill_capability_reset()
1405 ill_capability_reset_alloc(ill_t *ill) in ill_capability_reset_alloc() argument
1412 ASSERT(IAM_WRITER_ILL(ill)); in ill_capability_reset_alloc()
1413 ASSERT(ill->ill_capab_reset_mp == NULL); in ill_capability_reset_alloc()
1415 if (ILL_HCKSUM_CAPABLE(ill)) { in ill_capability_reset_alloc()
1420 if (ill->ill_capabilities & ILL_CAPAB_ZEROCOPY) { in ill_capability_reset_alloc()
1425 if (ill->ill_capabilities & ILL_CAPAB_DLD) { in ill_capability_reset_alloc()
1447 ill_capability_hcksum_reset_fill(ill, mp); in ill_capability_reset_alloc()
1448 ill_capability_zerocopy_reset_fill(ill, mp); in ill_capability_reset_alloc()
1449 ill_capability_dld_reset_fill(ill, mp); in ill_capability_reset_alloc()
1451 ill->ill_capab_reset_mp = mp; in ill_capability_reset_alloc()
1455 ill_capability_id_ack(ill_t *ill, mblk_t *mp, dl_capability_sub_t *outers) in ill_capability_id_ack() argument
1490 if (!dlcapabcheckqid(&id_ic->id_mid, ill->ill_lmod_rq)) { in ill_capability_id_ack()
1498 ill_capability_dispatch(ill, mp, inners); in ill_capability_id_ack()
1502 ill_capability_dld_reset_fill(ill_t *ill, mblk_t *mp) in ill_capability_dld_reset_fill() argument
1506 if (!(ill->ill_capabilities & ILL_CAPAB_DLD)) in ill_capability_dld_reset_fill()
1521 ill_capability_dispatch(ill_t *ill, mblk_t *mp, dl_capability_sub_t *subp) in ill_capability_dispatch() argument
1531 if (!ill->ill_dl_up) { in ill_capability_dispatch()
1533 ill_capability_vrrp_ack(ill, mp, subp); in ill_capability_dispatch()
1539 ill_capability_hcksum_ack(ill, mp, subp); in ill_capability_dispatch()
1542 ill_capability_zerocopy_ack(ill, mp, subp); in ill_capability_dispatch()
1545 ill_capability_dld_ack(ill, mp, subp); in ill_capability_dispatch()
1560 ill_capability_vrrp_ack(ill_t *ill, mblk_t *mp, dl_capability_sub_t *isub) in ill_capability_vrrp_ack() argument
1566 ASSERT(IAM_WRITER_ILL(ill)); in ill_capability_vrrp_ack()
1587 if ((vrrp->vrrp_af == AF_INET6 && ill->ill_isv6) || in ill_capability_vrrp_ack()
1588 (vrrp->vrrp_af == AF_INET && !ill->ill_isv6)) { in ill_capability_vrrp_ack()
1589 ill->ill_flags |= ILLF_VRRP; in ill_capability_vrrp_ack()
1599 ill_capability_hcksum_ack(ill_t *ill, mblk_t *mp, dl_capability_sub_t *isub) in ill_capability_hcksum_ack() argument
1610 ill_hcksum = (ill_hcksum_capab_t **)&ill->ill_hcksum_capab; in ill_capability_hcksum_ack()
1643 if (!dlcapabcheckqid(&ihck->hcksum_mid, ill->ill_lmod_rq)) { in ill_capability_hcksum_ack()
1665 ill->ill_name); in ill_capability_hcksum_ack()
1672 ill->ill_capabilities |= ILL_CAPAB_HCKSUM; in ill_capability_hcksum_ack()
1675 ill->ill_name)); in ill_capability_hcksum_ack()
1695 ill->ill_name); in ill_capability_hcksum_ack()
1728 ill_capability_send(ill, nmp); in ill_capability_hcksum_ack()
1732 ill->ill_name, ihck->hcksum_txflags)); in ill_capability_hcksum_ack()
1737 ill_capability_hcksum_reset_fill(ill_t *ill, mblk_t *mp) in ill_capability_hcksum_reset_fill() argument
1742 if (!ILL_HCKSUM_CAPABLE(ill)) in ill_capability_hcksum_reset_fill()
1745 ASSERT(ill->ill_hcksum_capab != NULL); in ill_capability_hcksum_reset_fill()
1752 hck_subcap->hcksum_version = ill->ill_hcksum_capab->ill_hcksum_version; in ill_capability_hcksum_reset_fill()
1759 ill_capability_zerocopy_ack(ill_t *ill, mblk_t *mp, dl_capability_sub_t *isub) in ill_capability_zerocopy_ack() argument
1770 ill_zerocopy_capab = (ill_zerocopy_capab_t **)&ill->ill_zerocopy_capab; in ill_capability_zerocopy_ack()
1795 if (!dlcapabcheckqid(&zc_ic->zerocopy_mid, ill->ill_lmod_rq)) { in ill_capability_zerocopy_ack()
1812 ill->ill_name); in ill_capability_zerocopy_ack()
1818 "supports Zero-copy version %d\n", ill->ill_name, in ill_capability_zerocopy_ack()
1826 ill->ill_capabilities |= ILL_CAPAB_ZEROCOPY; in ill_capability_zerocopy_ack()
1838 ill->ill_name); in ill_capability_zerocopy_ack()
1859 "to enable zero-copy version %d\n", ill->ill_name, in ill_capability_zerocopy_ack()
1866 ill_capability_send(ill, nmp); in ill_capability_zerocopy_ack()
1871 ill_capability_zerocopy_reset_fill(ill_t *ill, mblk_t *mp) in ill_capability_zerocopy_reset_fill() argument
1876 if (!(ill->ill_capabilities & ILL_CAPAB_ZEROCOPY)) in ill_capability_zerocopy_reset_fill()
1879 ASSERT(ill->ill_zerocopy_capab != NULL); in ill_capability_zerocopy_reset_fill()
1887 ill->ill_zerocopy_capab->ill_zerocopy_version; in ill_capability_zerocopy_reset_fill()
1899 ill_capability_dld_ack(ill_t *ill, mblk_t *mp, dl_capability_sub_t *isub) in ill_capability_dld_ack() argument
1906 ASSERT(IAM_WRITER_ILL(ill)); in ill_capability_dld_ack()
1930 if (!dlcapabcheckqid(&dld_ic->dld_mid, ill->ill_lmod_rq)) { in ill_capability_dld_ack()
1942 if ((idc = ill->ill_dld_capab) == NULL) { in ill_capability_dld_ack()
1948 ill->ill_name); in ill_capability_dld_ack()
1951 ill->ill_dld_capab = idc; in ill_capability_dld_ack()
1956 "supports DLD version %d\n", ill->ill_name, DLD_CURRENT_VERSION)); in ill_capability_dld_ack()
1958 ill_capability_dld_enable(ill); in ill_capability_dld_ack()
1976 ill_mac_perim_enter(ill_t *ill, mac_perim_handle_t *mphp) in ill_mac_perim_enter() argument
1978 ill_dld_capab_t *idc = ill->ill_dld_capab; in ill_mac_perim_enter()
1987 ill_mac_perim_exit(ill_t *ill, mac_perim_handle_t mph) in ill_mac_perim_exit() argument
1989 ill_dld_capab_t *idc = ill->ill_dld_capab; in ill_mac_perim_exit()
1998 ill_mac_perim_held(ill_t *ill) in ill_mac_perim_held() argument
2000 ill_dld_capab_t *idc = ill->ill_dld_capab; in ill_mac_perim_held()
2007 ill_capability_direct_enable(ill_t *ill) in ill_capability_direct_enable() argument
2009 ill_dld_capab_t *idc = ill->ill_dld_capab; in ill_capability_direct_enable()
2014 ASSERT(!ill->ill_isv6 && IAM_WRITER_ILL(ill)); in ill_capability_direct_enable()
2018 direct.di_rx_ch = ill; in ill_capability_direct_enable()
2035 ill->ill_flownotify_mh = idd->idd_tx_cb_df(idd->idd_tx_cb_dh, in ill_capability_direct_enable()
2036 ill_flow_enable, ill); in ill_capability_direct_enable()
2037 ill->ill_capabilities |= ILL_CAPAB_DLD_DIRECT; in ill_capability_direct_enable()
2038 DTRACE_PROBE1(direct_on, (ill_t *), ill); in ill_capability_direct_enable()
2042 DTRACE_PROBE2(direct_off, (ill_t *), ill, (int), rc); in ill_capability_direct_enable()
2047 ill_capability_poll_enable(ill_t *ill) in ill_capability_poll_enable() argument
2049 ill_dld_capab_t *idc = ill->ill_dld_capab; in ill_capability_poll_enable()
2053 ASSERT(!ill->ill_isv6 && IAM_WRITER_ILL(ill)); in ill_capability_poll_enable()
2061 poll.poll_ring_ch = ill; in ill_capability_poll_enable()
2065 ill->ill_capabilities |= ILL_CAPAB_DLD_POLL; in ill_capability_poll_enable()
2066 DTRACE_PROBE1(poll_on, (ill_t *), ill); in ill_capability_poll_enable()
2070 DTRACE_PROBE2(poll_off, (ill_t *), ill, (int), rc); in ill_capability_poll_enable()
2078 ill_capability_lso_enable(ill_t *ill) in ill_capability_lso_enable() argument
2080 ill_dld_capab_t *idc = ill->ill_dld_capab; in ill_capability_lso_enable()
2084 ASSERT(IAM_WRITER_ILL(ill)); in ill_capability_lso_enable()
2086 if (ill->ill_lso_capab == NULL) { in ill_capability_lso_enable()
2087 ill->ill_lso_capab = kmem_zalloc(sizeof (ill_lso_capab_t), in ill_capability_lso_enable()
2089 if (ill->ill_lso_capab == NULL) { in ill_capability_lso_enable()
2092 ill->ill_name); in ill_capability_lso_enable()
2100 ill->ill_lso_capab->ill_lso_flags = lso.lso_flags; in ill_capability_lso_enable()
2101 ill->ill_lso_capab->ill_lso_max_tcpv4 = lso.lso_max_tcpv4; in ill_capability_lso_enable()
2102 ill->ill_lso_capab->ill_lso_max_tcpv6 = lso.lso_max_tcpv6; in ill_capability_lso_enable()
2103 ill->ill_capabilities |= ILL_CAPAB_LSO; in ill_capability_lso_enable()
2105 "has enabled LSO\n ", ill->ill_name)); in ill_capability_lso_enable()
2107 kmem_free(ill->ill_lso_capab, sizeof (ill_lso_capab_t)); in ill_capability_lso_enable()
2108 ill->ill_lso_capab = NULL; in ill_capability_lso_enable()
2109 DTRACE_PROBE2(lso_off, (ill_t *), ill, (int), rc); in ill_capability_lso_enable()
2114 ill_capability_dld_enable(ill_t *ill) in ill_capability_dld_enable() argument
2118 ASSERT(IAM_WRITER_ILL(ill)); in ill_capability_dld_enable()
2120 ill_mac_perim_enter(ill, &mph); in ill_capability_dld_enable()
2121 if (!ill->ill_isv6) { in ill_capability_dld_enable()
2122 ill_capability_direct_enable(ill); in ill_capability_dld_enable()
2123 ill_capability_poll_enable(ill); in ill_capability_dld_enable()
2125 ill_capability_lso_enable(ill); in ill_capability_dld_enable()
2126 ill->ill_capabilities |= ILL_CAPAB_DLD; in ill_capability_dld_enable()
2127 ill_mac_perim_exit(ill, mph); in ill_capability_dld_enable()
2131 ill_capability_dld_disable(ill_t *ill) in ill_capability_dld_disable() argument
2137 ASSERT(IAM_WRITER_ILL(ill)); in ill_capability_dld_disable()
2139 if (!(ill->ill_capabilities & ILL_CAPAB_DLD)) in ill_capability_dld_disable()
2142 ill_mac_perim_enter(ill, &mph); in ill_capability_dld_disable()
2144 idc = ill->ill_dld_capab; in ill_capability_dld_disable()
2145 if ((ill->ill_capabilities & ILL_CAPAB_DLD_DIRECT) != 0) { in ill_capability_dld_disable()
2156 mutex_enter(&ill->ill_lock); in ill_capability_dld_disable()
2157 ill->ill_capabilities &= ~ILL_CAPAB_DLD_DIRECT; in ill_capability_dld_disable()
2158 mutex_exit(&ill->ill_lock); in ill_capability_dld_disable()
2159 if (ill->ill_flownotify_mh != NULL) { in ill_capability_dld_disable()
2162 ill->ill_flownotify_mh); in ill_capability_dld_disable()
2163 ill->ill_flownotify_mh = NULL; in ill_capability_dld_disable()
2169 if ((ill->ill_capabilities & ILL_CAPAB_DLD_POLL) != 0) { in ill_capability_dld_disable()
2170 ill->ill_capabilities &= ~ILL_CAPAB_DLD_POLL; in ill_capability_dld_disable()
2171 ip_squeue_clean_all(ill); in ill_capability_dld_disable()
2176 if ((ill->ill_capabilities & ILL_CAPAB_LSO) != 0) { in ill_capability_dld_disable()
2177 ASSERT(ill->ill_lso_capab != NULL); in ill_capability_dld_disable()
2185 ill->ill_capabilities &= ~ILL_CAPAB_LSO; in ill_capability_dld_disable()
2190 ill->ill_capabilities &= ~ILL_CAPAB_DLD; in ill_capability_dld_disable()
2191 ill_mac_perim_exit(ill, mph); in ill_capability_dld_disable()
2276 ill_t *ill; in ill_capability_ack_thr() local
2279 ill = (ill_t *)mp->b_prev; in ill_capability_ack_thr()
2282 VERIFY(ipsq_enter(ill, B_FALSE, CUR_OP) == B_TRUE); in ill_capability_ack_thr()
2284 if (ill->ill_dlpi_capab_state == IDCS_RESET_SENT || in ill_capability_ack_thr()
2285 ill->ill_dlpi_capab_state == IDCS_RENEG) { in ill_capability_ack_thr()
2292 reneg = ill->ill_dlpi_capab_state == IDCS_RENEG; in ill_capability_ack_thr()
2293 ill_capability_dld_disable(ill); in ill_capability_ack_thr()
2294 ill->ill_dlpi_capab_state = IDCS_UNKNOWN; in ill_capability_ack_thr()
2296 ill_capability_probe(ill); in ill_capability_ack_thr()
2300 if (ill->ill_dlpi_capab_state == IDCS_PROBE_SENT) in ill_capability_ack_thr()
2301 ill->ill_dlpi_capab_state = IDCS_OK; in ill_capability_ack_thr()
2329 ill_capability_id_ack(ill, mp, subp); in ill_capability_ack_thr()
2332 ill_capability_dispatch(ill, mp, subp); in ill_capability_ack_thr()
2339 ill_capability_done(ill); in ill_capability_ack_thr()
2340 ipsq_exit(ill->ill_phyint->phyint_ipsq); in ill_capability_ack_thr()
2348 ill_capability_ack(ill_t *ill, mblk_t *mp) in ill_capability_ack() argument
2350 ip_stack_t *ipst = ill->ill_ipst; in ill_capability_ack()
2352 mp->b_prev = (mblk_t *)ill; in ill_capability_ack()
2395 ill_frag_timeout(ill_t *ill, time_t dead_interval) in ill_frag_timeout() argument
2407 ip_stack_t *ipst = ill->ill_ipst; in ill_frag_timeout()
2412 iras.ira_ill = iras.ira_rill = ill; in ill_frag_timeout()
2413 iras.ira_ruifindex = ill->ill_phyint->phyint_ifindex; in ill_frag_timeout()
2416 ipfb = ill->ill_frag_hash_tbl; in ill_frag_timeout()
2456 atomic_add_32(&ill->ill_frag_count, -ipf->ipf_count); in ill_frag_timeout()
2470 if (ill->ill_isv6) { in ill_frag_timeout()
2485 BUMP_MIB(ill->ill_ip_mib, ipIfStatsReasmFails); in ill_frag_timeout()
2486 ip_drop_input("ipIfStatsReasmFails", ipf->ipf_mp, ill); in ill_frag_timeout()
2509 ill, ipst); in ill_frag_timeout()
2510 ip_drop_input("ICMP_TIME_EXCEEDED reass", mp, ill); in ill_frag_timeout()
2532 ill, ipst); in ill_frag_timeout()
2533 ip_drop_input("ICMP_TIME_EXCEEDED reass", mp, ill); in ill_frag_timeout()
2551 ill_frag_prune(ill_t *ill, uint_t max_count) in ill_frag_prune() argument
2563 mutex_enter(&ill->ill_lock); in ill_frag_prune()
2565 if (TICK_TO_MSEC(now - ill->ill_last_frag_clean_time) <= in ill_frag_prune()
2569 ill->ill_frag_free_num_pkts++; in ill_frag_prune()
2572 ill->ill_frag_free_num_pkts = 0; in ill_frag_prune()
2574 ill->ill_last_frag_clean_time = now; in ill_frag_prune()
2575 mutex_exit(&ill->ill_lock); in ill_frag_prune()
2580 if (ill->ill_frag_free_num_pkts != 0) { in ill_frag_prune()
2584 ipfb = &ill->ill_frag_hash_tbl[ix]; in ill_frag_prune()
2587 ill_frag_free_pkts(ill, ipfb, ipfb->ipfb_ipf, in ill_frag_prune()
2588 ill->ill_frag_free_num_pkts); in ill_frag_prune()
2597 while (ill->ill_frag_count > max_count) { in ill_frag_prune()
2604 ipfb = &ill->ill_frag_hash_tbl[ix]; in ill_frag_prune()
2622 ill_frag_free_pkts(ill, oipfb, ipf, 1); in ill_frag_prune()
2632 ill_frag_free_pkts(ill_t *ill, ipfb_t *ipfb, ipf_t *ipf, int free_cnt) in ill_frag_free_pkts() argument
2651 atomic_add_32(&ill->ill_frag_count, -count); in ill_frag_free_pkts()
2656 BUMP_MIB(ill->ill_ip_mib, ipIfStatsReasmFails); in ill_frag_free_pkts()
2657 ip_drop_input("ipIfStatsReasmFails", mp, ill); in ill_frag_free_pkts()
2670 ill_forward_set_on_ill(ill_t *ill, boolean_t enable) in ill_forward_set_on_ill() argument
2672 ip_stack_t *ipst = ill->ill_ipst; in ill_forward_set_on_ill()
2674 ASSERT(IAM_WRITER_ILL(ill) || RW_READ_HELD(&ipst->ips_ill_g_lock)); in ill_forward_set_on_ill()
2678 (ill->ill_isv6 ? "IPv6" : "IPv4"), ill->ill_name)); in ill_forward_set_on_ill()
2679 mutex_enter(&ill->ill_lock); in ill_forward_set_on_ill()
2681 ill->ill_flags |= ILLF_ROUTER; in ill_forward_set_on_ill()
2683 ill->ill_flags &= ~ILLF_ROUTER; in ill_forward_set_on_ill()
2684 mutex_exit(&ill->ill_lock); in ill_forward_set_on_ill()
2685 if (ill->ill_isv6) in ill_forward_set_on_ill()
2686 ill_set_nce_router_flags(ill, enable); in ill_forward_set_on_ill()
2688 if (ill->ill_ipif != NULL) in ill_forward_set_on_ill()
2689 ip_rts_ifmsg(ill->ill_ipif, RTSQ_DEFAULT); in ill_forward_set_on_ill()
2697 ill_forward_set(ill_t *ill, boolean_t enable) in ill_forward_set() argument
2700 ip_stack_t *ipst = ill->ill_ipst; in ill_forward_set()
2702 ASSERT(IAM_WRITER_ILL(ill) || RW_READ_HELD(&ipst->ips_ill_g_lock)); in ill_forward_set()
2704 if ((enable && (ill->ill_flags & ILLF_ROUTER)) || in ill_forward_set()
2705 (!enable && !(ill->ill_flags & ILLF_ROUTER))) in ill_forward_set()
2708 if (IS_LOOPBACK(ill)) in ill_forward_set()
2711 if (enable && ill->ill_allowed_ips_cnt > 0) in ill_forward_set()
2714 if (IS_IPMP(ill) || IS_UNDER_IPMP(ill)) { in ill_forward_set()
2718 illg = ill->ill_grp; in ill_forward_set()
2719 ill = list_head(&illg->ig_if); in ill_forward_set()
2720 for (; ill != NULL; ill = list_next(&illg->ig_if, ill)) in ill_forward_set()
2721 ill_forward_set_on_ill(ill, enable); in ill_forward_set()
2730 ill_forward_set_on_ill(ill, enable); in ill_forward_set()
2740 ill_set_nce_router_flags(ill_t *ill, boolean_t enable) in ill_set_nce_router_flags() argument
2746 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ill_set_nce_router_flags()
2752 nce = nce_lookup_v6(ill, &ipif->ipif_v6lcl_addr); in ill_set_nce_router_flags()
2783 ill_t *ill; in ill_first() local
2805 ill = avl_first(avl_tree); in ill_first()
2810 ASSERT(ill != NULL); in ill_first()
2811 return (ill); in ill_first()
2832 ill_t *ill; in ill_next() local
2837 if ((ill = avl_walk(&lastill->ill_ifptr->illif_avl_by_ppa, lastill, in ill_next()
2839 return (ill); in ill_next()
2907 ill_t *ill = NULL; in ill_find_by_name() local
2950 ill = avl_find(&ifp->illif_avl_by_ppa, (void *) &ppa, NULL); in ill_find_by_name()
2951 if (ill != NULL) { in ill_find_by_name()
2952 mutex_enter(&ill->ill_lock); in ill_find_by_name()
2953 if (ILL_CAN_LOOKUP(ill)) { in ill_find_by_name()
2954 ill_refhold_locked(ill); in ill_find_by_name()
2955 mutex_exit(&ill->ill_lock); in ill_find_by_name()
2956 return (ill); in ill_find_by_name()
2958 mutex_exit(&ill->ill_lock); in ill_find_by_name()
3009 ill_glist_delete(ill_t *ill) in ill_glist_delete() argument
3014 if (ill == NULL) in ill_glist_delete()
3016 ipst = ill->ill_ipst; in ill_glist_delete()
3023 if (ill->ill_ifptr != NULL) { in ill_glist_delete()
3027 avl_remove(&ill->ill_ifptr->illif_avl_by_ppa, ill); in ill_glist_delete()
3029 if (ill->ill_ifptr->illif_ppa_arena != NULL) { in ill_glist_delete()
3030 vmem_free(ill->ill_ifptr->illif_ppa_arena, in ill_glist_delete()
3031 (void *)(uintptr_t)(ill->ill_ppa+1), 1); in ill_glist_delete()
3033 if (avl_numnodes(&ill->ill_ifptr->illif_avl_by_ppa) == 0) { in ill_glist_delete()
3034 ill_delete_interface_type(ill->ill_ifptr); in ill_glist_delete()
3040 ill->ill_ifptr = NULL; in ill_glist_delete()
3041 ill->ill_name_length = 0; in ill_glist_delete()
3042 ill->ill_name[0] = '\0'; in ill_glist_delete()
3043 ill->ill_ppa = UINT_MAX; in ill_glist_delete()
3047 ill_nic_event_dispatch(ill, 0, NE_UNPLUMB, ill->ill_name, in ill_glist_delete()
3048 ill->ill_name_length); in ill_glist_delete()
3050 ASSERT(ill->ill_phyint != NULL); in ill_glist_delete()
3051 phyi = ill->ill_phyint; in ill_glist_delete()
3052 ill->ill_phyint = NULL; in ill_glist_delete()
3062 if (ill->ill_flags & ILLF_IPV6) in ill_glist_delete()
3096 ill_alloc_ppa(ill_if_t *ifp, ill_t *ill) in ill_alloc_ppa() argument
3135 if (ill->ill_ppa == UINT_MAX) { in ill_alloc_ppa()
3140 ill->ill_ppa = --ppa; in ill_alloc_ppa()
3147 (void *)(uintptr_t)(ill->ill_ppa + 1), /* minaddr */ in ill_alloc_ppa()
3148 (void *)(uintptr_t)(ill->ill_ppa + 2), /* maxaddr */ in ill_alloc_ppa()
3164 if (ill->ill_ppa == UINT_MAX) { in ill_alloc_ppa()
3168 end = start = ill->ill_ppa; in ill_alloc_ppa()
3174 if (ill->ill_ppa == UINT_MAX) in ill_alloc_ppa()
3181 ill->ill_ppa = start; in ill_alloc_ppa()
3191 ill_glist_insert(ill_t *ill, char *name, boolean_t isv6) in ill_glist_insert() argument
3199 ip_stack_t *ipst = ill->ill_ipst; in ill_glist_insert()
3251 if (ill->ill_ppa == UINT_MAX) in ill_glist_insert()
3254 error = ill_alloc_ppa(ill_interface, ill); in ill_glist_insert()
3257 ill_delete_interface_type(ill->ill_ifptr); in ill_glist_insert()
3277 numtos(ill->ill_ppa, buf); in ill_glist_insert()
3285 (void *)(uintptr_t)(ill->ill_ppa+1), 1); in ill_glist_insert()
3288 ill_delete_interface_type(ill->ill_ifptr); in ill_glist_insert()
3294 (void) sprintf(ill->ill_name, "%s%u", name, ill->ill_ppa); in ill_glist_insert()
3295 ill->ill_name_length = mi_strlen(ill->ill_name) + 1; in ill_glist_insert()
3297 (void) avl_find(&ill_interface->illif_avl_by_ppa, &ill->ill_ppa, in ill_glist_insert()
3299 ill->ill_ifptr = ill_interface; in ill_glist_insert()
3300 avl_insert(&ill_interface->illif_avl_by_ppa, ill, where); in ill_glist_insert()
3302 ill_phyint_reinit(ill); in ill_glist_insert()
3308 ipsq_init(ill_t *ill, boolean_t enter) in ipsq_init() argument
3316 ill->ill_phyint->phyint_ipsq = ipsq; in ipsq_init()
3320 ipsq->ipsq_phyint = ill->ill_phyint; in ipsq_init()
3323 ipsq->ipsq_ipst = ill->ill_ipst; /* No netstack_hold */ in ipsq_init()
3340 ill_init_common(ill_t *ill, queue_t *q, boolean_t isv6, boolean_t is_loopback, in ill_init_common() argument
3346 mutex_init(&ill->ill_lock, NULL, MUTEX_DEFAULT, 0); in ill_init_common()
3347 mutex_init(&ill->ill_saved_ire_lock, NULL, MUTEX_DEFAULT, NULL); in ill_init_common()
3348 ill->ill_saved_ire_cnt = 0; in ill_init_common()
3351 ill->ill_max_frag = isv6 ? ip_loopback_mtu_v6plus : in ill_init_common()
3356 ill->ill_net_type = IRE_LOOPBACK; in ill_init_common()
3358 ill->ill_rq = q; in ill_init_common()
3359 ill->ill_wq = WR(q); in ill_init_common()
3360 ill->ill_ppa = UINT_MAX; in ill_init_common()
3363 ill->ill_isv6 = isv6; in ill_init_common()
3372 ill->ill_frag_ptr = frag_ptr; in ill_init_common()
3373 ill->ill_frag_free_num_pkts = 0; in ill_init_common()
3374 ill->ill_last_frag_clean_time = 0; in ill_init_common()
3375 ill->ill_frag_hash_tbl = (ipfb_t *)frag_ptr; in ill_init_common()
3376 ill->ill_name = (char *)(frag_ptr + ILL_FRAG_HASH_TBL_SIZE); in ill_init_common()
3378 mutex_init(&ill->ill_frag_hash_tbl[count].ipfb_lock, in ill_init_common()
3382 ill->ill_phyint = (phyint_t *)mi_zalloc(sizeof (phyint_t)); in ill_init_common()
3383 if (ill->ill_phyint == NULL) { in ill_init_common()
3388 mutex_init(&ill->ill_phyint->phyint_lock, NULL, MUTEX_DEFAULT, 0); in ill_init_common()
3390 ill->ill_phyint->phyint_illv6 = ill; in ill_init_common()
3392 ill->ill_phyint->phyint_illv4 = ill; in ill_init_common()
3395 phyint_flags_init(ill->ill_phyint, DL_LOOP); in ill_init_common()
3398 list_create(&ill->ill_nce, sizeof (nce_t), offsetof(nce_t, nce_node)); in ill_init_common()
3400 ill_set_inputfn(ill); in ill_init_common()
3402 if (!ipsq_init(ill, ipsq_enter)) { in ill_init_common()
3404 mi_free(ill->ill_phyint); in ill_init_common()
3409 ill->ill_frag_count = 0; in ill_init_common()
3410 ill->ill_ipf_gen = 0; in ill_init_common()
3412 rw_init(&ill->ill_mcast_lock, NULL, RW_DEFAULT, NULL); in ill_init_common()
3413 mutex_init(&ill->ill_mcast_serializer, NULL, MUTEX_DEFAULT, NULL); in ill_init_common()
3414 ill->ill_global_timer = INFINITY; in ill_init_common()
3415 ill->ill_mcast_v1_time = ill->ill_mcast_v2_time = 0; in ill_init_common()
3416 ill->ill_mcast_v1_tset = ill->ill_mcast_v2_tset = 0; in ill_init_common()
3417 ill->ill_mcast_rv = MCAST_DEF_ROBUSTNESS; in ill_init_common()
3418 ill->ill_mcast_qi = MCAST_DEF_QUERY_INTERVAL; in ill_init_common()
3427 ill->ill_reachable_time = ND_REACHABLE_TIME; in ill_init_common()
3428 ill->ill_xmit_count = ND_MAX_MULTICAST_SOLICIT; in ill_init_common()
3429 ill->ill_max_buf = ND_MAX_Q; in ill_init_common()
3430 ill->ill_refcnt = 0; in ill_init_common()
3449 ill_init(queue_t *q, ill_t *ill) in ill_init() argument
3468 if ((ret = ill_init_common(ill, q, B_FALSE, B_FALSE, B_TRUE)) != 0) { in ill_init()
3473 ill->ill_state_flags |= ILL_LL_SUBNET_PENDING; in ill_init()
3481 ill->ill_dlpi_pending = DL_PRIM_INVAL; in ill_init()
3484 ill_dlpi_send(ill, info_mp); in ill_init()
3494 ill_dls_info(struct sockaddr_dl *sdl, const ill_t *ill) in ill_dls_info() argument
3499 sdl->sdl_index = ill_get_upper_ifindex(ill); in ill_dls_info()
3500 sdl->sdl_type = ill->ill_type; in ill_dls_info()
3501 ill_get_name(ill, sdl->sdl_data, sizeof (sdl->sdl_data)); in ill_dls_info()
3505 sdl->sdl_alen = ill->ill_phys_addr_length; in ill_dls_info()
3507 if (ill->ill_phys_addr_length != 0 && ill->ill_phys_addr != NULL) in ill_dls_info()
3508 bcopy(ill->ill_phys_addr, &sdl->sdl_data[len], sdl->sdl_alen); in ill_dls_info()
3518 ill_xarp_info(struct sockaddr_dl *sdl, ill_t *ill) in ill_xarp_info() argument
3521 sdl->sdl_index = ill->ill_phyint->phyint_ifindex; in ill_xarp_info()
3522 sdl->sdl_type = ill->ill_type; in ill_xarp_info()
3523 ill_get_name(ill, sdl->sdl_data, sizeof (sdl->sdl_data)); in ill_xarp_info()
3525 sdl->sdl_alen = ill->ill_phys_addr_length; in ill_xarp_info()
3687 ill_t *ill; in ill_lookup_on_name() local
3697 ill = ill_find_by_name(name, isv6, ipst); in ill_lookup_on_name()
3699 if (ill != NULL) in ill_lookup_on_name()
3700 return (ill); in ill_lookup_on_name()
3710 ill = ill_find_by_name(name, isv6, ipst); in ill_lookup_on_name()
3711 if (ill != NULL) { in ill_lookup_on_name()
3713 return (ill); in ill_lookup_on_name()
3717 ill = (ill_t *)(mi_alloc(sizeof (ill_t) + in ill_lookup_on_name()
3719 if (ill == NULL) in ill_lookup_on_name()
3722 bzero(ill, sizeof (*ill)); in ill_lookup_on_name()
3723 ill->ill_ipst = ipst; in ill_lookup_on_name()
3729 ill->ill_zoneid = GLOBAL_ZONEID; in ill_lookup_on_name()
3731 if (ill_init_common(ill, NULL, isv6, B_TRUE, B_FALSE) != 0) in ill_lookup_on_name()
3734 if (!ill_allocate_mibs(ill)) in ill_lookup_on_name()
3737 ill->ill_current_frag = ill->ill_max_frag; in ill_lookup_on_name()
3738 ill->ill_mtu = ill->ill_max_frag; /* Initial value */ in ill_lookup_on_name()
3739 ill->ill_mc_mtu = ill->ill_mtu; in ill_lookup_on_name()
3746 ill->ill_name = (char *)ill + sizeof (*ill); in ill_lookup_on_name()
3747 (void) strcpy(ill->ill_name, ipif_loopback_name); in ill_lookup_on_name()
3748 ill->ill_name_length = sizeof (ipif_loopback_name); in ill_lookup_on_name()
3750 ill->ill_dlpi_pending = DL_PRIM_INVAL; in ill_lookup_on_name()
3752 ipif = ipif_allocate(ill, 0L, IRE_LOOPBACK, B_TRUE, B_TRUE, NULL); in ill_lookup_on_name()
3756 ill->ill_flags = ILLF_MULTICAST; in ill_lookup_on_name()
3767 ill->ill_flags |= ILLF_IPV4; in ill_lookup_on_name()
3773 ill->ill_flags |= ILLF_IPV6; in ill_lookup_on_name()
3780 ill_refhold(ill); in ill_lookup_on_name()
3782 ipsq = ill->ill_phyint->phyint_ipsq; in ill_lookup_on_name()
3784 if (ill_glist_insert(ill, "lo", isv6) != 0) in ill_lookup_on_name()
3788 sctp_update_ill(ill, SCTP_ILL_INSERT); in ill_lookup_on_name()
3804 if (ipsq != ill->ill_phyint->phyint_ipsq) in ill_lookup_on_name()
3828 ill_nic_event_dispatch(ill, MAP_IPIF_ID(ill->ill_ipif->ipif_id), in ill_lookup_on_name()
3829 NE_PLUMB, ill->ill_name, ill->ill_name_length); in ill_lookup_on_name()
3830 return (ill); in ill_lookup_on_name()
3832 if (ill != NULL) { in ill_lookup_on_name()
3833 if (ill->ill_phyint != NULL) { in ill_lookup_on_name()
3834 ipsq = ill->ill_phyint->phyint_ipsq; in ill_lookup_on_name()
3839 mi_free(ill->ill_phyint); in ill_lookup_on_name()
3841 ill_free_mib(ill); in ill_lookup_on_name()
3842 if (ill->ill_ipst != NULL) in ill_lookup_on_name()
3843 netstack_rele(ill->ill_ipst->ips_netstack); in ill_lookup_on_name()
3844 mi_free(ill); in ill_lookup_on_name()
3857 ill_t *ill; in ill_lookup_on_ifindex_global_instance() local
3868 ill = ill_lookup_on_ifindex(index, isv6, ipst); in ill_lookup_on_ifindex_global_instance()
3870 return (ill); in ill_lookup_on_ifindex_global_instance()
3879 ill_t *ill; in ill_lookup_on_ifindex() local
3890 ill = isv6 ? phyi->phyint_illv6: phyi->phyint_illv4; in ill_lookup_on_ifindex()
3891 if (ill != NULL) { in ill_lookup_on_ifindex()
3892 mutex_enter(&ill->ill_lock); in ill_lookup_on_ifindex()
3893 if (!ILL_IS_CONDEMNED(ill)) { in ill_lookup_on_ifindex()
3894 ill_refhold_locked(ill); in ill_lookup_on_ifindex()
3895 mutex_exit(&ill->ill_lock); in ill_lookup_on_ifindex()
3897 return (ill); in ill_lookup_on_ifindex()
3899 mutex_exit(&ill->ill_lock); in ill_lookup_on_ifindex()
3916 ill_t *ill; in ip_xmit_ifindex_valid() local
3921 ill = ill_lookup_on_ifindex_zoneid(ifindex, zoneid, isv6, ipst); in ip_xmit_ifindex_valid()
3922 if (ill == NULL) in ip_xmit_ifindex_valid()
3924 if (IS_VNI(ill)) { in ip_xmit_ifindex_valid()
3925 ill_refrele(ill); in ip_xmit_ifindex_valid()
3928 ill_refrele(ill); in ip_xmit_ifindex_valid()
4019 ill_get_upper_ifindex(const ill_t *ill) in ill_get_upper_ifindex() argument
4021 if (IS_UNDER_IPMP(ill)) in ill_get_upper_ifindex()
4022 return (ipmp_ill_get_ipmp_ifindex(ill)); in ill_get_upper_ifindex()
4024 return (ill->ill_phyint->phyint_ifindex); in ill_get_upper_ifindex()
4040 ill_refhold(ill_t *ill) in ill_refhold() argument
4042 mutex_enter(&ill->ill_lock); in ill_refhold()
4043 ill->ill_refcnt++; in ill_refhold()
4044 ILL_TRACE_REF(ill); in ill_refhold()
4045 mutex_exit(&ill->ill_lock); in ill_refhold()
4049 ill_refhold_locked(ill_t *ill) in ill_refhold_locked() argument
4051 ASSERT(MUTEX_HELD(&ill->ill_lock)); in ill_refhold_locked()
4052 ill->ill_refcnt++; in ill_refhold_locked()
4053 ILL_TRACE_REF(ill); in ill_refhold_locked()
4058 ill_check_and_refhold(ill_t *ill) in ill_check_and_refhold() argument
4060 mutex_enter(&ill->ill_lock); in ill_check_and_refhold()
4061 if (!ILL_IS_CONDEMNED(ill)) { in ill_check_and_refhold()
4062 ill_refhold_locked(ill); in ill_check_and_refhold()
4063 mutex_exit(&ill->ill_lock); in ill_check_and_refhold()
4066 mutex_exit(&ill->ill_lock); in ill_check_and_refhold()
4077 ill_refrele(ill_t *ill) in ill_refrele() argument
4079 mutex_enter(&ill->ill_lock); in ill_refrele()
4080 ASSERT(ill->ill_refcnt != 0); in ill_refrele()
4081 ill->ill_refcnt--; in ill_refrele()
4082 ILL_UNTRACE_REF(ill); in ill_refrele()
4083 if (ill->ill_refcnt != 0) { in ill_refrele()
4085 mutex_exit(&ill->ill_lock); in ill_refrele()
4090 ipif_ill_refrele_tail(ill); in ill_refrele()
4100 ill_waiter_inc(ill_t *ill) in ill_waiter_inc() argument
4102 mutex_enter(&ill->ill_lock); in ill_waiter_inc()
4103 if (ill->ill_state_flags & ILL_CONDEMNED) { in ill_waiter_inc()
4104 mutex_exit(&ill->ill_lock); in ill_waiter_inc()
4107 ill->ill_waiters++; in ill_waiter_inc()
4108 mutex_exit(&ill->ill_lock); in ill_waiter_inc()
4113 ill_waiter_dcr(ill_t *ill) in ill_waiter_dcr() argument
4115 mutex_enter(&ill->ill_lock); in ill_waiter_dcr()
4116 ill->ill_waiters--; in ill_waiter_dcr()
4117 if (ill->ill_waiters == 0) in ill_waiter_dcr()
4118 cv_broadcast(&ill->ill_cv); in ill_waiter_dcr()
4119 mutex_exit(&ill->ill_lock); in ill_waiter_dcr()
4133 ip_ll_subnet_defaults(ill_t *ill, mblk_t *mp) in ip_ll_subnet_defaults() argument
4143 ASSERT(IAM_WRITER_ILL(ill)); in ip_ll_subnet_defaults()
4150 ill->ill_mactype = dlia->dl_mac_type; in ip_ll_subnet_defaults()
4157 ill->ill_media = ipm; in ip_ll_subnet_defaults()
4181 ill->ill_bcast_addr_length = brdcst_addr_length; in ip_ll_subnet_defaults()
4182 ill->ill_phys_addr_length = phys_addr_length; in ip_ll_subnet_defaults()
4183 ill->ill_sap_length = sap_length; in ip_ll_subnet_defaults()
4190 min_mtu = ill->ill_isv6 ? IPV6_MIN_MTU : IP_MIN_MTU; in ip_ll_subnet_defaults()
4191 ill->ill_max_frag = MAX(min_mtu, dlia->dl_max_sdu); in ip_ll_subnet_defaults()
4192 ill->ill_current_frag = ill->ill_max_frag; in ip_ll_subnet_defaults()
4193 ill->ill_mtu = ill->ill_max_frag; in ip_ll_subnet_defaults()
4194 ill->ill_mc_mtu = ill->ill_mtu; /* Overridden by DL_NOTE_SDU_SIZE2 */ in ip_ll_subnet_defaults()
4196 ill->ill_type = ipm->ip_m_type; in ip_ll_subnet_defaults()
4198 if (!ill->ill_dlpi_style_set) { in ip_ll_subnet_defaults()
4200 ill->ill_needs_attach = 1; in ip_ll_subnet_defaults()
4202 phyint_flags_init(ill->ill_phyint, ill->ill_mactype); in ip_ll_subnet_defaults()
4215 (void) ipif_allocate(ill, 0, IRE_LOCAL, in ip_ll_subnet_defaults()
4217 mutex_enter(&ill->ill_lock); in ip_ll_subnet_defaults()
4218 ASSERT(ill->ill_dlpi_style_set == 0); in ip_ll_subnet_defaults()
4219 ill->ill_dlpi_style_set = 1; in ip_ll_subnet_defaults()
4220 ill->ill_state_flags &= ~ILL_LL_SUBNET_PENDING; in ip_ll_subnet_defaults()
4221 cv_broadcast(&ill->ill_cv); in ip_ll_subnet_defaults()
4222 mutex_exit(&ill->ill_lock); in ip_ll_subnet_defaults()
4226 ASSERT(ill->ill_ipif != NULL); in ip_ll_subnet_defaults()
4232 ill->ill_sap = (ill->ill_isv6) ? ipm->ip_m_ipv6sap : ipm->ip_m_ipv4sap; in ip_ll_subnet_defaults()
4238 ill->ill_flags &= ~(ILLF_MULTICAST | ILLF_NONUD | ILLF_NOARP); in ip_ll_subnet_defaults()
4239 ill->ill_ipif->ipif_flags &= ~(IPIF_BROADCAST | IPIF_POINTOPOINT); in ip_ll_subnet_defaults()
4249 if (ill->ill_bcast_addr_length == 0 && !IS_IPMP(ill)) { in ip_ll_subnet_defaults()
4250 if (ill->ill_bcast_mp != NULL) in ip_ll_subnet_defaults()
4251 freemsg(ill->ill_bcast_mp); in ip_ll_subnet_defaults()
4252 ill->ill_net_type = IRE_IF_NORESOLVER; in ip_ll_subnet_defaults()
4254 ill->ill_bcast_mp = ill_dlur_gen(NULL, in ip_ll_subnet_defaults()
4255 ill->ill_phys_addr_length, in ip_ll_subnet_defaults()
4256 ill->ill_sap, in ip_ll_subnet_defaults()
4257 ill->ill_sap_length); in ip_ll_subnet_defaults()
4259 if (ill->ill_isv6) in ip_ll_subnet_defaults()
4267 ill->ill_flags |= ILLF_NONUD; in ip_ll_subnet_defaults()
4269 ill->ill_flags |= ILLF_NOARP; in ip_ll_subnet_defaults()
4271 if (ill->ill_mactype == SUNW_DL_VNI) { in ip_ll_subnet_defaults()
4272 ill->ill_ipif->ipif_flags |= IPIF_NOXMIT; in ip_ll_subnet_defaults()
4273 } else if (ill->ill_phys_addr_length == 0 || in ip_ll_subnet_defaults()
4274 ill->ill_mactype == DL_IPV4 || in ip_ll_subnet_defaults()
4275 ill->ill_mactype == DL_IPV6) { in ip_ll_subnet_defaults()
4282 ill->ill_flags |= ILLF_MULTICAST; in ip_ll_subnet_defaults()
4283 ill->ill_ipif->ipif_flags |= IPIF_POINTOPOINT; in ip_ll_subnet_defaults()
4286 ill->ill_net_type = IRE_IF_RESOLVER; in ip_ll_subnet_defaults()
4287 if (ill->ill_bcast_mp != NULL) in ip_ll_subnet_defaults()
4288 freemsg(ill->ill_bcast_mp); in ip_ll_subnet_defaults()
4289 ill->ill_bcast_mp = ill_dlur_gen(brdcst_addr, in ip_ll_subnet_defaults()
4290 ill->ill_bcast_addr_length, ill->ill_sap, in ip_ll_subnet_defaults()
4291 ill->ill_sap_length); in ip_ll_subnet_defaults()
4297 ill->ill_flags |= ILLF_MULTICAST; in ip_ll_subnet_defaults()
4298 if (!ill->ill_isv6) in ip_ll_subnet_defaults()
4299 ill->ill_ipif->ipif_flags |= IPIF_BROADCAST; in ip_ll_subnet_defaults()
4303 if (ill->ill_mactype == SUNW_DL_IPMP) in ip_ll_subnet_defaults()
4304 ASSERT(ill->ill_phyint->phyint_flags & PHYI_IPMP); in ip_ll_subnet_defaults()
4307 ill->ill_flags &= ~ILLF_COS_ENABLED; in ip_ll_subnet_defaults()
4316 ill->ill_flags |= ILLF_COS_ENABLED; in ip_ll_subnet_defaults()
4320 ill->ill_error = 0; in ip_ll_subnet_defaults()
4423 ill_t *ill; in ipif_lookup_multicast() local
4431 ill = ILL_START_WALK_V6(&ctx, ipst); in ipif_lookup_multicast()
4433 ill = ILL_START_WALK_V4(&ctx, ipst); in ipif_lookup_multicast()
4435 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ipif_lookup_multicast()
4436 mutex_enter(&ill->ill_lock); in ipif_lookup_multicast()
4437 if (IS_VNI(ill) || IS_UNDER_IPMP(ill) || in ipif_lookup_multicast()
4438 ILL_IS_CONDEMNED(ill) || in ipif_lookup_multicast()
4439 !(ill->ill_flags & ILLF_MULTICAST)) { in ipif_lookup_multicast()
4440 mutex_exit(&ill->ill_lock); in ipif_lookup_multicast()
4443 for (ipif = ill->ill_ipif; ipif != NULL; in ipif_lookup_multicast()
4471 if (dep_ipif->ipif_ill != ill) in ipif_lookup_multicast()
4481 if (saved_ipif->ipif_ill != ill) in ipif_lookup_multicast()
4491 if (saved_ipif != NULL && saved_ipif->ipif_ill == ill) in ipif_lookup_multicast()
4493 if (dep_ipif != NULL && dep_ipif->ipif_ill == ill) in ipif_lookup_multicast()
4495 mutex_exit(&ill->ill_lock); in ipif_lookup_multicast()
4523 ill_t *ill; in ill_lookup_multicast() local
4529 ill = ipif->ipif_ill; in ill_lookup_multicast()
4530 ill_refhold(ill); in ill_lookup_multicast()
4532 return (ill); in ill_lookup_multicast()
4554 ill_t *ill; in ill_lookup_group_v4() local
4556 ill = ire_lookup_multi_ill_v4(group, zoneid, ipst, multirtp, setsrcp); in ill_lookup_group_v4()
4557 if (ill != NULL) in ill_lookup_group_v4()
4558 return (ill); in ill_lookup_group_v4()
4571 ill_t *ill; in ipif_lookup_interface() local
4581 ill = ILL_START_WALK_V4(&ctx, ipst); in ipif_lookup_interface()
4582 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ipif_lookup_interface()
4583 mutex_enter(&ill->ill_lock); in ipif_lookup_interface()
4584 for (ipif = ill->ill_ipif; ipif != NULL; in ipif_lookup_interface()
4592 mutex_exit(&ill->ill_lock); in ipif_lookup_interface()
4598 mutex_exit(&ill->ill_lock); in ipif_lookup_interface()
4616 ill_t *ill; in ipif_lookup_addr_common() local
4628 ill = ILL_START_WALK_V4(&ctx, ipst); in ipif_lookup_addr_common()
4629 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ipif_lookup_addr_common()
4630 if (match_ill != NULL && ill != match_ill && in ipif_lookup_addr_common()
4631 (!match_illgrp || !IS_IN_SAME_ILLGRP(ill, match_ill))) { in ipif_lookup_addr_common()
4634 mutex_enter(&ill->ill_lock); in ipif_lookup_addr_common()
4635 for (ipif = ill->ill_ipif; ipif != NULL; in ipif_lookup_addr_common()
4652 mutex_exit(&ill->ill_lock); in ipif_lookup_addr_common()
4658 mutex_exit(&ill->ill_lock); in ipif_lookup_addr_common()
4726 ill_t *ill; in ipif_lookup_addr_zoneid() local
4736 ill = ILL_START_WALK_V4(&ctx, ipst); in ipif_lookup_addr_zoneid()
4737 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ipif_lookup_addr_zoneid()
4738 if (match_ill != NULL && ill != match_ill && in ipif_lookup_addr_zoneid()
4739 !IS_IN_SAME_ILLGRP(ill, match_ill)) { in ipif_lookup_addr_zoneid()
4742 mutex_enter(&ill->ill_lock); in ipif_lookup_addr_zoneid()
4743 for (ipif = ill->ill_ipif; ipif != NULL; in ipif_lookup_addr_zoneid()
4752 mutex_exit(&ill->ill_lock); in ipif_lookup_addr_zoneid()
4764 mutex_exit(&ill->ill_lock); in ipif_lookup_addr_zoneid()
4787 ipif_lookup_remote(ill_t *ill, ipaddr_t addr, zoneid_t zoneid) in ipif_lookup_remote() argument
4791 ASSERT(!ill->ill_isv6); in ipif_lookup_remote()
4800 mutex_enter(&ill->ill_lock); in ipif_lookup_remote()
4801 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ipif_lookup_remote()
4813 mutex_exit(&ill->ill_lock); in ipif_lookup_remote()
4818 mutex_exit(&ill->ill_lock); in ipif_lookup_remote()
4822 mutex_exit(&ill->ill_lock); in ipif_lookup_remote()
4829 ipif = ipif_get_next_ipif(NULL, ill); in ipif_lookup_remote()
4839 ill_is_quiescent(ill_t *ill) in ill_is_quiescent() argument
4843 ASSERT(MUTEX_HELD(&ill->ill_lock)); in ill_is_quiescent()
4845 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ill_is_quiescent()
4849 if (!ILL_DOWN_OK(ill) || ill->ill_refcnt != 0) { in ill_is_quiescent()
4856 ill_is_freeable(ill_t *ill) in ill_is_freeable() argument
4860 ASSERT(MUTEX_HELD(&ill->ill_lock)); in ill_is_freeable()
4862 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ill_is_freeable()
4867 if (!ILL_FREE_OK(ill) || ill->ill_refcnt != 0) { in ill_is_freeable()
4881 ill_t *ill; in ipif_is_quiescent() local
4888 ill = ipif->ipif_ill; in ipif_is_quiescent()
4889 if (ill->ill_ipif_up_count != 0 || ill->ill_ipif_dup_count != 0 || in ipif_is_quiescent()
4890 ill->ill_logical_down) { in ipif_is_quiescent()
4895 if (ill->ill_ire_cnt != 0 || ill->ill_refcnt != 0) { in ipif_is_quiescent()
4921 ipif_ill_refrele_tail(ill_t *ill) in ipif_ill_refrele_tail() argument
4930 ASSERT(MUTEX_HELD(&ill->ill_lock)); in ipif_ill_refrele_tail()
4932 if ((ill->ill_state_flags & ILL_CONDEMNED) && ill_is_freeable(ill)) { in ipif_ill_refrele_tail()
4934 cv_broadcast(&ill->ill_cv); in ipif_ill_refrele_tail()
4937 ipsq = ill->ill_phyint->phyint_ipsq; in ipif_ill_refrele_tail()
4947 if (ipif->ipif_ill != ill) /* wait is for another ill; bail */ in ipif_ill_refrele_tail()
4960 if (!ill_is_quiescent(ill)) in ipif_ill_refrele_tail()
4969 if (!ill_is_freeable(ill)) in ipif_ill_refrele_tail()
4977 ill_refhold_locked(ill); /* for qwriter_ip() call below */ in ipif_ill_refrele_tail()
4981 mutex_exit(&ill->ill_lock); in ipif_ill_refrele_tail()
5000 qwriter_ip(ill, ill->ill_rq, mp, in ipif_ill_refrele_tail()
5004 qwriter_ip(ill, ill->ill_rq, mp, in ipif_ill_refrele_tail()
5009 ill_refrele(ill); in ipif_ill_refrele_tail()
5015 qwriter_ip(ill, ill->ill_rq, mp, ipif_all_down_tail, CUR_OP, in ipif_ill_refrele_tail()
5021 qwriter_ip(ill, (connp != NULL ? CONNP_TO_WQ(connp) : in ipif_ill_refrele_tail()
5022 ill->ill_wq), mp, ip_reprocess_ioctl, CUR_OP, B_TRUE); in ipif_ill_refrele_tail()
5033 mutex_exit(&ill->ill_lock); in ipif_ill_refrele_tail()
5229 ill_trace_ref(ill_t *ill) in ill_trace_ref() argument
5231 ASSERT(MUTEX_HELD(&ill->ill_lock)); in ill_trace_ref()
5233 if (ill->ill_trace_disable) in ill_trace_ref()
5236 if (!th_trace_ref(ill, ill->ill_ipst)) { in ill_trace_ref()
5237 ill->ill_trace_disable = B_TRUE; in ill_trace_ref()
5238 ill_trace_cleanup(ill); in ill_trace_ref()
5243 ill_untrace_ref(ill_t *ill) in ill_untrace_ref() argument
5245 ASSERT(MUTEX_HELD(&ill->ill_lock)); in ill_untrace_ref()
5247 if (!ill->ill_trace_disable) in ill_untrace_ref()
5248 th_trace_unref(ill); in ill_untrace_ref()
5266 ill_trace_cleanup(const ill_t *ill) in ill_trace_cleanup() argument
5268 th_trace_cleanup(ill, ill->ill_trace_disable); in ill_trace_cleanup()
5283 ill_t *ill; in ipif_refhold() local
5285 ill = ipif->ipif_ill; in ipif_refhold()
5286 mutex_enter(&ill->ill_lock); in ipif_refhold()
5289 mutex_exit(&ill->ill_lock); in ipif_refhold()
5301 ill_t *ill; in ipif_refrele() local
5303 ill = ipif->ipif_ill; in ipif_refrele()
5305 mutex_enter(&ill->ill_lock); in ipif_refrele()
5310 mutex_exit(&ill->ill_lock); in ipif_refrele()
5315 ipif_ill_refrele_tail(ill); in ipif_refrele()
5319 ipif_get_next_ipif(ipif_t *curr, ill_t *ill) in ipif_get_next_ipif() argument
5323 mutex_enter(&ill->ill_lock); in ipif_get_next_ipif()
5324 for (ipif = (curr == NULL ? ill->ill_ipif : curr->ipif_next); in ipif_get_next_ipif()
5329 mutex_exit(&ill->ill_lock); in ipif_get_next_ipif()
5332 mutex_exit(&ill->ill_lock); in ipif_get_next_ipif()
5357 ip_mcast_mapping(ill_t *ill, uchar_t *addr, uchar_t *hwaddr) in ip_mcast_mapping() argument
5361 if (ill->ill_net_type == IRE_IF_NORESOLVER) in ip_mcast_mapping()
5366 ipm = ip_m_lookup(ill->ill_mactype); in ip_mcast_mapping()
5368 (ill->ill_isv6 && ipm->ip_m_v6mapping == NULL) || in ip_mcast_mapping()
5369 (!ill->ill_isv6 && ipm->ip_m_v4mapping == NULL)) { in ip_mcast_mapping()
5371 ill->ill_name, ill->ill_mactype)); in ip_mcast_mapping()
5374 if (ill->ill_isv6) in ip_mcast_mapping()
5375 (*ipm->ip_m_v6mapping)(ill, addr, hwaddr); in ip_mcast_mapping()
5377 (*ipm->ip_m_v4mapping)(ill, addr, hwaddr); in ip_mcast_mapping()
5408 ipaddr_t src_addr, int flags, ill_t *ill, ire_t **ire_arg, in ip_rt_add() argument
5451 if (ill != NULL) in ip_rt_add()
5452 ipif = ipif_lookup_addr(gw_addr, ill, ALL_ZONES, ipst); in ip_rt_add()
5613 if (ill == NULL) { in ip_rt_add()
5614 ill = ipif->ipif_ill; in ip_rt_add()
5615 } else if (ill != ipif->ipif_ill) { in ip_rt_add()
5630 IRE_INTERFACE, ill, ALL_ZONES, NULL, match_flags, 0, ipst, in ip_rt_add()
5654 type = ill->ill_net_type; in ip_rt_add()
5670 ill, in ip_rt_add()
5716 if (ill != NULL) in ip_rt_add()
5725 gw_ire = ire_ftable_lookup_v4(gw_addr, 0, 0, type, ill, in ip_rt_add()
5750 if (ill == NULL && !(flags & RTF_INDIRECT)) { in ip_rt_add()
5753 ill = gw_ire->ire_ill; in ip_rt_add()
5772 ire = ire_ftable_lookup_v4(dst_addr, mask, gw_addr, type, ill, in ip_rt_add()
5824 ill, in ip_rt_add()
5939 if (ill != NULL) { in ip_rt_add()
5948 ill_save_ire(ill, ire); in ip_rt_add()
5975 uint_t rtm_addrs, int flags, ill_t *ill, boolean_t ioctl_msg, in ip_rt_delete() argument
6019 if (ill != NULL) in ip_rt_delete()
6020 ill_match = ill; in ip_rt_delete()
6057 if (ill != NULL) in ip_rt_delete()
6065 ire = ire_ftable_lookup_v4(dst_addr, mask, gw_addr, type, ill, in ip_rt_delete()
6092 ill = ire->ire_ill; in ip_rt_delete()
6093 if (ill != NULL) in ip_rt_delete()
6094 ill_remove_saved_ire(ill, ire); in ip_rt_delete()
6532 ill_t *ill; in ipsq_dlpi_done() local
6552 ill = phyi->phyint_illv4; in ipsq_dlpi_done()
6553 if (ill != NULL && in ipsq_dlpi_done()
6554 (ill->ill_dlpi_pending != DL_PRIM_INVAL || in ipsq_dlpi_done()
6555 ill->ill_arl_dlpi_pending)) in ipsq_dlpi_done()
6558 ill = phyi->phyint_illv6; in ipsq_dlpi_done()
6559 if (ill != NULL && in ipsq_dlpi_done()
6560 ill->ill_dlpi_pending != DL_PRIM_INVAL) in ipsq_dlpi_done()
6582 ipsq_enter(ill_t *ill, boolean_t force, int type) in ipsq_enter() argument
6587 ip_stack_t *ipst = ill->ill_ipst; in ipsq_enter()
6599 mutex_enter(&ill->ill_lock); in ipsq_enter()
6600 if (ill->ill_state_flags & ILL_CONDEMNED) { in ipsq_enter()
6601 mutex_exit(&ill->ill_lock); in ipsq_enter()
6606 ipsq = ill->ill_phyint->phyint_ipsq; in ipsq_enter()
6621 cv_wait(&ill->ill_cv, &ill->ill_lock); in ipsq_enter()
6625 (void) cv_reltimedwait(&ill->ill_cv, in ipsq_enter()
6626 &ill->ill_lock, ENTER_SQ_WAIT_TICKS, TR_CLOCK_TICK); in ipsq_enter()
6629 mutex_exit(&ill->ill_lock); in ipsq_enter()
6642 mutex_exit(&ill->ill_lock); in ipsq_enter()
6656 ipsq_try_enter_internal(ill_t *ill, queue_t *q, mblk_t *mp, ipsq_func_t func, in ipsq_try_enter_internal() argument
6661 ip_stack_t *ipst = ill->ill_ipst; in ipsq_try_enter_internal()
6671 mutex_enter(&ill->ill_lock); in ipsq_try_enter_internal()
6672 ipsq = ill->ill_phyint->phyint_ipsq; in ipsq_try_enter_internal()
6699 mutex_exit(&ill->ill_lock); in ipsq_try_enter_internal()
6708 ipsq_enq(ipsq, q, mp, func, type, ill); in ipsq_try_enter_internal()
6712 mutex_exit(&ill->ill_lock); in ipsq_try_enter_internal()
6755 ipsq_try_enter(ipif_t *ipif, ill_t *ill, queue_t *q, mblk_t *mp, in ipsq_try_enter() argument
6762 ASSERT((ipif != NULL) ^ (ill != NULL)); in ipsq_try_enter()
6765 ill = ipif->ipif_ill; in ipsq_try_enter()
6766 ipst = ill->ill_ipst; in ipsq_try_enter()
6769 ipsq = ipsq_try_enter_internal(ill, q, mp, func, type, reentry_ok); in ipsq_try_enter()
6781 qwriter_ip(ill_t *ill, queue_t *q, mblk_t *mp, ipsq_func_t func, int type, in qwriter_ip() argument
6786 ipsq = ipsq_try_enter(NULL, ill, q, mp, func, type, reentry_ok); in qwriter_ip()
6795 ill_refrele(ill); in qwriter_ip()
6897 ill_t *ill = ipif->ipif_ill; in ipsq_current_start() local
6931 mutex_enter(&ill->ill_lock); in ipsq_current_start()
6935 mutex_exit(&ill->ill_lock); in ipsq_current_start()
6938 mutex_enter(&ill->ill_lock); in ipsq_current_start()
6940 mutex_exit(&ill->ill_lock); in ipsq_current_start()
6967 ill_t *ill = ipif->ipif_ill; in ipsq_current_finish() local
6969 mutex_enter(&ill->ill_lock); in ipsq_current_finish()
6970 dlpi_pending = ill->ill_dlpi_pending; in ipsq_current_finish()
6972 ipif = ill->ill_ipif; in ipsq_current_finish()
6978 mutex_exit(&ill->ill_lock); in ipsq_current_finish()
6998 ipsq_flush(ill_t *ill) in ipsq_flush() argument
7004 ipxop_t *ipx = ill->ill_phyint->phyint_ipsq->ipsq_xop; in ipsq_flush()
7006 ASSERT(IAM_WRITER_ILL(ill)); in ipsq_flush()
7015 if (q == ill->ill_rq || q == ill->ill_wq) { in ipsq_flush()
7031 (void) ipsq_pending_mp_cleanup(ill, NULL); in ipsq_flush()
7032 ipsq_xopq_mp_cleanup(ill, NULL); in ipsq_flush()
7051 ill_t *ill; in ip_extract_lifreq() local
7060 ill = (ill_t *)q->q_ptr; in ip_extract_lifreq()
7061 isv6 = ill->ill_isv6; in ip_extract_lifreq()
7064 ipst = ill->ill_ipst; in ip_extract_lifreq()
7066 ill = NULL; in ip_extract_lifreq()
7114 if (ill == NULL) { in ip_extract_lifreq()
7121 ipif = ill->ill_ipif; in ip_extract_lifreq()
7146 if (ipif == NULL && ill != NULL && ill->ill_ipif != NULL && in ip_extract_lifreq()
7152 ipif = ill->ill_ipif; in ip_extract_lifreq()
7173 ill_t *ill; in ip_get_numifs() local
7178 ill = ILL_START_WALK_V4(&ctx, ipst); in ip_get_numifs()
7179 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ip_get_numifs()
7180 if (IS_UNDER_IPMP(ill)) in ip_get_numifs()
7182 for (ipif = ill->ill_ipif; ipif != NULL; in ip_get_numifs()
7200 ill_t *ill; in ip_get_numlifs() local
7208 ill = ILL_START_WALK_V4(&ctx, ipst); in ip_get_numlifs()
7210 ill = ILL_START_WALK_V6(&ctx, ipst); in ip_get_numlifs()
7212 ill = ILL_START_WALK_ALL(&ctx, ipst); in ip_get_numlifs()
7214 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ip_get_numlifs()
7215 if (IS_UNDER_IPMP(ill) && !(lifn_flags & LIFC_UNDER_IPMP)) in ip_get_numlifs()
7218 for (ipif = ill->ill_ipif; ipif != NULL; in ip_get_numlifs()
7229 IS_LOOPBACK(ill) || in ip_get_numlifs()
7248 ip_get_lifsrcofnum(ill_t *ill) in ip_get_lifsrcofnum() argument
7251 ill_t *ill_head = ill; in ip_get_lifsrcofnum()
7252 ip_stack_t *ipst = ill->ill_ipst; in ip_get_lifsrcofnum()
7260 if ((ill->ill_usesrc_ifindex == 0) && in ip_get_lifsrcofnum()
7261 (ill->ill_usesrc_grp_next != NULL)) { in ip_get_lifsrcofnum()
7262 for (; (ill != NULL) && (ill->ill_usesrc_grp_next != ill_head); in ip_get_lifsrcofnum()
7263 ill = ill->ill_usesrc_grp_next) in ip_get_lifsrcofnum()
7332 ill_t *ill; in ip_sioctl_get_ifconf() local
7424 ill = ILL_START_WALK_V4(&ctx, ipst); in ip_sioctl_get_ifconf()
7425 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ip_sioctl_get_ifconf()
7426 if (IS_UNDER_IPMP(ill)) in ip_sioctl_get_ifconf()
7428 for (ipif = ill->ill_ipif; ipif != NULL; in ip_sioctl_get_ifconf()
7472 ill_t *ill, *ill_head; in ip_sioctl_get_lifsrcof() local
7539 ill = ill_head = ipif->ipif_ill; in ip_sioctl_get_lifsrcof()
7546 ill = ill->ill_usesrc_grp_next; /* start from next ill */ in ip_sioctl_get_lifsrcof()
7547 for (; (ill != NULL) && (ill != ill_head); in ip_sioctl_get_lifsrcof()
7548 ill = ill->ill_usesrc_grp_next) { in ip_sioctl_get_lifsrcof()
7553 ipif = ill->ill_ipif; in ip_sioctl_get_lifsrcof()
7588 ill_t *ill; in ip_sioctl_get_lifconf() local
7693 ill = ill_first(list, list, &ctx, ipst); in ip_sioctl_get_lifconf()
7694 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ip_sioctl_get_lifconf()
7695 if (IS_UNDER_IPMP(ill) && !(flags & LIFC_UNDER_IPMP)) in ip_sioctl_get_lifconf()
7698 for (ipif = ill->ill_ipif; ipif != NULL; in ip_sioctl_get_lifconf()
7711 IS_LOOPBACK(ill) || in ip_sioctl_get_lifconf()
7733 lifr->lifr_type = ill->ill_type; in ip_sioctl_get_lifconf()
7745 ill->ill_phyint->phyint_ifindex; in ip_sioctl_get_lifconf()
8190 ill_t *ill = ipif->ipif_ill; in ip_sioctl_arp() local
8215 alength = ill->ill_phys_addr_length; in ip_sioctl_arp()
8243 (alength != ill->ill_phys_addr_length)) { in ip_sioctl_arp()
8270 if (IS_UNDER_IPMP(ill)) { in ip_sioctl_arp()
8274 if (IS_IPMP(ill)) { in ip_sioctl_arp()
8275 ipmp_illgrp_t *illg = ill->ill_grp; in ip_sioctl_arp()
8297 nce = nce_lookup_v4(ill, &ipaddr); in ip_sioctl_arp()
8357 ipif_t *ipif = ipif_get_next_ipif(NULL, ill); in ip_sioctl_arp()
8372 err = nce_lookup_then_add_v4(ill, lladdr, in ip_sioctl_arp()
8373 ill->ill_phys_addr_length, &ipaddr, flags, ND_UNCHANGED, in ip_sioctl_arp()
8388 if (IS_IPMP(ill) && err == 0) { in ip_sioctl_arp()
8389 entp = ipmp_illgrp_create_arpent(ill->ill_grp, in ip_sioctl_arp()
8390 proxyarp, ipaddr, lladdr, ill->ill_phys_addr_length, in ip_sioctl_arp()
8408 ipmp_illgrp_mark_arpent(ill->ill_grp, entp); in ip_sioctl_arp()
8426 ill_t *ill = NULL; in ip_extract_arpreq() local
8483 if (ire == NULL || ((ill = ire->ire_ill) == NULL)) { in ip_extract_arpreq()
8488 ASSERT(ire != NULL && ill != NULL); in ip_extract_arpreq()
8489 ipif = ill->ill_ipif; in ip_extract_arpreq()
8525 ip_sioctl_plink_ipmp(ill_t *ill, int ioccmd) in ip_sioctl_plink_ipmp() argument
8528 ip_stack_t *ipst = ill->ill_ipst; in ip_sioctl_plink_ipmp()
8530 ASSERT(IS_IPMP(ill)); in ip_sioctl_plink_ipmp()
8531 ASSERT(IAM_WRITER_ILL(ill)); in ip_sioctl_plink_ipmp()
8539 ipmp_illgrp_link_grp(ill->ill_grp, ill->ill_phyint->phyint_grp); in ip_sioctl_plink_ipmp()
8548 if (ill->ill_ipif_up_count + ill->ill_ipif_dup_count > 0) in ip_sioctl_plink_ipmp()
8565 err = ipmp_illgrp_unlink_grp(ill->ill_grp); in ip_sioctl_plink_ipmp()
8626 ill_t *ill; in ip_sioctl_plink_ipmod() local
8663 ill = arl_to_ill(arl); in ip_sioctl_plink_ipmod()
8664 if (ill == NULL) in ip_sioctl_plink_ipmod()
8667 ill = ipwq->q_ptr; in ip_sioctl_plink_ipmod()
8669 ASSERT(ill != NULL); in ip_sioctl_plink_ipmod()
8672 ipsq = ipsq_try_enter(NULL, ill, q, mp, ip_sioctl_plink, in ip_sioctl_plink_ipmod()
8676 ill_refrele(ill); in ip_sioctl_plink_ipmod()
8681 ASSERT(IAM_WRITER_ILL(ill)); in ip_sioctl_plink_ipmod()
8682 mutex_enter(&ill->ill_lock); in ip_sioctl_plink_ipmod()
8684 if (islink && ill->ill_muxid == 0) { in ip_sioctl_plink_ipmod()
8689 mutex_exit(&ill->ill_lock); in ip_sioctl_plink_ipmod()
8692 ill_refrele(ill); in ip_sioctl_plink_ipmod()
8696 mutex_exit(&ill->ill_lock); in ip_sioctl_plink_ipmod()
8699 ill_refrele(ill); in ip_sioctl_plink_ipmod()
8703 if (IS_IPMP(ill) && (err = ip_sioctl_plink_ipmp(ill, ioccmd)) != 0) in ip_sioctl_plink_ipmod()
8711 ill->ill_lmod_rq = NULL; in ip_sioctl_plink_ipmod()
8712 ill->ill_lmod_cnt = 0; in ip_sioctl_plink_ipmod()
8714 ill->ill_lmod_rq = RD(dwq); in ip_sioctl_plink_ipmod()
8716 ill->ill_lmod_cnt++; in ip_sioctl_plink_ipmod()
8719 ill->ill_muxid = islink ? li->l_index : 0; in ip_sioctl_plink_ipmod()
8727 ipsq_current_start(ipsq, ill->ill_ipif, ioccmd); in ip_sioctl_plink_ipmod()
8734 if (ill->ill_ipif_up_count > 0) { in ip_sioctl_plink_ipmod()
8736 ill_capability_probe(ill); in ip_sioctl_plink_ipmod()
8738 ill_capability_reset(ill, B_FALSE); in ip_sioctl_plink_ipmod()
9212 ip_sioctl_garp_reply(mblk_t *mp, ill_t *ill, void *hwaddr, int flags) in ip_sioctl_garp_reply() argument
9222 ASSERT(ill != NULL); in ip_sioctl_garp_reply()
9244 storage += ill_xarp_info(&xar->xarp_ha, ill); in ip_sioctl_garp_reply()
9245 if ((ill->ill_phys_addr_length + ill->ill_name_length) > in ip_sioctl_garp_reply()
9265 bcopy((char *)hwaddr, storage, ill->ill_phys_addr_length); in ip_sioctl_garp_reply()
9301 ill_t *ill; in ip_sioctl_addif() local
9347 ill = ipif->ipif_ill; in ip_sioctl_addif()
9348 ill_refhold(ill); in ip_sioctl_addif()
9376 ill = ill_lookup_on_name(name, B_FALSE, isv6, NULL, ipst); in ip_sioctl_addif()
9379 if (ill == NULL) in ip_sioctl_addif()
9383 ipsq = ipsq_try_enter(NULL, ill, q, mp, ip_process_ioctl, NEW_OP, in ip_sioctl_addif()
9390 ill_refrele(ill); in ip_sioctl_addif()
9396 ASSERT(IAM_WRITER_ILL(ill)); in ip_sioctl_addif()
9400 for (ipif = ill->ill_ipif; ipif != NULL; in ip_sioctl_addif()
9414 if ((ipif = ipif_allocate(ill, found_sep ? id : -1, IRE_LOCAL, in ip_sioctl_addif()
9420 (void) sprintf(lifr->lifr_name, "%s%c%d", ill->ill_name, in ip_sioctl_addif()
9448 ill_t *ill = ipif->ipif_ill; in ip_sioctl_removeif() local
9456 ill->ill_name, ipif->ipif_id, (void *)ipif)); in ip_sioctl_removeif()
9472 if (ipif->ipif_id == 0 && ill->ill_net_type == IRE_LOOPBACK) { in ip_sioctl_removeif()
9478 mutex_enter(&ill->ill_lock); in ip_sioctl_removeif()
9479 ill->ill_state_flags |= ILL_CONDEMNED; in ip_sioctl_removeif()
9480 for (ipif = ill->ill_ipif; ipif != NULL; in ip_sioctl_removeif()
9484 mutex_exit(&ill->ill_lock); in ip_sioctl_removeif()
9486 ipif = ill->ill_ipif; in ip_sioctl_removeif()
9488 ill_delete(ill); in ip_sioctl_removeif()
9490 mutex_enter(&ill->ill_lock); in ip_sioctl_removeif()
9493 if (ill_is_freeable(ill)) { in ip_sioctl_removeif()
9494 mutex_exit(&ill->ill_lock); in ip_sioctl_removeif()
9496 ill_delete_tail(ill); in ip_sioctl_removeif()
9497 mi_free(ill); in ip_sioctl_removeif()
9503 mutex_exit(&ill->ill_lock); in ip_sioctl_removeif()
9523 ipif = ipif_lookup_addr_exact_v6(&sin6->sin6_addr, ill, in ip_sioctl_removeif()
9530 ipif = ipif_lookup_addr_exact(sin->sin_addr.s_addr, ill, in ip_sioctl_removeif()
9557 mutex_enter(&ill->ill_lock); in ip_sioctl_removeif()
9559 mutex_exit(&ill->ill_lock); in ip_sioctl_removeif()
9564 mutex_enter(&ill->ill_lock); in ip_sioctl_removeif()
9568 mutex_exit(&ill->ill_lock); in ip_sioctl_removeif()
9577 mutex_exit(&ill->ill_lock); in ip_sioctl_removeif()
9594 ill_t *ill = ipif->ipif_ill; in ip_sioctl_removeif_restart() local
9600 ill->ill_name, ipif->ipif_id, (void *)ipif)); in ip_sioctl_removeif_restart()
9602 if (ipif->ipif_id == 0 && ill->ill_net_type == IRE_LOOPBACK) { in ip_sioctl_removeif_restart()
9603 ASSERT(ill->ill_state_flags & ILL_CONDEMNED); in ip_sioctl_removeif_restart()
9604 ill_delete_tail(ill); in ip_sioctl_removeif_restart()
9605 mi_free(ill); in ip_sioctl_removeif_restart()
9627 ill_t *ill; in ip_sioctl_prefix() local
9643 ill = ipif->ipif_ill; in ip_sioctl_prefix()
9646 IN6_IS_ADDR_UNSPECIFIED(&ill->ill_token)) in ip_sioctl_prefix()
9650 sin6->sin6_addr.s6_addr32[i] |= ill->ill_token.s6_addr32[i]; in ip_sioctl_prefix()
9683 ill_t *ill; in ip_sioctl_addr() local
9691 ill = ipif->ipif_ill; in ip_sioctl_addr()
9701 phyi = ill->ill_phyint; in ip_sioctl_addr()
9713 (ill->ill_flags & ILLF_MULTICAST) && in ip_sioctl_addr()
9722 if (ill->ill_flags & ILLF_NOLINKLOCAL) { in ip_sioctl_addr()
9763 if (ill->ill_allowed_ips_cnt > 0) { in ip_sioctl_addr()
9764 for (i = 0; i < ill->ill_allowed_ips_cnt; i++) { in ip_sioctl_addr()
9765 if (IN6_ARE_ADDR_EQUAL(&ill->ill_allowed_ips[i], in ip_sioctl_addr()
9769 if (i == ill->ill_allowed_ips_cnt) { in ip_sioctl_addr()
9811 ill_t *ill = ipif->ipif_ill; in ip_sioctl_addr_tail() local
9819 ill->ill_name, ipif->ipif_id, (void *)ipif)); in ip_sioctl_addr_tail()
9836 mutex_enter(&ill->ill_lock); in ip_sioctl_addr_tail()
9857 if (--ill->ill_ipif_dup_count == 0 && !need_up && in ip_sioctl_addr_tail()
9858 ill->ill_ipif_up_count == 0 && ill->ill_dl_up) { in ip_sioctl_addr_tail()
9874 ill->ill_manual_linklocal = 1; in ip_sioctl_addr_tail()
9886 ill_nic_event_dispatch(ill, MAP_IPIF_ID(ipif->ipif_id), in ip_sioctl_addr_tail()
9890 mutex_exit(&ill->ill_lock); in ip_sioctl_addr_tail()
9904 update_conn_ill(NULL, ill->ill_ipst); in ip_sioctl_addr_tail()
9908 ill_dl_down(ill); in ip_sioctl_addr_tail()
9910 if (need_arp_down && !ill->ill_isv6) in ip_sioctl_addr_tail()
9917 ire_increment_multicast_generation(ill->ill_ipst, ill->ill_isv6); in ip_sioctl_addr_tail()
10046 ill_t *ill = ipif->ipif_ill; in ip_sioctl_dstaddr_tail() local
10051 ip1dbg(("ip_sioctl_dstaddr_tail(%s:%u %p)\n", ill->ill_name, in ip_sioctl_dstaddr_tail()
10070 mutex_enter(&ill->ill_lock); in ip_sioctl_dstaddr_tail()
10082 ill->ill_flags |= ILLF_NONUD; in ip_sioctl_dstaddr_tail()
10096 if (--ill->ill_ipif_dup_count == 0 && !need_up && in ip_sioctl_dstaddr_tail()
10097 ill->ill_ipif_up_count == 0 && ill->ill_dl_up) { in ip_sioctl_dstaddr_tail()
10110 ill->ill_manual_dst_linklocal = 1; in ip_sioctl_dstaddr_tail()
10116 mutex_exit(&ill->ill_lock); in ip_sioctl_dstaddr_tail()
10131 ill_dl_down(ill); in ip_sioctl_dstaddr_tail()
10193 ill_t *ill = ipif->ipif_ill; in ip_sioctl_flags_onoff() local
10194 phyint_t *phyi = ill->ill_phyint; in ip_sioctl_flags_onoff()
10198 intf_flags = ipif->ipif_flags | ill->ill_flags | phyi->phyint_flags; in ip_sioctl_flags_onoff()
10200 if (IS_IPMP(ill)) in ip_sioctl_flags_onoff()
10231 ill_t *ill; in ip_sioctl_flags() local
10245 ill = ipif->ipif_ill; in ip_sioctl_flags()
10246 phyi = ill->ill_phyint; in ip_sioctl_flags()
10256 intf_flags = ipif->ipif_flags | ill->ill_flags | phyi->phyint_flags; in ip_sioctl_flags()
10262 ASSERT((ill->ill_flags & ~(IFF_PHYINTINST_FLAGS)) == 0); in ip_sioctl_flags()
10276 if (IS_IPMP(ill) && ((flags ^ intf_flags) & IFF_IPMP_INVALID)) in ip_sioctl_flags()
10326 if (IS_UNDER_IPMP(ill)) { in ip_sioctl_flags()
10393 if (ill->ill_usesrc_grp_next != NULL || in ip_sioctl_flags()
10420 err = ill_forward_set(ill, ((turn_on & ILLF_ROUTER) != 0)); in ip_sioctl_flags()
10434 mutex_enter(&ill->ill_lock); in ip_sioctl_flags()
10435 mutex_enter(&ill->ill_phyint->phyint_lock); in ip_sioctl_flags()
10438 ill->ill_flags |= (turn_on & IFF_PHYINTINST_FLAGS); in ip_sioctl_flags()
10439 ill->ill_flags &= (~turn_off & IFF_PHYINTINST_FLAGS); in ip_sioctl_flags()
10442 mutex_exit(&ill->ill_lock); in ip_sioctl_flags()
10443 mutex_exit(&ill->ill_phyint->phyint_lock); in ip_sioctl_flags()
10452 ASSERT(!IS_IPMP(ill)); in ip_sioctl_flags()
10459 if (IS_UNDER_IPMP(ill)) in ip_sioctl_flags()
10474 ire_increment_multicast_generation(ill->ill_ipst, in ip_sioctl_flags()
10475 ill->ill_isv6); in ip_sioctl_flags()
10479 mutex_enter(&ill->ill_lock); in ip_sioctl_flags()
10482 mutex_exit(&ill->ill_lock); in ip_sioctl_flags()
10541 ill->ill_logical_down = 1; in ip_sioctl_flags()
10555 ill_down_ipifs(ill, B_TRUE); in ip_sioctl_flags()
10558 mutex_enter(&ill->ill_lock); in ip_sioctl_flags()
10559 if (!ill_is_quiescent(ill)) { in ip_sioctl_flags()
10562 success = ipsq_pending_mp_add(connp, ill->ill_ipif, in ip_sioctl_flags()
10564 mutex_exit(&ill->ill_lock); in ip_sioctl_flags()
10568 mutex_exit(&ill->ill_lock); in ip_sioctl_flags()
10577 ill_t *ill; in ip_sioctl_flags_tail() local
10589 ill = ipif->ipif_ill; in ip_sioctl_flags_tail()
10590 phyi = ill->ill_phyint; in ip_sioctl_flags_tail()
10607 mutex_enter(&ill->ill_lock); in ip_sioctl_flags_tail()
10611 ill->ill_flags |= (turn_on & IFF_PHYINTINST_FLAGS); in ip_sioctl_flags_tail()
10612 ill->ill_flags &= (~turn_off & IFF_PHYINTINST_FLAGS); in ip_sioctl_flags_tail()
10620 mutex_exit(&ill->ill_lock); in ip_sioctl_flags_tail()
10632 ASSERT(!IS_IPMP(ill)); in ip_sioctl_flags_tail()
10639 if (IS_UNDER_IPMP(ill)) in ip_sioctl_flags_tail()
10652 err = ill_up_ipifs(ill, q, mp); in ip_sioctl_flags_tail()
10687 ire_increment_multicast_generation(ill->ill_ipst, ill->ill_isv6); in ip_sioctl_flags_tail()
10736 ill_t *ill = ipif->ipif_ill; in ip_sioctl_get_flags() local
10737 phyint_t *phyi = ill->ill_phyint; in ip_sioctl_get_flags()
10742 ASSERT((ill->ill_flags & ~(IFF_PHYINTINST_FLAGS)) == 0); in ip_sioctl_get_flags()
10749 mutex_enter(&ill->ill_lock); in ip_sioctl_get_flags()
10755 ill->ill_flags | phyi->phyint_flags) & 0xffff); in ip_sioctl_get_flags()
10761 ill->ill_flags | phyi->phyint_flags; in ip_sioctl_get_flags()
10763 mutex_exit(&ill->ill_lock); in ip_sioctl_get_flags()
10780 ill_t *ill; in ip_sioctl_mtu() local
10795 ill = ipif->ipif_ill; in ip_sioctl_mtu()
10801 mutex_enter(&ill->ill_lock); in ip_sioctl_mtu()
10802 if (mtu > ill->ill_max_frag || mtu < ip_min_mtu) { in ip_sioctl_mtu()
10803 mutex_exit(&ill->ill_lock); in ip_sioctl_mtu()
10807 if (ill->ill_mc_mtu > mtu) in ip_sioctl_mtu()
10808 ill->ill_mc_mtu = mtu; in ip_sioctl_mtu()
10814 ill->ill_mtu = mtu; in ip_sioctl_mtu()
10815 ill->ill_flags |= ILLF_FIXEDMTU; in ip_sioctl_mtu()
10816 mutex_exit(&ill->ill_lock); in ip_sioctl_mtu()
10822 dce_increment_all_generations(ill->ill_isv6, ill->ill_ipst); in ip_sioctl_mtu()
10827 if (IS_UNDER_IPMP(ill)) in ip_sioctl_mtu()
10828 ipmp_illgrp_refresh_mtu(ill->ill_grp); in ip_sioctl_mtu()
10869 ill_t *ill = ipif->ipif_ill; in ip_sioctl_brdaddr() local
10870 ip_stack_t *ipst = ill->ill_ipst; in ip_sioctl_brdaddr()
10872 ip1dbg(("ip_sioctl_brdaddr(%s:%u)\n", ill->ill_name, in ip_sioctl_brdaddr()
10893 ill, ipif->ipif_zoneid, NULL, in ip_sioctl_brdaddr()
11271 ill_t *ill = ipif->ipif_ill; in ip_sioctl_subnet_tail() local
11278 mutex_enter(&ill->ill_lock); in ip_sioctl_subnet_tail()
11284 mutex_exit(&ill->ill_lock); in ip_sioctl_subnet_tail()
11369 ill_t *ill = ipif->ipif_ill; in ip_sioctl_token() local
11407 if (V6_MASK_EQ(v6addr, v6mask, ill->ill_token) && in ip_sioctl_token()
11408 ill->ill_token_length == addrlen) in ip_sioctl_token()
11428 ill_t *ill = ipif->ipif_ill; in ip_sioctl_token_tail() local
11444 mutex_enter(&ill->ill_lock); in ip_sioctl_token_tail()
11445 V6_MASK_COPY(v6addr, v6mask, ill->ill_token); in ip_sioctl_token_tail()
11446 ill->ill_token_length = addrlen; in ip_sioctl_token_tail()
11447 ill->ill_manual_token = 1; in ip_sioctl_token_tail()
11450 ipif_setlinklocal(ill->ill_ipif); in ip_sioctl_token_tail()
11452 mutex_exit(&ill->ill_lock); in ip_sioctl_token_tail()
11475 ill_t *ill; in ip_sioctl_get_token() local
11484 ill = ipif->ipif_ill; in ip_sioctl_get_token()
11485 if (!ill->ill_isv6) in ip_sioctl_get_token()
11490 ASSERT(!IN6_IS_ADDR_V4MAPPED(&ill->ill_token)); in ip_sioctl_get_token()
11491 sin6->sin6_addr = ill->ill_token; in ip_sioctl_get_token()
11492 lifr->lifr_addrlen = ill->ill_token_length; in ip_sioctl_get_token()
11505 ill_t *ill = ipif->ipif_ill; in ip_sioctl_lnkinfo() local
11541 (lir->lir_maxmtu > ill->ill_current_frag || in ip_sioctl_lnkinfo()
11551 mutex_enter(&ill->ill_lock); in ip_sioctl_lnkinfo()
11557 ill->ill_user_mtu = lir->lir_maxmtu; in ip_sioctl_lnkinfo()
11560 ill->ill_reachable_time = lir->lir_reachtime; in ip_sioctl_lnkinfo()
11563 ill->ill_reachable_retrans_time = lir->lir_reachretrans; in ip_sioctl_lnkinfo()
11565 ill->ill_max_hops = lir->lir_maxhops; in ip_sioctl_lnkinfo()
11566 ill->ill_max_buf = ND_MAX_Q; in ip_sioctl_lnkinfo()
11567 if (!(ill->ill_flags & ILLF_FIXEDMTU) && ill->ill_user_mtu != 0) { in ip_sioctl_lnkinfo()
11577 ill->ill_mtu = MIN(ill->ill_current_frag, ill->ill_user_mtu); in ip_sioctl_lnkinfo()
11578 ill->ill_mc_mtu = MIN(ill->ill_mc_mtu, ill->ill_user_mtu); in ip_sioctl_lnkinfo()
11580 mutex_exit(&ill->ill_lock); in ip_sioctl_lnkinfo()
11586 if (!(ill->ill_flags & ILLF_FIXEDMTU) && (lir->lir_maxmtu != 0)) in ip_sioctl_lnkinfo()
11587 dce_increment_all_generations(ill->ill_isv6, ill->ill_ipst); in ip_sioctl_lnkinfo()
11592 if (IS_UNDER_IPMP(ill)) in ip_sioctl_lnkinfo()
11593 ipmp_illgrp_refresh_mtu(ill->ill_grp); in ip_sioctl_lnkinfo()
11604 ill_t *ill = ipif->ipif_ill; in ip_sioctl_get_lnkinfo() local
11612 lir->lir_maxhops = ill->ill_max_hops; in ip_sioctl_get_lnkinfo()
11613 lir->lir_reachtime = ill->ill_reachable_time; in ip_sioctl_get_lnkinfo()
11614 lir->lir_reachretrans = ill->ill_reachable_retrans_time; in ip_sioctl_get_lnkinfo()
11615 lir->lir_maxmtu = ill->ill_mtu; in ip_sioctl_get_lnkinfo()
11631 ill_t *ill; in ip_subnet_mask() local
11645 ill = ILL_START_WALK_V4(&ctx, ipst); in ip_subnet_mask()
11646 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ip_subnet_mask()
11647 mutex_enter(&ill->ill_lock); in ip_subnet_mask()
11648 for (ipif = ill->ill_ipif; ipif != NULL; in ip_subnet_mask()
11673 mutex_exit(&ill->ill_lock); in ip_subnet_mask()
11681 mutex_exit(&ill->ill_lock); in ip_subnet_mask()
11869 is_lifname_valid(ill_t *ill, unsigned int ipif_id) in is_lifname_valid() argument
11871 if (snprintf(NULL, 0, "%s:%d", ill->ill_name, ipif_id) >= LIFNAMSIZ) in is_lifname_valid()
11874 if (ipif_id >= ill->ill_ipst->ips_ip_addrs_per_if) in is_lifname_valid()
11888 ill_t *ill; in ipif_insert() local
11897 ill = ipif->ipif_ill; in ipif_insert()
11898 ASSERT(ill != NULL); in ipif_insert()
11899 ipst = ill->ill_ipst; in ipif_insert()
11908 mutex_enter(&ill->ill_lock); in ipif_insert()
11910 tipifp = &(ill->ill_ipif); in ipif_insert()
11920 if ((err = is_lifname_valid(ill, id)) != 0) { in ipif_insert()
11921 mutex_exit(&ill->ill_lock); in ipif_insert()
11927 } else if ((err = is_lifname_valid(ill, id)) == 0) { in ipif_insert()
11936 mutex_exit(&ill->ill_lock); in ipif_insert()
11942 ASSERT(tipifp != &(ill->ill_ipif) || id == 0); in ipif_insert()
11946 mutex_exit(&ill->ill_lock); in ipif_insert()
11957 ill_t *ill = ipif->ipif_ill; in ipif_remove() local
11959 ASSERT(RW_WRITE_HELD(&ill->ill_ipst->ips_ill_g_lock)); in ipif_remove()
11961 mutex_enter(&ill->ill_lock); in ipif_remove()
11962 ipifp = &ill->ill_ipif; in ipif_remove()
11969 mutex_exit(&ill->ill_lock); in ipif_remove()
11988 ipif_allocate(ill_t *ill, int id, uint_t ire_type, boolean_t initialize, in ipif_allocate() argument
11993 ip_stack_t *ipst = ill->ill_ipst; in ipif_allocate()
11996 ill->ill_name, id, (void *)ill)); in ipif_allocate()
11997 ASSERT(ire_type == IRE_LOOPBACK || IAM_WRITER_ILL(ill)); in ipif_allocate()
12009 ipif->ipif_ill = ill; in ipif_allocate()
12015 ipif->ipif_zoneid = ill->ill_zoneid; in ipif_allocate()
12031 if (ill->ill_name[0] != '\0') in ipif_allocate()
12040 if (id == 0 && IS_IPMP(ill)) { in ipif_allocate()
12041 if (ipmp_illgrp_create(ill) == NULL) { in ipif_allocate()
12059 mutex_enter(&ill->ill_lock); in ipif_allocate()
12064 ill->ill_flags |= ILLF_IPV6; in ipif_allocate()
12068 ill->ill_flags |= ILLF_IPV4; in ipif_allocate()
12096 if (ill->ill_bcast_addr_length != 0 || IS_IPMP(ill)) { in ipif_allocate()
12101 ill->ill_flags |= ILLF_MULTICAST; in ipif_allocate()
12105 if (ill->ill_net_type != IRE_LOOPBACK) { in ipif_allocate()
12114 ill->ill_flags |= ILLF_NONUD; in ipif_allocate()
12116 ill->ill_flags |= ILLF_NOARP; in ipif_allocate()
12118 if (ill->ill_phys_addr_length == 0) { in ipif_allocate()
12119 if (IS_VNI(ill)) { in ipif_allocate()
12123 ill->ill_flags |= ILLF_MULTICAST; in ipif_allocate()
12124 if (ill->ill_net_type != IRE_LOOPBACK) in ipif_allocate()
12130 mutex_exit(&ill->ill_lock); in ipif_allocate()
12141 ill_t *ill = ipif->ipif_ill; in ipif_arp_down() local
12144 ip1dbg(("ipif_arp_down(%s:%u)\n", ill->ill_name, ipif->ipif_id)); in ipif_arp_down()
12148 ill_t *, ill, ipif_t *, ipif); in ipif_arp_down()
12156 if (ill->ill_ipif_up_count == 0 && ill->ill_ipif_dup_count == 0 && in ipif_arp_down()
12157 !ill->ill_logical_down && ill->ill_net_type == IRE_IF_RESOLVER) { in ipif_arp_down()
12162 if (IS_IPMP(ill)) in ipif_arp_down()
12163 ipmp_illgrp_refresh_arpent(ill->ill_grp); in ipif_arp_down()
12166 err = arp_ll_down(ill); in ipif_arp_down()
12190 ill_t *ill = ipif->ipif_ill; in ipif_resolver_up() local
12195 ill->ill_name, ipif->ipif_id, (uint_t)ipif->ipif_flags)); in ipif_resolver_up()
12205 mutex_enter(&ill->ill_lock); in ipif_resolver_up()
12208 ill->ill_ipif_dup_count--; in ipif_resolver_up()
12211 mutex_exit(&ill->ill_lock); in ipif_resolver_up()
12216 if (ill->ill_net_type != IRE_IF_RESOLVER) { in ipif_resolver_up()
12221 if (ill->ill_isv6) in ipif_resolver_up()
12236 ill_t *ill = ipif->ipif_ill; in ipif_nce_start_dad() local
12237 boolean_t isv6 = ill->ill_isv6; in ipif_nce_start_dad()
12245 if (ill->ill_net_type != IRE_IF_RESOLVER || in ipif_nce_start_dad()
12293 ill_restart_dad(ill_t *ill, boolean_t went_up) in ill_restart_dad() argument
12297 if (ill == NULL) in ill_restart_dad()
12304 if (!ill->ill_isv6 && arp_no_defense) { in ill_restart_dad()
12305 ip_rts_ifmsg(ill->ill_ipif, RTSQ_DEFAULT); in ill_restart_dad()
12309 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ill_restart_dad()
12330 if (ipif == ill->ill_ipif) { in ill_restart_dad()
12331 ip_rts_ifmsg(ill->ill_ipif, in ill_restart_dad()
12349 ip_rts_ifmsg(ill->ill_ipif, RTSQ_DEFAULT); in ill_restart_dad()
12366 ill_up_ipifs_on_ill(ill_t *ill, queue_t *q, mblk_t *mp) in ill_up_ipifs_on_ill() argument
12371 if (ill == NULL) in ill_up_ipifs_on_ill()
12374 ASSERT(IAM_WRITER_ILL(ill)); in ill_up_ipifs_on_ill()
12375 ill->ill_up_ipifs = B_TRUE; in ill_up_ipifs_on_ill()
12376 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ill_up_ipifs_on_ill()
12387 ill->ill_up_ipifs = B_FALSE; in ill_up_ipifs_on_ill()
12396 ill_up_ipifs(ill_t *ill, queue_t *q, mblk_t *mp) in ill_up_ipifs() argument
12400 ASSERT(IAM_WRITER_ILL(ill)); in ill_up_ipifs()
12402 if (ill->ill_replumbing) { in ill_up_ipifs()
12403 ill->ill_replumbing = 0; in ill_up_ipifs()
12408 if (!ill->ill_isv6) in ill_up_ipifs()
12409 arp_send_replumb_conf(ill); in ill_up_ipifs()
12411 err = ill_up_ipifs_on_ill(ill->ill_phyint->phyint_illv4, q, mp); in ill_up_ipifs()
12415 return (ill_up_ipifs_on_ill(ill->ill_phyint->phyint_illv6, q, mp)); in ill_up_ipifs()
12423 ill_down_ipifs(ill_t *ill, boolean_t logical) in ill_down_ipifs() argument
12427 ASSERT(IAM_WRITER_ILL(ill)); in ill_down_ipifs()
12429 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ill_down_ipifs()
12471 ill_t *ill = q->q_ptr; in ip_join_illgrps() local
12472 phyint_t *phyi = ill->ill_phyint; in ip_join_illgrps()
12474 ip_stack_t *ipst = ill->ill_ipst; in ip_join_illgrps()
12477 ASSERT(!IS_IPMP(ill) && grp != NULL); in ip_join_illgrps()
12504 ill_t *ill = ipif->ipif_ill; in ip_sioctl_groupname() local
12505 ip_stack_t *ipst = ill->ill_ipst; in ip_sioctl_groupname()
12506 phyint_t *phyi = ill->ill_phyint; in ip_sioctl_groupname()
12514 ASSERT(IAM_WRITER_ILL(ill)); in ip_sioctl_groupname()
12516 if (ipif->ipif_id != 0 || ill->ill_usesrc_grp_next != NULL || in ip_sioctl_groupname()
12538 if (IS_IPMP(ill)) { in ip_sioctl_groupname()
12552 if (IS_UNDER_IPMP(ill)) { in ip_sioctl_groupname()
12596 ill_refhold(ill); in ip_sioctl_groupname()
12597 qwriter_ip(ill, ill->ill_rq, ipsq_mp, ip_join_illgrps, in ip_sioctl_groupname()
12606 if (IS_UNDER_IPMP(ill)) in ip_sioctl_groupname()
12623 ill_t *ill; in ip_sioctl_get_binding() local
12631 if ((ill = ipif->ipif_bound_ill) == NULL) in ip_sioctl_get_binding()
12634 (void) strlcpy(lifr->lifr_binding, ill->ill_name, LIFNAMSIZ); in ip_sioctl_get_binding()
12687 ill_dl_down(ill_t *ill) in ill_dl_down() argument
12689 DTRACE_PROBE2(ill__downup, char *, "ill_dl_down", ill_t *, ill); in ill_dl_down()
12700 mblk_t *mp = ill->ill_unbind_mp; in ill_dl_down()
12702 ip1dbg(("ill_dl_down(%s)\n", ill->ill_name)); in ill_dl_down()
12704 if (!ill->ill_replumbing) { in ill_dl_down()
12706 update_conn_ill(ill, ill->ill_ipst); in ill_dl_down()
12708 ill_leave_multicast(ill); in ill_dl_down()
12711 ill->ill_unbind_mp = NULL; in ill_dl_down()
12715 ill->ill_name)); in ill_dl_down()
12716 mutex_enter(&ill->ill_lock); in ill_dl_down()
12717 ill->ill_state_flags |= ILL_DL_UNBIND_IN_PROGRESS; in ill_dl_down()
12718 mutex_exit(&ill->ill_lock); in ill_dl_down()
12730 if (ill->ill_state_flags & ILL_CONDEMNED) in ill_dl_down()
12731 ill_capability_dld_disable(ill); in ill_dl_down()
12732 ill_capability_reset(ill, B_FALSE); in ill_dl_down()
12733 ill_dlpi_send(ill, mp); in ill_dl_down()
12735 mutex_enter(&ill->ill_lock); in ill_dl_down()
12736 ill->ill_dl_up = 0; in ill_dl_down()
12737 ill_nic_event_dispatch(ill, 0, NE_DOWN, NULL, 0); in ill_dl_down()
12738 mutex_exit(&ill->ill_lock); in ill_dl_down()
12742 ill_dlpi_dispatch(ill_t *ill, mblk_t *mp) in ill_dlpi_dispatch() argument
12754 dl_primstr(prim), prim, ill->ill_name)); in ill_dlpi_dispatch()
12760 ill->ill_phys_addr_pend = dlpap->dl_addr_type; in ill_dlpi_dispatch()
12764 mutex_enter(&ill->ill_lock); in ill_dlpi_dispatch()
12765 ill->ill_state_flags &= ~ILL_DL_UNBIND_IN_PROGRESS; in ill_dlpi_dispatch()
12766 mutex_exit(&ill->ill_lock); in ill_dlpi_dispatch()
12775 mutex_enter(&ill->ill_lock); in ill_dlpi_dispatch()
12776 if (!(ill->ill_state_flags & ILL_CONDEMNED) || in ill_dlpi_dispatch()
12778 ill->ill_dlpi_pending = prim; in ill_dlpi_dispatch()
12782 mutex_exit(&ill->ill_lock); in ill_dlpi_dispatch()
12784 char *, dl_primstr(prim), ill_t *, ill); in ill_dlpi_dispatch()
12785 putnext(ill->ill_wq, mp); in ill_dlpi_dispatch()
12791 ill_dlpi_done(ill, prim); in ill_dlpi_dispatch()
12811 ill_dlpi_send(ill_t *ill, mblk_t *mp) in ill_dlpi_send() argument
12822 if (!IAM_WRITER_ILL(ill)) { in ill_dlpi_send()
12823 ill_refhold(ill); in ill_dlpi_send()
12825 qwriter_ip(ill, ill->ill_wq, mp, ill_dlpi_send_writer, in ill_dlpi_send()
12830 mutex_enter(&ill->ill_lock); in ill_dlpi_send()
12831 if (ill->ill_dlpi_pending != DL_PRIM_INVAL) { in ill_dlpi_send()
12833 mpp = &ill->ill_dlpi_deferred; in ill_dlpi_send()
12838 "while %s pending\n", ill->ill_name, in ill_dlpi_send()
12839 dl_primstr(ill->ill_dlpi_pending))); in ill_dlpi_send()
12842 mutex_exit(&ill->ill_lock); in ill_dlpi_send()
12845 mutex_exit(&ill->ill_lock); in ill_dlpi_send()
12846 ill_dlpi_dispatch(ill, mp); in ill_dlpi_send()
12850 ill_capability_send(ill_t *ill, mblk_t *mp) in ill_capability_send() argument
12852 ill->ill_capab_pending_cnt++; in ill_capability_send()
12853 ill_dlpi_send(ill, mp); in ill_capability_send()
12857 ill_capability_done(ill_t *ill) in ill_capability_done() argument
12859 ASSERT(ill->ill_capab_pending_cnt != 0); in ill_capability_done()
12861 ill_dlpi_done(ill, DL_CAPABILITY_REQ); in ill_capability_done()
12863 ill->ill_capab_pending_cnt--; in ill_capability_done()
12864 if (ill->ill_capab_pending_cnt == 0 && in ill_capability_done()
12865 ill->ill_dlpi_capab_state == IDCS_OK) in ill_capability_done()
12866 ill_capability_reset_alloc(ill); in ill_capability_done()
12873 ill_dlpi_send_deferred(ill_t *ill) in ill_dlpi_send_deferred() argument
12881 mutex_enter(&ill->ill_lock); in ill_dlpi_send_deferred()
12882 ill->ill_dlpi_pending = DL_PRIM_INVAL; in ill_dlpi_send_deferred()
12883 mp = ill->ill_dlpi_deferred; in ill_dlpi_send_deferred()
12884 ill->ill_dlpi_deferred = NULL; in ill_dlpi_send_deferred()
12885 mutex_exit(&ill->ill_lock); in ill_dlpi_send_deferred()
12890 ill_dlpi_send(ill, mp); in ill_dlpi_send_deferred()
12899 ill_dlpi_clear_deferred(ill_t *ill) in ill_dlpi_clear_deferred() argument
12903 mutex_enter(&ill->ill_lock); in ill_dlpi_clear_deferred()
12904 ill->ill_dlpi_pending = DL_PRIM_INVAL; in ill_dlpi_clear_deferred()
12905 mp = ill->ill_dlpi_deferred; in ill_dlpi_clear_deferred()
12906 ill->ill_dlpi_deferred = NULL; in ill_dlpi_clear_deferred()
12907 mutex_exit(&ill->ill_lock); in ill_dlpi_clear_deferred()
12919 ill_dlpi_pending(ill_t *ill, t_uscalar_t prim) in ill_dlpi_pending() argument
12923 mutex_enter(&ill->ill_lock); in ill_dlpi_pending()
12924 if (ill->ill_dlpi_pending == prim) { in ill_dlpi_pending()
12925 mutex_exit(&ill->ill_lock); in ill_dlpi_pending()
12933 if (ill->ill_state_flags & ILL_CONDEMNED) { in ill_dlpi_pending()
12934 mutex_exit(&ill->ill_lock); in ill_dlpi_pending()
12937 pending = ill->ill_dlpi_pending; in ill_dlpi_pending()
12938 mutex_exit(&ill->ill_lock); in ill_dlpi_pending()
12941 (void) mi_strlog(ill->ill_rq, 1, SL_CONSOLE|SL_ERROR|SL_TRACE, in ill_dlpi_pending()
12943 dl_primstr(prim), ill->ill_name); in ill_dlpi_pending()
12945 (void) mi_strlog(ill->ill_rq, 1, SL_CONSOLE|SL_ERROR|SL_TRACE, in ill_dlpi_pending()
12947 dl_primstr(prim), ill->ill_name, dl_primstr(pending)); in ill_dlpi_pending()
12961 ill_dlpi_done(ill_t *ill, t_uscalar_t prim) in ill_dlpi_done() argument
12964 ipsq_t *ipsq = ill->ill_phyint->phyint_ipsq; in ill_dlpi_done()
12968 mutex_enter(&ill->ill_lock); in ill_dlpi_done()
12971 ASSERT(ill->ill_dlpi_pending == prim); in ill_dlpi_done()
12973 ip1dbg(("ill_dlpi_done: %s has completed %s (%u)\n", ill->ill_name, in ill_dlpi_done()
12974 dl_primstr(ill->ill_dlpi_pending), ill->ill_dlpi_pending)); in ill_dlpi_done()
12976 if ((mp = ill->ill_dlpi_deferred) == NULL) { in ill_dlpi_done()
12977 ill->ill_dlpi_pending = DL_PRIM_INVAL; in ill_dlpi_done()
12983 cv_signal(&ill->ill_cv); in ill_dlpi_done()
12984 mutex_exit(&ill->ill_lock); in ill_dlpi_done()
12988 ill->ill_dlpi_deferred = mp->b_next; in ill_dlpi_done()
12990 mutex_exit(&ill->ill_lock); in ill_dlpi_done()
12992 ill_dlpi_dispatch(ill, mp); in ill_dlpi_done()
13005 ill_dlpi_queue(ill_t *ill, mblk_t *mp) in ill_dlpi_queue() argument
13011 mutex_enter(&ill->ill_lock); in ill_dlpi_queue()
13013 mpp = &ill->ill_dlpi_deferred; in ill_dlpi_queue()
13018 mutex_exit(&ill->ill_lock); in ill_dlpi_queue()
13029 ill_dlpi_send_queued(ill_t *ill) in ill_dlpi_send_queued() argument
13036 if (IS_IPMP(ill)) { in ill_dlpi_send_queued()
13038 release_ill = ipmp_illgrp_hold_cast_ill(ill->ill_grp); in ill_dlpi_send_queued()
13043 ill = release_ill; in ill_dlpi_send_queued()
13045 mutex_enter(&ill->ill_lock); in ill_dlpi_send_queued()
13046 while ((mp = ill->ill_dlpi_deferred) != NULL) { in ill_dlpi_send_queued()
13047 if (ill->ill_dlpi_pending != DL_PRIM_INVAL) { in ill_dlpi_send_queued()
13049 mutex_exit(&ill->ill_lock); in ill_dlpi_send_queued()
13052 ill->ill_dlpi_deferred = mp->b_next; in ill_dlpi_send_queued()
13054 if (!ill->ill_dl_up) { in ill_dlpi_send_queued()
13066 if (!(ill->ill_state_flags & ILL_CONDEMNED) || in ill_dlpi_send_queued()
13068 ill->ill_dlpi_pending = prim; in ill_dlpi_send_queued()
13070 mutex_exit(&ill->ill_lock); in ill_dlpi_send_queued()
13073 char *, dl_primstr(prim), ill_t *, ill); in ill_dlpi_send_queued()
13074 putnext(ill->ill_wq, mp); in ill_dlpi_send_queued()
13075 mutex_enter(&ill->ill_lock); in ill_dlpi_send_queued()
13077 mutex_exit(&ill->ill_lock); in ill_dlpi_send_queued()
13093 ill_mcast_queue(ill_t *ill, mblk_t *mp) in ill_mcast_queue() argument
13098 ASSERT(RW_LOCK_HELD(&ill->ill_mcast_lock)); in ill_mcast_queue()
13100 if (IS_IPMP(ill)) { in ill_mcast_queue()
13102 release_ill = ipmp_illgrp_hold_cast_ill(ill->ill_grp); in ill_mcast_queue()
13105 BUMP_MIB(ill->ill_ip_mib, ipIfStatsOutDiscards); in ill_mcast_queue()
13107 mp, ill); in ill_mcast_queue()
13111 ill = release_ill; in ill_mcast_queue()
13114 mutex_enter(&ill->ill_lock); in ill_mcast_queue()
13116 mpp = &ill->ill_mcast_deferred; in ill_mcast_queue()
13121 mutex_exit(&ill->ill_lock); in ill_mcast_queue()
13144 ill_mcast_send_queued(ill_t *ill) in ill_mcast_send_queued() argument
13150 if (IS_IPMP(ill)) { in ill_mcast_send_queued()
13152 release_ill = ipmp_illgrp_hold_cast_ill(ill->ill_grp); in ill_mcast_send_queued()
13160 ill = release_ill; in ill_mcast_send_queued()
13172 ixas.ixa_ifindex = ill->ill_phyint->phyint_ifindex; in ill_mcast_send_queued()
13173 ixas.ixa_ipst = ill->ill_ipst; in ill_mcast_send_queued()
13175 mutex_enter(&ill->ill_lock); in ill_mcast_send_queued()
13176 while ((mp = ill->ill_mcast_deferred) != NULL) { in ill_mcast_send_queued()
13177 ill->ill_mcast_deferred = mp->b_next; in ill_mcast_send_queued()
13179 if (!ill->ill_dl_up) { in ill_mcast_send_queued()
13187 mutex_enter(&ill->ill_phyint->phyint_lock); in ill_mcast_send_queued()
13188 if (IS_UNDER_IPMP(ill) && !ipmp_ill_is_active(ill)) { in ill_mcast_send_queued()
13194 mutex_exit(&ill->ill_phyint->phyint_lock); in ill_mcast_send_queued()
13198 mutex_exit(&ill->ill_phyint->phyint_lock); in ill_mcast_send_queued()
13199 mutex_exit(&ill->ill_lock); in ill_mcast_send_queued()
13202 if (ill->ill_isv6) { in ill_mcast_send_queued()
13219 mutex_enter(&ill->ill_lock); in ill_mcast_send_queued()
13221 mutex_exit(&ill->ill_lock); in ill_mcast_send_queued()
13322 ill_t *ill = ipif->ipif_ill; in ipif_down() local
13326 ip_stack_t *ipst = ill->ill_ipst; in ipif_down()
13330 ip1dbg(("ipif_down(%s:%u)\n", ill->ill_name, ipif->ipif_id)); in ipif_down()
13333 ill_t *, ill, ipif_t *, ipif); in ipif_down()
13336 mutex_enter(&ill->ill_lock); in ipif_down()
13338 ASSERT(ill->ill_ipif_up_count > 0); in ipif_down()
13339 --ill->ill_ipif_up_count; in ipif_down()
13340 mutex_exit(&ill->ill_lock); in ipif_down()
13358 if (ill->ill_wq != NULL && !ill->ill_logical_down && in ipif_down()
13359 ill->ill_ipif_up_count == 0 && ill->ill_ipif_dup_count == 0 && in ipif_down()
13360 ill->ill_dl_up) { in ipif_down()
13361 ill->ill_state_flags |= ILL_DOWN_IN_PROGRESS; in ipif_down()
13395 if (ipif_was_up && ill->ill_ipif_up_count == 0) { in ipif_down()
13402 if (IS_UNDER_IPMP(ill)) in ipif_down()
13403 ipmp_ill_refresh_active(ill); in ipif_down()
13421 if (ill->ill_ipif_up_count == 0 && ill->ill_ipif_dup_count == 0) in ipif_down()
13422 ire_walk_ill(0, 0, ill_downi, ill, ill); in ipif_down()
13446 mutex_enter(&ill->ill_lock); in ipif_down()
13453 mutex_exit(&ill->ill_lock); in ipif_down()
13460 ill->ill_name, (void *)ill)); in ipif_down()
13470 mutex_exit(&ill->ill_lock); in ipif_down()
13475 mutex_exit(&ill->ill_lock); in ipif_down()
13484 ill_t *ill = ipif->ipif_ill; in ipif_down_tail() local
13488 ill_t *, ill, ipif_t *, ipif); in ipif_down_tail()
13498 if (ill->ill_wq != NULL && !ill->ill_logical_down && in ipif_down_tail()
13499 ill->ill_ipif_up_count == 0 && ill->ill_ipif_dup_count == 0 && in ipif_down_tail()
13500 ill->ill_dl_up) { in ipif_down_tail()
13501 ill_dl_down(ill); in ipif_down_tail()
13506 ill->ill_logical_down = 0; in ipif_down_tail()
13639 ill_get_name(const ill_t *ill, char *buf, int len) in ill_get_name() argument
13644 name = ill->ill_name; in ill_get_name()
13645 name_len = ill->ill_name_length; in ill_get_name()
13665 ill_t *ill; in ipif_lookup_on_name() local
13720 ill = ill_lookup_on_name(name, do_alloc, isv6, in ipif_lookup_on_name()
13723 if (ill == NULL) in ipif_lookup_on_name()
13732 ill_refrele(ill); in ipif_lookup_on_name()
13737 mutex_enter(&ill->ill_lock); in ipif_lookup_on_name()
13739 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ipif_lookup_on_name()
13744 mutex_exit(&ill->ill_lock); in ipif_lookup_on_name()
13745 ill_refrele(ill); in ipif_lookup_on_name()
13750 mutex_exit(&ill->ill_lock); in ipif_lookup_on_name()
13759 ill_refrele(ill); in ipif_lookup_on_name()
13766 mutex_exit(&ill->ill_lock); in ipif_lookup_on_name()
13767 ill_refrele(ill); in ipif_lookup_on_name()
13782 if (ill->ill_net_type == IRE_LOOPBACK && id == 0) in ipif_lookup_on_name()
13786 ipif = ipif_allocate(ill, id, ire_type, B_TRUE, B_TRUE, NULL); in ipif_lookup_on_name()
13789 mutex_exit(&ill->ill_lock); in ipif_lookup_on_name()
13790 ill_refrele(ill); in ipif_lookup_on_name()
13806 ill_t *ill; in ipif_lookup_on_name_async() local
13860 ill = ill_lookup_on_name(name, B_FALSE, isv6, &did_alloc, ipst); in ipif_lookup_on_name_async()
13863 if (ill == NULL) in ipif_lookup_on_name_async()
13872 ill_refrele(ill); in ipif_lookup_on_name_async()
13880 mutex_enter(&ill->ill_lock); in ipif_lookup_on_name_async()
13882 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ipif_lookup_on_name_async()
13887 mutex_exit(&ill->ill_lock); in ipif_lookup_on_name_async()
13889 ill_refrele(ill); in ipif_lookup_on_name_async()
13899 mutex_exit(&ill->ill_lock); in ipif_lookup_on_name_async()
13907 ill_refrele(ill); in ipif_lookup_on_name_async()
13910 ipsq = ill->ill_phyint->phyint_ipsq; in ipif_lookup_on_name_async()
13913 mutex_exit(&ill->ill_lock); in ipif_lookup_on_name_async()
13914 ipsq_enq(ipsq, q, mp, func, NEW_OP, ill); in ipif_lookup_on_name_async()
13918 ill_refrele(ill); in ipif_lookup_on_name_async()
13926 mutex_exit(&ill->ill_lock); in ipif_lookup_on_name_async()
13927 ill_refrele(ill); in ipif_lookup_on_name_async()
14002 ill_t *ill; in ipif_multicast_up() local
14007 ill = ipif->ipif_ill; in ipif_multicast_up()
14010 if (!(ill->ill_flags & ILLF_MULTICAST) || in ipif_multicast_up()
14029 if (!IS_UNDER_IPMP(ill)) { in ipif_multicast_up()
14030 ilm = ip_addmulti(&v6allmc, ill, ipif->ipif_zoneid, in ipif_multicast_up()
14049 if (IS_UNDER_IPMP(ill) && in ipif_multicast_up()
14050 (mcast_ill = ipmp_ill_hold_ipmp_ill(ill)) != NULL) { in ipif_multicast_up()
14053 mcast_ill = ill; in ipif_multicast_up()
14077 if (ipif->ipif_lcl_addr == INADDR_ANY || IS_UNDER_IPMP(ill)) in ipif_multicast_up()
14084 ilm = ip_addmulti(&v6group, ill, ipif->ipif_zoneid, &err); in ipif_multicast_up()
14120 ill_recover_saved_ire(ill_t *ill) in ill_recover_saved_ire() argument
14123 ip_stack_t *ipst = ill->ill_ipst; in ill_recover_saved_ire()
14125 ip1dbg(("ill_recover_saved_ire(%s)", ill->ill_name)); in ill_recover_saved_ire()
14127 mutex_enter(&ill->ill_saved_ire_lock); in ill_recover_saved_ire()
14128 for (mp = ill->ill_saved_ire_mp; mp != NULL; mp = mp->b_cont) { in ill_recover_saved_ire()
14136 if (ill->ill_isv6) { in ill_recover_saved_ire()
14142 ill, in ill_recover_saved_ire()
14153 ill, in ill_recover_saved_ire()
14160 mutex_exit(&ill->ill_saved_ire_lock); in ill_recover_saved_ire()
14165 if (ill->ill_isv6) { in ill_recover_saved_ire()
14184 if (ill->ill_net_type == IRE_LOOPBACK) in ill_recover_saved_ire()
14209 mutex_exit(&ill->ill_saved_ire_lock); in ill_recover_saved_ire()
14278 ill_t *ill; in ip_addr_availability_check() local
14295 ill = ILL_START_WALK_V6(&ctx, ipst); in ip_addr_availability_check()
14297 ill = ILL_START_WALK_V4(&ctx, ipst); in ip_addr_availability_check()
14299 for (; ill != NULL; ill = ill_next(&ctx, ill)) { in ip_addr_availability_check()
14300 for (ipif = ill->ill_ipif; ipif != NULL; in ip_addr_availability_check()
14315 !IS_ON_SAME_LAN(ill, new_ipif->ipif_ill)) in ip_addr_availability_check()
14318 ipif->ipif_zoneid != ALL_ZONES && IS_LOOPBACK(ill)) in ip_addr_availability_check()
14320 else if (new_ipif->ipif_ill == ill) in ip_addr_availability_check()
14339 ill_t *ill = ipif->ipif_ill; in ipif_up() local
14344 ip_stack_t *ipst = ill->ill_ipst; in ipif_up()
14348 ip1dbg(("ipif_up(%s:%u)\n", ill->ill_name, ipif->ipif_id)); in ipif_up()
14350 ill_t *, ill, ipif_t *, ipif); in ipif_up()
14363 if (IS_UNDER_IPMP(ill) && ipmp_ipif_is_dataaddr(ipif) && in ipif_up()
14366 ill_t *ipmp_ill = ipmp_illgrp_ipmp_ill(ill->ill_grp); in ipif_up()
14373 mutex_enter(&ill->ill_lock); in ipif_up()
14375 mutex_exit(&ill->ill_lock); in ipif_up()
14378 mutex_exit(&ill->ill_lock); in ipif_up()
14385 if ((moveipif = ipif_allocate(ill, 0, IRE_LOCAL, B_TRUE, in ipif_up()
14389 if ((stubipif = ipif_allocate(ill, 0, IRE_LOCAL, B_TRUE, in ipif_up()
14430 ipif->ipif_ill = ill; in ipif_up()
14432 ipif_transfer(ipif, ill->ill_ipif, in ipif_up()
14448 sctp_move_ipif(ipif, ill, ipmp_ill); in ipif_up()
14458 ASSERT(ill->ill_move_ipif == NULL); in ipif_up()
14459 ill->ill_move_ipif = ipif; in ipif_up()
14460 if ((err = ipif_up(ill->ill_ipif, q, mp)) == 0) in ipif_up()
14461 ASSERT(ill->ill_move_ipif == NULL); in ipif_up()
14463 ill->ill_move_ipif = NULL; in ipif_up()
14474 if (ill->ill_wq != NULL) { in ipif_up()
14476 ipsq_t *ipsq = ill->ill_phyint->phyint_ipsq; in ipif_up()
14478 if (!ill->ill_dl_up) { in ipif_up()
14488 return (ill_dl_up(ill, ipif, mp, q)); in ipif_up()
14504 mutex_enter(&ill->ill_lock); in ipif_up()
14506 mutex_exit(&ill->ill_lock); in ipif_up()
14537 err = ill_add_ires(ill); in ipif_up()
14544 if (err == 0 && ill->ill_move_ipif != NULL) { in ipif_up()
14545 ipif = ill->ill_move_ipif; in ipif_up()
14546 ill->ill_move_ipif = NULL; in ipif_up()
14557 ill_add_ires(ill_t *ill) in ill_add_ires() argument
14563 if (ill->ill_ire_multicast != NULL) in ill_add_ires()
14569 if (ill->ill_isv6) { in ill_add_ires()
14570 ire = ire_create_v6(&dummy6, 0, 0, IRE_MULTICAST, ill, in ill_add_ires()
14571 ALL_ZONES, RTF_UP, NULL, ill->ill_ipst); in ill_add_ires()
14573 ire = ire_create((uchar_t *)&dummy4, 0, 0, IRE_MULTICAST, ill, in ill_add_ires()
14574 ALL_ZONES, RTF_UP, NULL, ill->ill_ipst); in ill_add_ires()
14579 ill->ill_ire_multicast = ire; in ill_add_ires()
14584 ill_delete_ires(ill_t *ill) in ill_delete_ires() argument
14586 if (ill->ill_ire_multicast != NULL) { in ill_delete_ires()
14593 ire_make_condemned(ill->ill_ire_multicast); in ill_delete_ires()
14594 ire_refrele_notr(ill->ill_ire_multicast); in ill_delete_ires()
14595 ill->ill_ire_multicast = NULL; in ill_delete_ires()
14606 ill_dl_up(ill_t *ill, ipif_t *ipif, mblk_t *mp, queue_t *q) in ill_dl_up() argument
14614 DTRACE_PROBE2(ill__downup, char *, "ill_dl_up", ill_t *, ill); in ill_dl_up()
14616 ip1dbg(("ill_dl_up(%s)\n", ill->ill_name)); in ill_dl_up()
14617 ASSERT(IAM_WRITER_ILL(ill)); in ill_dl_up()
14624 err = ill_add_ires(ill); in ill_dl_up()
14632 ((dl_bind_req_t *)bind_mp->b_rptr)->dl_sap = ill->ill_sap; in ill_dl_up()
14647 if (ill->ill_unbind_mp == NULL) { in ill_dl_up()
14671 if (ill->ill_unbind_mp == NULL) in ill_dl_up()
14672 ill->ill_unbind_mp = unbind_mp; in ill_dl_up()
14674 ill_dlpi_send(ill, bind_mp); in ill_dl_up()
14676 ill_capability_probe(ill); in ill_dl_up()
14688 (strcmp(ill->ill_name, dhcifname) == 0) && in ill_dl_up()
14700 ip1dbg(("ill_dl_up(%s) FAILED\n", ill->ill_name)); in ill_dl_up()
14719 ill_t *ill = ipif->ipif_ill; in ipif_up_done() local
14728 ill_t *, ill, ipif_t *, ipif); in ipif_up_done()
14744 for (tmp_ipif = ill->ill_ipif; tmp_ipif; in ipif_up_done()
14756 ip_update_source_selection(ill->ill_ipst); in ipif_up_done()
14758 if (IS_LOOPBACK(ill) || ill->ill_net_type == IRE_IF_NORESOLVER) { in ipif_up_done()
14773 if (ill->ill_net_type != IRE_LOOPBACK) in ipif_up_done()
14777 err = nce_lookup_then_add_v4(ill, NULL, in ipif_up_done()
14778 ill->ill_phys_addr_length, &ipif->ipif_lcl_addr, flags, in ipif_up_done()
14810 if (IS_IPMP(ill)) in ipif_up_done()
14811 ipmp_illgrp_del_ipif(ill->ill_grp, ipif); in ipif_up_done()
14817 if (ill->ill_ipif_up_count == 1 && !loopback) { in ipif_up_done()
14819 (void) ill_recover_saved_ire(ill); in ipif_up_done()
14822 if (ill->ill_need_recover_multicast) { in ipif_up_done()
14835 ill_recover_multicast(ill); in ipif_up_done()
14838 if (ill->ill_ipif_up_count == 1) { in ipif_up_done()
14842 if (IS_UNDER_IPMP(ill)) in ipif_up_done()
14843 ipmp_ill_refresh_active(ill); in ipif_up_done()
14849 if (IS_IPMP(ill)) in ipif_up_done()
14850 ipmp_illgrp_refresh_arpent(ill->ill_grp); in ipif_up_done()
14858 ip_update_source_selection(ill->ill_ipst); in ipif_up_done()
14865 update_conn_ill(NULL, ill->ill_ipst); in ipif_up_done()
14885 ill_t *ill = ipif->ipif_ill; in ipif_add_ires_v4() local
14886 ip_stack_t *ipst = ill->ill_ipst; in ipif_add_ires_v4()
14983 (void *)ipif, (void *)ill, ill->ill_net_type, in ipif_add_ires_v4()
14989 ill->ill_net_type, in ipif_add_ires_v4()
14990 ill, in ipif_add_ires_v4()
15029 ill->ill_ipif_up_count++; in ipif_add_ires_v4()
15044 ill->ill_ipif_up_count--; in ipif_add_ires_v4()
15143 ill->ill_ipif_up_count--; in ipif_add_ires_v4()
15183 ill_t *ill = ipif->ipif_ill; in ipif_delete_ires_v4() local
15184 ip_stack_t *ipst = ill->ill_ipst; in ipif_delete_ires_v4()
15262 ipif_good_addr(ill_t *ill, zoneid_t zoneid) in ipif_good_addr() argument
15266 mutex_enter(&ill->ill_lock); in ipif_good_addr()
15267 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ipif_good_addr()
15277 if (ill->ill_isv6 ? in ipif_good_addr()
15282 mutex_exit(&ill->ill_lock); in ipif_good_addr()
15285 mutex_exit(&ill->ill_lock); in ipif_good_addr()
15316 ipif_select_source_v4(ill_t *ill, ipaddr_t dst, zoneid_t zoneid, in ipif_select_source_v4() argument
15324 ip_stack_t *ipst = ill->ill_ipst; in ipif_select_source_v4()
15327 if (ill->ill_usesrc_ifindex != 0 && allow_usesrc) { in ipif_select_source_v4()
15328 usill = ill_lookup_on_ifindex(ill->ill_usesrc_ifindex, in ipif_select_source_v4()
15331 ill = usill; /* Select source from usesrc ILL */ in ipif_select_source_v4()
15340 if (IS_UNDER_IPMP(ill)) { in ipif_select_source_v4()
15341 if ((ipmp_ill = ipmp_ill_hold_ipmp_ill(ill)) != NULL) in ipif_select_source_v4()
15342 ill = ipmp_ill; /* Select source from IPMP ill */ in ipif_select_source_v4()
15382 start_ipif = ill->ill_ipif; in ipif_select_source_v4()
15383 if (IS_IPMP(ill) && ill->ill_src_ipif != NULL) in ipif_select_source_v4()
15384 start_ipif = ill->ill_src_ipif; in ipif_select_source_v4()
15391 next_ipif = ill->ill_ipif; in ipif_select_source_v4()
15482 if (IS_IPMP(ill) && ipif != NULL) { in ipif_select_source_v4()
15485 ill->ill_src_ipif = next_ipif; in ipif_select_source_v4()
15487 ill->ill_src_ipif = NULL; in ipif_select_source_v4()
15505 ill->ill_name, in ipif_select_source_v4()
15552 ip_select_source_v4(ill_t *ill, ipaddr_t setsrc, ipaddr_t dst, in ip_select_source_v4() argument
15584 ipif = ipif_select_source_v4(ill, dst, zoneid, B_TRUE, &notready); in ip_select_source_v4()
15671 ill_t *ill = ipif->ipif_ill; in ipif_create_bcast_ires() local
15683 irep = ire_create_bcast(ill, 0, zoneid, irep); in ipif_create_bcast_ires()
15684 irep = ire_create_bcast(ill, INADDR_BROADCAST, zoneid, irep); in ipif_create_bcast_ires()
15697 irep = ire_create_bcast(ill, addr, zoneid, irep); in ipif_create_bcast_ires()
15698 irep = ire_create_bcast(ill, ~netmask | addr, zoneid, irep); in ipif_create_bcast_ires()
15709 irep = ire_create_bcast(ill, addr, zoneid, irep); in ipif_create_bcast_ires()
15710 irep = ire_create_bcast(ill, ~subnetmask | addr, zoneid, irep); in ipif_create_bcast_ires()
15725 ill_t *ill = ipif->ipif_ill; in ipif_delete_bcast_ires() local
15736 ire = ire_lookup_bcast(ill, 0, zoneid); in ipif_delete_bcast_ires()
15739 ire = ire_lookup_bcast(ill, INADDR_BROADCAST, zoneid); in ipif_delete_bcast_ires()
15754 ire = ire_lookup_bcast(ill, addr, zoneid); in ipif_delete_bcast_ires()
15757 ire = ire_lookup_bcast(ill, ~netmask | addr, zoneid); in ipif_delete_bcast_ires()
15770 ire = ire_lookup_bcast(ill, addr, zoneid); in ipif_delete_bcast_ires()
15773 ire = ire_lookup_bcast(ill, ~subnetmask | addr, zoneid); in ipif_delete_bcast_ires()
15795 ill_t *ill = q->q_ptr; in ip_sioctl_slifname() local
15814 if (ill != ipif->ipif_ill) in ip_sioctl_slifname()
15817 if (ill->ill_name[0] != '\0') in ip_sioctl_slifname()
15825 ipst = ill->ill_ipst; in ip_sioctl_slifname()
15836 ill->ill_media->ip_m_mac_type) { in ip_sioctl_slifname()
15857 (!ill->ill_needs_attach && ill->ill_bcast_addr_length == 0))) { in ip_sioctl_slifname()
15876 ill->ill_flags |= ILLF_IPV6; in ip_sioctl_slifname()
15877 ill->ill_flags &= ~ILLF_IPV4; in ip_sioctl_slifname()
15880 ill->ill_flags |= ILLF_NOLINKLOCAL; in ip_sioctl_slifname()
15889 if (ill->ill_flags & ILLF_IPV6) { in ip_sioctl_slifname()
15890 ill->ill_phyint->phyint_illv6 = ill; in ip_sioctl_slifname()
15891 ill->ill_phyint->phyint_illv4 = NULL; in ip_sioctl_slifname()
15919 ill_t *ill; in ipif_lookup_on_ifindex() local
15922 ill = ill_lookup_on_ifindex(index, isv6, ipst); in ipif_lookup_on_ifindex()
15923 if (ill != NULL) { in ipif_lookup_on_ifindex()
15924 mutex_enter(&ill->ill_lock); in ipif_lookup_on_ifindex()
15925 for (ipif = ill->ill_ipif; ipif != NULL; in ipif_lookup_on_ifindex()
15934 mutex_exit(&ill->ill_lock); in ipif_lookup_on_ifindex()
15935 ill_refrele(ill); in ipif_lookup_on_ifindex()
15951 ill_t *ill; in ip_sioctl_slifindex() local
15967 ill = ipif->ipif_ill; in ip_sioctl_slifindex()
15968 phyi = ill->ill_phyint; in ip_sioctl_slifindex()
15995 ill_nic_event_dispatch(ill, 0, NE_IFINDEX_CHANGE, in ip_sioctl_slifindex()
16009 sctp_ill_reindex(ill, old_index); in ip_sioctl_slifindex()
16013 if (ILL_OTHER(ill)) in ip_sioctl_slifindex()
16014 ip_rts_ifmsg(ILL_OTHER(ill)->ill_ipif, RTSQ_DEFAULT); in ip_sioctl_slifindex()
16017 update_conn_ill(NULL, ill->ill_ipst); in ip_sioctl_slifindex()
16221 ill_flagaddr_cnt(const ill_t *ill, uint64_t set, uint64_t clear) in ill_flagaddr_cnt() argument
16226 ASSERT(IAM_WRITER_ILL(ill)); in ill_flagaddr_cnt()
16228 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) in ill_flagaddr_cnt()
16240 ill_appaddr_cnt(const ill_t *ill) in ill_appaddr_cnt() argument
16242 return (ill_flagaddr_cnt(ill, IPIF_DHCPRUNNING | IPIF_ADDRCONF, in ill_appaddr_cnt()
16250 ill_ptpaddr_cnt(const ill_t *ill) in ill_ptpaddr_cnt() argument
16252 return (ill_flagaddr_cnt(ill, IPIF_POINTOPOINT, 0)); in ill_ptpaddr_cnt()
16277 ill_t *ill; in ill_prev_usesrc() local
16279 for (ill = uill->ill_usesrc_grp_next; in ill_prev_usesrc()
16280 ASSERT(ill), ill->ill_usesrc_grp_next != uill; in ill_prev_usesrc()
16281 ill = ill->ill_usesrc_grp_next) in ill_prev_usesrc()
16283 return (ill); in ill_prev_usesrc()
16327 ill_t *ill, *tmp_ill; in ill_relink_usesrc_ills() local
16344 ill = ill_prev_usesrc(ucill); in ill_relink_usesrc_ills()
16345 ASSERT(ill->ill_usesrc_grp_next != NULL); in ill_relink_usesrc_ills()
16348 if (ill->ill_usesrc_grp_next->ill_usesrc_grp_next == ill) { in ill_relink_usesrc_ills()
16350 ASSERT(ill->ill_usesrc_ifindex == 0); in ill_relink_usesrc_ills()
16351 ill->ill_usesrc_grp_next = NULL; in ill_relink_usesrc_ills()
16353 ill->ill_usesrc_grp_next = ucill->ill_usesrc_grp_next; in ill_relink_usesrc_ills()
16519 ill_t *ill = ipif->ipif_ill; in ip_sioctl_get_dadstate() local
16525 mutex_enter(&ill->ill_lock); in ip_sioctl_get_dadstate()
16530 mutex_exit(&ill->ill_lock); in ip_sioctl_get_dadstate()
16562 ill_t *ill; in ill_phyint_compare_name() local
16568 ill = ((phyint_t *)phyip)->phyint_illv4; in ill_phyint_compare_name()
16570 ill = ((phyint_t *)phyip)->phyint_illv6; in ill_phyint_compare_name()
16571 ASSERT(ill != NULL); in ill_phyint_compare_name()
16573 res = strcmp(ill->ill_name, (char *)name_ptr); in ill_phyint_compare_name()
16631 ill_phyint_reinit(ill_t *ill) in ill_phyint_reinit() argument
16633 boolean_t isv6 = ill->ill_isv6; in ill_phyint_reinit()
16638 ip_stack_t *ipst = ill->ill_ipst; in ill_phyint_reinit()
16642 phyi_old = ill->ill_phyint; in ill_phyint_reinit()
16643 ASSERT(isv6 || (phyi_old->phyint_illv4 == ill && in ill_phyint_reinit()
16645 ASSERT(!isv6 || (phyi_old->phyint_illv6 == ill && in ill_phyint_reinit()
16652 (void) strlcpy(ill->ill_phyint->phyint_name, ill->ill_name, LIFNAMSIZ); in ill_phyint_reinit()
16655 ill->ill_name, &where); in ill_phyint_reinit()
16679 GRAB_ILL_LOCKS(ill, ill_other); in ill_phyint_reinit()
16689 phyi->phyint_illv6 = ill; in ill_phyint_reinit()
16692 phyi->phyint_illv4 = ill; in ill_phyint_reinit()
16705 mutex_enter(&ill->ill_lock); in ill_phyint_reinit()
16731 ill->ill_phyint = phyi; in ill_phyint_reinit()
16737 ill->ill_ip_mib->ipIfStatsIfIndex = ill->ill_phyint->phyint_ifindex; in ill_phyint_reinit()
16738 if (ill->ill_isv6) { in ill_phyint_reinit()
16739 ill->ill_icmp6_mib->ipv6IfIcmpIfIndex = in ill_phyint_reinit()
16740 ill->ill_phyint->phyint_ifindex; in ill_phyint_reinit()
16741 ill->ill_mcast_type = ipst->ips_mld_max_version; in ill_phyint_reinit()
16743 ill->ill_mcast_type = ipst->ips_igmp_max_version; in ill_phyint_reinit()
16757 if (!IS_LOOPBACK(ill)) { in ill_phyint_reinit()
16758 ill_nic_event_dispatch(ill, 0, NE_PLUMB, ill->ill_name, in ill_phyint_reinit()
16759 ill->ill_name_length); in ill_phyint_reinit()
16761 RELEASE_ILL_LOCKS(ill, ill_other); in ill_phyint_reinit()
16774 ip_ifname_notify(ill_t *ill, queue_t *q) in ip_ifname_notify() argument
16797 (void) strncpy(lifr->lifr_name, ill->ill_name, LIFNAMSIZ); in ip_ifname_notify()
16798 lifr->lifr_ppa = ill->ill_ppa; in ip_ifname_notify()
16799 lifr->lifr_flags = (ill->ill_flags & (ILLF_IPV4|ILLF_IPV6)); in ip_ifname_notify()
16802 char *, "SIOCSLIFNAME", ill_t *, ill); in ip_ifname_notify()
16807 ipif_set_values_tail(ill_t *ill, ipif_t *ipif, mblk_t *mp, queue_t *q) in ipif_set_values_tail() argument
16810 ip_stack_t *ipst = ill->ill_ipst; in ipif_set_values_tail()
16811 phyint_t *phyi = ill->ill_phyint; in ipif_set_values_tail()
16817 if (IS_IPMP(ill)) { in ipif_set_values_tail()
16828 if (ipmp_grp_lookup(ill->ill_name, ipst) != NULL) { in ipif_set_values_tail()
16832 phyi->phyint_grp = ipmp_grp_create(ill->ill_name, phyi); in ipif_set_values_tail()
16842 ip_ifname_notify(ill, q); in ipif_set_values_tail()
16848 err = ill_dl_phys(ill, ipif, mp, q); in ipif_set_values_tail()
16850 if (ill->ill_isv6) { in ipif_set_values_tail()
16884 ill_t *ill; in ipif_set_values() local
16897 ill = (ill_t *)q->q_ptr; in ipif_set_values()
16898 ipst = ill->ill_ipst; in ipif_set_values()
16900 ASSERT(ill->ill_ipst != NULL); in ipif_set_values()
16901 ASSERT(ill->ill_name[0] == '\0'); in ipif_set_values()
16902 ASSERT(IAM_WRITER_ILL(ill)); in ipif_set_values()
16904 ASSERT(ill->ill_ppa == UINT_MAX); in ipif_set_values()
16906 ill->ill_defend_start = ill->ill_defend_count = 0; in ipif_set_values()
16939 ill->ill_ppa = *new_ppa_ptr; in ipif_set_values()
16946 ipif = ill->ill_ipif; in ipif_set_values()
16951 if (!(ill->ill_flags & (ILLF_IPV4|ILLF_IPV6))) in ipif_set_values()
16952 ill->ill_flags |= ILLF_IPV4; in ipif_set_values()
16957 if (ill->ill_flags & ILLF_IPV6) { in ipif_set_values()
16959 ill->ill_isv6 = B_TRUE; in ipif_set_values()
16960 ill_set_inputfn(ill); in ipif_set_values()
16961 if (ill->ill_rq != NULL) { in ipif_set_values()
16962 ill->ill_rq->q_qinfo = &iprinitv6; in ipif_set_values()
16971 ill->ill_reachable_retrans_time = ND_RETRANS_TIMER; in ipif_set_values()
16978 !(ill->ill_flags & ILLF_MULTICAST)) { in ipif_set_values()
16979 ill->ill_flags |= ILLF_NONUD; in ipif_set_values()
16982 if (ill->ill_flags & ILLF_NOARP) { in ipif_set_values()
16990 ill->ill_flags &= ~ILLF_NOARP; in ipif_set_values()
16997 ill->ill_flags |= ILLF_ROUTER; in ipif_set_values()
16998 } else if (ill->ill_flags & ILLF_IPV4) { in ipif_set_values()
16999 ill->ill_isv6 = B_FALSE; in ipif_set_values()
17000 ill_set_inputfn(ill); in ipif_set_values()
17001 ill->ill_reachable_retrans_time = ARP_RETRANS_TIMER; in ipif_set_values()
17012 ill->ill_flags |= ILLF_ROUTER; in ipif_set_values()
17015 ASSERT(ill->ill_phyint != NULL); in ipif_set_values()
17021 if (!ill_allocate_mibs(ill)) in ipif_set_values()
17028 ill->ill_sap = (ill->ill_isv6) ? ill->ill_media->ip_m_ipv6sap : in ipif_set_values()
17029 ill->ill_media->ip_m_ipv4sap; in ipif_set_values()
17031 ill->ill_ifname_pending = 1; in ipif_set_values()
17032 ill->ill_ifname_pending_err = 0; in ipif_set_values()
17039 ill->ill_need_recover_multicast = 1; in ipif_set_values()
17041 ill_refhold(ill); in ipif_set_values()
17043 if ((error = ill_glist_insert(ill, interf_name, in ipif_set_values()
17044 (ill->ill_flags & ILLF_IPV6) == ILLF_IPV6)) > 0) { in ipif_set_values()
17045 ill->ill_ppa = UINT_MAX; in ipif_set_values()
17046 ill->ill_name[0] = '\0'; in ipif_set_values()
17052 ill_refrele(ill); in ipif_set_values()
17056 ASSERT(ill->ill_name_length <= LIFNAMSIZ); in ipif_set_values()
17068 bcopy(ill->ill_name, interf_name, ill->ill_name_length); in ipif_set_values()
17069 *new_ppa_ptr = ill->ill_ppa; in ipif_set_values()
17078 sctp_update_ill(ill, SCTP_ILL_INSERT); in ipif_set_values()
17091 ipsq = ipsq_try_enter_internal(ill, q, mp, ip_reprocess_ioctl, NEW_OP, in ipif_set_values()
17095 ill_refrele(ill); in ipif_set_values()
17107 error = ipif_set_values_tail(ill, ipif, mp, q); in ipif_set_values()
17113 ill->ill_isv6 = B_FALSE; in ipif_set_values()
17114 ill_set_inputfn(ill); in ipif_set_values()
17146 ill_save_ire(ill_t *ill, ire_t *ire) in ill_save_ire() argument
17159 ASSERT(!ill->ill_isv6); in ill_save_ire()
17165 ASSERT(ill->ill_isv6); in ill_save_ire()
17176 mutex_enter(&ill->ill_saved_ire_lock); in ill_save_ire()
17177 save_mp->b_cont = ill->ill_saved_ire_mp; in ill_save_ire()
17178 ill->ill_saved_ire_mp = save_mp; in ill_save_ire()
17179 ill->ill_saved_ire_cnt++; in ill_save_ire()
17180 mutex_exit(&ill->ill_saved_ire_lock); in ill_save_ire()
17188 ill_remove_saved_ire(ill_t *ill, ire_t *ire) in ill_remove_saved_ire() argument
17195 mutex_enter(&ill->ill_saved_ire_lock); in ill_remove_saved_ire()
17196 for (mpp = &ill->ill_saved_ire_mp; *mpp != NULL; in ill_remove_saved_ire()
17215 if (ill->ill_isv6 ? in ill_remove_saved_ire()
17226 ill->ill_saved_ire_cnt--; in ill_remove_saved_ire()
17231 mutex_exit(&ill->ill_saved_ire_lock); in ill_remove_saved_ire()
17362 ip_ether_v6intfid(ill_t *ill, in6_addr_t *v6addr) in ip_ether_v6intfid() argument
17373 if (ill->ill_phys_addr_length == ETHERADDRL) { in ip_ether_v6intfid()
17376 bcopy(ill->ill_phys_addr, addr, 3); in ip_ether_v6intfid()
17380 bcopy(ill->ill_phys_addr + 3, addr + 5, 3); in ip_ether_v6intfid()
17386 ip_nodef_v6intfid(ill_t *ill, in6_addr_t *v6addr) in ip_nodef_v6intfid() argument
17401 ip_ipmp_v6intfid(ill_t *ill, in6_addr_t *v6addr) in ip_ipmp_v6intfid() argument
17410 ASSERT(IS_IPMP(ill)); in ip_ipmp_v6intfid()
17415 (void) strlcpy(ic.ic_ifname, ill->ill_name, LIFNAMSIZ); in ip_ipmp_v6intfid()
17417 if ((zp = zone_find_by_id(ill->ill_zoneid)) != NULL) { in ip_ipmp_v6intfid()
17438 ip_ether_v6_mapping(ill_t *ill, uchar_t *m_ip6addr, uchar_t *m_physaddr) in ip_ether_v6_mapping() argument
17440 phyint_t *phyi = ill->ill_phyint; in ip_ether_v6_mapping()
17448 ill->ill_phys_addr_length != ETHERADDRL) { in ip_ether_v6_mapping()
17449 ip_mbcast_mapping(ill, m_ip6addr, m_physaddr); in ip_ether_v6_mapping()
17464 ip_ether_v4_mapping(ill_t *ill, uchar_t *m_ipaddr, uchar_t *m_physaddr) in ip_ether_v4_mapping() argument
17466 phyint_t *phyi = ill->ill_phyint; in ip_ether_v4_mapping()
17474 ill->ill_phys_addr_length != ETHERADDRL) { in ip_ether_v4_mapping()
17475 ip_mbcast_mapping(ill, m_ipaddr, m_physaddr); in ip_ether_v4_mapping()
17488 ip_mbcast_mapping(ill_t *ill, uchar_t *m_ipaddr, uchar_t *m_physaddr) in ip_mbcast_mapping() argument
17497 dlur = (dl_unitdata_req_t *)ill->ill_bcast_mp->b_rptr; in ip_mbcast_mapping()
17498 if (ill->ill_sap_length < 0) { in ip_mbcast_mapping()
17503 dlur->dl_dest_addr_offset + ill->ill_sap_length; in ip_mbcast_mapping()
17506 bcopy(bphys_addr, m_physaddr, ill->ill_phys_addr_length); in ip_mbcast_mapping()
17513 ip_ib_v6intfid(ill_t *ill, in6_addr_t *v6addr) in ip_ib_v6intfid() argument
17517 ASSERT(ill->ill_phys_addr_length == 20); in ip_ib_v6intfid()
17519 bcopy(ill->ill_phys_addr + 12, addr, 8); in ip_ib_v6intfid()
17550 ip_ib_v4_mapping(ill_t *ill, uchar_t *m_ipaddr, uchar_t *m_physaddr) in ip_ib_v4_mapping() argument
17558 bcopy(ipv4_g_phys_ibmulti_addr, m_physaddr, ill->ill_phys_addr_length); in ip_ib_v4_mapping()
17569 dlur = (dl_unitdata_req_t *)ill->ill_bcast_mp->b_rptr; in ip_ib_v4_mapping()
17570 if (ill->ill_sap_length < 0) { in ip_ib_v4_mapping()
17574 ill->ill_sap_length; in ip_ib_v4_mapping()
17585 ip_ib_v6_mapping(ill_t *ill, uchar_t *m_ipaddr, uchar_t *m_physaddr) in ip_ib_v6_mapping() argument
17593 bcopy(ipv4_g_phys_ibmulti_addr, m_physaddr, ill->ill_phys_addr_length); in ip_ib_v6_mapping()
17600 dlur = (dl_unitdata_req_t *)ill->ill_bcast_mp->b_rptr; in ip_ib_v6_mapping()
17601 if (ill->ill_sap_length < 0) { in ip_ib_v6_mapping()
17605 ill->ill_sap_length; in ip_ib_v6_mapping()
17622 ip_ipv4_genv6intfid(ill_t *ill, uint8_t *physaddr, in6_addr_t *v6addr) in ip_ipv4_genv6intfid() argument
17624 ASSERT(ill->ill_phys_addr_length == sizeof (ipaddr_t)); in ip_ipv4_genv6intfid()
17635 ip_ipv6_genv6intfid(ill_t *ill, uint8_t *physaddr, in6_addr_t *v6addr) in ip_ipv6_genv6intfid() argument
17639 ASSERT(ill->ill_phys_addr_length == sizeof (in6_addr_t)); in ip_ipv6_genv6intfid()
17644 ip_ipv6_v6intfid(ill_t *ill, in6_addr_t *v6addr) in ip_ipv6_v6intfid() argument
17646 ip_ipv6_genv6intfid(ill, ill->ill_phys_addr, v6addr); in ip_ipv6_v6intfid()
17650 ip_ipv6_v6destintfid(ill_t *ill, in6_addr_t *v6addr) in ip_ipv6_v6destintfid() argument
17652 ip_ipv6_genv6intfid(ill, ill->ill_dest_addr, v6addr); in ip_ipv6_v6destintfid()
17656 ip_ipv4_v6intfid(ill_t *ill, in6_addr_t *v6addr) in ip_ipv4_v6intfid() argument
17658 ip_ipv4_genv6intfid(ill, ill->ill_phys_addr, v6addr); in ip_ipv4_v6intfid()
17662 ip_ipv4_v6destintfid(ill_t *ill, in6_addr_t *v6addr) in ip_ipv4_v6destintfid() argument
17664 ip_ipv4_genv6intfid(ill, ill->ill_dest_addr, v6addr); in ip_ipv4_v6destintfid()
17675 ill_t *ill; in ill_lookup_on_ifindex_zoneid() local
17678 ill = ill_lookup_on_ifindex(index, isv6, ipst); in ill_lookup_on_ifindex_zoneid()
17679 if (ill == NULL) in ill_lookup_on_ifindex_zoneid()
17682 mutex_enter(&ill->ill_lock); in ill_lookup_on_ifindex_zoneid()
17683 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ill_lookup_on_ifindex_zoneid()
17690 mutex_exit(&ill->ill_lock); in ill_lookup_on_ifindex_zoneid()
17691 return (ill); in ill_lookup_on_ifindex_zoneid()
17693 mutex_exit(&ill->ill_lock); in ill_lookup_on_ifindex_zoneid()
17694 ill_refrele(ill); in ill_lookup_on_ifindex_zoneid()
17708 ill_t *ill; in ipif_getby_indexes() local
17710 ill = ill_lookup_on_ifindex(ifindex, isv6, ipst); in ipif_getby_indexes()
17711 if (ill == NULL) in ipif_getby_indexes()
17714 mutex_enter(&ill->ill_lock); in ipif_getby_indexes()
17715 if (ill->ill_state_flags & ILL_CONDEMNED) { in ipif_getby_indexes()
17716 mutex_exit(&ill->ill_lock); in ipif_getby_indexes()
17717 ill_refrele(ill); in ipif_getby_indexes()
17721 for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next) { in ipif_getby_indexes()
17730 mutex_exit(&ill->ill_lock); in ipif_getby_indexes()
17731 ill_refrele(ill); in ipif_getby_indexes()
17741 ill_set_inputfn(ill_t *ill) in ill_set_inputfn() argument
17743 ip_stack_t *ipst = ill->ill_ipst; in ill_set_inputfn()
17745 if (ill->ill_isv6) { in ill_set_inputfn()
17747 ill->ill_inputfn = ill_input_full_v6; in ill_set_inputfn()
17749 ill->ill_inputfn = ill_input_short_v6; in ill_set_inputfn()
17752 ill->ill_inputfn = ill_input_full_v4; in ill_set_inputfn()
17753 else if (ill->ill_dhcpinit != 0) in ill_set_inputfn()
17754 ill->ill_inputfn = ill_input_full_v4; in ill_set_inputfn()
17757 ill->ill_inputfn = ill_input_full_v4; in ill_set_inputfn()
17760 ill->ill_inputfn = ill_input_full_v4; in ill_set_inputfn()
17762 ill->ill_inputfn = ill_input_short_v4; in ill_set_inputfn()
17774 ill_t *ill; in ill_set_inputfn_all() local
17777 ill = ILL_START_WALK_V4(&ctx, ipst); in ill_set_inputfn_all()
17778 for (; ill != NULL; ill = ill_next(&ctx, ill)) in ill_set_inputfn_all()
17779 ill_set_inputfn(ill); in ill_set_inputfn_all()
17791 ill_set_phys_addr(ill_t *ill, mblk_t *mp) in ill_set_phys_addr() argument
17793 ipsq_t *ipsq = ill->ill_phyint->phyint_ipsq; in ill_set_phys_addr()
17816 ipsq_current_start(ipsq, ill->ill_ipif, 0); in ill_set_phys_addr()
17824 mutex_enter(&ill->ill_lock); in ill_set_phys_addr()
17825 ill->ill_state_flags |= ILL_DOWN_IN_PROGRESS; in ill_set_phys_addr()
17827 mutex_exit(&ill->ill_lock); in ill_set_phys_addr()
17833 ill_down_ipifs(ill, B_TRUE); in ill_set_phys_addr()
17834 mutex_enter(&ill->ill_lock); in ill_set_phys_addr()
17835 if (!ill_is_quiescent(ill)) { in ill_set_phys_addr()
17837 (void) ipsq_pending_mp_add(NULL, ill->ill_ipif, ill->ill_rq, in ill_set_phys_addr()
17839 mutex_exit(&ill->ill_lock); in ill_set_phys_addr()
17842 mutex_exit(&ill->ill_lock); in ill_set_phys_addr()
17844 ill_set_phys_addr_tail(ipsq, ill->ill_rq, mp, NULL); in ill_set_phys_addr()
17857 ill_set_allowed_ips(ill_t *ill, mblk_t *mp) in ill_set_allowed_ips() argument
17859 ipsq_t *ipsq = ill->ill_phyint->phyint_ipsq; in ill_set_allowed_ips()
17868 kmem_free(ill->ill_allowed_ips, in ill_set_allowed_ips()
17869 ill->ill_allowed_ips_cnt * sizeof (in6_addr_t)); in ill_set_allowed_ips()
17870 ill->ill_allowed_ips_cnt = 0; in ill_set_allowed_ips()
17871 ill->ill_allowed_ips = NULL; in ill_set_allowed_ips()
17872 mutex_enter(&ill->ill_phyint->phyint_lock); in ill_set_allowed_ips()
17873 ill->ill_phyint->phyint_flags &= ~PHYI_L3PROTECT; in ill_set_allowed_ips()
17874 mutex_exit(&ill->ill_phyint->phyint_lock); in ill_set_allowed_ips()
17878 if (ill->ill_allowed_ips != NULL) { in ill_set_allowed_ips()
17879 kmem_free(ill->ill_allowed_ips, in ill_set_allowed_ips()
17880 ill->ill_allowed_ips_cnt * sizeof (in6_addr_t)); in ill_set_allowed_ips()
17882 ill->ill_allowed_ips_cnt = mrp->mp_ipaddrcnt; in ill_set_allowed_ips()
17883 ill->ill_allowed_ips = kmem_alloc( in ill_set_allowed_ips()
17884 ill->ill_allowed_ips_cnt * sizeof (in6_addr_t), KM_SLEEP); in ill_set_allowed_ips()
17886 ill->ill_allowed_ips[i] = mrp->mp_ipaddrs[i].ip_addr; in ill_set_allowed_ips()
17888 mutex_enter(&ill->ill_phyint->phyint_lock); in ill_set_allowed_ips()
17889 ill->ill_phyint->phyint_flags |= PHYI_L3PROTECT; in ill_set_allowed_ips()
17890 mutex_exit(&ill->ill_phyint->phyint_lock); in ill_set_allowed_ips()
17906 ill_t *ill = q->q_ptr; in ill_set_phys_addr_tail() local
17915 addrlen = dlindp->dl_addr_length - ABS(ill->ill_sap_length); in ill_set_phys_addr_tail()
17919 ill_set_ndmp(ill, addrmp, addroff, addrlen); in ill_set_phys_addr_tail()
17924 freemsg(ill->ill_dest_addr_mp); in ill_set_phys_addr_tail()
17925 ill->ill_dest_addr = addrmp->b_rptr + addroff; in ill_set_phys_addr_tail()
17926 ill->ill_dest_addr_mp = addrmp; in ill_set_phys_addr_tail()
17927 if (ill->ill_isv6) { in ill_set_phys_addr_tail()
17928 ill_setdesttoken(ill); in ill_set_phys_addr_tail()
17929 ipif_setdestlinklocal(ill->ill_ipif); in ill_set_phys_addr_tail()
17935 freemsg(ill->ill_phys_addr_mp); in ill_set_phys_addr_tail()
17936 ill->ill_phys_addr = addrmp->b_rptr + addroff; in ill_set_phys_addr_tail()
17937 ill->ill_phys_addr_mp = addrmp; in ill_set_phys_addr_tail()
17938 ill->ill_phys_addr_length = addrlen; in ill_set_phys_addr_tail()
17939 if (ill->ill_isv6) in ill_set_phys_addr_tail()
17940 ill_set_ndmp(ill, addrmp2, addroff, addrlen); in ill_set_phys_addr_tail()
17943 if (ill->ill_isv6) { in ill_set_phys_addr_tail()
17944 ill_setdefaulttoken(ill); in ill_set_phys_addr_tail()
17945 ipif_setlinklocal(ill->ill_ipif); in ill_set_phys_addr_tail()
17956 mutex_enter(&ill->ill_lock); in ill_set_phys_addr_tail()
17957 ill->ill_state_flags &= ~ILL_DOWN_IN_PROGRESS; in ill_set_phys_addr_tail()
17958 mutex_exit(&ill->ill_lock); in ill_set_phys_addr_tail()
17965 status = ill_up_ipifs(ill, q, addrmp); in ill_set_phys_addr_tail()
17974 ill_set_ndmp(ill_t *ill, mblk_t *ndmp, uint_t addroff, uint_t addrlen) in ill_set_ndmp() argument
17976 freemsg(ill->ill_nd_lla_mp); in ill_set_ndmp()
17977 ill->ill_nd_lla = ndmp->b_rptr + addroff; in ill_set_ndmp()
17978 ill->ill_nd_lla_mp = ndmp; in ill_set_ndmp()
17979 ill->ill_nd_lla_len = addrlen; in ill_set_ndmp()
17986 ill_replumb(ill_t *ill, mblk_t *mp) in ill_replumb() argument
17988 ipsq_t *ipsq = ill->ill_phyint->phyint_ipsq; in ill_replumb()
17992 ipsq_current_start(ipsq, ill->ill_ipif, 0); in ill_replumb()
17998 ill_down_ipifs(ill, B_FALSE); in ill_replumb()
18000 mutex_enter(&ill->ill_lock); in ill_replumb()
18001 if (!ill_is_quiescent(ill)) { in ill_replumb()
18003 (void) ipsq_pending_mp_add(NULL, ill->ill_ipif, ill->ill_rq, in ill_replumb()
18005 mutex_exit(&ill->ill_lock); in ill_replumb()
18008 mutex_exit(&ill->ill_lock); in ill_replumb()
18010 ill_replumb_tail(ipsq, ill->ill_rq, mp, NULL); in ill_replumb()
18018 ill_t *ill = q->q_ptr; in ill_replumb_tail() local
18023 freemsg(ill->ill_replumb_mp); in ill_replumb_tail()
18024 ill->ill_replumb_mp = copyb(mp); in ill_replumb_tail()
18026 if (ill->ill_replumb_mp == NULL) { in ill_replumb_tail()
18032 mutex_enter(&ill->ill_lock); in ill_replumb_tail()
18033 ill->ill_up_ipifs = ipsq_pending_mp_add(NULL, ill->ill_ipif, in ill_replumb_tail()
18034 ill->ill_rq, ill->ill_replumb_mp, 0); in ill_replumb_tail()
18035 mutex_exit(&ill->ill_lock); in ill_replumb_tail()
18037 if (!ill->ill_up_ipifs) { in ill_replumb_tail()
18042 ill->ill_replumbing = 1; in ill_replumb_tail()
18043 err = ill_down_ipifs_tail(ill); in ill_replumb_tail()
18055 ill_dlpi_send(ill, mp); in ill_replumb_tail()
18064 ASSERT(ill->ill_replumb_mp != NULL); in ill_replumb_tail()
18068 ill->ill_replumb_mp = ipsq_pending_mp_get(ipsq, &connp); in ill_replumb_tail()
18070 if (err == 0 && ill->ill_replumb_mp != NULL && in ill_replumb_tail()
18071 ill_up_ipifs(ill, q, ill->ill_replumb_mp) == EINPROGRESS) { in ill_replumb_tail()
18315 ill_nic_event_dispatch(ill_t *ill, lif_if_t lif, nic_event_t event, in ill_nic_event_dispatch() argument
18318 ip_stack_t *ipst = ill->ill_ipst; in ill_nic_event_dispatch()
18326 info->hnei_event.hne_nic = ill->ill_phyint->phyint_ifindex; in ill_nic_event_dispatch()
18329 info->hnei_event.hne_protocol = ill->ill_isv6 ? in ill_nic_event_dispatch()
18357 "information for %s (ENOMEM)\n", str, ill->ill_name)); in ill_nic_event_dispatch()
18366 ill_t *ill = ipif->ipif_ill; in ipif_arp_up_done_tail() local
18373 ill_t *, ill, ipif_t *, ipif); in ipif_arp_up_done_tail()
18384 ipmp_illgrp_t *illg = ill->ill_grp; in ipif_arp_up_done_tail()
18388 if (IS_IPMP(ill)) { in ipif_arp_up_done_tail()
18413 bound_ill = ill; in ipif_arp_up_done_tail()
18433 err = nce_lookup_then_add_v4(ill, in ipif_arp_up_done_tail()
18448 ill->ill_name)); in ipif_arp_up_done_tail()
18463 "for %s:%u\n", ill->ill_name, in ipif_arp_up_done_tail()
18499 ipmp_illgrp_del_ipif(ill->ill_grp, ipif); in ipif_arp_up_done_tail()
18507 ill_t *ill = ipif->ipif_ill; in ipif_arp_up() local
18511 ill_t *, ill, ipif_t *, ipif); in ipif_arp_up()
18517 first_interface = (ill->ill_ipif_up_count == 0 && in ipif_arp_up()
18518 ill->ill_ipif_dup_count == 0 && !was_dup); in ipif_arp_up()
18524 err = arp_ll_up(ill); in ipif_arp_up()
18548 arp_bringup_done(ill_t *ill, int err) in arp_bringup_done() argument
18556 ip1dbg(("arp_bringup_done(%s)\n", ill->ill_name)); in arp_bringup_done()
18558 ASSERT(IAM_WRITER_ILL(ill)); in arp_bringup_done()
18560 ipsq = ill->ill_phyint->phyint_ipsq; in arp_bringup_done()
18578 q = ill->ill_rq; in arp_bringup_done()
18598 if ((err == 0) && (ill->ill_up_ipifs)) { in arp_bringup_done()
18599 err = ill_up_ipifs(ill, q, mp1); in arp_bringup_done()
18609 if (ill->ill_move_ipif != NULL) { in arp_bringup_done()
18610 ipif = ill->ill_move_ipif; in arp_bringup_done()
18613 ill->ill_move_ipif = NULL; in arp_bringup_done()
18630 ill_t *, ill, ipif_t *, ipif); in arp_bringup_done()
18642 arp_replumb_done(ill_t *ill, int err) in arp_replumb_done() argument
18650 ASSERT(IAM_WRITER_ILL(ill)); in arp_replumb_done()
18652 ipsq = ill->ill_phyint->phyint_ipsq; in arp_replumb_done()
18673 q = ill->ill_rq; in arp_replumb_done()
18675 if ((err == 0) && (ill->ill_up_ipifs)) { in arp_replumb_done()
18676 err = ill_up_ipifs(ill, q, mp1); in arp_replumb_done()
18690 ill_t *, ill, ipif_t *, ipif); in arp_replumb_done()
18970 ill_t *ill = ipif->ipif_ill; in ipif_nce_down() local
18974 ill_t *, ill, ipif_t *, ipif); in ipif_nce_down()
18977 nce = nce_lookup_v6(ill, &ipif->ipif_v6lcl_addr); in ipif_nce_down()
18979 nce = nce_lookup_v4(ill, &ipif->ipif_lcl_addr); in ipif_nce_down()
18996 if (IS_IPMP(ill)) in ipif_nce_down()
18997 ipmp_illgrp_del_ipif(ill->ill_grp, ipif); in ipif_nce_down()
19003 if (ill->ill_ipif_up_count == 0) { in ipif_nce_down()
19004 ncec_walk(ill, ncec_delete_per_ill, ill, ill->ill_ipst); in ipif_nce_down()
19005 if (IS_UNDER_IPMP(ill)) in ipif_nce_down()
19006 nce_flush(ill, B_TRUE); in ipif_nce_down()
19017 ill_t *ill; in ill_lookup_usesrc() local
19024 for (ill = usill->ill_usesrc_grp_next; ill != NULL && ill != usill; in ill_lookup_usesrc()
19025 ill = ill->ill_usesrc_grp_next) { in ill_lookup_usesrc()
19026 if (!IS_UNDER_IPMP(ill) && (ill->ill_flags & ILLF_MULTICAST) && in ill_lookup_usesrc()
19027 !ILL_IS_CONDEMNED(ill)) { in ill_lookup_usesrc()
19028 ill_refhold(ill); in ill_lookup_usesrc()
19034 return (ill); in ill_lookup_usesrc()
19065 ill_t *ill; in ip_sioctl_get_ifhwaddr() local
19068 ill = ipif->ipif_ill; in ip_sioctl_get_ifhwaddr()
19070 if (ill->ill_phys_addr == NULL) { in ip_sioctl_get_ifhwaddr()
19073 if (ill->ill_phys_addr_length > sizeof (sock->sa_data)) { in ip_sioctl_get_ifhwaddr()
19077 ip1dbg(("ip_sioctl_get_hwaddr(%s)\n", ill->ill_name)); in ip_sioctl_get_ifhwaddr()
19090 sock->sa_family = arp_hw_type(ill->ill_mactype); in ip_sioctl_get_ifhwaddr()
19091 bcopy(ill->ill_phys_addr, &sock->sa_data, ill->ill_phys_addr_length); in ip_sioctl_get_ifhwaddr()
19111 ill_t *ill; in ip_sioctl_get_lifhwaddr() local
19114 ill = ipif->ipif_ill; in ip_sioctl_get_lifhwaddr()
19116 if (ill->ill_phys_addr == NULL) { in ip_sioctl_get_lifhwaddr()
19119 if (ill->ill_phys_addr_length > sizeof (sock->sdl_data)) { in ip_sioctl_get_lifhwaddr()
19123 ip1dbg(("ip_sioctl_get_lifhwaddr(%s)\n", ill->ill_name)); in ip_sioctl_get_lifhwaddr()
19135 lifr->lifr_type = ill->ill_type; in ip_sioctl_get_lifhwaddr()
19138 sock->sdl_index = ill->ill_phyint->phyint_ifindex; in ip_sioctl_get_lifhwaddr()
19139 sock->sdl_type = ill->ill_mactype; in ip_sioctl_get_lifhwaddr()
19142 sock->sdl_alen = ill->ill_phys_addr_length; in ip_sioctl_get_lifhwaddr()
19143 bcopy(ill->ill_phys_addr, sock->sdl_data, ill->ill_phys_addr_length); in ip_sioctl_get_lifhwaddr()