diff options
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/in_pcb.c | 68 | ||||
-rw-r--r-- | sys/netinet/in_pcb.h | 4 | ||||
-rw-r--r-- | sys/netinet/ip_divert.c | 4 | ||||
-rw-r--r-- | sys/netinet/ip_icmp.c | 3 | ||||
-rw-r--r-- | sys/netinet/ip_output.c | 31 | ||||
-rw-r--r-- | sys/netinet/raw_ip.c | 9 | ||||
-rw-r--r-- | sys/netinet/tcp_input.c | 30 | ||||
-rw-r--r-- | sys/netinet/tcp_output.c | 4 | ||||
-rw-r--r-- | sys/netinet/tcp_subr.c | 23 | ||||
-rw-r--r-- | sys/netinet/tcp_timer.c | 8 | ||||
-rw-r--r-- | sys/netinet/tcp_var.h | 4 | ||||
-rw-r--r-- | sys/netinet/udp_usrreq.c | 7 |
12 files changed, 93 insertions, 102 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index b57ae431fad..026b74b1502 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: in_pcb.c,v 1.112 2010/05/07 13:33:16 claudio Exp $ */ +/* $OpenBSD: in_pcb.c,v 1.113 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: in_pcb.c,v 1.25 1996/02/13 23:41:53 christos Exp $ */ /* @@ -197,13 +197,13 @@ in_pcballoc(so, v) inp->inp_seclevel[SL_ESP_TRANS] = ipsec_esp_trans_default_level; inp->inp_seclevel[SL_ESP_NETWORK] = ipsec_esp_network_default_level; inp->inp_seclevel[SL_IPCOMP] = ipsec_ipcomp_default_level; - inp->inp_rdomain = curproc->p_p->ps_rdomain; + inp->inp_rtableid = curproc->p_p->ps_rtableid; s = splnet(); CIRCLEQ_INSERT_HEAD(&table->inpt_queue, inp, inp_queue); LIST_INSERT_HEAD(INPCBLHASH(table, inp->inp_lport, - inp->inp_rdomain), inp, inp_lhash); + inp->inp_rtableid), inp, inp_lhash); LIST_INSERT_HEAD(INPCBHASH(table, &inp->inp_faddr, inp->inp_fport, - &inp->inp_laddr, inp->inp_lport, inp->inp_rdomain), + &inp->inp_laddr, inp->inp_lport, rtable_l2(inp->inp_rtableid)), inp, inp_hash); splx(s); so->so_pcb = inp; @@ -277,7 +277,7 @@ in_pcbbind(v, nam, p) sin->sin_port = 0; /* yech... */ if (!(so->so_options & SO_BINDANY) && in_iawithaddr(sin->sin_addr, NULL, - inp->inp_rdomain) == 0) + inp->inp_rtableid) == 0) return (EADDRNOTAVAIL); } if (lport) { @@ -290,12 +290,12 @@ in_pcbbind(v, nam, p) if (so->so_euid) { t = in_pcblookup(table, &zeroin_addr, 0, &sin->sin_addr, lport, INPLOOKUP_WILDCARD, - inp->inp_rdomain); + inp->inp_rtableid); if (t && (so->so_euid != t->inp_socket->so_euid)) return (EADDRINUSE); } t = in_pcblookup(table, &zeroin_addr, 0, - &sin->sin_addr, lport, wild, inp->inp_rdomain); + &sin->sin_addr, lport, wild, inp->inp_rtableid); if (t && (reuseport & t->inp_socket->so_options) == 0) return (EADDRINUSE); } @@ -343,7 +343,7 @@ in_pcbbind(v, nam, p) lport = htons(*lastport); } while (in_baddynamic(*lastport, so->so_proto->pr_protocol) || in_pcblookup(table, &zeroin_addr, 0, - &inp->inp_laddr, lport, wild, inp->inp_rdomain)); + &inp->inp_laddr, lport, wild, inp->inp_rtableid)); } else { /* * counting up @@ -361,7 +361,7 @@ in_pcbbind(v, nam, p) lport = htons(*lastport); } while (in_baddynamic(*lastport, so->so_proto->pr_protocol) || in_pcblookup(table, &zeroin_addr, 0, - &inp->inp_laddr, lport, wild, inp->inp_rdomain)); + &inp->inp_laddr, lport, wild, inp->inp_rtableid)); } } inp->inp_lport = lport; @@ -415,7 +415,7 @@ in_pcbconnect(v, nam) int error; ifaddr = in_selectsrc(sin, &inp->inp_route, inp->inp_socket->so_options, inp->inp_moptions, &error, - inp->inp_rdomain); + inp->inp_rtableid); if (ifaddr == NULL) { if (error == 0) error = EADDRNOTAVAIL; @@ -424,7 +424,7 @@ in_pcbconnect(v, nam) } if (in_pcbhashlookup(inp->inp_table, sin->sin_addr, sin->sin_port, inp->inp_laddr.s_addr ? inp->inp_laddr : ifaddr->sin_addr, - inp->inp_lport, inp->inp_rdomain) != 0) + inp->inp_lport, inp->inp_rtableid) != 0) return (EADDRINUSE); if (inp->inp_laddr.s_addr == INADDR_ANY) { if (inp->inp_lport == 0 && @@ -570,12 +570,8 @@ in_setpeeraddr(inp, nam) * Must be called at splsoftnet. */ void -in_pcbnotifyall(table, dst, rdomain, errno, notify) - struct inpcbtable *table; - struct sockaddr *dst; - u_int rdomain; - int errno; - void (*notify)(struct inpcb *, int); +in_pcbnotifyall(struct inpcbtable *table, struct sockaddr *dst, u_int rdomain, + int errno, void (*notify)(struct inpcb *, int)) { struct inpcb *inp, *oinp; struct in_addr faddr; @@ -596,6 +592,7 @@ in_pcbnotifyall(table, dst, rdomain, errno, notify) if (faddr.s_addr == INADDR_ANY) return; + rdomain = rtable_l2(rdomain); for (inp = CIRCLEQ_FIRST(&table->inpt_queue); inp != CIRCLEQ_END(&table->inpt_queue);) { #ifdef INET6 @@ -605,7 +602,7 @@ in_pcbnotifyall(table, dst, rdomain, errno, notify) } #endif if (inp->inp_faddr.s_addr != faddr.s_addr || - inp->inp_rdomain != rdomain || + rtable_l2(inp->inp_rtableid) != rdomain || inp->inp_socket == 0) { inp = CIRCLEQ_NEXT(inp, inp_queue); continue; @@ -638,10 +635,10 @@ in_losing(inp) info.rti_info[RTAX_GATEWAY] = rt->rt_gateway; info.rti_info[RTAX_NETMASK] = rt_mask(rt); rt_missmsg(RTM_LOSING, &info, rt->rt_flags, rt->rt_ifp, 0, - inp->inp_rdomain); + inp->inp_rtableid); if (rt->rt_flags & RTF_DYNAMIC) (void)rtrequest1(RTM_DELETE, &info, rt->rt_priority, - (struct rtentry **)0, inp->inp_rdomain); + (struct rtentry **)0, inp->inp_rtableid); /* * A new route can be allocated * the next time output is attempted. @@ -672,7 +669,8 @@ in_rtchange(inp, errno) } struct inpcb * -in_pcblookup(struct inpcbtable *table, void *faddrp, u_int fport_arg, void *laddrp, u_int lport_arg, int flags, u_int rdomain) +in_pcblookup(struct inpcbtable *table, void *faddrp, u_int fport_arg, + void *laddrp, u_int lport_arg, int flags, u_int rdomain) { struct inpcb *inp, *match = 0; int matchwild = 3, wildcard; @@ -680,10 +678,10 @@ in_pcblookup(struct inpcbtable *table, void *faddrp, u_int fport_arg, void *ladd struct in_addr faddr = *(struct in_addr *)faddrp; struct in_addr laddr = *(struct in_addr *)laddrp; - rdomain = rtable_l2(rdomain); + rdomain = rtable_l2(rdomain); /* convert passed rtableid to rdomain */ for (inp = LIST_FIRST(INPCBLHASH(table, lport, rdomain)); inp; inp = LIST_NEXT(inp, inp_lhash)) { - if (inp->inp_rdomain != rdomain) + if (rtable_l2(inp->inp_rtableid) != rdomain) continue; if (inp->inp_lport != lport) continue; @@ -789,7 +787,7 @@ in_pcbrtentry(inp) break; ro->ro_dst.sa_family = AF_INET; ro->ro_dst.sa_len = sizeof(ro->ro_dst); - ro->ro_tableid = inp->inp_rdomain; + ro->ro_tableid = inp->inp_rtableid; satosin(&ro->ro_dst)->sin_addr = inp->inp_faddr; rtalloc_mpath(ro, &inp->inp_laddr.s_addr); break; @@ -800,7 +798,7 @@ in_pcbrtentry(inp) struct sockaddr_in * in_selectsrc(struct sockaddr_in *sin, struct route *ro, int soopts, - struct ip_moptions *mopts, int *errorp, u_int rdomain) + struct ip_moptions *mopts, int *errorp, u_int rtableid) { struct sockaddr_in *sin2; struct in_ifaddr *ia; @@ -824,7 +822,7 @@ in_selectsrc(struct sockaddr_in *sin, struct route *ro, int soopts, ro->ro_dst.sa_family = AF_INET; ro->ro_dst.sa_len = sizeof(struct sockaddr_in); satosin(&ro->ro_dst)->sin_addr = sin->sin_addr; - ro->ro_tableid = rdomain; + ro->ro_tableid = rtableid; rtalloc_mpath(ro, NULL); /* @@ -846,9 +844,9 @@ in_selectsrc(struct sockaddr_in *sin, struct route *ro, int soopts, u_int16_t fport = sin->sin_port; sin->sin_port = 0; - ia = ifatoia(ifa_ifwithdstaddr(sintosa(sin), rdomain)); + ia = ifatoia(ifa_ifwithdstaddr(sintosa(sin), rtableid)); if (ia == 0) - ia = ifatoia(ifa_ifwithnet(sintosa(sin), rdomain)); + ia = ifatoia(ifa_ifwithnet(sintosa(sin), rtableid)); sin->sin_port = fport; if (ia == 0) ia = TAILQ_FIRST(&in_ifaddr); @@ -890,7 +888,7 @@ in_pcbrehash(inp) s = splnet(); LIST_REMOVE(inp, inp_lhash); - LIST_INSERT_HEAD(INPCBLHASH(table, inp->inp_lport, inp->inp_rdomain), + LIST_INSERT_HEAD(INPCBLHASH(table, inp->inp_lport, inp->inp_rtableid), inp, inp_lhash); LIST_REMOVE(inp, inp_hash); #ifdef INET6 @@ -902,7 +900,7 @@ in_pcbrehash(inp) #endif /* INET6 */ LIST_INSERT_HEAD(INPCBHASH(table, &inp->inp_faddr, inp->inp_fport, &inp->inp_laddr, inp->inp_lport, - inp->inp_rdomain), inp, inp_hash); + rtable_l2(inp->inp_rtableid)), inp, inp_hash); #ifdef INET6 } #endif /* INET6 */ @@ -930,7 +928,7 @@ in_pcbhashlookup(struct inpcbtable *table, struct in_addr faddr, struct inpcb *inp; u_int16_t fport = fport_arg, lport = lport_arg; - rdomain = rtable_l2(rdomain); + rdomain = rtable_l2(rdomain); /* convert passed rtableid to rdomain */ head = INPCBHASH(table, &faddr, fport, &laddr, lport, rdomain); LIST_FOREACH(inp, head, inp_hash) { #ifdef INET6 @@ -941,7 +939,7 @@ in_pcbhashlookup(struct inpcbtable *table, struct in_addr faddr, inp->inp_fport == fport && inp->inp_lport == lport && inp->inp_laddr.s_addr == laddr.s_addr && - inp->inp_rdomain == rdomain) { + rtable_l2(inp->inp_rtableid) == rdomain) { /* * Move this PCB to the head of hash chain so that * repeated accesses are quicker. This is analogous to @@ -1019,7 +1017,7 @@ in_pcblookup_listen(struct inpcbtable *table, struct in_addr laddr, struct inpcb *inp; u_int16_t lport = lport_arg; - rdomain = rtable_l2(rdomain); + rdomain = rtable_l2(rdomain); /* convert passed rtableid to rdomain */ #if NPF > 0 if (m && m->m_pkthdr.pf.flags & PF_TAG_DIVERTED) { struct pf_divert *divert; @@ -1047,7 +1045,7 @@ in_pcblookup_listen(struct inpcbtable *table, struct in_addr laddr, if (inp->inp_lport == lport && inp->inp_fport == 0 && inp->inp_laddr.s_addr == key1->s_addr && inp->inp_faddr.s_addr == INADDR_ANY && - inp->inp_rdomain == rdomain) + rtable_l2(inp->inp_rtableid) == rdomain) break; } if (inp == NULL && key1->s_addr != key2->s_addr) { @@ -1060,7 +1058,7 @@ in_pcblookup_listen(struct inpcbtable *table, struct in_addr laddr, if (inp->inp_lport == lport && inp->inp_fport == 0 && inp->inp_laddr.s_addr == key2->s_addr && inp->inp_faddr.s_addr == INADDR_ANY && - inp->inp_rdomain == rdomain) + rtable_l2(inp->inp_rtableid) == rdomain) break; } } diff --git a/sys/netinet/in_pcb.h b/sys/netinet/in_pcb.h index da1df0acdcc..ac17a6d6a81 100644 --- a/sys/netinet/in_pcb.h +++ b/sys/netinet/in_pcb.h @@ -1,4 +1,4 @@ -/* $OpenBSD: in_pcb.h,v 1.68 2009/11/13 20:54:05 claudio Exp $ */ +/* $OpenBSD: in_pcb.h,v 1.69 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: in_pcb.h,v 1.14 1996/02/13 23:42:00 christos Exp $ */ /* @@ -146,7 +146,7 @@ struct inpcb { #endif struct icmp6_filter *inp_icmp6filt; void *inp_pf_sk; - u_int inp_rdomain; + u_int inp_rtableid; }; struct inpcbtable { diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c index 805a99e339e..44de7acc5ff 100644 --- a/sys/netinet/ip_divert.c +++ b/sys/netinet/ip_divert.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ip_divert.c,v 1.6 2010/04/20 22:05:43 tedu Exp $ */ +/* $OpenBSD: ip_divert.c,v 1.7 2010/07/03 04:44:51 guenther Exp $ */ /* * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org> @@ -94,7 +94,7 @@ divert_output(struct mbuf *m, ...) m->m_pkthdr.rcvif = NULL; m->m_nextpkt = NULL; - m->m_pkthdr.rdomain = inp->inp_rdomain; + m->m_pkthdr.rdomain = inp->inp_rtableid; if (control) m_freem(control); diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c index f22005e5fc6..d3512f133a9 100644 --- a/sys/netinet/ip_icmp.c +++ b/sys/netinet/ip_icmp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ip_icmp.c,v 1.89 2010/05/07 13:33:16 claudio Exp $ */ +/* $OpenBSD: ip_icmp.c,v 1.90 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: ip_icmp.c,v 1.19 1996/02/13 23:42:22 christos Exp $ */ /* @@ -999,6 +999,7 @@ icmp_mtudisc_timeout(struct rtentry *rt, struct rttimer *r) info.rti_flags = rt->rt_flags; sa = *(struct sockaddr_in *)rt_key(rt); + /* XXX this needs the rtableid */ rtrequest1(RTM_DELETE, &info, rt->rt_priority, NULL, 0); /* Notify TCP layer of increased Path MTU estimate */ diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index fc8ebc17d1d..8dca59f9b4d 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ip_output.c,v 1.208 2010/07/02 02:40:16 blambert Exp $ */ +/* $OpenBSD: ip_output.c,v 1.209 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: ip_output.c,v 1.28 1996/02/13 23:43:07 christos Exp $ */ /* @@ -1162,7 +1162,7 @@ ip_ctloutput(op, so, level, optname, mp) case IP_ADD_MEMBERSHIP: case IP_DROP_MEMBERSHIP: error = ip_setmoptions(optname, &inp->inp_moptions, m, - inp->inp_rdomain); + inp->inp_rtableid); break; case IP_PORTRANGE: @@ -1426,24 +1426,23 @@ ip_ctloutput(op, so, level, optname, mp) } #endif break; - case SO_RDOMAIN: + case SO_RTABLE: if (m == NULL || m->m_len < sizeof(u_int)) { error = EINVAL; break; } rtid = *mtod(m, u_int *); - if (p->p_p->ps_rdomain != 0 && - p->p_p->ps_rdomain != rtid && - (error = suser(p, 0)) != 0) { + /* needs priviledges to switch when already set */ + if (p->p_p->ps_rtableid != 0 && suser(p, 0) != 0) { error = EACCES; break; } - /* table must exist and be a domain */ - if (!rtable_exists(rtid) || rtid != rtable_l2(rtid)) { + /* table must exist */ + if (!rtable_exists(rtid)) { error = EINVAL; break; } - inp->inp_rdomain = rtid; + inp->inp_rtableid = rtid; break; default: error = ENOPROTOOPT; @@ -1638,10 +1637,10 @@ ip_ctloutput(op, so, level, optname, mp) } #endif break; - case SO_RDOMAIN: + case SO_RTABLE: *mp = m = m_get(M_WAIT, MT_SOOPTS); m->m_len = sizeof(u_int); - *mtod(m, u_int *) = inp->inp_rdomain; + *mtod(m, u_int *) = inp->inp_rtableid; break; default: error = ENOPROTOOPT; @@ -1765,7 +1764,7 @@ bad: */ int ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m, - u_int rdomain) + u_int rtableid) { int error = 0; u_char loop; @@ -1822,7 +1821,7 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m, * IP address. Find the interface and confirm that * it supports multicasting. */ - INADDR_TO_IFP(addr, ifp, rdomain); + INADDR_TO_IFP(addr, ifp, rtableid); if (ifp == NULL || (ifp->if_flags & IFF_MULTICAST) == 0) { error = EADDRNOTAVAIL; break; @@ -1881,7 +1880,7 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m, if (!(ro.ro_rt && ro.ro_rt->rt_ifp && (ro.ro_rt->rt_flags & RTF_UP))) ro.ro_rt = rtalloc1(&ro.ro_dst, RT_REPORT, - rdomain); + rtableid); if (ro.ro_rt == NULL) { error = EADDRNOTAVAIL; break; @@ -1889,7 +1888,7 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m, ifp = ro.ro_rt->rt_ifp; rtfree(ro.ro_rt); } else { - INADDR_TO_IFP(mreq->imr_interface, ifp, rdomain); + INADDR_TO_IFP(mreq->imr_interface, ifp, rtableid); } /* * See if we found an interface, and confirm that it @@ -1975,7 +1974,7 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m, if (mreq->imr_interface.s_addr == INADDR_ANY) ifp = NULL; else { - INADDR_TO_IFP(mreq->imr_interface, ifp, rdomain); + INADDR_TO_IFP(mreq->imr_interface, ifp, rtableid); if (ifp == NULL) { error = EADDRNOTAVAIL; break; diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c index 75af8738b6d..f9f78226aba 100644 --- a/sys/netinet/raw_ip.c +++ b/sys/netinet/raw_ip.c @@ -1,4 +1,4 @@ -/* $OpenBSD: raw_ip.c,v 1.48 2009/11/03 10:59:04 claudio Exp $ */ +/* $OpenBSD: raw_ip.c,v 1.49 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: raw_ip.c,v 1.25 1996/02/18 18:58:33 christos Exp $ */ /* @@ -132,7 +132,8 @@ rip_input(struct mbuf *m, ...) if (inp->inp_flags & INP_IPV6) continue; #endif - if (inp->inp_rdomain != rtable_l2(m->m_pkthdr.rdomain)) + if (rtable_l2(inp->inp_rtableid) != + rtable_l2(m->m_pkthdr.rdomain)) continue; if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != ip->ip_p) @@ -272,7 +273,7 @@ rip_output(struct mbuf *m, ...) */ #endif /* force routing domain */ - m->m_pkthdr.rdomain = inp->inp_rdomain; + m->m_pkthdr.rdomain = inp->inp_rtableid; return (ip_output(m, inp->inp_options, &inp->inp_route, flags, inp->inp_moptions, inp)); @@ -418,7 +419,7 @@ rip_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, (addr->sin_family != AF_IMPLINK)) || (addr->sin_addr.s_addr && (!(so->so_options & SO_BINDANY) && - in_iawithaddr(addr->sin_addr, NULL, inp->inp_rdomain) == + in_iawithaddr(addr->sin_addr, NULL, inp->inp_rtableid) == 0))) { error = EADDRNOTAVAIL; break; diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 13c1ca14942..a9716a68433 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tcp_input.c,v 1.232 2010/03/11 00:24:58 sthen Exp $ */ +/* $OpenBSD: tcp_input.c,v 1.233 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $ */ /* @@ -723,7 +723,7 @@ findpcb: if ((tiflags & (TH_RST|TH_ACK|TH_SYN)) != TH_SYN) { if (tiflags & TH_RST) { syn_cache_reset(&src.sa, &dst.sa, th, - inp->inp_rdomain); + inp->inp_rtableid); } else if ((tiflags & (TH_ACK|TH_SYN)) == (TH_ACK|TH_SYN)) { /* @@ -3038,7 +3038,7 @@ tcp_mss(struct tcpcb *tp, int offer) else if (tp->pf == AF_INET) { if (ip_mtudisc) mss = ifp->if_mtu - iphlen - sizeof(struct tcphdr); - else if (inp && in_localaddr(inp->inp_faddr, inp->inp_rdomain)) + else if (inp && in_localaddr(inp->inp_faddr, inp->inp_rtableid)) mss = ifp->if_mtu - iphlen - sizeof(struct tcphdr); } #ifdef INET6 @@ -3564,7 +3564,7 @@ syn_cache_cleanup(struct tcpcb *tp) */ struct syn_cache * syn_cache_lookup(struct sockaddr *src, struct sockaddr *dst, - struct syn_cache_head **headp, u_int rdomain) + struct syn_cache_head **headp, u_int rtableid) { struct syn_cache *sc; struct syn_cache_head *scp; @@ -3582,7 +3582,7 @@ syn_cache_lookup(struct sockaddr *src, struct sockaddr *dst, continue; if (!bcmp(&sc->sc_src, src, src->sa_len) && !bcmp(&sc->sc_dst, dst, dst->sa_len) && - rtable_l2(rdomain) == rtable_l2(sc->sc_rdomain)) { + rtable_l2(rtableid) == rtable_l2(sc->sc_rtableid)) { splx(s); return (sc); } @@ -3628,7 +3628,7 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, s = splsoftnet(); if ((sc = syn_cache_lookup(src, dst, &scp, - sotoinpcb(so)->inp_rdomain)) == NULL) { + sotoinpcb(so)->inp_rtableid)) == NULL) { splx(s); return (NULL); } @@ -3708,8 +3708,8 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, inp = (struct inpcb *)so->so_pcb; #endif /* INET6 */ - /* inherit rdomain from listening socket */ - inp->inp_rdomain = sc->sc_rdomain; + /* inherit rtable from listening socket */ + inp->inp_rtableid = sc->sc_rtableid; inp->inp_lport = th->th_dport; switch (src->sa_family) { @@ -3867,13 +3867,13 @@ abort: void syn_cache_reset(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, - u_int rdomain) + u_int rtableid) { struct syn_cache *sc; struct syn_cache_head *scp; int s = splsoftnet(); - if ((sc = syn_cache_lookup(src, dst, &scp, rdomain)) == NULL) { + if ((sc = syn_cache_lookup(src, dst, &scp, rtableid)) == NULL) { splx(s); return; } @@ -3890,14 +3890,14 @@ syn_cache_reset(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, void syn_cache_unreach(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, - u_int rdomain) + u_int rtableid) { struct syn_cache *sc; struct syn_cache_head *scp; int s; s = splsoftnet(); - if ((sc = syn_cache_lookup(src, dst, &scp, rdomain)) == NULL) { + if ((sc = syn_cache_lookup(src, dst, &scp, rtableid)) == NULL) { splx(s); return; } @@ -4005,7 +4005,7 @@ syn_cache_add(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, * If we do, resend the SYN,ACK. We do not count this * as a retransmission (XXX though maybe we should). */ - if ((sc = syn_cache_lookup(src, dst, &scp, sotoinpcb(so)->inp_rdomain)) + if ((sc = syn_cache_lookup(src, dst, &scp, sotoinpcb(so)->inp_rtableid)) != NULL) { tcpstat.tcps_sc_dupesyn++; if (ipopts) { @@ -4038,7 +4038,7 @@ syn_cache_add(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, */ bcopy(src, &sc->sc_src, src->sa_len); bcopy(dst, &sc->sc_dst, dst->sa_len); - sc->sc_rdomain = sotoinpcb(so)->inp_rdomain; + sc->sc_rtableid = sotoinpcb(so)->inp_rtableid; sc->sc_flags = 0; sc->sc_ipopts = ipopts; sc->sc_irs = th->th_seq; @@ -4166,7 +4166,7 @@ syn_cache_respond(struct syn_cache *sc, struct mbuf *m) m->m_data += max_linkhdr; m->m_len = m->m_pkthdr.len = tlen; m->m_pkthdr.rcvif = NULL; - m->m_pkthdr.rdomain = sc->sc_rdomain; + m->m_pkthdr.rdomain = sc->sc_rtableid; memset(mtod(m, u_char *), 0, tlen); switch (sc->sc_src.sa.sa_family) { diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c index 036c54176cd..cb9964e9e32 100644 --- a/sys/netinet/tcp_output.c +++ b/sys/netinet/tcp_output.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tcp_output.c,v 1.88 2010/05/28 08:32:41 kettenis Exp $ */ +/* $OpenBSD: tcp_output.c,v 1.89 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: tcp_output.c,v 1.16 1997/06/03 16:17:09 kml Exp $ */ /* @@ -1061,7 +1061,7 @@ send: #endif /* force routing domain */ - m->m_pkthdr.rdomain = tp->t_inpcb->inp_rdomain; + m->m_pkthdr.rdomain = tp->t_inpcb->inp_rtableid; switch (tp->pf) { case 0: /*default to PF_INET*/ diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index 5cd48cce9c8..3d04fac05ef 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tcp_subr.c,v 1.110 2010/01/15 18:20:23 chl Exp $ */ +/* $OpenBSD: tcp_subr.c,v 1.111 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: tcp_subr.c,v 1.22 1996/02/13 23:44:00 christos Exp $ */ /* @@ -318,13 +318,8 @@ tcp_template(tp) /* This function looks hairy, because it was so IPv4-dependent. */ #endif /* INET6 */ void -tcp_respond(tp, template, th0, ack, seq, flags, rdomain) - struct tcpcb *tp; - caddr_t template; - struct tcphdr *th0; - tcp_seq ack, seq; - int flags; - u_int rdomain; +tcp_respond(struct tcpcb *tp, caddr_t template, struct tcphdr *th0, + tcp_seq ack, tcp_seq seq, int flags, u_int rtableid) { int tlen; int win = 0; @@ -412,9 +407,9 @@ tcp_respond(tp, template, th0, ack, seq, flags, rdomain) /* force routing domain */ if (tp) - m->m_pkthdr.rdomain = tp->t_inpcb->inp_rdomain; + m->m_pkthdr.rdomain = tp->t_inpcb->inp_rtableid; else - m->m_pkthdr.rdomain = rdomain; + m->m_pkthdr.rdomain = rtableid; switch (af) { #ifdef INET6 @@ -774,11 +769,7 @@ tcp6_ctlinput(cmd, sa, d) #endif void * -tcp_ctlinput(cmd, sa, rdomain, v) - int cmd; - struct sockaddr *sa; - u_int rdomain; - void *v; +tcp_ctlinput(int cmd, struct sockaddr *sa, u_int rdomain, void *v) { struct ip *ip = v; struct tcphdr *th; @@ -839,7 +830,7 @@ tcp_ctlinput(cmd, sa, rdomain, v) * route (traditional PMTUD). */ tp->t_flags &= ~TF_PMTUD_PEND; - icmp_mtudisc(icp, inp->inp_rdomain); + icmp_mtudisc(icp, inp->inp_rtableid); } else { /* * Record the information got in the ICMP diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c index 8253775bfa3..a1dd72aae79 100644 --- a/sys/netinet/tcp_timer.c +++ b/sys/netinet/tcp_timer.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tcp_timer.c,v 1.44 2009/11/13 20:54:05 claudio Exp $ */ +/* $OpenBSD: tcp_timer.c,v 1.45 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: tcp_timer.c,v 1.14 1996/02/13 23:44:09 christos Exp $ */ /* @@ -213,14 +213,14 @@ tcp_timer_rexmt(void *arg) icmp.icmp_ip.ip_len = tp->t_pmtud_ip_len; icmp.icmp_ip.ip_hl = tp->t_pmtud_ip_hl; icmpsrc.sin_addr = tp->t_inpcb->inp_faddr; - icmp_mtudisc(&icmp, tp->t_inpcb->inp_rdomain); + icmp_mtudisc(&icmp, tp->t_inpcb->inp_rtableid); /* * Notify all connections to the same peer about * new mss and trigger retransmit. */ in_pcbnotifyall(&tcbtable, sintosa(&icmpsrc), - tp->t_inpcb->inp_rdomain, EMSGSIZE, tcp_mtudisc); + tp->t_inpcb->inp_rtableid, EMSGSIZE, tcp_mtudisc); splx(s); return; } @@ -286,7 +286,7 @@ tcp_timer_rexmt(void *arg) sin.sin_len = sizeof(struct sockaddr_in); sin.sin_addr = inp->inp_faddr; rt = icmp_mtudisc_clone(sintosa(&sin), - inp->inp_rdomain); + inp->inp_rtableid); break; } if (rt != NULL) { diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h index 2650017254f..57cd44fd8ef 100644 --- a/sys/netinet/tcp_var.h +++ b/sys/netinet/tcp_var.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tcp_var.h,v 1.93 2009/11/13 20:54:05 claudio Exp $ */ +/* $OpenBSD: tcp_var.h,v 1.94 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: tcp_var.h,v 1.17 1996/02/13 23:44:24 christos Exp $ */ /* @@ -274,7 +274,7 @@ struct syn_cache { union syn_cache_sa sc_dst; tcp_seq sc_irs; tcp_seq sc_iss; - u_int sc_rdomain; + u_int sc_rtableid; u_int sc_rxtcur; /* current rxt timeout */ u_int sc_rxttot; /* total time spend on queues */ u_short sc_rxtshift; /* for computing backoff */ diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index 831ff59126a..55bfe45b7ab 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -1,4 +1,4 @@ -/* $OpenBSD: udp_usrreq.c,v 1.134 2010/04/20 22:05:43 tedu Exp $ */ +/* $OpenBSD: udp_usrreq.c,v 1.135 2010/07/03 04:44:51 guenther Exp $ */ /* $NetBSD: udp_usrreq.c,v 1.28 1996/03/16 23:54:03 christos Exp $ */ /* @@ -444,7 +444,8 @@ udp_input(struct mbuf *m, ...) if (!ip6 && (inp->inp_flags & INP_IPV6)) continue; #endif - if (inp->inp_rdomain != rtable_l2(m->m_pkthdr.rdomain)) + if (rtable_l2(inp->inp_rtableid) != + rtable_l2(m->m_pkthdr.rdomain)) continue; if (inp->inp_lport != uh->uh_dport) continue; @@ -1011,7 +1012,7 @@ udp_output(struct mbuf *m, ...) udpstat.udps_opackets++; /* force routing domain */ - m->m_pkthdr.rdomain = inp->inp_rdomain; + m->m_pkthdr.rdomain = inp->inp_rtableid; error = ip_output(m, inp->inp_options, &inp->inp_route, inp->inp_socket->so_options & |