svn commit: r252881 - in stable/9/sys: netinet netinet6
Michael Tuexen
tuexen at FreeBSD.org
Sat Jul 6 09:11:39 UTC 2013
Author: tuexen
Date: Sat Jul 6 09:11:38 2013
New Revision: 252881
URL: http://svnweb.freebsd.org/changeset/base/252881
Log:
MFC r237542:
Pass the packet length explicitly around.
Modified:
stable/9/sys/netinet/sctp_indata.c
stable/9/sys/netinet/sctp_input.c
stable/9/sys/netinet/sctp_output.c
stable/9/sys/netinet/sctp_output.h
stable/9/sys/netinet6/sctp6_usrreq.c
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/netinet/sctp_indata.c
==============================================================================
--- stable/9/sys/netinet/sctp_indata.c Sat Jul 6 09:08:17 2013 (r252880)
+++ stable/9/sys/netinet/sctp_indata.c Sat Jul 6 09:11:38 2013 (r252881)
@@ -2762,7 +2762,7 @@ sctp_process_data(struct mbuf **mm, int
/*
* we need to report rwnd overrun drops.
*/
- sctp_send_packet_dropped(stcb, net, *mm, iphlen, 0);
+ sctp_send_packet_dropped(stcb, net, *mm, length, iphlen, 0);
}
if (num_chunks) {
/*
Modified: stable/9/sys/netinet/sctp_input.c
==============================================================================
--- stable/9/sys/netinet/sctp_input.c Sat Jul 6 09:08:17 2013 (r252880)
+++ stable/9/sys/netinet/sctp_input.c Sat Jul 6 09:11:38 2013 (r252881)
@@ -6011,7 +6011,7 @@ sctp_input_with_port(struct mbuf *i_pak,
#endif
}
if ((inp) && (stcb)) {
- sctp_send_packet_dropped(stcb, net, m, iphlen, 1);
+ sctp_send_packet_dropped(stcb, net, m, mlen + iphlen, iphlen, 1);
sctp_chunk_output(inp, stcb, SCTP_OUTPUT_FROM_INPUT_ERROR, SCTP_SO_NOT_LOCKED);
} else if ((inp != NULL) && (stcb == NULL)) {
refcount_up = 1;
Modified: stable/9/sys/netinet/sctp_output.c
==============================================================================
--- stable/9/sys/netinet/sctp_output.c Sat Jul 6 09:08:17 2013 (r252880)
+++ stable/9/sys/netinet/sctp_output.c Sat Jul 6 09:11:38 2013 (r252881)
@@ -11309,21 +11309,15 @@ sctp_send_ecn_echo(struct sctp_tcb *stcb
void
sctp_send_packet_dropped(struct sctp_tcb *stcb, struct sctp_nets *net,
- struct mbuf *m, int iphlen, int bad_crc)
+ struct mbuf *m, int len, int iphlen, int bad_crc)
{
struct sctp_association *asoc;
struct sctp_pktdrop_chunk *drp;
struct sctp_tmit_chunk *chk;
uint8_t *datap;
- int len;
int was_trunc = 0;
struct ip *iph;
-
-#ifdef INET6
- struct ip6_hdr *ip6h;
-
-#endif
- int fullsz = 0, extra = 0;
+ int fullsz = 0;
long spc;
int offset;
struct sctp_chunkhdr *ch, chunk_buf;
@@ -11353,23 +11347,8 @@ sctp_send_packet_dropped(struct sctp_tcb
sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED);
return;
}
- switch (iph->ip_v) {
-#ifdef INET
- case IPVERSION:
- /* IPv4 */
- len = chk->send_size = iph->ip_len;
- break;
-#endif
-#ifdef INET6
- case IPV6_VERSION >> 4:
- /* IPv6 */
- ip6h = mtod(m, struct ip6_hdr *);
- len = chk->send_size = htons(ip6h->ip6_plen);
- break;
-#endif
- default:
- return;
- }
+ len -= iphlen;
+ chk->send_size = len;
/* Validate that we do not have an ABORT in here. */
offset = iphlen + sizeof(struct sctphdr);
ch = (struct sctp_chunkhdr *)sctp_m_getptr(m, offset,
@@ -11405,7 +11384,7 @@ sctp_send_packet_dropped(struct sctp_tcb
/*
* only send 1 mtu worth, trim off the excess on the end.
*/
- fullsz = len - extra;
+ fullsz = len;
len = min(stcb->asoc.smallest_mtu, MCLBYTES) - SCTP_MAX_OVERHEAD;
was_trunc = 1;
}
Modified: stable/9/sys/netinet/sctp_output.h
==============================================================================
--- stable/9/sys/netinet/sctp_output.h Sat Jul 6 09:08:17 2013 (r252880)
+++ stable/9/sys/netinet/sctp_output.h Sat Jul 6 09:11:38 2013 (r252881)
@@ -162,7 +162,7 @@ void sctp_send_ecn_echo(struct sctp_tcb
void
sctp_send_packet_dropped(struct sctp_tcb *, struct sctp_nets *, struct mbuf *,
- int, int);
+ int, int, int);
Modified: stable/9/sys/netinet6/sctp6_usrreq.c
==============================================================================
--- stable/9/sys/netinet6/sctp6_usrreq.c Sat Jul 6 09:08:17 2013 (r252880)
+++ stable/9/sys/netinet6/sctp6_usrreq.c Sat Jul 6 09:11:38 2013 (r252881)
@@ -184,7 +184,7 @@ sctp6_input(struct mbuf **i_pak, int *of
}
/* in6p's ref-count increased && stcb locked */
if ((in6p) && (stcb)) {
- sctp_send_packet_dropped(stcb, net, m, iphlen, 1);
+ sctp_send_packet_dropped(stcb, net, m, pkt_len, iphlen, 1);
sctp_chunk_output((struct sctp_inpcb *)in6p, stcb, SCTP_OUTPUT_FROM_INPUT_ERROR, SCTP_SO_NOT_LOCKED);
} else if ((in6p != NULL) && (stcb == NULL)) {
refcount_up = 1;
More information about the svn-src-stable
mailing list