MFC r272801:

Move the calls to u_tun_func() into udp6_append()

A similar cleanup for UDPv4 was performed in r220620.
This commit is contained in:
bryanv 2014-11-08 02:47:23 +00:00
parent 520007fcf4
commit 018ace964f

View File

@ -139,9 +139,18 @@ udp6_append(struct inpcb *inp, struct mbuf *n, int off,
{
struct socket *so;
struct mbuf *opts;
struct udpcb *up;
INP_LOCK_ASSERT(inp);
/*
* Engage the tunneling protocol.
*/
up = intoudpcb(inp);
if (up->u_tun_func != NULL) {
(*up->u_tun_func)(n, off, inp);
return;
}
#ifdef IPSEC
/* Check AH/ESP integrity. */
if (ipsec6_in_reject(n, inp)) {
@ -359,20 +368,7 @@ udp6_input(struct mbuf **mp, int *offp, int proto)
if ((n = m_copy(m, 0, M_COPYALL)) != NULL) {
INP_RLOCK(last);
up = intoudpcb(last);
if (up->u_tun_func == NULL) {
udp6_append(last, n, off, &fromsa);
} else {
/*
* Engage the tunneling
* protocol we will have to
* leave the info_lock up,
* since we are hunting
* through multiple UDP's.
*
*/
(*up->u_tun_func)(n, off, last);
}
udp6_append(last, n, off, &fromsa);
INP_RUNLOCK(last);
}
}
@ -402,16 +398,8 @@ udp6_input(struct mbuf **mp, int *offp, int proto)
}
INP_RLOCK(last);
INP_INFO_RUNLOCK(pcbinfo);
up = intoudpcb(last);
UDP_PROBE(receive, NULL, last, ip6, last, uh);
if (up->u_tun_func == NULL) {
udp6_append(last, m, off, &fromsa);
} else {
/*
* Engage the tunneling protocol.
*/
(*up->u_tun_func)(m, off, last);
}
udp6_append(last, m, off, &fromsa);
INP_RUNLOCK(last);
return (IPPROTO_DONE);
}
@ -490,15 +478,7 @@ udp6_input(struct mbuf **mp, int *offp, int proto)
}
}
UDP_PROBE(receive, NULL, inp, ip6, inp, uh);
if (up->u_tun_func == NULL) {
udp6_append(inp, m, off, &fromsa);
} else {
/*
* Engage the tunneling protocol.
*/
(*up->u_tun_func)(m, off, inp);
}
udp6_append(inp, m, off, &fromsa);
INP_RUNLOCK(inp);
return (IPPROTO_DONE);