svn commit: r247947 - stable/8/sys/netinet
Michael Tuexen
tuexen at FreeBSD.org
Thu Mar 7 21:27:16 UTC 2013
Author: tuexen
Date: Thu Mar 7 21:27:15 2013
New Revision: 247947
URL: http://svnweb.freebsd.org/changeset/base/247947
Log:
MFC r237229:
Cleanup the UDP decapsulation code.
Modified:
stable/8/sys/netinet/sctputil.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/netinet/ (props changed)
Modified: stable/8/sys/netinet/sctputil.c
==============================================================================
--- stable/8/sys/netinet/sctputil.c Thu Mar 7 21:24:41 2013 (r247946)
+++ stable/8/sys/netinet/sctputil.c Thu Mar 7 21:27:15 2013 (r247947)
@@ -6837,83 +6837,61 @@ sctp_recv_udp_tunneled_packet(struct mbu
struct ip *iph;
struct mbuf *sp, *last;
struct udphdr *uhdr;
- uint16_t port = 0;
- int header_size = sizeof(struct udphdr) + sizeof(struct sctphdr);
+ uint16_t port;
- /*
- * Split out the mbuf chain. Leave the IP header in m, place the
- * rest in the sp.
- */
if ((m->m_flags & M_PKTHDR) == 0) {
/* Can't handle one that is not a pkt hdr */
goto out;
}
- /* pull the src port */
+ /* Pull the src port */
iph = mtod(m, struct ip *);
uhdr = (struct udphdr *)((caddr_t)iph + off);
-
port = uhdr->uh_sport;
+ /*
+ * Split out the mbuf chain. Leave the IP header in m, place the
+ * rest in the sp.
+ */
sp = m_split(m, off, M_DONTWAIT);
if (sp == NULL) {
/* Gak, drop packet, we can't do a split */
goto out;
}
- if (sp->m_pkthdr.len < header_size) {
- /* Gak, packet can't have an SCTP header in it - to small */
+ if (sp->m_pkthdr.len < sizeof(struct udphdr) + sizeof(struct sctphdr)) {
+ /* Gak, packet can't have an SCTP header in it - too small */
m_freem(sp);
goto out;
}
- /* ok now pull up the UDP header and SCTP header together */
- sp = m_pullup(sp, header_size);
+ /* Now pull up the UDP header and SCTP header together */
+ sp = m_pullup(sp, sizeof(struct udphdr) + sizeof(struct sctphdr));
if (sp == NULL) {
/* Gak pullup failed */
goto out;
}
- /* trim out the UDP header */
+ /* Trim out the UDP header */
m_adj(sp, sizeof(struct udphdr));
/* Now reconstruct the mbuf chain */
- /* 1) find last one */
- last = m;
- while (last->m_next != NULL) {
- last = last->m_next;
- }
+ for (last = m; last->m_next; last = last->m_next);
last->m_next = sp;
m->m_pkthdr.len += sp->m_pkthdr.len;
- last = m;
- while (last != NULL) {
- last = last->m_next;
- }
- /* Now its ready for sctp_input or sctp6_input */
iph = mtod(m, struct ip *);
switch (iph->ip_v) {
#ifdef INET
case IPVERSION:
- {
- uint16_t len;
-
- /* its IPv4 */
- len = SCTP_GET_IPV4_LENGTH(iph);
- len -= sizeof(struct udphdr);
- SCTP_GET_IPV4_LENGTH(iph) = len;
- sctp_input_with_port(m, off, port);
- break;
- }
+ iph->ip_len -= sizeof(struct udphdr);
+ sctp_input_with_port(m, off, port);
+ break;
#endif
#ifdef INET6
case IPV6_VERSION >> 4:
- {
- /* its IPv6 - NOT supported */
- goto out;
- break;
+ /* Not yet supported. */
+ goto out;
+ break;
- }
#endif
default:
- {
- m_freem(m);
- break;
- }
+ goto out;
+ break;
}
return;
out:
More information about the svn-src-stable-8
mailing list