aboutsummaryrefslogtreecommitdiff
path: root/sys/net/rtsock.c
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2014-04-27 10:20:37 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2014-04-27 10:20:37 +0000
commit92c227af54baf380eff446012b76d6b810e49ec3 (patch)
treed00e8e4f5e6fed887a55eeb2c46c2fb63c266012 /sys/net/rtsock.c
parent2277c5e5e228579e1951ee71ec60bbefe8842c36 (diff)
downloadsrc-92c227af54baf380eff446012b76d6b810e49ec3.tar.gz
src-92c227af54baf380eff446012b76d6b810e49ec3.zip
Cleanup route_output() a bit.
MFC after: 1 month
Notes
Notes: svn path=/head/; revision=265010
Diffstat (limited to 'sys/net/rtsock.c')
-rw-r--r--sys/net/rtsock.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 45ba6fd52a9a..674f81d3a5e1 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -530,6 +530,7 @@ route_output(struct mbuf *m, struct socket *so)
struct ifnet *ifp = NULL;
union sockaddr_union saun;
sa_family_t saf = AF_UNSPEC;
+ struct rawcb *rp = NULL;
fibnum = so->so_fibnum;
@@ -819,22 +820,14 @@ report:
}
flush:
- if (rtm) {
- if (error)
- rtm->rtm_errno = error;
- else
- rtm->rtm_flags |= RTF_DONE;
- }
- if (rt) /* XXX can this be true? */
+ if (rt != NULL)
RTFREE(rt);
- {
- struct rawcb *rp = NULL;
/*
* Check to see if we don't want our own messages.
*/
if ((so->so_options & SO_USELOOPBACK) == 0) {
if (V_route_cb.any_count <= 1) {
- if (rtm)
+ if (rtm != NULL)
Free(rtm);
m_freem(m);
return (error);
@@ -842,6 +835,7 @@ flush:
/* There is another listener, so construct message */
rp = sotorawcb(so);
}
+
if (rtm != NULL) {
#ifdef INET6
if (rti_need_deembed) {
@@ -859,6 +853,11 @@ flush:
}
}
#endif
+ if (error != 0)
+ rtm->rtm_errno = error;
+ else
+ rtm->rtm_flags |= RTF_DONE;
+
m_copyback(m, 0, rtm->rtm_msglen, (caddr_t)rtm);
if (m->m_pkthdr.len < rtm->rtm_msglen) {
m_freem(m);
@@ -867,7 +866,7 @@ flush:
m_adj(m, rtm->rtm_msglen - m->m_pkthdr.len);
Free(rtm);
}
- if (m) {
+ if (m != NULL) {
M_SETFIB(m, fibnum);
m->m_flags |= RTS_FILTER_FIB;
if (rp) {
@@ -882,7 +881,7 @@ flush:
} else
rt_dispatch(m, saf);
}
- }
+
return (error);
}