Lines Matching refs:rt
372 struct mfc *rt; in mfc_find() local
381 LIST_FOREACH(rt, &V_mfchashtbl[MFCHASH(*o, *g)], mfc_hash) { in mfc_find()
382 if (in_hosteq(rt->mfc_origin, *o) && in mfc_find()
383 in_hosteq(rt->mfc_mcastgrp, *g) && in mfc_find()
384 buf_ring_empty(rt->mfc_stall_ring)) in mfc_find()
388 return (rt); in mfc_find()
394 struct mfc *rt; in mfc_alloc() local
395 rt = malloc(sizeof(*rt), M_MRTABLE, M_NOWAIT | M_ZERO); in mfc_alloc()
396 if (rt == NULL) in mfc_alloc()
397 return rt; in mfc_alloc()
399 rt->mfc_stall_ring = buf_ring_alloc(MAX_UPQ, M_MRTABLE, in mfc_alloc()
401 if (rt->mfc_stall_ring == NULL) { in mfc_alloc()
402 free(rt, M_MRTABLE); in mfc_alloc()
406 return rt; in mfc_alloc()
575 struct mfc *rt; in get_sg_cnt() local
578 rt = mfc_find(&req->src, &req->grp); in get_sg_cnt()
579 if (rt == NULL) { in get_sg_cnt()
584 req->pktcnt = rt->mfc_pkt_cnt; in get_sg_cnt()
585 req->bytecnt = rt->mfc_byte_cnt; in get_sg_cnt()
586 req->wrong_if = rt->mfc_wrong_if; in get_sg_cnt()
643 struct mfc *rt, *nrt; in if_detached_event() local
645 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in if_detached_event()
646 if (rt->mfc_parent == vifi) { in if_detached_event()
647 expire_mfc(rt); in if_detached_event()
815 struct mfc *rt, *nrt; in X_ip_mrouter_done() local
817 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in X_ip_mrouter_done()
818 expire_mfc(rt); in X_ip_mrouter_done()
1075 update_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) in update_mfc_params() argument
1079 rt->mfc_parent = mfccp->mfcc_parent; in update_mfc_params()
1081 rt->mfc_ttls[i] = mfccp->mfcc_ttls[i]; in update_mfc_params()
1082 rt->mfc_flags[i] = mfccp->mfcc_flags[i] & V_mrt_api_config & in update_mfc_params()
1087 rt->mfc_rp = mfccp->mfcc_rp; in update_mfc_params()
1089 rt->mfc_rp.s_addr = INADDR_ANY; in update_mfc_params()
1096 init_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) in init_mfc_params() argument
1098 rt->mfc_origin = mfccp->mfcc_origin; in init_mfc_params()
1099 rt->mfc_mcastgrp = mfccp->mfcc_mcastgrp; in init_mfc_params()
1101 update_mfc_params(rt, mfccp); in init_mfc_params()
1104 rt->mfc_pkt_cnt = 0; in init_mfc_params()
1105 rt->mfc_byte_cnt = 0; in init_mfc_params()
1106 rt->mfc_wrong_if = 0; in init_mfc_params()
1107 timevalclear(&rt->mfc_last_assert); in init_mfc_params()
1111 expire_mfc(struct mfc *rt) in expire_mfc() argument
1117 free_bw_list(rt->mfc_bw_meter_leq); in expire_mfc()
1118 free_bw_list(rt->mfc_bw_meter_geq); in expire_mfc()
1120 while (!buf_ring_empty(rt->mfc_stall_ring)) { in expire_mfc()
1121 rte = buf_ring_dequeue_mc(rt->mfc_stall_ring); in expire_mfc()
1127 buf_ring_free(rt->mfc_stall_ring, M_MRTABLE); in expire_mfc()
1129 LIST_REMOVE(rt, mfc_hash); in expire_mfc()
1130 free(rt, M_MRTABLE); in expire_mfc()
1139 struct mfc *rt; in add_mfc() local
1146 rt = mfc_find(&mfccp->mfcc_origin, &mfccp->mfcc_mcastgrp); in add_mfc()
1149 if (rt) { in add_mfc()
1154 update_mfc_params(rt, mfccp); in add_mfc()
1165 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in add_mfc()
1166 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in add_mfc()
1167 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp) && in add_mfc()
1168 !buf_ring_empty(rt->mfc_stall_ring)) { in add_mfc()
1174 rt->mfc_stall_ring); in add_mfc()
1178 init_mfc_params(rt, mfccp); in add_mfc()
1179 rt->mfc_expire = 0; /* Don't clean this guy up */ in add_mfc()
1183 while (!buf_ring_empty(rt->mfc_stall_ring)) { in add_mfc()
1184 rte = buf_ring_dequeue_mc(rt->mfc_stall_ring); in add_mfc()
1186 ip_mdq(rte->m, rte->ifp, rt, -1); in add_mfc()
1199 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in add_mfc()
1200 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in add_mfc()
1201 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp)) { in add_mfc()
1202 init_mfc_params(rt, mfccp); in add_mfc()
1203 if (rt->mfc_expire) in add_mfc()
1205 rt->mfc_expire = 0; in add_mfc()
1210 if (rt == NULL) { /* no upcall, so make a new entry */ in add_mfc()
1211 rt = mfc_alloc(); in add_mfc()
1212 if (rt == NULL) { in add_mfc()
1217 init_mfc_params(rt, mfccp); in add_mfc()
1219 rt->mfc_expire = 0; in add_mfc()
1220 rt->mfc_bw_meter_leq = NULL; in add_mfc()
1221 rt->mfc_bw_meter_geq = NULL; in add_mfc()
1224 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); in add_mfc()
1241 struct mfc *rt; in del_mfc() local
1251 rt = mfc_find(&origin, &mcastgrp); in del_mfc()
1252 if (rt == NULL) { in del_mfc()
1260 free_bw_list(rt->mfc_bw_meter_leq); in del_mfc()
1261 rt->mfc_bw_meter_leq = NULL; in del_mfc()
1262 free_bw_list(rt->mfc_bw_meter_geq); in del_mfc()
1263 rt->mfc_bw_meter_geq = NULL; in del_mfc()
1265 LIST_REMOVE(rt, mfc_hash); in del_mfc()
1266 free(rt, M_MRTABLE); in del_mfc()
1309 struct mfc *rt; in X_ip_mforward() local
1360 rt = mfc_find(&ip->ip_src, &ip->ip_dst); in X_ip_mforward()
1363 if (rt != NULL) { in X_ip_mforward()
1364 error = ip_mdq(m, ifp, rt, -1); in X_ip_mforward()
1414 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) in X_ip_mforward()
1416 if (in_hosteq(ip->ip_src, rt->mfc_origin) && in X_ip_mforward()
1417 in_hosteq(ip->ip_dst, rt->mfc_mcastgrp) && in X_ip_mforward()
1418 !buf_ring_empty(rt->mfc_stall_ring)) in X_ip_mforward()
1422 if (rt == NULL) { in X_ip_mforward()
1439 rt = mfc_alloc(); in X_ip_mforward()
1440 if (rt == NULL) in X_ip_mforward()
1464 fail1: free(rt, M_MRTABLE); in X_ip_mforward()
1472 rt->mfc_origin.s_addr = ip->ip_src.s_addr; in X_ip_mforward()
1473 rt->mfc_mcastgrp.s_addr = ip->ip_dst.s_addr; in X_ip_mforward()
1474 rt->mfc_expire = UPCALL_EXPIRE; in X_ip_mforward()
1477 rt->mfc_ttls[i] = 0; in X_ip_mforward()
1478 rt->mfc_flags[i] = 0; in X_ip_mforward()
1480 rt->mfc_parent = -1; in X_ip_mforward()
1483 rt->mfc_rp.s_addr = INADDR_ANY; in X_ip_mforward()
1484 rt->mfc_bw_meter_leq = NULL; in X_ip_mforward()
1485 rt->mfc_bw_meter_geq = NULL; in X_ip_mforward()
1488 rt->mfc_pkt_cnt = 0; in X_ip_mforward()
1489 rt->mfc_byte_cnt = 0; in X_ip_mforward()
1490 rt->mfc_wrong_if = 0; in X_ip_mforward()
1491 timevalclear(&rt->mfc_last_assert); in X_ip_mforward()
1493 buf_ring_enqueue(rt->mfc_stall_ring, rte); in X_ip_mforward()
1496 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); in X_ip_mforward()
1499 if (buf_ring_full(rt->mfc_stall_ring)) { in X_ip_mforward()
1507 buf_ring_enqueue(rt->mfc_stall_ring, rte); in X_ip_mforward()
1531 struct mfc *rt, *nrt; in expire_upcalls() local
1536 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in expire_upcalls()
1537 if (buf_ring_empty(rt->mfc_stall_ring)) in expire_upcalls()
1540 if (rt->mfc_expire == 0 || --rt->mfc_expire > 0) in expire_upcalls()
1545 (u_long)ntohl(rt->mfc_origin.s_addr), in expire_upcalls()
1546 (u_long)ntohl(rt->mfc_mcastgrp.s_addr)); in expire_upcalls()
1548 expire_mfc(rt); in expire_upcalls()
1562 ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) in ip_mdq() argument
1578 pim_register_send(ip, V_viftable + xmt_vif, m, rt); in ip_mdq()
1587 vifi = rt->mfc_parent; in ip_mdq()
1592 ++rt->mfc_wrong_if; in ip_mdq()
1612 if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_DISABLE_WRONGVIF) in ip_mdq()
1615 if (ratecheck(&rt->mfc_last_assert, &pim_assert_interval)) { in ip_mdq()
1655 rt->mfc_pkt_cnt++; in ip_mdq()
1656 rt->mfc_byte_cnt += plen; in ip_mdq()
1665 if ((rt->mfc_ttls[vifi] > 0) && (ip->ip_ttl > rt->mfc_ttls[vifi])) { in ip_mdq()
1669 pim_register_send(ip, V_viftable + vifi, m, rt); in ip_mdq()
1677 if ((rt->mfc_bw_meter_geq != NULL) || (rt->mfc_bw_meter_leq != NULL)) { in ip_mdq()
1683 for (x = rt->mfc_bw_meter_geq; x != NULL; x = x->bm_mfc_next) in ip_mdq()
1687 for (x = rt->mfc_bw_meter_leq; x != NULL; x = x->bm_mfc_next) { in ip_mdq()
2261 struct mfc *rt) in pim_register_send() argument
2270 in_nullhost(rt->mfc_rp)) in pim_register_send()
2287 if ((V_mrt_api_config & MRT_MFC_RP) && !in_nullhost(rt->mfc_rp)) { in pim_register_send()
2288 pim_register_send_rp(ip, vifp, mm, rt); in pim_register_send()
2290 pim_register_send_upcall(ip, vifp, mm, rt); in pim_register_send()
2353 struct mbuf *mb_copy, struct mfc *rt) in pim_register_send_upcall() argument
2405 struct mfc *rt) in pim_register_send_rp() argument
2411 vifi_t vifi = rt->mfc_parent; in pim_register_send_rp()
2442 ip_outer->ip_dst = rt->mfc_rp; in pim_register_send_rp()
2455 if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_BORDER_VIF & V_mrt_api_config) in pim_register_send_rp()
2711 struct mfc *rt; in sysctl_mfctable() local
2724 LIST_FOREACH(rt, &V_mfchashtbl[i], mfc_hash) { in sysctl_mfctable()
2725 error = SYSCTL_OUT(req, rt, sizeof(struct mfc)); in sysctl_mfctable()