Lines Matching refs:rt
377 struct mfc *rt; in mfc_find() local
386 LIST_FOREACH(rt, &V_mfchashtbl[MFCHASH(*o, *g)], mfc_hash) { in mfc_find()
387 if (in_hosteq(rt->mfc_origin, *o) && in mfc_find()
388 in_hosteq(rt->mfc_mcastgrp, *g) && in mfc_find()
389 buf_ring_empty(rt->mfc_stall_ring)) in mfc_find()
393 return (rt); in mfc_find()
399 struct mfc *rt; in mfc_alloc() local
400 rt = malloc(sizeof(*rt), M_MRTABLE, M_NOWAIT | M_ZERO); in mfc_alloc()
401 if (rt == NULL) in mfc_alloc()
402 return rt; in mfc_alloc()
404 rt->mfc_stall_ring = buf_ring_alloc(MAX_UPQ, M_MRTABLE, in mfc_alloc()
406 if (rt->mfc_stall_ring == NULL) { in mfc_alloc()
407 free(rt, M_MRTABLE); in mfc_alloc()
411 return rt; in mfc_alloc()
580 struct mfc *rt; in get_sg_cnt() local
583 rt = mfc_find(&req->src, &req->grp); in get_sg_cnt()
584 if (rt == NULL) { in get_sg_cnt()
589 req->pktcnt = rt->mfc_pkt_cnt; in get_sg_cnt()
590 req->bytecnt = rt->mfc_byte_cnt; in get_sg_cnt()
591 req->wrong_if = rt->mfc_wrong_if; in get_sg_cnt()
648 struct mfc *rt, *nrt; in if_detached_event() local
650 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in if_detached_event()
651 if (rt->mfc_parent == vifi) { in if_detached_event()
652 expire_mfc(rt); in if_detached_event()
834 struct mfc *rt, *nrt; in X_ip_mrouter_done() local
836 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in X_ip_mrouter_done()
837 expire_mfc(rt); in X_ip_mrouter_done()
1095 update_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) in update_mfc_params() argument
1099 rt->mfc_parent = mfccp->mfcc_parent; in update_mfc_params()
1101 rt->mfc_ttls[i] = mfccp->mfcc_ttls[i]; in update_mfc_params()
1102 rt->mfc_flags[i] = mfccp->mfcc_flags[i] & V_mrt_api_config & in update_mfc_params()
1107 rt->mfc_rp = mfccp->mfcc_rp; in update_mfc_params()
1109 rt->mfc_rp.s_addr = INADDR_ANY; in update_mfc_params()
1116 init_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) in init_mfc_params() argument
1118 rt->mfc_origin = mfccp->mfcc_origin; in init_mfc_params()
1119 rt->mfc_mcastgrp = mfccp->mfcc_mcastgrp; in init_mfc_params()
1121 update_mfc_params(rt, mfccp); in init_mfc_params()
1124 rt->mfc_pkt_cnt = 0; in init_mfc_params()
1125 rt->mfc_byte_cnt = 0; in init_mfc_params()
1126 rt->mfc_wrong_if = 0; in init_mfc_params()
1127 timevalclear(&rt->mfc_last_assert); in init_mfc_params()
1131 expire_mfc(struct mfc *rt) in expire_mfc() argument
1137 free_bw_list(rt->mfc_bw_meter_leq); in expire_mfc()
1138 free_bw_list(rt->mfc_bw_meter_geq); in expire_mfc()
1140 while (!buf_ring_empty(rt->mfc_stall_ring)) { in expire_mfc()
1141 rte = buf_ring_dequeue_mc(rt->mfc_stall_ring); in expire_mfc()
1147 buf_ring_free(rt->mfc_stall_ring, M_MRTABLE); in expire_mfc()
1149 LIST_REMOVE(rt, mfc_hash); in expire_mfc()
1150 free(rt, M_MRTABLE); in expire_mfc()
1159 struct mfc *rt; in add_mfc() local
1166 rt = mfc_find(&mfccp->mfcc_origin, &mfccp->mfcc_mcastgrp); in add_mfc()
1169 if (rt) { in add_mfc()
1174 update_mfc_params(rt, mfccp); in add_mfc()
1185 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in add_mfc()
1186 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in add_mfc()
1187 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp) && in add_mfc()
1188 !buf_ring_empty(rt->mfc_stall_ring)) { in add_mfc()
1194 rt->mfc_stall_ring); in add_mfc()
1198 init_mfc_params(rt, mfccp); in add_mfc()
1199 rt->mfc_expire = 0; /* Don't clean this guy up */ in add_mfc()
1203 while (!buf_ring_empty(rt->mfc_stall_ring)) { in add_mfc()
1204 rte = buf_ring_dequeue_mc(rt->mfc_stall_ring); in add_mfc()
1206 ip_mdq(rte->m, rte->ifp, rt, -1); in add_mfc()
1219 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in add_mfc()
1220 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in add_mfc()
1221 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp)) { in add_mfc()
1222 init_mfc_params(rt, mfccp); in add_mfc()
1223 if (rt->mfc_expire) in add_mfc()
1225 rt->mfc_expire = 0; in add_mfc()
1230 if (rt == NULL) { /* no upcall, so make a new entry */ in add_mfc()
1231 rt = mfc_alloc(); in add_mfc()
1232 if (rt == NULL) { in add_mfc()
1237 init_mfc_params(rt, mfccp); in add_mfc()
1239 rt->mfc_expire = 0; in add_mfc()
1240 rt->mfc_bw_meter_leq = NULL; in add_mfc()
1241 rt->mfc_bw_meter_geq = NULL; in add_mfc()
1244 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); in add_mfc()
1261 struct mfc *rt; in del_mfc() local
1271 LIST_FOREACH(rt, &V_mfchashtbl[MFCHASH(origin, mcastgrp)], mfc_hash) { in del_mfc()
1272 if (in_hosteq(rt->mfc_origin, origin) && in del_mfc()
1273 in_hosteq(rt->mfc_mcastgrp, mcastgrp)) in del_mfc()
1276 if (rt == NULL) { in del_mfc()
1281 expire_mfc(rt); in del_mfc()
1324 struct mfc *rt; in X_ip_mforward() local
1377 rt = mfc_find(&ip->ip_src, &ip->ip_dst); in X_ip_mforward()
1380 if (rt != NULL) { in X_ip_mforward()
1381 error = ip_mdq(m, ifp, rt, -1); in X_ip_mforward()
1431 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) in X_ip_mforward()
1433 if (in_hosteq(ip->ip_src, rt->mfc_origin) && in X_ip_mforward()
1434 in_hosteq(ip->ip_dst, rt->mfc_mcastgrp) && in X_ip_mforward()
1435 !buf_ring_empty(rt->mfc_stall_ring)) in X_ip_mforward()
1439 if (rt == NULL) { in X_ip_mforward()
1456 rt = mfc_alloc(); in X_ip_mforward()
1457 if (rt == NULL) in X_ip_mforward()
1481 fail1: free(rt, M_MRTABLE); in X_ip_mforward()
1489 rt->mfc_origin.s_addr = ip->ip_src.s_addr; in X_ip_mforward()
1490 rt->mfc_mcastgrp.s_addr = ip->ip_dst.s_addr; in X_ip_mforward()
1491 rt->mfc_expire = UPCALL_EXPIRE; in X_ip_mforward()
1494 rt->mfc_ttls[i] = 0; in X_ip_mforward()
1495 rt->mfc_flags[i] = 0; in X_ip_mforward()
1497 rt->mfc_parent = -1; in X_ip_mforward()
1500 rt->mfc_rp.s_addr = INADDR_ANY; in X_ip_mforward()
1501 rt->mfc_bw_meter_leq = NULL; in X_ip_mforward()
1502 rt->mfc_bw_meter_geq = NULL; in X_ip_mforward()
1505 rt->mfc_pkt_cnt = 0; in X_ip_mforward()
1506 rt->mfc_byte_cnt = 0; in X_ip_mforward()
1507 rt->mfc_wrong_if = 0; in X_ip_mforward()
1508 timevalclear(&rt->mfc_last_assert); in X_ip_mforward()
1510 buf_ring_enqueue(rt->mfc_stall_ring, rte); in X_ip_mforward()
1513 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); in X_ip_mforward()
1516 if (buf_ring_full(rt->mfc_stall_ring)) { in X_ip_mforward()
1524 buf_ring_enqueue(rt->mfc_stall_ring, rte); in X_ip_mforward()
1548 struct mfc *rt, *nrt; in expire_upcalls() local
1553 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in expire_upcalls()
1554 if (buf_ring_empty(rt->mfc_stall_ring)) in expire_upcalls()
1557 if (rt->mfc_expire == 0 || --rt->mfc_expire > 0) in expire_upcalls()
1562 (u_long)ntohl(rt->mfc_origin.s_addr), in expire_upcalls()
1563 (u_long)ntohl(rt->mfc_mcastgrp.s_addr)); in expire_upcalls()
1565 expire_mfc(rt); in expire_upcalls()
1579 ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) in ip_mdq() argument
1596 pim_register_send(ip, V_viftable + xmt_vif, m, rt); in ip_mdq()
1605 vifi = rt->mfc_parent; in ip_mdq()
1610 ++rt->mfc_wrong_if; in ip_mdq()
1630 if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_DISABLE_WRONGVIF) in ip_mdq()
1633 if (ratecheck(&rt->mfc_last_assert, &pim_assert_interval)) { in ip_mdq()
1673 rt->mfc_pkt_cnt++; in ip_mdq()
1674 rt->mfc_byte_cnt += plen; in ip_mdq()
1683 if ((rt->mfc_ttls[vifi] > 0) && (ip->ip_ttl > rt->mfc_ttls[vifi])) { in ip_mdq()
1687 pim_register_send(ip, V_viftable + vifi, m, rt); in ip_mdq()
1695 if ((rt->mfc_bw_meter_geq != NULL) || (rt->mfc_bw_meter_leq != NULL)) { in ip_mdq()
1701 for (x = rt->mfc_bw_meter_geq; x != NULL; x = x->bm_mfc_next) in ip_mdq()
1705 for (x = rt->mfc_bw_meter_leq; x != NULL; x = x->bm_mfc_next) { in ip_mdq()
2280 struct mfc *rt) in pim_register_send() argument
2289 in_nullhost(rt->mfc_rp)) in pim_register_send()
2306 if ((V_mrt_api_config & MRT_MFC_RP) && !in_nullhost(rt->mfc_rp)) { in pim_register_send()
2307 pim_register_send_rp(ip, vifp, mm, rt); in pim_register_send()
2309 pim_register_send_upcall(ip, vifp, mm, rt); in pim_register_send()
2372 struct mbuf *mb_copy, struct mfc *rt) in pim_register_send_upcall() argument
2424 struct mfc *rt) in pim_register_send_rp() argument
2430 vifi_t vifi = rt->mfc_parent; in pim_register_send_rp()
2461 ip_outer->ip_dst = rt->mfc_rp; in pim_register_send_rp()
2474 if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_BORDER_VIF & V_mrt_api_config) in pim_register_send_rp()
2730 struct mfc *rt; in sysctl_mfctable() local
2746 LIST_FOREACH(rt, &V_mfchashtbl[i], mfc_hash) { in sysctl_mfctable()
2747 error = SYSCTL_OUT(req, rt, sizeof(struct mfc)); in sysctl_mfctable()