Lines Matching refs:rt
384 struct mfc *rt; in mfc_find() local
388 LIST_FOREACH(rt, &V_mfchashtbl[MFCHASH(*o, *g)], mfc_hash) { in mfc_find()
389 if (in_hosteq(rt->mfc_origin, *o) && in mfc_find()
390 in_hosteq(rt->mfc_mcastgrp, *g) && in mfc_find()
391 TAILQ_EMPTY(&rt->mfc_stall)) in mfc_find()
395 return (rt); in mfc_find()
569 struct mfc *rt; in get_sg_cnt() local
572 rt = mfc_find(&req->src, &req->grp); in get_sg_cnt()
573 if (rt == NULL) { in get_sg_cnt()
578 req->pktcnt = rt->mfc_pkt_cnt; in get_sg_cnt()
579 req->bytecnt = rt->mfc_byte_cnt; in get_sg_cnt()
580 req->wrong_if = rt->mfc_wrong_if; in get_sg_cnt()
636 struct mfc *rt, *nrt; in if_detached_event() local
638 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in if_detached_event()
639 if (rt->mfc_parent == vifi) { in if_detached_event()
640 expire_mfc(rt); in if_detached_event()
755 struct mfc *rt, *nrt; in X_ip_mrouter_done() local
757 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in X_ip_mrouter_done()
758 expire_mfc(rt); in X_ip_mrouter_done()
992 update_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) in update_mfc_params() argument
996 rt->mfc_parent = mfccp->mfcc_parent; in update_mfc_params()
998 rt->mfc_ttls[i] = mfccp->mfcc_ttls[i]; in update_mfc_params()
999 rt->mfc_flags[i] = mfccp->mfcc_flags[i] & V_mrt_api_config & in update_mfc_params()
1004 rt->mfc_rp = mfccp->mfcc_rp; in update_mfc_params()
1006 rt->mfc_rp.s_addr = INADDR_ANY; in update_mfc_params()
1013 init_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) in init_mfc_params() argument
1015 rt->mfc_origin = mfccp->mfcc_origin; in init_mfc_params()
1016 rt->mfc_mcastgrp = mfccp->mfcc_mcastgrp; in init_mfc_params()
1018 update_mfc_params(rt, mfccp); in init_mfc_params()
1021 rt->mfc_pkt_cnt = 0; in init_mfc_params()
1022 rt->mfc_byte_cnt = 0; in init_mfc_params()
1023 rt->mfc_wrong_if = 0; in init_mfc_params()
1024 timevalclear(&rt->mfc_last_assert); in init_mfc_params()
1028 expire_mfc(struct mfc *rt) in expire_mfc() argument
1034 free_bw_list(rt->mfc_bw_meter); in expire_mfc()
1036 TAILQ_FOREACH_SAFE(rte, &rt->mfc_stall, rte_link, nrte) { in expire_mfc()
1038 TAILQ_REMOVE(&rt->mfc_stall, rte, rte_link); in expire_mfc()
1042 LIST_REMOVE(rt, mfc_hash); in expire_mfc()
1043 free(rt, M_MRTABLE); in expire_mfc()
1052 struct mfc *rt; in add_mfc() local
1060 rt = mfc_find(&mfccp->mfcc_origin, &mfccp->mfcc_mcastgrp); in add_mfc()
1063 if (rt) { in add_mfc()
1068 update_mfc_params(rt, mfccp); in add_mfc()
1079 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in add_mfc()
1080 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in add_mfc()
1081 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp) && in add_mfc()
1082 !TAILQ_EMPTY(&rt->mfc_stall)) { in add_mfc()
1088 TAILQ_FIRST(&rt->mfc_stall)); in add_mfc()
1092 init_mfc_params(rt, mfccp); in add_mfc()
1093 rt->mfc_expire = 0; /* Don't clean this guy up */ in add_mfc()
1097 TAILQ_FOREACH_SAFE(rte, &rt->mfc_stall, rte_link, nrte) { in add_mfc()
1099 ip_mdq(rte->m, rte->ifp, rt, -1); in add_mfc()
1101 TAILQ_REMOVE(&rt->mfc_stall, rte, rte_link); in add_mfc()
1102 rt->mfc_nstall--; in add_mfc()
1113 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in add_mfc()
1114 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in add_mfc()
1115 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp)) { in add_mfc()
1116 init_mfc_params(rt, mfccp); in add_mfc()
1117 if (rt->mfc_expire) in add_mfc()
1119 rt->mfc_expire = 0; in add_mfc()
1124 if (rt == NULL) { /* no upcall, so make a new entry */ in add_mfc()
1125 rt = (struct mfc *)malloc(sizeof(*rt), M_MRTABLE, M_NOWAIT); in add_mfc()
1126 if (rt == NULL) { in add_mfc()
1132 init_mfc_params(rt, mfccp); in add_mfc()
1133 TAILQ_INIT(&rt->mfc_stall); in add_mfc()
1134 rt->mfc_nstall = 0; in add_mfc()
1136 rt->mfc_expire = 0; in add_mfc()
1137 rt->mfc_bw_meter = NULL; in add_mfc()
1140 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); in add_mfc()
1158 struct mfc *rt; in del_mfc() local
1168 rt = mfc_find(&origin, &mcastgrp); in del_mfc()
1169 if (rt == NULL) { in del_mfc()
1177 free_bw_list(rt->mfc_bw_meter); in del_mfc()
1178 rt->mfc_bw_meter = NULL; in del_mfc()
1180 LIST_REMOVE(rt, mfc_hash); in del_mfc()
1181 free(rt, M_MRTABLE); in del_mfc()
1224 struct mfc *rt; in X_ip_mforward() local
1270 rt = mfc_find(&ip->ip_src, &ip->ip_dst); in X_ip_mforward()
1273 if (rt != NULL) { in X_ip_mforward()
1274 error = ip_mdq(m, ifp, rt, -1); in X_ip_mforward()
1319 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in X_ip_mforward()
1320 if (in_hosteq(ip->ip_src, rt->mfc_origin) && in X_ip_mforward()
1321 in_hosteq(ip->ip_dst, rt->mfc_mcastgrp) && in X_ip_mforward()
1322 !TAILQ_EMPTY(&rt->mfc_stall)) in X_ip_mforward()
1326 if (rt == NULL) { in X_ip_mforward()
1343 rt = (struct mfc *)malloc(sizeof(*rt), M_MRTABLE, M_NOWAIT); in X_ip_mforward()
1344 if (rt == NULL) in X_ip_mforward()
1369 free(rt, M_MRTABLE); in X_ip_mforward()
1379 rt->mfc_origin.s_addr = ip->ip_src.s_addr; in X_ip_mforward()
1380 rt->mfc_mcastgrp.s_addr = ip->ip_dst.s_addr; in X_ip_mforward()
1381 rt->mfc_expire = UPCALL_EXPIRE; in X_ip_mforward()
1384 rt->mfc_ttls[i] = 0; in X_ip_mforward()
1385 rt->mfc_flags[i] = 0; in X_ip_mforward()
1387 rt->mfc_parent = -1; in X_ip_mforward()
1390 rt->mfc_rp.s_addr = INADDR_ANY; in X_ip_mforward()
1391 rt->mfc_bw_meter = NULL; in X_ip_mforward()
1394 rt->mfc_pkt_cnt = 0; in X_ip_mforward()
1395 rt->mfc_byte_cnt = 0; in X_ip_mforward()
1396 rt->mfc_wrong_if = 0; in X_ip_mforward()
1397 timevalclear(&rt->mfc_last_assert); in X_ip_mforward()
1399 TAILQ_INIT(&rt->mfc_stall); in X_ip_mforward()
1400 rt->mfc_nstall = 0; in X_ip_mforward()
1403 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); in X_ip_mforward()
1404 TAILQ_INSERT_HEAD(&rt->mfc_stall, rte, rte_link); in X_ip_mforward()
1405 rt->mfc_nstall++; in X_ip_mforward()
1409 if (rt->mfc_nstall > MAX_UPQ) { in X_ip_mforward()
1418 TAILQ_INSERT_TAIL(&rt->mfc_stall, rte, rte_link); in X_ip_mforward()
1419 rt->mfc_nstall++; in X_ip_mforward()
1445 struct mfc *rt, *nrt; in expire_upcalls() local
1450 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in expire_upcalls()
1451 if (TAILQ_EMPTY(&rt->mfc_stall)) in expire_upcalls()
1454 if (rt->mfc_expire == 0 || --rt->mfc_expire > 0) in expire_upcalls()
1460 while (rt->mfc_bw_meter != NULL) { in expire_upcalls()
1461 struct bw_meter *x = rt->mfc_bw_meter; in expire_upcalls()
1463 rt->mfc_bw_meter = x->bm_mfc_next; in expire_upcalls()
1469 (u_long)ntohl(rt->mfc_origin.s_addr), in expire_upcalls()
1470 (u_long)ntohl(rt->mfc_mcastgrp.s_addr)); in expire_upcalls()
1472 expire_mfc(rt); in expire_upcalls()
1488 ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) in ip_mdq() argument
1503 pim_register_send(ip, V_viftable + xmt_vif, m, rt); in ip_mdq()
1512 vifi = rt->mfc_parent; in ip_mdq()
1517 ++rt->mfc_wrong_if; in ip_mdq()
1539 if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_DISABLE_WRONGVIF) in ip_mdq()
1542 if (ratecheck(&rt->mfc_last_assert, &pim_assert_interval)) { in ip_mdq()
1580 rt->mfc_pkt_cnt++; in ip_mdq()
1581 rt->mfc_byte_cnt += plen; in ip_mdq()
1590 if ((rt->mfc_ttls[vifi] > 0) && (ip->ip_ttl > rt->mfc_ttls[vifi])) { in ip_mdq()
1594 pim_register_send(ip, V_viftable + vifi, m, rt); in ip_mdq()
1602 if (rt->mfc_bw_meter != NULL) { in ip_mdq()
1608 for (x = rt->mfc_bw_meter; x != NULL; x = x->bm_mfc_next) in ip_mdq()
2325 struct mfc *rt) in pim_register_send() argument
2334 in_nullhost(rt->mfc_rp)) in pim_register_send()
2351 if ((V_mrt_api_config & MRT_MFC_RP) && !in_nullhost(rt->mfc_rp)) { in pim_register_send()
2352 pim_register_send_rp(ip, vifp, mm, rt); in pim_register_send()
2354 pim_register_send_upcall(ip, vifp, mm, rt); in pim_register_send()
2417 struct mbuf *mb_copy, struct mfc *rt) in pim_register_send_upcall() argument
2469 struct mfc *rt) in pim_register_send_rp() argument
2475 vifi_t vifi = rt->mfc_parent; in pim_register_send_rp()
2506 ip_outer->ip_dst = rt->mfc_rp; in pim_register_send_rp()
2519 if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_BORDER_VIF & V_mrt_api_config) in pim_register_send_rp()
2775 struct mfc *rt; in sysctl_mfctable() local
2788 LIST_FOREACH(rt, &V_mfchashtbl[i], mfc_hash) { in sysctl_mfctable()
2789 error = SYSCTL_OUT(req, rt, sizeof(struct mfc)); in sysctl_mfctable()