Author: tuexen
Date: Sun Jun 24 23:12:24 2012
New Revision: 237542
URL: http://svn.freebsd.org/changeset/base/237542

Log:
  Pass the packet length explicitly around.
  
  MFC after: 3 days

Modified:
  head/sys/netinet/sctp_indata.c
  head/sys/netinet/sctp_input.c
  head/sys/netinet/sctp_output.c
  head/sys/netinet/sctp_output.h
  head/sys/netinet6/sctp6_usrreq.c

Modified: head/sys/netinet/sctp_indata.c
==============================================================================
--- head/sys/netinet/sctp_indata.c      Sun Jun 24 22:22:44 2012        
(r237541)
+++ head/sys/netinet/sctp_indata.c      Sun Jun 24 23:12:24 2012        
(r237542)
@@ -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: head/sys/netinet/sctp_input.c
==============================================================================
--- head/sys/netinet/sctp_input.c       Sun Jun 24 22:22:44 2012        
(r237541)
+++ head/sys/netinet/sctp_input.c       Sun Jun 24 23:12:24 2012        
(r237542)
@@ -6013,7 +6013,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: head/sys/netinet/sctp_output.c
==============================================================================
--- head/sys/netinet/sctp_output.c      Sun Jun 24 22:22:44 2012        
(r237541)
+++ head/sys/netinet/sctp_output.c      Sun Jun 24 23:12:24 2012        
(r237542)
@@ -11312,21 +11312,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;
@@ -11356,23 +11350,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,
@@ -11408,7 +11387,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: head/sys/netinet/sctp_output.h
==============================================================================
--- head/sys/netinet/sctp_output.h      Sun Jun 24 22:22:44 2012        
(r237541)
+++ head/sys/netinet/sctp_output.h      Sun Jun 24 23:12:24 2012        
(r237542)
@@ -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: head/sys/netinet6/sctp6_usrreq.c
==============================================================================
--- head/sys/netinet6/sctp6_usrreq.c    Sun Jun 24 22:22:44 2012        
(r237541)
+++ head/sys/netinet6/sctp6_usrreq.c    Sun Jun 24 23:12:24 2012        
(r237542)
@@ -183,7 +183,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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to