summaryrefslogtreecommitdiffstats
path: root/sys/netinet
diff options
context:
space:
mode:
authorjmg <jmg@FreeBSD.org>2004-09-05 02:34:12 +0000
committerjmg <jmg@FreeBSD.org>2004-09-05 02:34:12 +0000
commit8e8293b76576645a7323d6bce9cc4f8b1e544edd (patch)
tree41c4349d7abcca9eddfb8777895d58e45d58de0b /sys/netinet
parente291fa77140598041f22aa877b26c0844871d3ea (diff)
downloadFreeBSD-src-8e8293b76576645a7323d6bce9cc4f8b1e544edd.zip
FreeBSD-src-8e8293b76576645a7323d6bce9cc4f8b1e544edd.tar.gz
fix up socket/ip layer violation... don't assume/know that
SO_DONTROUTE == IP_ROUTETOIF and SO_BROADCAST == IP_ALLOWBROADCAST...
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/ip_divert.c3
-rw-r--r--sys/netinet/raw_ip.c3
-rw-r--r--sys/netinet/tcp_output.c7
-rw-r--r--sys/netinet/tcp_subr.c3
-rw-r--r--sys/netinet/tcp_timewait.c3
-rw-r--r--sys/netinet/udp_usrreq.c6
6 files changed, 17 insertions, 8 deletions
diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c
index 106aa56..8f524bb 100644
--- a/sys/netinet/ip_divert.c
+++ b/sys/netinet/ip_divert.c
@@ -333,7 +333,8 @@ div_output(struct socket *so, struct mbuf *m,
#endif
error = ip_output(m,
inp->inp_options, NULL,
- (so->so_options & SO_DONTROUTE) |
+ ((so->so_options & SO_DONTROUTE) ?
+ IP_ROUTETOIF : 0) |
IP_ALLOWBROADCAST | IP_RAWOUTPUT,
inp->inp_moptions, NULL);
}
diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c
index 96e9b0a..24f4131 100644
--- a/sys/netinet/raw_ip.c
+++ b/sys/netinet/raw_ip.c
@@ -249,7 +249,8 @@ rip_output(struct mbuf *m, struct socket *so, u_long dst)
struct ip *ip;
int error;
struct inpcb *inp = sotoinpcb(so);
- int flags = (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST;
+ int flags = ((so->so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0) |
+ IP_ALLOWBROADCAST;
/*
* If the user handed us a complete IP packet, use it.
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index ce739e9..cd09097 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -1060,8 +1060,8 @@ timer:
/* TODO: IPv6 IP6TOS_ECT bit on */
error = ip6_output(m,
tp->t_inpcb->in6p_outputopts, NULL,
- (so->so_options & SO_DONTROUTE), NULL, NULL,
- tp->t_inpcb);
+ ((so->so_options & SO_DONTROUTE) ?
+ IP_ROUTETOIF : 0), NULL, NULL, tp->t_inpcb);
} else
#endif /* INET6 */
{
@@ -1080,7 +1080,8 @@ timer:
ip->ip_off |= IP_DF;
error = ip_output(m, tp->t_inpcb->inp_options, NULL,
- (so->so_options & SO_DONTROUTE), 0, tp->t_inpcb);
+ ((so->so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0), 0,
+ tp->t_inpcb);
}
if (error) {
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index cb709fb..b0f4e5c 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -1848,7 +1848,8 @@ tcp_twrespond(struct tcptw *tw, int flags)
if (path_mtu_discovery)
ip->ip_off |= IP_DF;
error = ip_output(m, inp->inp_options, NULL,
- (tw->tw_so_options & SO_DONTROUTE), NULL, inp);
+ ((tw->tw_so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0),
+ NULL, inp);
}
if (flags & TH_ACK)
tcpstat.tcps_sndacks++;
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c
index cb709fb..b0f4e5c 100644
--- a/sys/netinet/tcp_timewait.c
+++ b/sys/netinet/tcp_timewait.c
@@ -1848,7 +1848,8 @@ tcp_twrespond(struct tcptw *tw, int flags)
if (path_mtu_discovery)
ip->ip_off |= IP_DF;
error = ip_output(m, inp->inp_options, NULL,
- (tw->tw_so_options & SO_DONTROUTE), NULL, inp);
+ ((tw->tw_so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0),
+ NULL, inp);
}
if (flags & TH_ACK)
tcpstat.tcps_sndacks++;
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index 39d1634..9c02395 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -879,7 +879,11 @@ udp_output(inp, m, addr, control, td)
ui->ui_dport = fport;
ui->ui_ulen = htons((u_short)len + sizeof(struct udphdr));
- ipflags = inp->inp_socket->so_options & (SO_DONTROUTE | SO_BROADCAST);
+ ipflags = 0;
+ if (inp->inp_socket->so_options & SO_DONTROUTE)
+ ipflags |= IP_ROUTETOIF;
+ if (inp->inp_socket->so_options & SO_BROADCAST)
+ ipflags |= IP_ALLOWBROADCAST;
if (inp->inp_flags & INP_ONESBCAST)
ipflags |= IP_SENDONES;
OpenPOWER on IntegriCloud