Lines Matching refs:vifp

235 #define	VIF_REFHOLD(vifp) {			\  argument
236 mutex_enter(&(vifp)->v_lock); \
237 (vifp)->v_refcnt++; \
238 mutex_exit(&(vifp)->v_lock); \
241 #define VIF_REFRELE_LOCKED(vifp) { \ argument
242 (vifp)->v_refcnt--; \
243 if ((vifp)->v_refcnt == 0 && \
244 ((vifp)->v_marks & VIF_MARK_CONDEMNED)) { \
245 del_vifp(vifp); \
247 mutex_exit(&(vifp)->v_lock); \
251 #define VIF_REFRELE(vifp) { \ argument
252 mutex_enter(&(vifp)->v_lock); \
253 (vifp)->v_refcnt--; \
254 if ((vifp)->v_refcnt == 0 && \
255 ((vifp)->v_marks & VIF_MARK_CONDEMNED)) { \
256 del_vifp(vifp); \
258 mutex_exit(&(vifp)->v_lock); \
655 struct vif *vifp = ipst->ips_vifs + vifi; in ip_mrouter_done() local
657 mutex_enter(&vifp->v_lock); in ip_mrouter_done()
661 if (vifp->v_marks & VIF_MARK_GOOD) { in ip_mrouter_done()
662 ASSERT(vifp->v_ipif != NULL); in ip_mrouter_done()
663 ipif_refhold(vifp->v_ipif); in ip_mrouter_done()
665 if (!(vifp->v_flags & (VIFF_TUNNEL | VIFF_REGISTER))) { in ip_mrouter_done()
666 ipif_t *ipif = vifp->v_ipif; in ip_mrouter_done()
667 ilm_t *ilm = vifp->v_ilm; in ip_mrouter_done()
669 vifp->v_ilm = NULL; in ip_mrouter_done()
670 vifp->v_marks &= ~VIF_MARK_GOOD; in ip_mrouter_done()
671 vifp->v_marks |= VIF_MARK_CONDEMNED; in ip_mrouter_done()
673 mutex_exit(&(vifp)->v_lock); in ip_mrouter_done()
681 mutex_enter(&vifp->v_lock); in ip_mrouter_done()
683 ipif_refrele(vifp->v_ipif); in ip_mrouter_done()
688 VIF_REFRELE_LOCKED(vifp); in ip_mrouter_done()
690 mutex_exit(&vifp->v_lock); in ip_mrouter_done()
806 unlock_good_vif(struct vif *vifp) in unlock_good_vif() argument
808 ASSERT(vifp->v_ipif != NULL); in unlock_good_vif()
809 ipif_refrele(vifp->v_ipif); in unlock_good_vif()
810 VIF_REFRELE(vifp); in unlock_good_vif()
814 lock_good_vif(struct vif *vifp) in lock_good_vif() argument
816 mutex_enter(&vifp->v_lock); in lock_good_vif()
817 if (!(vifp->v_marks & VIF_MARK_GOOD)) { in lock_good_vif()
818 mutex_exit(&vifp->v_lock); in lock_good_vif()
822 ASSERT(vifp->v_ipif != NULL); in lock_good_vif()
823 mutex_enter(&vifp->v_ipif->ipif_ill->ill_lock); in lock_good_vif()
824 if (!IPIF_CAN_LOOKUP(vifp->v_ipif)) { in lock_good_vif()
825 mutex_exit(&vifp->v_ipif->ipif_ill->ill_lock); in lock_good_vif()
826 mutex_exit(&vifp->v_lock); in lock_good_vif()
829 ipif_refhold_locked(vifp->v_ipif); in lock_good_vif()
830 mutex_exit(&vifp->v_ipif->ipif_ill->ill_lock); in lock_good_vif()
831 vifp->v_refcnt++; in lock_good_vif()
832 mutex_exit(&vifp->v_lock); in lock_good_vif()
842 struct vif *vifp = ipst->ips_vifs + vifcp->vifc_vifi; in add_vif() local
858 mutex_enter(&vifp->v_lock); in add_vif()
871 if (vifp->v_lcl_addr.s_addr != 0 || in add_vif()
872 vifp->v_marks != 0 || in add_vif()
873 vifp->v_refcnt != 0) { in add_vif()
874 mutex_exit(&vifp->v_lock); in add_vif()
880 mutex_exit(&vifp->v_lock); in add_vif()
884 vifp->v_refcnt++; in add_vif()
885 mutex_exit(&vifp->v_lock); in add_vif()
890 VIF_REFRELE(vifp); in add_vif()
900 mutex_enter(&vifp->v_lock); in add_vif()
916 VIF_REFRELE_LOCKED(vifp); in add_vif()
920 vifp->v_rmt_addr = vifcp->vifc_rmt_addr; in add_vif()
937 VIF_REFRELE_LOCKED(vifp); in add_vif()
945 VIF_REFRELE_LOCKED(vifp); in add_vif()
955 mutex_exit(&vifp->v_lock); in add_vif()
974 mutex_enter(&vifp->v_lock); in add_vif()
990 VIF_REFRELE_LOCKED(vifp); in add_vif()
994 vifp->v_ilm = ilm; in add_vif()
997 vifp->v_tbf = v_tbf; in add_vif()
998 gethrestime(&vifp->v_tbf->tbf_last_pkt_t); in add_vif()
999 vifp->v_tbf->tbf_n_tok = 0; in add_vif()
1000 vifp->v_tbf->tbf_q_len = 0; in add_vif()
1001 vifp->v_tbf->tbf_max_q_len = MAXQSIZE; in add_vif()
1002 vifp->v_tbf->tbf_q = vifp->v_tbf->tbf_t = NULL; in add_vif()
1004 vifp->v_flags = vifcp->vifc_flags; in add_vif()
1005 vifp->v_threshold = vifcp->vifc_threshold; in add_vif()
1006 vifp->v_lcl_addr = vifcp->vifc_lcl_addr; in add_vif()
1007 vifp->v_ipif = ipif; in add_vif()
1010 vifp->v_rate_limit = vifcp->vifc_rate_limit * (1024/1000); in add_vif()
1011 vifp->v_timeout_id = 0; in add_vif()
1013 vifp->v_pkt_in = 0; in add_vif()
1014 vifp->v_pkt_out = 0; in add_vif()
1015 vifp->v_bytes_in = 0; in add_vif()
1016 vifp->v_bytes_out = 0; in add_vif()
1017 mutex_init(&vifp->v_tbf->tbf_lock, NULL, MUTEX_DEFAULT, NULL); in add_vif()
1035 vifp->v_marks = VIF_MARK_GOOD; in add_vif()
1036 mutex_exit(&vifp->v_lock); in add_vif()
1043 del_vifp(struct vif *vifp) in del_vifp() argument
1045 struct tbf *t = vifp->v_tbf; in del_vifp()
1048 ip_stack_t *ipst = vifp->v_ipif->ipif_ill->ill_ipst; in del_vifp()
1051 ASSERT(vifp->v_marks & VIF_MARK_CONDEMNED); in del_vifp()
1056 "del_vif: src 0x%x\n", vifp->v_lcl_addr.s_addr); in del_vifp()
1059 if (vifp->v_timeout_id != 0) { in del_vifp()
1060 (void) untimeout(vifp->v_timeout_id); in del_vifp()
1061 vifp->v_timeout_id = 0; in del_vifp()
1082 if (vifp == ipst->ips_last_encap_vif) { in del_vifp()
1090 bzero(vifp->v_tbf, sizeof (*(vifp->v_tbf))); in del_vifp()
1100 bzero(vifp, sizeof (*vifp)); in del_vifp()
1106 struct vif *vifp = ipst->ips_vifs + *vifip; in del_vif() local
1111 mutex_enter(&vifp->v_lock); in del_vif()
1117 if (vifp->v_lcl_addr.s_addr == 0 || in del_vif()
1118 !(vifp->v_marks & VIF_MARK_GOOD)) { in del_vif()
1119 mutex_exit(&vifp->v_lock); in del_vif()
1124 vifp->v_marks &= ~VIF_MARK_GOOD; in del_vif()
1125 vifp->v_marks |= VIF_MARK_CONDEMNED; in del_vif()
1128 if (!(vifp->v_flags & (VIFF_TUNNEL | VIFF_REGISTER))) { in del_vif()
1129 ipif_t *ipif = vifp->v_ipif; in del_vif()
1130 ilm_t *ilm = vifp->v_ilm; in del_vif()
1132 vifp->v_ilm = NULL; in del_vif()
1139 mutex_exit(&(vifp)->v_lock); in del_vif()
1145 mutex_enter(&(vifp)->v_lock); in del_vif()
1148 if (vifp->v_flags & VIFF_REGISTER) { in del_vif()
1157 VIF_REFRELE_LOCKED(vifp); in del_vif()
1984 struct vif *vifp; in ip_mdq() local
2000 #define MC_SEND(ipha, mp, vifp, dst) { \ in ip_mdq() argument
2001 if ((vifp)->v_flags & VIFF_TUNNEL) \ in ip_mdq()
2002 encap_send((ipha), (mp), (vifp), (dst)); \ in ip_mdq()
2003 else if ((vifp)->v_flags & VIFF_REGISTER) \ in ip_mdq()
2004 register_send((ipha), (mp), (vifp), (dst)); \ in ip_mdq()
2006 phyint_send((ipha), (mp), (vifp), (dst)); \ in ip_mdq()
2139 for (vifp = ipst->ips_vifs, vifi = 0; in ip_mdq()
2141 vifp++, vifi++) { in ip_mdq()
2142 if (!lock_good_vif(vifp)) in ip_mdq()
2150 ASSERT(vifp->v_ipif != NULL); in ip_mdq()
2151 vifp->v_pkt_out++; in ip_mdq()
2152 vifp->v_bytes_out += plen; in ip_mdq()
2153 MC_SEND(ipha, mp, vifp, dst); in ip_mdq()
2156 unlock_good_vif(vifp); in ip_mdq()
2170 phyint_send(ipha_t *ipha, mblk_t *mp, struct vif *vifp, ipaddr_t dst) in phyint_send() argument
2173 ip_stack_t *ipst = vifp->v_ipif->ipif_ill->ill_ipst; in phyint_send()
2183 if (vifp->v_rate_limit <= 0) in phyint_send()
2184 tbf_send_packet(vifp, mp_copy); in phyint_send()
2190 vifp->v_rate_limit, (void *)vifp, (void *)mp, dst); in phyint_send()
2192 tbf_control(vifp, mp_copy, (ipha_t *)mp_copy->b_rptr); in phyint_send()
2202 register_send(ipha_t *ipha, mblk_t *mp, struct vif *vifp, ipaddr_t dst) in register_send() argument
2207 ill_t *ill = vifp->v_ipif->ipif_ill; in register_send()
2543 encap_send(ipha_t *ipha, mblk_t *mp, struct vif *vifp, ipaddr_t dst) in encap_send() argument
2548 ip_stack_t *ipst = vifp->v_ipif->ipif_ill->ill_ipst; in encap_send()
2554 (ptrdiff_t)(vifp - ipst->ips_vifs)); in encap_send()
2581 ipha_copy->ipha_src = vifp->v_lcl_addr.s_addr; in encap_send()
2582 ipha_copy->ipha_dst = vifp->v_rmt_addr.s_addr; in encap_send()
2597 if (vifp->v_rate_limit <= 0) in encap_send()
2598 tbf_send_packet(vifp, mp_copy); in encap_send()
2601 tbf_control(vifp, mp_copy, ipha); in encap_send()
2620 struct vif *vifp; in ip_mroute_decap() local
2672 vifp = ipst->ips_vifs; in ip_mroute_decap()
2673 vife = vifp + ipst->ips_numvifs; in ip_mroute_decap()
2676 for (; vifp < vife; ++vifp) { in ip_mroute_decap()
2677 if (!lock_good_vif(vifp)) in ip_mroute_decap()
2679 if (vifp->v_rmt_addr.s_addr == src) { in ip_mroute_decap()
2680 if (vifp->v_flags & VIFF_TUNNEL) in ip_mroute_decap()
2681 ipst->ips_last_encap_vif = vifp; in ip_mroute_decap()
2687 (ptrdiff_t)(vifp - ipst->ips_vifs), in ip_mroute_decap()
2690 unlock_good_vif(vifp); in ip_mroute_decap()
2693 unlock_good_vif(vifp); in ip_mroute_decap()
2696 if ((vifp = ipst->ips_last_encap_vif) == 0) { in ip_mroute_decap()
2703 (ptrdiff_t)(vifp - ipst->ips_vifs), ntohl(src))); in ip_mroute_decap()
2834 tbf_control(struct vif *vifp, mblk_t *mp, ipha_t *ipha) in tbf_control() argument
2837 struct tbf *t = vifp->v_tbf; in tbf_control()
2839 ill_t *ill = vifp->v_ipif->ipif_ill; in tbf_control()
2854 (ptrdiff_t)(vifp - ipst->ips_vifs), t->tbf_q_len, in tbf_control()
2860 tbf_update_tokens(vifp); in tbf_control()
2869 (ptrdiff_t)(vifp - ipst->ips_vifs), t->tbf_n_tok, p_len, in tbf_control()
2878 tbf_send_packet(vifp, mp); in tbf_control()
2882 tbf_queue(vifp, mp); in tbf_control()
2883 ASSERT(vifp->v_timeout_id == 0); in tbf_control()
2884 vifp->v_timeout_id = timeout(tbf_reprocess_q, vifp, in tbf_control()
2889 tbf_queue(vifp, mp); in tbf_control()
2890 tbf_process_q(vifp); in tbf_control()
2904 (ptrdiff_t)(vifp - ipst->ips_vifs), in tbf_control()
2907 mutex_exit(&vifp->v_tbf->tbf_lock); in tbf_control()
2917 if (!tbf_dq_sel(vifp, ipha)) { in tbf_control()
2923 tbf_queue(vifp, mp); in tbf_control()
2924 tbf_process_q(vifp); in tbf_control()
2928 id = vifp->v_timeout_id; in tbf_control()
2929 vifp->v_timeout_id = 0; in tbf_control()
2931 mutex_exit(&vifp->v_tbf->tbf_lock); in tbf_control()
2941 tbf_queue(struct vif *vifp, mblk_t *mp) in tbf_queue() argument
2943 struct tbf *t = vifp->v_tbf; in tbf_queue()
2944 ip_stack_t *ipst = vifp->v_ipif->ipif_ill->ill_ipst; in tbf_queue()
2949 "tbf_queue: vif %ld", (ptrdiff_t)(vifp - ipst->ips_vifs)); in tbf_queue()
2975 tbf_process_q(struct vif *vifp) in tbf_process_q() argument
2978 struct tbf *t = vifp->v_tbf; in tbf_process_q()
2980 ip_stack_t *ipst = vifp->v_ipif->ipif_ill->ill_ipst; in tbf_process_q()
2986 (ptrdiff_t)(vifp - ipst->ips_vifs), t->tbf_q_len); in tbf_process_q()
3014 tbf_send_packet(vifp, mp); in tbf_process_q()
3025 struct vif *vifp = arg; in tbf_reprocess_q() local
3026 ip_stack_t *ipst = vifp->v_ipif->ipif_ill->ill_ipst; in tbf_reprocess_q()
3029 mutex_enter(&vifp->v_tbf->tbf_lock); in tbf_reprocess_q()
3030 vifp->v_timeout_id = 0; in tbf_reprocess_q()
3031 tbf_update_tokens(vifp); in tbf_reprocess_q()
3033 tbf_process_q(vifp); in tbf_reprocess_q()
3035 if (vifp->v_tbf->tbf_q_len > 0) { in tbf_reprocess_q()
3036 vifp->v_timeout_id = timeout(tbf_reprocess_q, vifp, in tbf_reprocess_q()
3039 mutex_exit(&vifp->v_tbf->tbf_lock); in tbf_reprocess_q()
3044 (ptrdiff_t)(vifp - ipst->ips_vifs), vifp->v_timeout_id); in tbf_reprocess_q()
3055 tbf_dq_sel(struct vif *vifp, ipha_t *ipha) in tbf_dq_sel() argument
3058 struct tbf *t = vifp->v_tbf; in tbf_dq_sel()
3061 ill_t *ill = vifp->v_ipif->ipif_ill; in tbf_dq_sel()
3068 (ptrdiff_t)(vifp - ipst->ips_vifs), ntohl(ipha->ipha_dst)); in tbf_dq_sel()
3072 p = priority(vifp, ipha); in tbf_dq_sel()
3077 if (p > (priority(vifp, (ipha_t *)mp->b_rptr))) { in tbf_dq_sel()
3104 tbf_send_packet(struct vif *vifp, mblk_t *mp) in tbf_send_packet() argument
3106 ipif_t *ipif = vifp->v_ipif; in tbf_send_packet()
3114 if (vifp->v_flags & VIFF_TUNNEL) { in tbf_send_packet()
3120 (ptrdiff_t)(vifp - ipst->ips_vifs)); in tbf_send_packet()
3168 (ptrdiff_t)(vifp - ipst->ips_vifs), ntohl(dst)); in tbf_send_packet()
3207 tbf_update_tokens(struct vif *vifp) in tbf_update_tokens() argument
3211 struct tbf *t = vifp->v_tbf; in tbf_update_tokens()
3212 ip_stack_t *ipst = vifp->v_ipif->ipif_ill->ill_ipst; in tbf_update_tokens()
3231 t->tbf_n_tok += (tm/1000) * vifp->v_rate_limit / 1024 / 8; in tbf_update_tokens()
3239 tm, t->tbf_n_tok, (ptrdiff_t)(vifp - ipst->ips_vifs)); in tbf_update_tokens()
3251 priority(struct vif *vifp, ipha_t *ipha) in priority() argument
3254 ip_stack_t *ipst = vifp->v_ipif->ipif_ill->ill_ipst; in priority()
3259 ASSERT(MUTEX_HELD(&vifp->v_tbf->tbf_lock)); in priority()