Lines Matching refs:rt

1021 	struct rt_entry *rt;  in kern_check_static()  local
1033 rt = rtget(k->k_dst, k->k_mask); in kern_check_static()
1038 if (rt != NULL) { in kern_check_static()
1039 if ((rt->rt_state & RS_STATIC) == 0) { in kern_check_static()
1050 rt_state |= rt->rt_state; in kern_check_static()
1051 if (rt->rt_state != rt_state) in kern_check_static()
1052 rtchange(rt, rt_state, &new, 0); in kern_check_static()
1247 struct rt_entry *rt; in rtm_lose() local
1257 rt = rtfind(S_ADDR(INFO_DST(info))); in rtm_lose()
1258 if (rt != NULL) { in rtm_lose()
1260 for (i = 0; i < rt->rt_num_spares; i++) { in rtm_lose()
1261 rts = &rt->rt_spares[i]; in rtm_lose()
1270 if (rt == NULL || losing_rts == NULL) { in rtm_lose()
1283 rtchange(rt, rt->rt_state, &new, 0); in rtm_lose()
2180 struct rt_entry *rt; in del_static() local
2200 rt = rtget(dst, mask); in del_static()
2201 if (rt != NULL && (rt->rt_state & RS_STATIC)) in del_static()
2202 rtbad(rt, NULL); in del_static()
2279 struct rt_entry *rt; in rtget() local
2283 rt = (struct rt_entry *)rhead->rnh_lookup(&dst_sock, &mask_sock, rhead); in rtget()
2284 if (rt == NULL || rt->rt_dst != dst || rt->rt_mask != mask) in rtget()
2287 return (rt); in rtget()
2306 struct rt_entry *rt; in rtadd() local
2317 rt = rtmalloc(sizeof (*rt), "rtadd"); in rtadd()
2318 (void) memset(rt, 0, sizeof (*rt)); in rtadd()
2319 rt->rt_spares = rtmalloc(SPARE_INC * sizeof (struct rt_spare), in rtadd()
2321 rt->rt_num_spares = SPARE_INC; in rtadd()
2322 (void) memset(rt->rt_spares, 0, SPARE_INC * sizeof (struct rt_spare)); in rtadd()
2323 for (rts = rt->rt_spares, i = rt->rt_num_spares; i != 0; i--, rts++) in rtadd()
2326 rt->rt_nodes->rn_key = (uint8_t *)&rt->rt_dst_sock; in rtadd()
2327 rt->rt_dst = dst; in rtadd()
2328 rt->rt_dst_sock.sin_family = AF_INET; in rtadd()
2335 rt->rt_mask = mask; in rtadd()
2336 rt->rt_spares[0] = *new; in rtadd()
2337 rt->rt_state = state; in rtadd()
2338 rt->rt_time = now.tv_sec; in rtadd()
2339 rt->rt_poison_metric = HOPCNT_INFINITY; in rtadd()
2340 rt->rt_seqno = update_seqno; in rtadd()
2343 trace_add_del("Add", rt); in rtadd()
2348 if (NULL == rhead->rnh_addaddr(&rt->rt_dst_sock, &mask_sock, rhead, in rtadd()
2349 rt->rt_nodes)) { in rtadd()
2352 free(rt); in rtadd()
2361 rtchange(struct rt_entry *rt, in rtchange() argument
2366 if (rt->rt_metric != new->rts_metric) { in rtchange()
2377 rt->rt_seqno = update_seqno; in rtchange()
2381 if (rt->rt_gate != new->rts_gate) { in rtchange()
2383 rt->rt_seqno = update_seqno; in rtchange()
2387 state |= (rt->rt_state & RS_SUBNET); in rtchange()
2390 if (!AGE_RT(state, rt->rt_spares[0].rts_origin, new->rts_ifp)) in rtchange()
2394 trace_change(rt, state, new, in rtchange()
2397 rt->rt_state = state; in rtchange()
2402 if ((rt->rt_state & RS_BADIF) && in rtchange()
2405 rt->rt_state &= ~(RS_BADIF); in rtchange()
2407 rt->rt_spares[0] = *new; in rtchange()
2413 rts_better(struct rt_entry *rt) in rts_better() argument
2419 rts = rt->rt_spares+1; in rts_better()
2420 for (i = rt->rt_num_spares, rts1 = rts+1; i > 2; i--, rts1++) { in rts_better()
2421 if (BETTER_LINK(rt, rts1, rts)) in rts_better()
2431 rtswitch(struct rt_entry *rt, in rtswitch() argument
2438 if (0 != (rt->rt_state & (RS_MHOME | RS_STATIC | in rtswitch()
2444 rts = rts_better(rt); in rtswitch()
2447 if (!BETTER_LINK(rt, rts, rt->rt_spares)) in rtswitch()
2450 swap = rt->rt_spares[0]; in rtswitch()
2452 (int)(rts - rt->rt_spares)); in rtswitch()
2453 rtchange(rt, rt->rt_state & ~(RS_NET_SYN), rts, label); in rtswitch()
2465 rtdelete(struct rt_entry *rt) in rtdelete() argument
2470 in_addr_t gate = rt->rt_gate; /* for debugging */ in rtdelete()
2473 trace_add_del("Del", rt); in rtdelete()
2475 for (i = 0; i < rt->rt_num_spares; i++) { in rtdelete()
2476 rts = &rt->rt_spares[i]; in rtdelete()
2477 rts_delete(rt, rts); in rtdelete()
2480 dst_sock.sin_addr.s_addr = rt->rt_dst; in rtdelete()
2481 mask_sock.sin_addr.s_addr = htonl(rt->rt_mask); in rtdelete()
2482 if (rt != (deleted_rt = in rtdelete()
2486 rtname(rt->rt_dst, rt->rt_mask, gate), deleted_rt); in rtdelete()
2491 free(rt->rt_spares); in rtdelete()
2492 free(rt); in rtdelete()
2505 rts_delete(struct rt_entry *rt, struct rt_spare *rts) in rts_delete() argument
2509 trace_upslot(rt, rts, &rts_empty); in rts_delete()
2510 k = kern_find(rt->rt_dst, rt->rt_mask, in rts_delete()
2529 rtbad(struct rt_entry *rt, struct interface *badifp) in rtbad() argument
2535 if (badifp == NULL || (rt->rt_spares[0].rts_ifp == badifp)) { in rtbad()
2537 new = rt->rt_spares[0]; in rtbad()
2539 rt_state = rt->rt_state & ~(RS_IF | RS_LOCAL | RS_STATIC); in rtbad()
2547 if (rt->rt_spares[0].rts_ifp != badifp) in rtbad()
2559 rtchange(rt, rt_state, &new, 0); in rtbad()
2560 rtswitch(rt, 0); in rtbad()
2569 rtbad_sub(struct rt_entry *rt, struct interface *badifp) in rtbad_sub() argument
2579 if (rt->rt_state & RS_LOCAL) { in rtbad_sub()
2587 if (ifp->int_addr == rt->rt_ifp->int_addr) { in rtbad_sub()
2601 if (rt->rt_state & RS_NET_SYN) { in rtbad_sub()
2604 rt->rt_mask == ifp->int_std_mask && in rtbad_sub()
2605 rt->rt_dst == ifp->int_std_addr) { in rtbad_sub()
2616 if (intnetp->intnet_addr == rt->rt_dst && in rtbad_sub()
2617 intnetp->intnet_mask == rt->rt_mask) { in rtbad_sub()
2625 struct rt_spare new = rt->rt_spares[0]; in rtbad_sub()
2627 rtchange(rt, ((rt->rt_state & ~(RS_NET_SYN|RS_LOCAL)) | state), in rtbad_sub()
2630 rtbad(rt, badifp); in rtbad_sub()