Lines Matching refs:rt
1021 struct rt_entry *rt;
1033 rt = rtget(k->k_dst, k->k_mask);
1038 if (rt != NULL) {
1039 if ((rt->rt_state & RS_STATIC) == 0) {
1050 rt_state |= rt->rt_state;
1051 if (rt->rt_state != rt_state)
1052 rtchange(rt, rt_state, &new, 0);
1247 struct rt_entry *rt;
1257 rt = rtfind(S_ADDR(INFO_DST(info)));
1258 if (rt != NULL) {
1260 for (i = 0; i < rt->rt_num_spares; i++) {
1261 rts = &rt->rt_spares[i];
1270 if (rt == NULL || losing_rts == NULL) {
1283 rtchange(rt, rt->rt_state, &new, 0);
2181 struct rt_entry *rt;
2201 rt = rtget(dst, mask);
2202 if (rt != NULL && (rt->rt_state & RS_STATIC))
2203 rtbad(rt, NULL);
2280 struct rt_entry *rt;
2284 rt = (struct rt_entry *)rhead->rnh_lookup(&dst_sock, &mask_sock, rhead);
2285 if (rt == NULL || rt->rt_dst != dst || rt->rt_mask != mask)
2288 return (rt);
2307 struct rt_entry *rt;
2318 rt = rtmalloc(sizeof (*rt), "rtadd");
2319 (void) memset(rt, 0, sizeof (*rt));
2320 rt->rt_spares = rtmalloc(SPARE_INC * sizeof (struct rt_spare),
2322 rt->rt_num_spares = SPARE_INC;
2323 (void) memset(rt->rt_spares, 0, SPARE_INC * sizeof (struct rt_spare));
2324 for (rts = rt->rt_spares, i = rt->rt_num_spares; i != 0; i--, rts++)
2327 rt->rt_nodes->rn_key = (uint8_t *)&rt->rt_dst_sock;
2328 rt->rt_dst = dst;
2329 rt->rt_dst_sock.sin_family = AF_INET;
2336 rt->rt_mask = mask;
2337 rt->rt_spares[0] = *new;
2338 rt->rt_state = state;
2339 rt->rt_time = now.tv_sec;
2340 rt->rt_poison_metric = HOPCNT_INFINITY;
2341 rt->rt_seqno = update_seqno;
2344 trace_add_del("Add", rt);
2349 if (NULL == rhead->rnh_addaddr(&rt->rt_dst_sock, &mask_sock, rhead,
2350 rt->rt_nodes)) {
2353 free(rt);
2362 rtchange(struct rt_entry *rt,
2367 if (rt->rt_metric != new->rts_metric) {
2378 rt->rt_seqno = update_seqno;
2382 if (rt->rt_gate != new->rts_gate) {
2384 rt->rt_seqno = update_seqno;
2388 state |= (rt->rt_state & RS_SUBNET);
2391 if (!AGE_RT(state, rt->rt_spares[0].rts_origin, new->rts_ifp))
2395 trace_change(rt, state, new,
2398 rt->rt_state = state;
2403 if ((rt->rt_state & RS_BADIF) &&
2406 rt->rt_state &= ~(RS_BADIF);
2408 rt->rt_spares[0] = *new;
2414 rts_better(struct rt_entry *rt)
2420 rts = rt->rt_spares+1;
2421 for (i = rt->rt_num_spares, rts1 = rts+1; i > 2; i--, rts1++) {
2422 if (BETTER_LINK(rt, rts1, rts))
2432 rtswitch(struct rt_entry *rt,
2439 if (0 != (rt->rt_state & (RS_MHOME | RS_STATIC |
2445 rts = rts_better(rt);
2448 if (!BETTER_LINK(rt, rts, rt->rt_spares))
2451 swap = rt->rt_spares[0];
2453 (int)(rts - rt->rt_spares));
2454 rtchange(rt, rt->rt_state & ~(RS_NET_SYN), rts, label);
2466 rtdelete(struct rt_entry *rt)
2471 in_addr_t gate = rt->rt_gate; /* for debugging */
2474 trace_add_del("Del", rt);
2476 for (i = 0; i < rt->rt_num_spares; i++) {
2477 rts = &rt->rt_spares[i];
2478 rts_delete(rt, rts);
2481 dst_sock.sin_addr.s_addr = rt->rt_dst;
2482 mask_sock.sin_addr.s_addr = htonl(rt->rt_mask);
2483 if (rt != (deleted_rt =
2486 msglog("rnh_deladdr(%s) failed; found rt 0x%lx",
2487 rtname(rt->rt_dst, rt->rt_mask, gate), deleted_rt);
2492 free(rt->rt_spares);
2493 free(rt);
2506 rts_delete(struct rt_entry *rt, struct rt_spare *rts)
2510 trace_upslot(rt, rts, &rts_empty);
2511 k = kern_find(rt->rt_dst, rt->rt_mask,
2530 rtbad(struct rt_entry *rt, struct interface *badifp)
2536 if (badifp == NULL || (rt->rt_spares[0].rts_ifp == badifp)) {
2538 new = rt->rt_spares[0];
2540 rt_state = rt->rt_state & ~(RS_IF | RS_LOCAL | RS_STATIC);
2548 if (rt->rt_spares[0].rts_ifp != badifp)
2560 rtchange(rt, rt_state, &new, 0);
2561 rtswitch(rt, 0);
2570 rtbad_sub(struct rt_entry *rt, struct interface *badifp)
2580 if (rt->rt_state & RS_LOCAL) {
2588 if (ifp->int_addr == rt->rt_ifp->int_addr) {
2602 if (rt->rt_state & RS_NET_SYN) {
2605 rt->rt_mask == ifp->int_std_mask &&
2606 rt->rt_dst == ifp->int_std_addr) {
2617 if (intnetp->intnet_addr == rt->rt_dst &&
2618 intnetp->intnet_mask == rt->rt_mask) {
2626 struct rt_spare new = rt->rt_spares[0];
2628 rtchange(rt, ((rt->rt_state & ~(RS_NET_SYN|RS_LOCAL)) | state),
2631 rtbad(rt, badifp);