Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Jul 2013 09:11:38 +0000 (UTC)
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r252881 - in stable/9/sys: netinet netinet6
Message-ID:  <201307060911.r669BcC6098352@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307060911.r669BcC6098352>