Lines Matching refs:rt

384 	struct mfc *rt;
388 LIST_FOREACH(rt, &V_mfchashtbl[MFCHASH(*o, *g)], mfc_hash) {
389 if (in_hosteq(rt->mfc_origin, *o) &&
390 in_hosteq(rt->mfc_mcastgrp, *g) &&
391 TAILQ_EMPTY(&rt->mfc_stall))
395 return (rt);
569 struct mfc *rt;
572 rt = mfc_find(&req->src, &req->grp);
573 if (rt == NULL) {
578 req->pktcnt = rt->mfc_pkt_cnt;
579 req->bytecnt = rt->mfc_byte_cnt;
580 req->wrong_if = rt->mfc_wrong_if;
636 struct mfc *rt, *nrt;
638 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) {
639 if (rt->mfc_parent == vifi) {
640 expire_mfc(rt);
755 struct mfc *rt, *nrt;
757 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) {
758 expire_mfc(rt);
990 update_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp)
994 rt->mfc_parent = mfccp->mfcc_parent;
996 rt->mfc_ttls[i] = mfccp->mfcc_ttls[i];
997 rt->mfc_flags[i] = mfccp->mfcc_flags[i] & V_mrt_api_config &
1002 rt->mfc_rp = mfccp->mfcc_rp;
1004 rt->mfc_rp.s_addr = INADDR_ANY;
1011 init_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp)
1013 rt->mfc_origin = mfccp->mfcc_origin;
1014 rt->mfc_mcastgrp = mfccp->mfcc_mcastgrp;
1016 update_mfc_params(rt, mfccp);
1019 rt->mfc_pkt_cnt = 0;
1020 rt->mfc_byte_cnt = 0;
1021 rt->mfc_wrong_if = 0;
1022 timevalclear(&rt->mfc_last_assert);
1026 expire_mfc(struct mfc *rt)
1032 free_bw_list(rt->mfc_bw_meter);
1034 TAILQ_FOREACH_SAFE(rte, &rt->mfc_stall, rte_link, nrte) {
1036 TAILQ_REMOVE(&rt->mfc_stall, rte, rte_link);
1040 LIST_REMOVE(rt, mfc_hash);
1041 free(rt, M_MRTABLE);
1050 struct mfc *rt;
1058 rt = mfc_find(&mfccp->mfcc_origin, &mfccp->mfcc_mcastgrp);
1061 if (rt) {
1066 update_mfc_params(rt, mfccp);
1077 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) {
1078 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) &&
1079 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp) &&
1080 !TAILQ_EMPTY(&rt->mfc_stall)) {
1086 TAILQ_FIRST(&rt->mfc_stall));
1090 init_mfc_params(rt, mfccp);
1091 rt->mfc_expire = 0; /* Don't clean this guy up */
1095 TAILQ_FOREACH_SAFE(rte, &rt->mfc_stall, rte_link, nrte) {
1097 ip_mdq(rte->m, rte->ifp, rt, -1);
1099 TAILQ_REMOVE(&rt->mfc_stall, rte, rte_link);
1100 rt->mfc_nstall--;
1111 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) {
1112 if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) &&
1113 in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp)) {
1114 init_mfc_params(rt, mfccp);
1115 if (rt->mfc_expire)
1117 rt->mfc_expire = 0;
1122 if (rt == NULL) { /* no upcall, so make a new entry */
1123 rt = (struct mfc *)malloc(sizeof(*rt), M_MRTABLE, M_NOWAIT);
1124 if (rt == NULL) {
1130 init_mfc_params(rt, mfccp);
1131 TAILQ_INIT(&rt->mfc_stall);
1132 rt->mfc_nstall = 0;
1134 rt->mfc_expire = 0;
1135 rt->mfc_bw_meter = NULL;
1138 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash);
1156 struct mfc *rt;
1166 rt = mfc_find(&origin, &mcastgrp);
1167 if (rt == NULL) {
1175 free_bw_list(rt->mfc_bw_meter);
1176 rt->mfc_bw_meter = NULL;
1178 LIST_REMOVE(rt, mfc_hash);
1179 free(rt, M_MRTABLE);
1222 struct mfc *rt;
1268 rt = mfc_find(&ip->ip_src, &ip->ip_dst);
1271 if (rt != NULL) {
1272 error = ip_mdq(m, ifp, rt, -1);
1317 LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) {
1318 if (in_hosteq(ip->ip_src, rt->mfc_origin) &&
1319 in_hosteq(ip->ip_dst, rt->mfc_mcastgrp) &&
1320 !TAILQ_EMPTY(&rt->mfc_stall))
1324 if (rt == NULL) {
1341 rt = (struct mfc *)malloc(sizeof(*rt), M_MRTABLE, M_NOWAIT);
1342 if (rt == NULL)
1367 free(rt, M_MRTABLE);
1377 rt->mfc_origin.s_addr = ip->ip_src.s_addr;
1378 rt->mfc_mcastgrp.s_addr = ip->ip_dst.s_addr;
1379 rt->mfc_expire = UPCALL_EXPIRE;
1382 rt->mfc_ttls[i] = 0;
1383 rt->mfc_flags[i] = 0;
1385 rt->mfc_parent = -1;
1388 rt->mfc_rp.s_addr = INADDR_ANY;
1389 rt->mfc_bw_meter = NULL;
1392 rt->mfc_pkt_cnt = 0;
1393 rt->mfc_byte_cnt = 0;
1394 rt->mfc_wrong_if = 0;
1395 timevalclear(&rt->mfc_last_assert);
1397 TAILQ_INIT(&rt->mfc_stall);
1398 rt->mfc_nstall = 0;
1401 LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash);
1402 TAILQ_INSERT_HEAD(&rt->mfc_stall, rte, rte_link);
1403 rt->mfc_nstall++;
1407 if (rt->mfc_nstall > MAX_UPQ) {
1416 TAILQ_INSERT_TAIL(&rt->mfc_stall, rte, rte_link);
1417 rt->mfc_nstall++;
1443 struct mfc *rt, *nrt;
1448 LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) {
1449 if (TAILQ_EMPTY(&rt->mfc_stall))
1452 if (rt->mfc_expire == 0 || --rt->mfc_expire > 0)
1458 while (rt->mfc_bw_meter != NULL) {
1459 struct bw_meter *x = rt->mfc_bw_meter;
1461 rt->mfc_bw_meter = x->bm_mfc_next;
1467 (u_long)ntohl(rt->mfc_origin.s_addr),
1468 (u_long)ntohl(rt->mfc_mcastgrp.s_addr));
1470 expire_mfc(rt);
1486 ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif)
1501 pim_register_send(ip, V_viftable + xmt_vif, m, rt);
1510 vifi = rt->mfc_parent;
1515 ++rt->mfc_wrong_if;
1537 if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_DISABLE_WRONGVIF)
1540 if (ratecheck(&rt->mfc_last_assert, &pim_assert_interval)) {
1578 rt->mfc_pkt_cnt++;
1579 rt->mfc_byte_cnt += plen;
1588 if ((rt->mfc_ttls[vifi] > 0) && (ip->ip_ttl > rt->mfc_ttls[vifi])) {
1592 pim_register_send(ip, V_viftable + vifi, m, rt);
1600 if (rt->mfc_bw_meter != NULL) {
1606 for (x = rt->mfc_bw_meter; x != NULL; x = x->bm_mfc_next)
2322 struct mfc *rt)
2331 in_nullhost(rt->mfc_rp))
2348 if ((V_mrt_api_config & MRT_MFC_RP) && !in_nullhost(rt->mfc_rp)) {
2349 pim_register_send_rp(ip, vifp, mm, rt);
2351 pim_register_send_upcall(ip, vifp, mm, rt);
2414 struct mbuf *mb_copy, struct mfc *rt)
2466 struct mfc *rt)
2472 vifi_t vifi = rt->mfc_parent;
2504 ip_outer->ip_dst = rt->mfc_rp;
2516 if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_BORDER_VIF & V_mrt_api_config)
2778 struct mfc *rt;
2791 LIST_FOREACH(rt, &V_mfchashtbl[i], mfc_hash) {
2792 error = SYSCTL_OUT(req, rt, sizeof(struct mfc));