Lines Matching refs:rt

827 	struct rt_entry *rt;
840 rt = rtget(k->k_dst, k->k_mask);
841 if (rt != 0) {
842 if (!(rt->rt_state & RS_STATIC))
843 rtchange(rt, rt->rt_state | RS_STATIC, &new, 0);
1562 struct rt_entry *rt;
1581 rt = rtget(dst, mask);
1582 if (rt != 0 && (rt->rt_state & RS_STATIC))
1583 rtbad(rt);
1671 struct rt_entry *rt;
1676 rt = (struct rt_entry *)rhead->rnh_lookup(&dst_sock,&mask_sock,rhead);
1677 if (!rt
1678 || rt->rt_dst != dst
1679 || rt->rt_mask != mask)
1682 return rt;
1704 struct rt_entry *rt;
1709 rt = (struct rt_entry *)rtmalloc(sizeof (*rt), "rtadd");
1710 memset(rt, 0, sizeof(*rt));
1711 for (rts = rt->rt_spares, i = NUM_SPARES; i != 0; i--, rts++)
1714 rt->rt_nodes->rn_key = (caddr_t)&rt->rt_dst_sock;
1715 rt->rt_dst = dst;
1716 rt->rt_dst_sock.sin_family = AF_INET;
1718 rt->rt_dst_sock.sin_len = dst_sock.sin_len;
1727 rt->rt_mask = mask;
1728 rt->rt_state = state;
1729 rt->rt_spares[0] = *new;
1730 rt->rt_time = now.tv_sec;
1731 rt->rt_poison_metric = HOPCNT_INFINITY;
1732 rt->rt_seqno = update_seqno;
1737 trace_add_del("Add", rt);
1742 if (0 == rhead->rnh_addaddr(&rt->rt_dst_sock, &mask_sock,
1743 rhead, rt->rt_nodes)) {
1746 free(rt);
1754 rtchange(struct rt_entry *rt,
1759 if (rt->rt_metric != new->rts_metric) {
1769 rt->rt_seqno = update_seqno;
1773 if (rt->rt_gate != new->rts_gate) {
1775 rt->rt_seqno = update_seqno;
1779 state |= (rt->rt_state & RS_SUBNET);
1787 trace_change(rt, state, new,
1790 rt->rt_state = state;
1791 rt->rt_spares[0] = *new;
1798 rts_better(struct rt_entry *rt)
1804 rts = rt->rt_spares+1;
1806 if (BETTER_LINK(rt,rts1,rts))
1817 rtswitch(struct rt_entry *rt,
1825 if (0 != (rt->rt_state & (RS_MHOME | RS_STATIC | RS_RDISC
1831 rts = rts_better(rt);
1835 if (!BETTER_LINK(rt, rts, rt->rt_spares))
1838 swap = rt->rt_spares[0];
1839 (void)sprintf(label, "Use #%d", (int)(rts - rt->rt_spares));
1840 rtchange(rt, rt->rt_state & ~(RS_NET_SYN | RS_RDISC), rts, label);
1850 rtdelete(struct rt_entry *rt)
1856 trace_add_del("Del", rt);
1858 k = kern_find(rt->rt_dst, rt->rt_mask, 0);
1864 dst_sock.sin_addr.s_addr = rt->rt_dst;
1865 mask_sock.sin_addr.s_addr = htonl(rt->rt_mask);
1867 if (rt != (struct rt_entry *)rhead->rnh_deladdr(&dst_sock, &mask_sock,
1871 free(rt);
1878 rts_delete(struct rt_entry *rt,
1881 trace_upslot(rt, rts, &rts_empty);
1889 rtbad(struct rt_entry *rt)
1894 new = rt->rt_spares[0];
1896 rtchange(rt, rt->rt_state & ~(RS_IF | RS_LOCAL | RS_STATIC), &new, 0);
1897 rtswitch(rt, 0);
1905 rtbad_sub(struct rt_entry *rt)
1915 if (rt->rt_state & RS_LOCAL) {
1923 if (ifp->int_addr == rt->rt_ifp->int_addr) {
1936 if (rt->rt_state & RS_NET_SYN) {
1939 && rt->rt_mask == ifp->int_std_mask
1940 && rt->rt_dst == ifp->int_std_addr) {
1952 if (intnetp->intnet_addr == rt->rt_dst
1953 && intnetp->intnet_mask == rt->rt_mask) {
1961 struct rt_spare new = rt->rt_spares[0];
1963 rtchange(rt, ((rt->rt_state & ~(RS_NET_SYN|RS_LOCAL)) | state),
1966 rtbad(rt);