Lines Matching refs:rt
382 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 TAILQ_EMPTY(&rt->mfc_stall)) in mfc_find()
393 return (rt); in mfc_find()
567 struct mfc *rt; in get_sg_cnt() local
570 rt = mfc_find(&req->src, &req->grp); in get_sg_cnt()
571 if (rt == NULL) { in get_sg_cnt()
576 req->pktcnt = rt->mfc_pkt_cnt; in get_sg_cnt()
577 req->bytecnt = rt->mfc_byte_cnt; in get_sg_cnt()
578 req->wrong_if = rt->mfc_wrong_if; in get_sg_cnt()
634 struct mfc *rt, *nrt; in if_detached_event() local
636 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in if_detached_event()
637 if (rt->mfc_parent == vifi) { in if_detached_event()
638 expire_mfc(rt); in if_detached_event()
753 struct mfc *rt, *nrt; in X_ip_mrouter_done() local
755 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in X_ip_mrouter_done()
756 expire_mfc(rt); in X_ip_mrouter_done()
993 update_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) in update_mfc_params() argument
997 rt->mfc_parent = mfccp->mfcc_parent; in update_mfc_params()
999 rt->mfc_ttls[i] = mfccp->mfcc_ttls[i]; in update_mfc_params()
1000 rt->mfc_flags[i] = mfccp->mfcc_flags[i] & V_mrt_api_config & in update_mfc_params()
1005 rt->mfc_rp = mfccp->mfcc_rp; in update_mfc_params()
1007 rt->mfc_rp.s_addr = INADDR_ANY; in update_mfc_params()
1014 init_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) in init_mfc_params() argument
1016 rt->mfc_origin = mfccp->mfcc_origin; in init_mfc_params()
1017 rt->mfc_mcastgrp = mfccp->mfcc_mcastgrp; in init_mfc_params()
1019 update_mfc_params(rt, mfccp); in init_mfc_params()
1022 rt->mfc_pkt_cnt = 0; in init_mfc_params()
1023 rt->mfc_byte_cnt = 0; in init_mfc_params()
1024 rt->mfc_wrong_if = 0; in init_mfc_params()
1025 timevalclear(&rt->mfc_last_assert); in init_mfc_params()
1029 expire_mfc(struct mfc *rt) in expire_mfc() argument
1035 free_bw_list(rt->mfc_bw_meter); in expire_mfc()
1037 TAILQ_FOREACH_SAFE(rte, &rt->mfc_stall, rte_link, nrte) { in expire_mfc()
1039 TAILQ_REMOVE(&rt->mfc_stall, rte, rte_link); in expire_mfc()
1043 LIST_REMOVE(rt, mfc_hash); in expire_mfc()
1044 free(rt, M_MRTABLE); in expire_mfc()
1053 struct mfc *rt; in add_mfc() local
1061 rt = mfc_find(&mfccp->mfcc_origin, &mfccp->mfcc_mcastgrp); in add_mfc()
1064 if (rt) { in add_mfc()
1069 update_mfc_params(rt, mfccp); in add_mfc()
1080 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in add_mfc()
1081 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in add_mfc()
1082 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp) && in add_mfc()
1083 !TAILQ_EMPTY(&rt->mfc_stall)) { in add_mfc()
1089 TAILQ_FIRST(&rt->mfc_stall)); in add_mfc()
1093 init_mfc_params(rt, mfccp); in add_mfc()
1094 rt->mfc_expire = 0; /* Don't clean this guy up */ in add_mfc()
1098 TAILQ_FOREACH_SAFE(rte, &rt->mfc_stall, rte_link, nrte) { in add_mfc()
1100 ip_mdq(rte->m, rte->ifp, rt, -1); in add_mfc()
1102 TAILQ_REMOVE(&rt->mfc_stall, rte, rte_link); in add_mfc()
1103 rt->mfc_nstall--; in add_mfc()
1114 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in add_mfc()
1115 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in add_mfc()
1116 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp)) { in add_mfc()
1117 init_mfc_params(rt, mfccp); in add_mfc()
1118 if (rt->mfc_expire) in add_mfc()
1120 rt->mfc_expire = 0; in add_mfc()
1125 if (rt == NULL) { /* no upcall, so make a new entry */ in add_mfc()
1126 rt = (struct mfc *)malloc(sizeof(*rt), M_MRTABLE, M_NOWAIT); in add_mfc()
1127 if (rt == NULL) { in add_mfc()
1133 init_mfc_params(rt, mfccp); in add_mfc()
1134 TAILQ_INIT(&rt->mfc_stall); in add_mfc()
1135 rt->mfc_nstall = 0; in add_mfc()
1137 rt->mfc_expire = 0; in add_mfc()
1138 rt->mfc_bw_meter = NULL; in add_mfc()
1141 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); in add_mfc()
1159 struct mfc *rt; in del_mfc() local
1169 rt = mfc_find(&origin, &mcastgrp); in del_mfc()
1170 if (rt == NULL) { in del_mfc()
1178 free_bw_list(rt->mfc_bw_meter); in del_mfc()
1179 rt->mfc_bw_meter = NULL; in del_mfc()
1181 LIST_REMOVE(rt, mfc_hash); in del_mfc()
1182 free(rt, M_MRTABLE); in del_mfc()
1225 struct mfc *rt; in X_ip_mforward() local
1271 rt = mfc_find(&ip->ip_src, &ip->ip_dst); in X_ip_mforward()
1274 if (rt != NULL) { in X_ip_mforward()
1275 error = ip_mdq(m, ifp, rt, -1); in X_ip_mforward()
1320 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { in X_ip_mforward()
1321 if (in_hosteq(ip->ip_src, rt->mfc_origin) && in X_ip_mforward()
1322 in_hosteq(ip->ip_dst, rt->mfc_mcastgrp) && in X_ip_mforward()
1323 !TAILQ_EMPTY(&rt->mfc_stall)) in X_ip_mforward()
1327 if (rt == NULL) { in X_ip_mforward()
1344 rt = (struct mfc *)malloc(sizeof(*rt), M_MRTABLE, M_NOWAIT); in X_ip_mforward()
1345 if (rt == NULL) in X_ip_mforward()
1370 free(rt, M_MRTABLE); in X_ip_mforward()
1380 rt->mfc_origin.s_addr = ip->ip_src.s_addr; in X_ip_mforward()
1381 rt->mfc_mcastgrp.s_addr = ip->ip_dst.s_addr; in X_ip_mforward()
1382 rt->mfc_expire = UPCALL_EXPIRE; in X_ip_mforward()
1385 rt->mfc_ttls[i] = 0; in X_ip_mforward()
1386 rt->mfc_flags[i] = 0; in X_ip_mforward()
1388 rt->mfc_parent = -1; in X_ip_mforward()
1391 rt->mfc_rp.s_addr = INADDR_ANY; in X_ip_mforward()
1392 rt->mfc_bw_meter = NULL; in X_ip_mforward()
1395 rt->mfc_pkt_cnt = 0; in X_ip_mforward()
1396 rt->mfc_byte_cnt = 0; in X_ip_mforward()
1397 rt->mfc_wrong_if = 0; in X_ip_mforward()
1398 timevalclear(&rt->mfc_last_assert); in X_ip_mforward()
1400 TAILQ_INIT(&rt->mfc_stall); in X_ip_mforward()
1401 rt->mfc_nstall = 0; in X_ip_mforward()
1404 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); in X_ip_mforward()
1405 TAILQ_INSERT_HEAD(&rt->mfc_stall, rte, rte_link); in X_ip_mforward()
1406 rt->mfc_nstall++; in X_ip_mforward()
1410 if (rt->mfc_nstall > MAX_UPQ) { in X_ip_mforward()
1419 TAILQ_INSERT_TAIL(&rt->mfc_stall, rte, rte_link); in X_ip_mforward()
1420 rt->mfc_nstall++; in X_ip_mforward()
1446 struct mfc *rt, *nrt; in expire_upcalls() local
1451 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { in expire_upcalls()
1452 if (TAILQ_EMPTY(&rt->mfc_stall)) in expire_upcalls()
1455 if (rt->mfc_expire == 0 || --rt->mfc_expire > 0) in expire_upcalls()
1461 while (rt->mfc_bw_meter != NULL) { in expire_upcalls()
1462 struct bw_meter *x = rt->mfc_bw_meter; in expire_upcalls()
1464 rt->mfc_bw_meter = x->bm_mfc_next; in expire_upcalls()
1470 (u_long)ntohl(rt->mfc_origin.s_addr), in expire_upcalls()
1471 (u_long)ntohl(rt->mfc_mcastgrp.s_addr)); in expire_upcalls()
1473 expire_mfc(rt); in expire_upcalls()
1489 ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) in ip_mdq() argument
1504 pim_register_send(ip, V_viftable + xmt_vif, m, rt); in ip_mdq()
1513 vifi = rt->mfc_parent; in ip_mdq()
1518 ++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()
1579 rt->mfc_pkt_cnt++; in ip_mdq()
1580 rt->mfc_byte_cnt += plen; in ip_mdq()
1589 if ((rt->mfc_ttls[vifi] > 0) && (ip->ip_ttl > rt->mfc_ttls[vifi])) { in ip_mdq()
1593 pim_register_send(ip, V_viftable + vifi, m, rt); in ip_mdq()
1601 if (rt->mfc_bw_meter != NULL) { in ip_mdq()
1607 for (x = rt->mfc_bw_meter; x != NULL; x = x->bm_mfc_next) in ip_mdq()
2323 struct mfc *rt) in pim_register_send() argument
2332 in_nullhost(rt->mfc_rp)) in pim_register_send()
2349 if ((V_mrt_api_config & MRT_MFC_RP) && !in_nullhost(rt->mfc_rp)) { in pim_register_send()
2350 pim_register_send_rp(ip, vifp, mm, rt); in pim_register_send()
2352 pim_register_send_upcall(ip, vifp, mm, rt); in pim_register_send()
2415 struct mbuf *mb_copy, struct mfc *rt) in pim_register_send_upcall() argument
2467 struct mfc *rt) in pim_register_send_rp() argument
2473 vifi_t vifi = rt->mfc_parent; in pim_register_send_rp()
2504 ip_outer->ip_dst = rt->mfc_rp; in pim_register_send_rp()
2517 if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_BORDER_VIF & V_mrt_api_config) in pim_register_send_rp()
2773 struct mfc *rt; in sysctl_mfctable() local
2786 LIST_FOREACH(rt, &V_mfchashtbl[i], mfc_hash) { in sysctl_mfctable()
2787 error = SYSCTL_OUT(req, rt, sizeof(struct mfc)); in sysctl_mfctable()