All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support
@ 2014-07-04 21:05 Daniel Borkmann
  2014-07-07  8:46 ` David Laight
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Daniel Borkmann @ 2014-07-04 21:05 UTC (permalink / raw)
  To: linux-sctp

From: Geir Ola Vaagland <geirola@gmail.com>

This patch implements section 5.3.4. of RFC6458, that is, support
for 'SCTP Send Information Structure' (SCTP_SNDINFO) which can be
placed into ancillary data cmsghdr structure for sendmsg() calls.

The sctp_sndinfo structure is defined as per RFC as below ...

  struct sctp_sndinfo {
    uint16_t snd_sid;
    uint16_t snd_flags;
    uint32_t snd_ppid;
    uint32_t snd_context;
    sctp_assoc_t snd_assoc_id;
  };

... and supplied under cmsg_level IPPROTO_SCTP, cmsg_type
SCTP_SNDINFO, while cmsg_data[] contains struct sctp_sndinfo.
An sctp_sndinfo item always corresponds to the data in msg_iov.

Joint work with Daniel Borkmann.

Signed-off-by: Geir Ola Vaagland <geirola@gmail.com>
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
---
 include/net/sctp/structs.h |  3 +-
 include/uapi/linux/sctp.h  | 22 +++++++++++--
 net/sctp/socket.c          | 77 ++++++++++++++++++++++++++++++++++------------
 3 files changed, 79 insertions(+), 23 deletions(-)

diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index f38588b..7af9a0f 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1919,7 +1919,8 @@ struct sctp_chunk *sctp_get_ecne_prepend(struct sctp_association *asoc);
 /* A convenience structure to parse out SCTP specific CMSGs. */
 typedef struct sctp_cmsgs {
 	struct sctp_initmsg *init;
-	struct sctp_sndrcvinfo *info;
+	struct sctp_sndrcvinfo *srinfo;
+	struct sctp_sndinfo *sinfo;
 } sctp_cmsgs_t;
 
 /* Structure for tracking memory objects */
diff --git a/include/uapi/linux/sctp.h b/include/uapi/linux/sctp.h
index 266022a..a387761 100644
--- a/include/uapi/linux/sctp.h
+++ b/include/uapi/linux/sctp.h
@@ -154,6 +154,22 @@ struct sctp_sndrcvinfo {
 	sctp_assoc_t sinfo_assoc_id;
 };
 
+/* 5.3.4 SCTP Send Information Structure (SCTP_SNDINFO)
+ *
+ *   This cmsghdr structure specifies SCTP options for sendmsg().
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   -------------------
+ *   IPPROTO_SCTP  SCTP_SNDINFO   struct sctp_sndinfo
+ */
+struct sctp_sndinfo {
+	__u16 snd_sid;
+	__u16 snd_flags;
+	__u32 snd_ppid;
+	__u32 snd_context;
+	sctp_assoc_t snd_assoc_id;
+};
+
 /*
  *  sinfo_flags: 16 bits (unsigned integer)
  *
@@ -177,10 +193,12 @@ typedef union {
 
 /* These are cmsg_types.  */
 typedef enum sctp_cmsg_type {
-	SCTP_INIT,              /* 5.2.1 SCTP Initiation Structure */
+	SCTP_INIT,		/* 5.2.1 SCTP Initiation Structure */
 #define SCTP_INIT	SCTP_INIT
-	SCTP_SNDRCV,            /* 5.2.2 SCTP Header Information Structure */
+	SCTP_SNDRCV,		/* 5.2.2 SCTP Header Information Structure */
 #define SCTP_SNDRCV	SCTP_SNDRCV
+	SCTP_SNDINFO,		/* 5.3.4 SCTP Send Information Structure */
+#define SCTP_SNDINFO	SCTP_SNDINFO
 } sctp_cmsg_t;
 
 /*
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 4298996..d61729e 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -1602,12 +1602,13 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
 	struct sctp_initmsg *sinit;
 	sctp_assoc_t associd = 0;
 	sctp_cmsgs_t cmsgs = { NULL };
-	int err;
 	sctp_scope_t scope;
-	long timeo;
-	__u16 sinfo_flags = 0;
+	bool fill_sinfo_ttl = false;
 	struct sctp_datamsg *datamsg;
 	int msg_flags = msg->msg_flags;
+	__u16 sinfo_flags = 0;
+	long timeo;
+	int err;
 
 	err = 0;
 	sp = sctp_sk(sk);
@@ -1648,10 +1649,21 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
 		msg_name = msg->msg_name;
 	}
 
-	sinfo = cmsgs.info;
 	sinit = cmsgs.init;
+	if (cmsgs.sinfo != NULL) {
+		memset(&default_sinfo, 0, sizeof(default_sinfo));
+		default_sinfo.sinfo_stream = cmsgs.sinfo->snd_sid;
+		default_sinfo.sinfo_flags = cmsgs.sinfo->snd_flags;
+		default_sinfo.sinfo_ppid = cmsgs.sinfo->snd_ppid;
+		default_sinfo.sinfo_context = cmsgs.sinfo->snd_context;
+		default_sinfo.sinfo_assoc_id = cmsgs.sinfo->snd_assoc_id;
 
-	/* Did the user specify SNDRCVINFO?  */
+		sinfo = &default_sinfo;
+		fill_sinfo_ttl = true;
+	} else {
+		sinfo = cmsgs.srinfo;
+	}
+	/* Did the user specify SNDINFO/SNDRCVINFO? */
 	if (sinfo) {
 		sinfo_flags = sinfo->sinfo_flags;
 		associd = sinfo->sinfo_assoc_id;
@@ -1858,8 +1870,8 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
 	pr_debug("%s: we have a valid association\n", __func__);
 
 	if (!sinfo) {
-		/* If the user didn't specify SNDRCVINFO, make up one with
-		 * some defaults.
+		/* If the user didn't specify SNDINFO/SNDRCVINFO, make up
+		 * one with some defaults.
 		 */
 		memset(&default_sinfo, 0, sizeof(default_sinfo));
 		default_sinfo.sinfo_stream = asoc->default_stream;
@@ -1868,7 +1880,13 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
 		default_sinfo.sinfo_context = asoc->default_context;
 		default_sinfo.sinfo_timetolive = asoc->default_timetolive;
 		default_sinfo.sinfo_assoc_id = sctp_assoc2id(asoc);
+
 		sinfo = &default_sinfo;
+	} else if (fill_sinfo_ttl) {
+		/* In case SNDINFO was specified, we still need to fill
+		 * it with a default ttl from the assoc here.
+		 */
+		sinfo->sinfo_timetolive = asoc->default_timetolive;
 	}
 
 	/* API 7.1.7, the sndbuf size per association bounds the
@@ -6390,8 +6408,7 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
 	struct cmsghdr *cmsg;
 	struct msghdr *my_msg = (struct msghdr *)msg;
 
-	for (cmsg = CMSG_FIRSTHDR(msg);
-	     cmsg != NULL;
+	for (cmsg = CMSG_FIRSTHDR(msg); cmsg != NULL;
 	     cmsg = CMSG_NXTHDR(my_msg, cmsg)) {
 		if (!CMSG_OK(my_msg, cmsg))
 			return -EINVAL;
@@ -6404,7 +6421,7 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
 		switch (cmsg->cmsg_type) {
 		case SCTP_INIT:
 			/* SCTP Socket API Extension
-			 * 5.2.1 SCTP Initiation Structure (SCTP_INIT)
+			 * 5.3.1 SCTP Initiation Structure (SCTP_INIT)
 			 *
 			 * This cmsghdr structure provides information for
 			 * initializing new SCTP associations with sendmsg().
@@ -6416,15 +6433,15 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
 			 * ------------  ------------   ----------------------
 			 * IPPROTO_SCTP  SCTP_INIT      struct sctp_initmsg
 			 */
-			if (cmsg->cmsg_len !-			    CMSG_LEN(sizeof(struct sctp_initmsg)))
+			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_initmsg)))
 				return -EINVAL;
-			cmsgs->init = (struct sctp_initmsg *)CMSG_DATA(cmsg);
+
+			cmsgs->init = CMSG_DATA(cmsg);
 			break;
 
 		case SCTP_SNDRCV:
 			/* SCTP Socket API Extension
-			 * 5.2.2 SCTP Header Information Structure(SCTP_SNDRCV)
+			 * 5.3.2 SCTP Header Information Structure(SCTP_SNDRCV)
 			 *
 			 * This cmsghdr structure specifies SCTP options for
 			 * sendmsg() and describes SCTP header information
@@ -6434,24 +6451,44 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
 			 * ------------  ------------   ----------------------
 			 * IPPROTO_SCTP  SCTP_SNDRCV    struct sctp_sndrcvinfo
 			 */
-			if (cmsg->cmsg_len !-			    CMSG_LEN(sizeof(struct sctp_sndrcvinfo)))
+			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_sndrcvinfo)))
 				return -EINVAL;
 
-			cmsgs->info -				(struct sctp_sndrcvinfo *)CMSG_DATA(cmsg);
+			cmsgs->srinfo = CMSG_DATA(cmsg);
 
-			/* Minimally, validate the sinfo_flags. */
-			if (cmsgs->info->sinfo_flags &
+			if (cmsgs->srinfo->sinfo_flags &
 			    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
 			      SCTP_ABORT | SCTP_EOF))
 				return -EINVAL;
 			break;
 
+		case SCTP_SNDINFO:
+			/* SCTP Socket API Extension
+			 * 5.3.4 SCTP Send Information Structure (SCTP_SNDINFO)
+			 *
+			 * This cmsghdr structure specifies SCTP options for
+			 * sendmsg(). This structure and SCTP_RCVINFO replaces
+			 * SCTP_SNDRCV which has been deprecated.
+			 *
+			 * cmsg_level    cmsg_type      cmsg_data[]
+			 * ------------  ------------   ---------------------
+			 * IPPROTO_SCTP  SCTP_SNDINFO    struct sctp_sndinfo
+			 */
+			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_sndinfo)))
+				return -EINVAL;
+
+			cmsgs->sinfo = CMSG_DATA(cmsg);
+
+			if (cmsgs->sinfo->snd_flags &
+			    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
+			      SCTP_ABORT | SCTP_EOF))
+				return -EINVAL;
+			break;
 		default:
 			return -EINVAL;
 		}
 	}
+
 	return 0;
 }
 
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* RE: [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support
  2014-07-04 21:05 [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support Daniel Borkmann
@ 2014-07-07  8:46 ` David Laight
  2014-07-08  9:34 ` Daniel Borkmann
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: David Laight @ 2014-07-07  8:46 UTC (permalink / raw)
  To: linux-sctp

From: Daniel Borkmann
> From: Geir Ola Vaagland <geirola@gmail.com>
> 
> This patch implements section 5.3.4. of RFC6458, that is, support
> for 'SCTP Send Information Structure' (SCTP_SNDINFO) which can be
> placed into ancillary data cmsghdr structure for sendmsg() calls.
> 
> The sctp_sndinfo structure is defined as per RFC as below ...
> 
>   struct sctp_sndinfo {
>     uint16_t snd_sid;
>     uint16_t snd_flags;
>     uint32_t snd_ppid;
>     uint32_t snd_context;
>     sctp_assoc_t snd_assoc_id;
>   };
> 
> ... and supplied under cmsg_level IPPROTO_SCTP, cmsg_type
> SCTP_SNDINFO, while cmsg_data[] contains struct sctp_sndinfo.
> An sctp_sndinfo item always corresponds to the data in msg_iov.
> 
> Joint work with Daniel Borkmann.

A couple of performance changes ...

> 
> Signed-off-by: Geir Ola Vaagland <geirola@gmail.com>
> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
> ---
>  include/net/sctp/structs.h |  3 +-
>  include/uapi/linux/sctp.h  | 22 +++++++++++--
>  net/sctp/socket.c          | 77 ++++++++++++++++++++++++++++++++++------------
>  3 files changed, 79 insertions(+), 23 deletions(-)
> 
> diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
> index f38588b..7af9a0f 100644
> --- a/include/net/sctp/structs.h
> +++ b/include/net/sctp/structs.h
> @@ -1919,7 +1919,8 @@ struct sctp_chunk *sctp_get_ecne_prepend(struct sctp_association *asoc);
>  /* A convenience structure to parse out SCTP specific CMSGs. */
>  typedef struct sctp_cmsgs {
>  	struct sctp_initmsg *init;
> -	struct sctp_sndrcvinfo *info;
> +	struct sctp_sndrcvinfo *srinfo;
> +	struct sctp_sndinfo *sinfo;
>  } sctp_cmsgs_t;
> 
>  /* Structure for tracking memory objects */
> diff --git a/include/uapi/linux/sctp.h b/include/uapi/linux/sctp.h
> index 266022a..a387761 100644
> --- a/include/uapi/linux/sctp.h
> +++ b/include/uapi/linux/sctp.h
> @@ -154,6 +154,22 @@ struct sctp_sndrcvinfo {
>  	sctp_assoc_t sinfo_assoc_id;
>  };
> 
> +/* 5.3.4 SCTP Send Information Structure (SCTP_SNDINFO)
> + *
> + *   This cmsghdr structure specifies SCTP options for sendmsg().
> + *
> + *   cmsg_level    cmsg_type      cmsg_data[]
> + *   ------------  ------------   -------------------
> + *   IPPROTO_SCTP  SCTP_SNDINFO   struct sctp_sndinfo
> + */
> +struct sctp_sndinfo {
> +	__u16 snd_sid;
> +	__u16 snd_flags;
> +	__u32 snd_ppid;
> +	__u32 snd_context;
> +	sctp_assoc_t snd_assoc_id;
> +};
> +
>  /*
>   *  sinfo_flags: 16 bits (unsigned integer)
>   *
> @@ -177,10 +193,12 @@ typedef union {
> 
>  /* These are cmsg_types.  */
>  typedef enum sctp_cmsg_type {
> -	SCTP_INIT,              /* 5.2.1 SCTP Initiation Structure */
> +	SCTP_INIT,		/* 5.2.1 SCTP Initiation Structure */
>  #define SCTP_INIT	SCTP_INIT
> -	SCTP_SNDRCV,            /* 5.2.2 SCTP Header Information Structure */
> +	SCTP_SNDRCV,		/* 5.2.2 SCTP Header Information Structure */
>  #define SCTP_SNDRCV	SCTP_SNDRCV
> +	SCTP_SNDINFO,		/* 5.3.4 SCTP Send Information Structure */
> +#define SCTP_SNDINFO	SCTP_SNDINFO
>  } sctp_cmsg_t;
> 
>  /*
> diff --git a/net/sctp/socket.c b/net/sctp/socket.c
> index 4298996..d61729e 100644
> --- a/net/sctp/socket.c
> +++ b/net/sctp/socket.c
> @@ -1602,12 +1602,13 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
>  	struct sctp_initmsg *sinit;
>  	sctp_assoc_t associd = 0;
>  	sctp_cmsgs_t cmsgs = { NULL };
> -	int err;
>  	sctp_scope_t scope;
> -	long timeo;
> -	__u16 sinfo_flags = 0;
> +	bool fill_sinfo_ttl = false;
>  	struct sctp_datamsg *datamsg;
>  	int msg_flags = msg->msg_flags;
> +	__u16 sinfo_flags = 0;
> +	long timeo;
> +	int err;
> 
>  	err = 0;
>  	sp = sctp_sk(sk);
> @@ -1648,10 +1649,21 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
>  		msg_name = msg->msg_name;
>  	}
> 
> -	sinfo = cmsgs.info;
>  	sinit = cmsgs.init;
> +	if (cmsgs.sinfo != NULL) {
> +		memset(&default_sinfo, 0, sizeof(default_sinfo));

Is it necessary to zero the structure here?
Padding shouldn't matter since the kernel is reading the data.

Perhaps 'sinfo' should be change to be the shorter structure?
(Then it would be obvious that the 'receive' fields aren't being used.)

> +		default_sinfo.sinfo_stream = cmsgs.sinfo->snd_sid;
> +		default_sinfo.sinfo_flags = cmsgs.sinfo->snd_flags;
> +		default_sinfo.sinfo_ppid = cmsgs.sinfo->snd_ppid;
> +		default_sinfo.sinfo_context = cmsgs.sinfo->snd_context;
> +		default_sinfo.sinfo_assoc_id = cmsgs.sinfo->snd_assoc_id;
> 
> -	/* Did the user specify SNDRCVINFO?  */
> +		sinfo = &default_sinfo;
> +		fill_sinfo_ttl = true;
> +	} else {
> +		sinfo = cmsgs.srinfo;
> +	}
> +	/* Did the user specify SNDINFO/SNDRCVINFO? */
>  	if (sinfo) {
>  		sinfo_flags = sinfo->sinfo_flags;
>  		associd = sinfo->sinfo_assoc_id;
> @@ -1858,8 +1870,8 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
>  	pr_debug("%s: we have a valid association\n", __func__);
> 
>  	if (!sinfo) {
> -		/* If the user didn't specify SNDRCVINFO, make up one with
> -		 * some defaults.
> +		/* If the user didn't specify SNDINFO/SNDRCVINFO, make up
> +		 * one with some defaults.
>  		 */
>  		memset(&default_sinfo, 0, sizeof(default_sinfo));

Is this memset() needed?

>  		default_sinfo.sinfo_stream = asoc->default_stream;
> @@ -1868,7 +1880,13 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
>  		default_sinfo.sinfo_context = asoc->default_context;
>  		default_sinfo.sinfo_timetolive = asoc->default_timetolive;
>  		default_sinfo.sinfo_assoc_id = sctp_assoc2id(asoc);

Maybe keep the parameters in a 'sinfo' structure within the 'asoc' ?

	David
 
> +
>  		sinfo = &default_sinfo;
> +	} else if (fill_sinfo_ttl) {
> +		/* In case SNDINFO was specified, we still need to fill
> +		 * it with a default ttl from the assoc here.
> +		 */
> +		sinfo->sinfo_timetolive = asoc->default_timetolive;
>  	}
> 
>  	/* API 7.1.7, the sndbuf size per association bounds the
> @@ -6390,8 +6408,7 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
>  	struct cmsghdr *cmsg;
>  	struct msghdr *my_msg = (struct msghdr *)msg;
> 
> -	for (cmsg = CMSG_FIRSTHDR(msg);
> -	     cmsg != NULL;
> +	for (cmsg = CMSG_FIRSTHDR(msg); cmsg != NULL;
>  	     cmsg = CMSG_NXTHDR(my_msg, cmsg)) {
>  		if (!CMSG_OK(my_msg, cmsg))
>  			return -EINVAL;
> @@ -6404,7 +6421,7 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
>  		switch (cmsg->cmsg_type) {
>  		case SCTP_INIT:
>  			/* SCTP Socket API Extension
> -			 * 5.2.1 SCTP Initiation Structure (SCTP_INIT)
> +			 * 5.3.1 SCTP Initiation Structure (SCTP_INIT)
>  			 *
>  			 * This cmsghdr structure provides information for
>  			 * initializing new SCTP associations with sendmsg().
> @@ -6416,15 +6433,15 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
>  			 * ------------  ------------   ----------------------
>  			 * IPPROTO_SCTP  SCTP_INIT      struct sctp_initmsg
>  			 */
> -			if (cmsg->cmsg_len !> -			    CMSG_LEN(sizeof(struct sctp_initmsg)))
> +			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_initmsg)))
>  				return -EINVAL;
> -			cmsgs->init = (struct sctp_initmsg *)CMSG_DATA(cmsg);
> +
> +			cmsgs->init = CMSG_DATA(cmsg);
>  			break;
> 
>  		case SCTP_SNDRCV:
>  			/* SCTP Socket API Extension
> -			 * 5.2.2 SCTP Header Information Structure(SCTP_SNDRCV)
> +			 * 5.3.2 SCTP Header Information Structure(SCTP_SNDRCV)
>  			 *
>  			 * This cmsghdr structure specifies SCTP options for
>  			 * sendmsg() and describes SCTP header information
> @@ -6434,24 +6451,44 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
>  			 * ------------  ------------   ----------------------
>  			 * IPPROTO_SCTP  SCTP_SNDRCV    struct sctp_sndrcvinfo
>  			 */
> -			if (cmsg->cmsg_len !> -			    CMSG_LEN(sizeof(struct sctp_sndrcvinfo)))
> +			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_sndrcvinfo)))
>  				return -EINVAL;
> 
> -			cmsgs->info > -				(struct sctp_sndrcvinfo *)CMSG_DATA(cmsg);
> +			cmsgs->srinfo = CMSG_DATA(cmsg);
> 
> -			/* Minimally, validate the sinfo_flags. */
> -			if (cmsgs->info->sinfo_flags &
> +			if (cmsgs->srinfo->sinfo_flags &
>  			    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
>  			      SCTP_ABORT | SCTP_EOF))
>  				return -EINVAL;
>  			break;
> 
> +		case SCTP_SNDINFO:
> +			/* SCTP Socket API Extension
> +			 * 5.3.4 SCTP Send Information Structure (SCTP_SNDINFO)
> +			 *
> +			 * This cmsghdr structure specifies SCTP options for
> +			 * sendmsg(). This structure and SCTP_RCVINFO replaces
> +			 * SCTP_SNDRCV which has been deprecated.
> +			 *
> +			 * cmsg_level    cmsg_type      cmsg_data[]
> +			 * ------------  ------------   ---------------------
> +			 * IPPROTO_SCTP  SCTP_SNDINFO    struct sctp_sndinfo
> +			 */
> +			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_sndinfo)))
> +				return -EINVAL;
> +
> +			cmsgs->sinfo = CMSG_DATA(cmsg);
> +
> +			if (cmsgs->sinfo->snd_flags &
> +			    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
> +			      SCTP_ABORT | SCTP_EOF))
> +				return -EINVAL;
> +			break;
>  		default:
>  			return -EINVAL;
>  		}
>  	}
> +
>  	return 0;
>  }
> 
> --
> 1.7.11.7
> 
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support
  2014-07-04 21:05 [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support Daniel Borkmann
  2014-07-07  8:46 ` David Laight
@ 2014-07-08  9:34 ` Daniel Borkmann
  2014-07-08 10:47 ` David Laight
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Daniel Borkmann @ 2014-07-08  9:34 UTC (permalink / raw)
  To: linux-sctp

On 07/07/2014 10:46 AM, David Laight wrote:
...
>> @@ -1858,8 +1870,8 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
>>   	pr_debug("%s: we have a valid association\n", __func__);
>>
>>   	if (!sinfo) {
>> -		/* If the user didn't specify SNDRCVINFO, make up one with
>> -		 * some defaults.
>> +		/* If the user didn't specify SNDINFO/SNDRCVINFO, make up
>> +		 * one with some defaults.
>>   		 */
>>   		memset(&default_sinfo, 0, sizeof(default_sinfo));
>
> Is this memset() needed?

This patch is not changing it, so feel free to propose one. If you zero
out the remaining fields only used for rx, you should be able to drop it,
but I guess all these micro-optimizations won't be that visible when we
have much more fundamental things to solve in SCTP stack's performance.

>>   		default_sinfo.sinfo_stream = asoc->default_stream;
>> @@ -1868,7 +1880,13 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
>>   		default_sinfo.sinfo_context = asoc->default_context;
>>   		default_sinfo.sinfo_timetolive = asoc->default_timetolive;
>>   		default_sinfo.sinfo_assoc_id = sctp_assoc2id(asoc);
>
> Maybe keep the parameters in a 'sinfo' structure within the 'asoc' ?

I think asocs and other SCTP structs are already 'fat' and use up too
many cachelines, they rather need a diet and some careful analysis on
access patterns.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support
  2014-07-04 21:05 [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support Daniel Borkmann
  2014-07-07  8:46 ` David Laight
  2014-07-08  9:34 ` Daniel Borkmann
@ 2014-07-08 10:47 ` David Laight
  2014-07-08 13:30 ` David Laight
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: David Laight @ 2014-07-08 10:47 UTC (permalink / raw)
  To: linux-sctp

From: Daniel Borkmann
> On 07/07/2014 10:46 AM, David Laight wrote:
> ...
> >> @@ -1858,8 +1870,8 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
> >>   	pr_debug("%s: we have a valid association\n", __func__);
> >>
> >>   	if (!sinfo) {
> >> -		/* If the user didn't specify SNDRCVINFO, make up one with
> >> -		 * some defaults.
> >> +		/* If the user didn't specify SNDINFO/SNDRCVINFO, make up
> >> +		 * one with some defaults.
> >>   		 */
> >>   		memset(&default_sinfo, 0, sizeof(default_sinfo));
> >
> > Is this memset() needed?
> 
> This patch is not changing it, so feel free to propose one. If you zero
> out the remaining fields only used for rx, you should be able to drop it,
> but I guess all these micro-optimizations won't be that visible when we
> have much more fundamental things to solve in SCTP stack's performance.

Yes, I'm not even sure the protocol itself was designed to be code or
network bandwidth efficient.
The Linux implementation certainly doesn't give the impression of being
written for code speed. Never mind worries about cache line occupancy.

I suspect the memset/memcpy cost more than the cache line alignment issues
and gains from annotating with un/likely.

The largest gain probably comes from killing the 'command queue'.
Some actions do need deferring - for instance sending SACK should be deferred
until all the data chunks have been processed.
Once that is gone, other things might be more obvious.

	David




^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support
  2014-07-04 21:05 [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support Daniel Borkmann
                   ` (2 preceding siblings ...)
  2014-07-08 10:47 ` David Laight
@ 2014-07-08 13:30 ` David Laight
  2014-07-09 13:59 ` Vlad Yasevich
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: David Laight @ 2014-07-08 13:30 UTC (permalink / raw)
  To: linux-sctp

From: David Laight
> Some actions do need deferring - for instance sending SACK should be deferred
> until all the data chunks have been processed.

That does seem to happen with a 3.14 kernel.
My 'other' test system in running 2.6.26 and probably sends multiple sacks
for packets containing a lot of data chunks.

	David




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support
  2014-07-04 21:05 [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support Daniel Borkmann
                   ` (3 preceding siblings ...)
  2014-07-08 13:30 ` David Laight
@ 2014-07-09 13:59 ` Vlad Yasevich
  2014-07-09 14:57 ` David Laight
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Vlad Yasevich @ 2014-07-09 13:59 UTC (permalink / raw)
  To: linux-sctp

On 07/08/2014 09:30 AM, David Laight wrote:
> From: David Laight
>> Some actions do need deferring - for instance sending SACK should be deferred
>> until all the data chunks have been processed.
> 
> That does seem to happen with a 3.14 kernel.
> My 'other' test system in running 2.6.26 and probably sends multiple sacks
> for packets containing a lot of data chunks.
> 
> 	David

That shouldn't happen even in 2.6.26.  SACKs were always per packet, not per chunk

-vlad


^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support
  2014-07-04 21:05 [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support Daniel Borkmann
                   ` (4 preceding siblings ...)
  2014-07-09 13:59 ` Vlad Yasevich
@ 2014-07-09 14:57 ` David Laight
  2014-07-09 15:19 ` Vlad Yasevich
  2014-07-09 15:44 ` Michael Tuexen
  7 siblings, 0 replies; 9+ messages in thread
From: David Laight @ 2014-07-09 14:57 UTC (permalink / raw)
  To: linux-sctp

> > My 'other' test system in running 2.6.26 and probably sends multiple sacks
> > for packets containing a lot of data chunks.
> >
> > 	David
> 
> That shouldn't happen even in 2.6.26.  SACKs were always per packet, not per chunk

There seem to be a lot of SACKs at the bottom of the trace below.
Maybe they are being sent as the application reads the data off the
socket, rather than directly in response to the received data.

tcpdump output edited to shorten the lines.
All the [SACK] have [#gap acks] [#dup tsns 0]
All the [DATA] have [PPIDx3]
A lot of earlier trace deleted, it all looks much the same.

Trace taken on the sending system (dsl-a) running a 3.15(ish) kernel,
ss7-3 is runnin 2.6.18.

10:14:49.663034 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 622] [SID: 3] [SSEQ 2507] 
10:14:49.663038 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 623] [SID: 4] [SSEQ 2507] 
10:14:49.663040 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 624] [SID: 1] [SSEQ 2508] 
10:14:49.663041 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 625] [SID: 2] [SSEQ 2508] 
10:14:49.663043 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 626] [SID: 3] [SSEQ 2508] 
10:14:49.663044 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 627] [SID: 4] [SSEQ 2508] 
10:14:49.663045 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 628] [SID: 1] [SSEQ 2509] 
10:14:49.663118 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 629] [SID: 2] [SSEQ 2509] 
10:14:49.663123 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 630] [SID: 3] [SSEQ 2509] 
10:14:49.663125 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 631] [SID: 4] [SSEQ 2509] 
10:14:49.663126 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 632] [SID: 1] [SSEQ 2510] 
10:14:49.663173 ss7-3 > dsl-a: [SACK] [cum ack 568] [a_rwnd 62020]
10:14:49.663189 ss7-3 > dsl-a: [SACK] [cum ack 570] [a_rwnd 62020]
10:14:49.663197 ss7-3 > dsl-a: [SACK] [cum ack 572] [a_rwnd 61724]
10:14:49.663210 ss7-3 > dsl-a: [SACK] [cum ack 574] [a_rwnd 61428]
10:14:49.663217 ss7-3 > dsl-a: [SACK] [cum ack 576] [a_rwnd 61132]
10:14:49.663229 ss7-3 > dsl-a: [SACK] [cum ack 578] [a_rwnd 60836]
10:14:49.663246 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 633] [SID: 2] [SSEQ 2510] 
10:14:49.663250 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 634] [SID: 3] [SSEQ 2510] 
10:14:49.663251 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 635] [SID: 4] [SSEQ 2510] 
10:14:49.663252 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 636] [SID: 1] [SSEQ 2511] 
10:14:49.663254 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 637] [SID: 2] [SSEQ 2511] 
10:14:49.663255 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 638] [SID: 3] [SSEQ 2511] 
10:14:49.663257 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 639] [SID: 4] [SSEQ 2511] 
10:14:49.663305 ss7-3 > dsl-a: [SACK] [cum ack 579] [a_rwnd 62464]
10:14:49.663331 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 640] [SID: 1] [SSEQ 2512] 
10:14:49.663335 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 641] [SID: 2] [SSEQ 2512] 
10:14:49.663336 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 642] [SID: 3] [SSEQ 2512] 
10:14:49.663337 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 643] [SID: 4] [SSEQ 2512] 
10:14:49.663435 ss7-3 > dsl-a: [SACK] [cum ack 581] [a_rwnd 62168]
10:14:49.663447 ss7-3 > dsl-a: [SACK] [cum ack 583] [a_rwnd 61872]
10:14:49.663454 ss7-3 > dsl-a: [SACK] [cum ack 585] [a_rwnd 61872]
10:14:49.663465 ss7-3 > dsl-a: [SACK] [cum ack 587] [a_rwnd 61872]
10:14:49.663473 ss7-3 > dsl-a: [SACK] [cum ack 589] [a_rwnd 61576]
10:14:49.663485 ss7-3 > dsl-a: [SACK] [cum ack 591] [a_rwnd 61280]
10:14:49.663498 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 644] [SID: 1] [SSEQ 2513] 
10:14:49.663505 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 645] [SID: 2] [SSEQ 2513] 
10:14:49.663507 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 646] [SID: 3] [SSEQ 2513] 
10:14:49.663510 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 647] [SID: 4] [SSEQ 2513] 
10:14:49.663512 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 648] [SID: 1] [SSEQ 2514] 
10:14:49.663514 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 649] [SID: 2] [SSEQ 2514] ,
                            (2) [DATA] (B)(E) [TSN: 650] [SID: 3] [SSEQ 2514] ,
                            (3) [DATA] (B)(E) [TSN: 651] [SID: 4] [SSEQ 2514] ,
                            (4) [DATA] (B)(E) [TSN: 652] [SID: 1] [SSEQ 2515] 
10:14:49.663515 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 653] [SID: 2] [SSEQ 2515] ,
                            (2) [DATA] (B)(E) [TSN: 654] [SID: 3] [SSEQ 2515] ,
                            (3) [DATA] (B)(E) [TSN: 655] [SID: 4] [SSEQ 2515] ,
                            (4) [DATA] (B)(E) [TSN: 656] [SID: 1] [SSEQ 2516] 
10:14:49.663517 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 657] [SID: 2] [SSEQ 2516] ,
                            (2) [DATA] (B)(E) [TSN: 658] [SID: 3] [SSEQ 2516] ,
                            (3) [DATA] (B)(E) [TSN: 659] [SID: 4] [SSEQ 2516] ,
                            (4) [DATA] (B)(E) [TSN: 660] [SID: 1] [SSEQ 2517] 
10:14:49.663519 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 661] [SID: 2] [SSEQ 2517] ,
                            (2) [DATA] (B)(E) [TSN: 662] [SID: 3] [SSEQ 2517] ,
                            (3) [DATA] (B)(E) [TSN: 663] [SID: 4] [SSEQ 2517] ,
                            (4) [DATA] (B)(E) [TSN: 664] [SID: 1] [SSEQ 2518] 
10:14:49.663523 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 665] [SID: 2] [SSEQ 2518] ,
                            (2) [DATA] (B)(E) [TSN: 666] [SID: 3] [SSEQ 2518] ,
                            (3) [DATA] (B)(E) [TSN: 667] [SID: 4] [SSEQ 2518] ,
                            (4) [DATA] (B)(E) [TSN: 668] [SID: 1] [SSEQ 2519] 
10:14:49.663524 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 669] [SID: 2] [SSEQ 2519] ,
                            (2) [DATA] (B)(E) [TSN: 670] [SID: 3] [SSEQ 2519] ,
                            (3) [DATA] (B)(E) [TSN: 671] [SID: 4] [SSEQ 2519] ,
                            (4) [DATA] (B)(E) [TSN: 672] [SID: 1] [SSEQ 2520] 
10:14:49.663627 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 673] [SID: 2] [SSEQ 2520] ,
                            (2) [DATA] (B)(E) [TSN: 674] [SID: 3] [SSEQ 2520] ,
                            (3) [DATA] (B)(E) [TSN: 675] [SID: 4] [SSEQ 2520] ,
                            (4) [DATA] (B)(E) [TSN: 676] [SID: 1] [SSEQ 2521] 
10:14:49.663631 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 677] [SID: 2] [SSEQ 2521] ,
                            (2) [DATA] (B)(E) [TSN: 678] [SID: 3] [SSEQ 2521] 
10:14:49.663632 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 679] [SID: 4] [SSEQ 2521] ,
                            (2) [DATA] (B)(E) [TSN: 680] [SID: 1] [SSEQ 2522] ,
                            (3) [DATA] (B)(E) [TSN: 681] [SID: 2] [SSEQ 2522] ,
                            (4) [DATA] (B)(E) [TSN: 682] [SID: 3] [SSEQ 2522] 
10:14:49.663633 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 683] [SID: 4] [SSEQ 2522] ,
                            (2) [DATA] (B)(E) [TSN: 684] [SID: 1] [SSEQ 2523] ,
                            (3) [DATA] (B)(E) [TSN: 685] [SID: 2] [SSEQ 2523] ,
                            (4) [DATA] (B)(E) [TSN: 686] [SID: 3] [SSEQ 2523] 
10:14:49.663634 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 687] [SID: 4] [SSEQ 2523] ,
                            (2) [DATA] (B)(E) [TSN: 688] [SID: 1] [SSEQ 2524] ,
                            (3) [DATA] (B)(E) [TSN: 689] [SID: 2] [SSEQ 2524] ,
                            (4) [DATA] (B)(E) [TSN: 690] [SID: 3] [SSEQ 2524] 
10:14:49.663674 ss7-3 > dsl-a: [SACK] [cum ack 593] [a_rwnd 61280]
10:14:49.663687 ss7-3 > dsl-a: [SACK] [cum ack 595] [a_rwnd 61280]
10:14:49.663695 ss7-3 > dsl-a: [SACK] [cum ack 597] [a_rwnd 61280]
10:14:49.663706 ss7-3 > dsl-a: [SACK] [cum ack 599] [a_rwnd 61280]
10:14:49.663715 ss7-3 > dsl-a: [SACK] [cum ack 601] [a_rwnd 61132]
10:14:49.663726 ss7-3 > dsl-a: [SACK] [cum ack 603] [a_rwnd 60836]
10:14:49.663729 ss7-3 > dsl-a: [SACK] [cum ack 605] [a_rwnd 60540]
10:14:49.663744 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 691] [SID: 4] [SSEQ 2524] 
10:14:49.663834 ss7-3 > dsl-a: [SACK] [cum ack 606] [a_rwnd 62168]
10:14:49.663928 ss7-3 > dsl-a: [SACK] [cum ack 608] [a_rwnd 62168]
10:14:49.663939 ss7-3 > dsl-a: [SACK] [cum ack 610] [a_rwnd 62020]
10:14:49.663946 ss7-3 > dsl-a: [SACK] [cum ack 612] [a_rwnd 61724]
10:14:49.663957 ss7-3 > dsl-a: [SACK] [cum ack 614] [a_rwnd 61428]
10:14:49.663964 ss7-3 > dsl-a: [SACK] [cum ack 616] [a_rwnd 61132]
10:14:49.663976 ss7-3 > dsl-a: [SACK] [cum ack 618] [a_rwnd 61132]
10:14:49.664183 ss7-3 > dsl-a: [SACK] [cum ack 620] [a_rwnd 61132]
10:14:49.664194 ss7-3 > dsl-a: [SACK] [cum ack 622] [a_rwnd 61132]
10:14:49.664200 ss7-3 > dsl-a: [SACK] [cum ack 624] [a_rwnd 61132]
10:14:49.664209 ss7-3 > dsl-a: [SACK] [cum ack 626] [a_rwnd 61132]
10:14:49.664215 ss7-3 > dsl-a: [SACK] [cum ack 628] [a_rwnd 60984]
10:14:49.664224 ss7-3 > dsl-a: [SACK] [cum ack 630] [a_rwnd 60688]
10:14:49.664232 ss7-3 > dsl-a: [SACK] [cum ack 632] [a_rwnd 60392]
10:14:49.664320 ss7-3 > dsl-a: [SACK] [cum ack 632] [a_rwnd 62020]
10:14:49.664429 ss7-3 > dsl-a: [SACK] [cum ack 634] [a_rwnd 62020]
10:14:49.664439 ss7-3 > dsl-a: [SACK] [cum ack 636] [a_rwnd 62020]
10:14:49.664446 ss7-3 > dsl-a: [SACK] [cum ack 638] [a_rwnd 61724]
10:14:49.664457 ss7-3 > dsl-a: [SACK] [cum ack 640] [a_rwnd 61428]
10:14:49.664463 ss7-3 > dsl-a: [SACK] [cum ack 642] [a_rwnd 61132]
10:14:49.664473 ss7-3 > dsl-a: [SACK] [cum ack 644] [a_rwnd 60836]
10:14:49.664479 ss7-3 > dsl-a: [SACK] [cum ack 644] [a_rwnd 62464]
10:14:49.664676 ss7-3 > dsl-a: [SACK] [cum ack 646] [a_rwnd 62168]
10:14:49.664687 ss7-3 > dsl-a: [SACK] [cum ack 648] [a_rwnd 61872]
10:14:49.664693 ss7-3 > dsl-a: [SACK] [cum ack 656] [a_rwnd 60688]
10:14:49.664825 ss7-3 > dsl-a: [SACK] [cum ack 660] [a_rwnd 62316]
10:14:49.664945 ss7-3 > dsl-a: [SACK] [cum ack 668] [a_rwnd 61280]
10:14:49.664962 ss7-3 > dsl-a: [SACK] [cum ack 676] [a_rwnd 60096]
10:14:49.664979 ss7-3 > dsl-a: [SACK] [cum ack 676] [a_rwnd 61724]
10:14:49.665179 ss7-3 > dsl-a: [SACK] [cum ack 682] [a_rwnd 61724]
10:14:49.665193 ss7-3 > dsl-a: [SACK] [cum ack 690] [a_rwnd 61724]
10:14:49.864258 ss7-3 > dsl-a: [SACK] [cum ack 691] [a_rwnd 61724]





^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support
  2014-07-04 21:05 [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support Daniel Borkmann
                   ` (5 preceding siblings ...)
  2014-07-09 14:57 ` David Laight
@ 2014-07-09 15:19 ` Vlad Yasevich
  2014-07-09 15:44 ` Michael Tuexen
  7 siblings, 0 replies; 9+ messages in thread
From: Vlad Yasevich @ 2014-07-09 15:19 UTC (permalink / raw)
  To: linux-sctp

On 07/09/2014 10:57 AM, David Laight wrote:
>>> My 'other' test system in running 2.6.26 and probably sends multiple sacks
>>> for packets containing a lot of data chunks.
>>>
>>> 	David
>>
>> That shouldn't happen even in 2.6.26.  SACKs were always per packet, not per chunk
> 
> There seem to be a lot of SACKs at the bottom of the trace below.
> Maybe they are being sent as the application reads the data off the
> socket, rather than directly in response to the received data.
> 

Looks more of less correct if you correlate cum ack values to the data tsns.

> tcpdump output edited to shorten the lines.
> All the [SACK] have [#gap acks] [#dup tsns 0]
> All the [DATA] have [PPIDx3]
> A lot of earlier trace deleted, it all looks much the same.
> 
> Trace taken on the sending system (dsl-a) running a 3.15(ish) kernel,
> ss7-3 is runnin 2.6.18.
> 
> 10:14:49.663034 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 622] [SID: 3] [SSEQ 2507] 
> 10:14:49.663038 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 623] [SID: 4] [SSEQ 2507] 
> 10:14:49.663040 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 624] [SID: 1] [SSEQ 2508] 
> 10:14:49.663041 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 625] [SID: 2] [SSEQ 2508] 
> 10:14:49.663043 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 626] [SID: 3] [SSEQ 2508] 
> 10:14:49.663044 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 627] [SID: 4] [SSEQ 2508] 
> 10:14:49.663045 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 628] [SID: 1] [SSEQ 2509] 
> 10:14:49.663118 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 629] [SID: 2] [SSEQ 2509] 
> 10:14:49.663123 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 630] [SID: 3] [SSEQ 2509] 
> 10:14:49.663125 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 631] [SID: 4] [SSEQ 2509] 
> 10:14:49.663126 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 632] [SID: 1] [SSEQ 2510] 
> 10:14:49.663173 ss7-3 > dsl-a: [SACK] [cum ack 568] [a_rwnd 62020]
> 10:14:49.663189 ss7-3 > dsl-a: [SACK] [cum ack 570] [a_rwnd 62020]
> 10:14:49.663197 ss7-3 > dsl-a: [SACK] [cum ack 572] [a_rwnd 61724]
> 10:14:49.663210 ss7-3 > dsl-a: [SACK] [cum ack 574] [a_rwnd 61428]
> 10:14:49.663217 ss7-3 > dsl-a: [SACK] [cum ack 576] [a_rwnd 61132]
> 10:14:49.663229 ss7-3 > dsl-a: [SACK] [cum ack 578] [a_rwnd 60836]
> 10:14:49.663246 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 633] [SID: 2] [SSEQ 2510] 
> 10:14:49.663250 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 634] [SID: 3] [SSEQ 2510] 
> 10:14:49.663251 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 635] [SID: 4] [SSEQ 2510] 
> 10:14:49.663252 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 636] [SID: 1] [SSEQ 2511] 
> 10:14:49.663254 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 637] [SID: 2] [SSEQ 2511] 
> 10:14:49.663255 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 638] [SID: 3] [SSEQ 2511] 
> 10:14:49.663257 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 639] [SID: 4] [SSEQ 2511] 
> 10:14:49.663305 ss7-3 > dsl-a: [SACK] [cum ack 579] [a_rwnd 62464]
> 10:14:49.663331 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 640] [SID: 1] [SSEQ 2512] 
> 10:14:49.663335 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 641] [SID: 2] [SSEQ 2512] 
> 10:14:49.663336 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 642] [SID: 3] [SSEQ 2512] 
> 10:14:49.663337 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 643] [SID: 4] [SSEQ 2512] 
> 10:14:49.663435 ss7-3 > dsl-a: [SACK] [cum ack 581] [a_rwnd 62168]
> 10:14:49.663447 ss7-3 > dsl-a: [SACK] [cum ack 583] [a_rwnd 61872]
> 10:14:49.663454 ss7-3 > dsl-a: [SACK] [cum ack 585] [a_rwnd 61872]
> 10:14:49.663465 ss7-3 > dsl-a: [SACK] [cum ack 587] [a_rwnd 61872]
> 10:14:49.663473 ss7-3 > dsl-a: [SACK] [cum ack 589] [a_rwnd 61576]
> 10:14:49.663485 ss7-3 > dsl-a: [SACK] [cum ack 591] [a_rwnd 61280]
> 10:14:49.663498 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 644] [SID: 1] [SSEQ 2513] 
> 10:14:49.663505 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 645] [SID: 2] [SSEQ 2513] 
> 10:14:49.663507 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 646] [SID: 3] [SSEQ 2513] 
> 10:14:49.663510 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 647] [SID: 4] [SSEQ 2513] 
> 10:14:49.663512 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 648] [SID: 1] [SSEQ 2514] 
> 10:14:49.663514 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 649] [SID: 2] [SSEQ 2514] ,
>                             (2) [DATA] (B)(E) [TSN: 650] [SID: 3] [SSEQ 2514] ,
>                             (3) [DATA] (B)(E) [TSN: 651] [SID: 4] [SSEQ 2514] ,
>                             (4) [DATA] (B)(E) [TSN: 652] [SID: 1] [SSEQ 2515] 
> 10:14:49.663515 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 653] [SID: 2] [SSEQ 2515] ,
>                             (2) [DATA] (B)(E) [TSN: 654] [SID: 3] [SSEQ 2515] ,
>                             (3) [DATA] (B)(E) [TSN: 655] [SID: 4] [SSEQ 2515] ,
>                             (4) [DATA] (B)(E) [TSN: 656] [SID: 1] [SSEQ 2516] 
> 10:14:49.663517 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 657] [SID: 2] [SSEQ 2516] ,
>                             (2) [DATA] (B)(E) [TSN: 658] [SID: 3] [SSEQ 2516] ,
>                             (3) [DATA] (B)(E) [TSN: 659] [SID: 4] [SSEQ 2516] ,
>                             (4) [DATA] (B)(E) [TSN: 660] [SID: 1] [SSEQ 2517] 
> 10:14:49.663519 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 661] [SID: 2] [SSEQ 2517] ,
>                             (2) [DATA] (B)(E) [TSN: 662] [SID: 3] [SSEQ 2517] ,
>                             (3) [DATA] (B)(E) [TSN: 663] [SID: 4] [SSEQ 2517] ,
>                             (4) [DATA] (B)(E) [TSN: 664] [SID: 1] [SSEQ 2518] 
> 10:14:49.663523 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 665] [SID: 2] [SSEQ 2518] ,
>                             (2) [DATA] (B)(E) [TSN: 666] [SID: 3] [SSEQ 2518] ,
>                             (3) [DATA] (B)(E) [TSN: 667] [SID: 4] [SSEQ 2518] ,
>                             (4) [DATA] (B)(E) [TSN: 668] [SID: 1] [SSEQ 2519] 
> 10:14:49.663524 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 669] [SID: 2] [SSEQ 2519] ,
>                             (2) [DATA] (B)(E) [TSN: 670] [SID: 3] [SSEQ 2519] ,
>                             (3) [DATA] (B)(E) [TSN: 671] [SID: 4] [SSEQ 2519] ,
>                             (4) [DATA] (B)(E) [TSN: 672] [SID: 1] [SSEQ 2520] 
> 10:14:49.663627 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 673] [SID: 2] [SSEQ 2520] ,
>                             (2) [DATA] (B)(E) [TSN: 674] [SID: 3] [SSEQ 2520] ,
>                             (3) [DATA] (B)(E) [TSN: 675] [SID: 4] [SSEQ 2520] ,
>                             (4) [DATA] (B)(E) [TSN: 676] [SID: 1] [SSEQ 2521] 
> 10:14:49.663631 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 677] [SID: 2] [SSEQ 2521] ,
>                             (2) [DATA] (B)(E) [TSN: 678] [SID: 3] [SSEQ 2521] 
> 10:14:49.663632 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 679] [SID: 4] [SSEQ 2521] ,
>                             (2) [DATA] (B)(E) [TSN: 680] [SID: 1] [SSEQ 2522] ,
>                             (3) [DATA] (B)(E) [TSN: 681] [SID: 2] [SSEQ 2522] ,
>                             (4) [DATA] (B)(E) [TSN: 682] [SID: 3] [SSEQ 2522] 
> 10:14:49.663633 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 683] [SID: 4] [SSEQ 2522] ,
>                             (2) [DATA] (B)(E) [TSN: 684] [SID: 1] [SSEQ 2523] ,
>                             (3) [DATA] (B)(E) [TSN: 685] [SID: 2] [SSEQ 2523] ,
>                             (4) [DATA] (B)(E) [TSN: 686] [SID: 3] [SSEQ 2523] 
> 10:14:49.663634 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 687] [SID: 4] [SSEQ 2523] ,
>                             (2) [DATA] (B)(E) [TSN: 688] [SID: 1] [SSEQ 2524] ,
>                             (3) [DATA] (B)(E) [TSN: 689] [SID: 2] [SSEQ 2524] ,
>                             (4) [DATA] (B)(E) [TSN: 690] [SID: 3] [SSEQ 2524] 
> 10:14:49.663674 ss7-3 > dsl-a: [SACK] [cum ack 593] [a_rwnd 61280]
> 10:14:49.663687 ss7-3 > dsl-a: [SACK] [cum ack 595] [a_rwnd 61280]
> 10:14:49.663695 ss7-3 > dsl-a: [SACK] [cum ack 597] [a_rwnd 61280]
> 10:14:49.663706 ss7-3 > dsl-a: [SACK] [cum ack 599] [a_rwnd 61280]
> 10:14:49.663715 ss7-3 > dsl-a: [SACK] [cum ack 601] [a_rwnd 61132]
> 10:14:49.663726 ss7-3 > dsl-a: [SACK] [cum ack 603] [a_rwnd 60836]
> 10:14:49.663729 ss7-3 > dsl-a: [SACK] [cum ack 605] [a_rwnd 60540]
> 10:14:49.663744 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 691] [SID: 4] [SSEQ 2524] 
> 10:14:49.663834 ss7-3 > dsl-a: [SACK] [cum ack 606] [a_rwnd 62168]
> 10:14:49.663928 ss7-3 > dsl-a: [SACK] [cum ack 608] [a_rwnd 62168]
> 10:14:49.663939 ss7-3 > dsl-a: [SACK] [cum ack 610] [a_rwnd 62020]
> 10:14:49.663946 ss7-3 > dsl-a: [SACK] [cum ack 612] [a_rwnd 61724]
> 10:14:49.663957 ss7-3 > dsl-a: [SACK] [cum ack 614] [a_rwnd 61428]
> 10:14:49.663964 ss7-3 > dsl-a: [SACK] [cum ack 616] [a_rwnd 61132]
> 10:14:49.663976 ss7-3 > dsl-a: [SACK] [cum ack 618] [a_rwnd 61132]
> 10:14:49.664183 ss7-3 > dsl-a: [SACK] [cum ack 620] [a_rwnd 61132]

Don't see the data for the above so can't tell if they are right or not.

> 10:14:49.664194 ss7-3 > dsl-a: [SACK] [cum ack 622] [a_rwnd 61132]
> 10:14:49.664200 ss7-3 > dsl-a: [SACK] [cum ack 624] [a_rwnd 61132]
> 10:14:49.664209 ss7-3 > dsl-a: [SACK] [cum ack 626] [a_rwnd 61132]
> 10:14:49.664215 ss7-3 > dsl-a: [SACK] [cum ack 628] [a_rwnd 60984]
> 10:14:49.664224 ss7-3 > dsl-a: [SACK] [cum ack 630] [a_rwnd 60688]
> 10:14:49.664232 ss7-3 > dsl-a: [SACK] [cum ack 632] [a_rwnd 60392]
> 10:14:49.664320 ss7-3 > dsl-a: [SACK] [cum ack 632] [a_rwnd 62020]
> 10:14:49.664429 ss7-3 > dsl-a: [SACK] [cum ack 634] [a_rwnd 62020]
> 10:14:49.664439 ss7-3 > dsl-a: [SACK] [cum ack 636] [a_rwnd 62020]
> 10:14:49.664446 ss7-3 > dsl-a: [SACK] [cum ack 638] [a_rwnd 61724]
> 10:14:49.664457 ss7-3 > dsl-a: [SACK] [cum ack 640] [a_rwnd 61428]
> 10:14:49.664463 ss7-3 > dsl-a: [SACK] [cum ack 642] [a_rwnd 61132]
> 10:14:49.664473 ss7-3 > dsl-a: [SACK] [cum ack 644] [a_rwnd 60836]
> 10:14:49.664479 ss7-3 > dsl-a: [SACK] [cum ack 644] [a_rwnd 62464]
> 10:14:49.664676 ss7-3 > dsl-a: [SACK] [cum ack 646] [a_rwnd 62168]
> 10:14:49.664687 ss7-3 > dsl-a: [SACK] [cum ack 648] [a_rwnd 61872]

All of the above chunks were send as individual packets so they are
acked every 2 packets.

> 10:14:49.664693 ss7-3 > dsl-a: [SACK] [cum ack 656] [a_rwnd 60688]
> 10:14:49.664825 ss7-3 > dsl-a: [SACK] [cum ack 660] [a_rwnd 62316]
> 10:14:49.664945 ss7-3 > dsl-a: [SACK] [cum ack 668] [a_rwnd 61280]
> 10:14:49.664962 ss7-3 > dsl-a: [SACK] [cum ack 676] [a_rwnd 60096]
> 10:14:49.664979 ss7-3 > dsl-a: [SACK] [cum ack 676] [a_rwnd 61724]
> 10:14:49.665179 ss7-3 > dsl-a: [SACK] [cum ack 682] [a_rwnd 61724]
> 10:14:49.665193 ss7-3 > dsl-a: [SACK] [cum ack 690] [a_rwnd 61724]
> 10:14:49.864258 ss7-3 > dsl-a: [SACK] [cum ack 691] [a_rwnd 61724]

Starting with TSN 649 you have bundling and the first two packets contains
649-656.  Note the first cum ack is 656 in this block.  If you look above,
the SACKs are still for every other packet.

There are a few repeats (like 2 sacks with cum ack 676 where a_rwnd grows).
Those are just window update sacks.  We did used to send window updates much more
often then we do now.

-vlad

> 
> 
> 
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support
  2014-07-04 21:05 [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support Daniel Borkmann
                   ` (6 preceding siblings ...)
  2014-07-09 15:19 ` Vlad Yasevich
@ 2014-07-09 15:44 ` Michael Tuexen
  7 siblings, 0 replies; 9+ messages in thread
From: Michael Tuexen @ 2014-07-09 15:44 UTC (permalink / raw)
  To: linux-sctp

On 09 Jul 2014, at 16:57, David Laight <David.Laight@ACULAB.COM> wrote:

>>> My 'other' test system in running 2.6.26 and probably sends multiple sacks
>>> for packets containing a lot of data chunks.
>>> 
>>> 	David
>> 
>> That shouldn't happen even in 2.6.26.  SACKs were always per packet, not per chunk
> 
> There seem to be a lot of SACKs at the bottom of the trace below.
> Maybe they are being sent as the application reads the data off the
> socket, rather than directly in response to the received data.
Correct. These are all window updates. They shouldn't be that many.

Best regards
Michael
> 
> tcpdump output edited to shorten the lines.
> All the [SACK] have [#gap acks] [#dup tsns 0]
> All the [DATA] have [PPIDx3]
> A lot of earlier trace deleted, it all looks much the same.
> 
> Trace taken on the sending system (dsl-a) running a 3.15(ish) kernel,
> ss7-3 is runnin 2.6.18.
> 
> 10:14:49.663034 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 622] [SID: 3] [SSEQ 2507] 
> 10:14:49.663038 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 623] [SID: 4] [SSEQ 2507] 
> 10:14:49.663040 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 624] [SID: 1] [SSEQ 2508] 
> 10:14:49.663041 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 625] [SID: 2] [SSEQ 2508] 
> 10:14:49.663043 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 626] [SID: 3] [SSEQ 2508] 
> 10:14:49.663044 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 627] [SID: 4] [SSEQ 2508] 
> 10:14:49.663045 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 628] [SID: 1] [SSEQ 2509] 
> 10:14:49.663118 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 629] [SID: 2] [SSEQ 2509] 
> 10:14:49.663123 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 630] [SID: 3] [SSEQ 2509] 
> 10:14:49.663125 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 631] [SID: 4] [SSEQ 2509] 
> 10:14:49.663126 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 632] [SID: 1] [SSEQ 2510] 
> 10:14:49.663173 ss7-3 > dsl-a: [SACK] [cum ack 568] [a_rwnd 62020]
> 10:14:49.663189 ss7-3 > dsl-a: [SACK] [cum ack 570] [a_rwnd 62020]
> 10:14:49.663197 ss7-3 > dsl-a: [SACK] [cum ack 572] [a_rwnd 61724]
> 10:14:49.663210 ss7-3 > dsl-a: [SACK] [cum ack 574] [a_rwnd 61428]
> 10:14:49.663217 ss7-3 > dsl-a: [SACK] [cum ack 576] [a_rwnd 61132]
> 10:14:49.663229 ss7-3 > dsl-a: [SACK] [cum ack 578] [a_rwnd 60836]
> 10:14:49.663246 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 633] [SID: 2] [SSEQ 2510] 
> 10:14:49.663250 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 634] [SID: 3] [SSEQ 2510] 
> 10:14:49.663251 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 635] [SID: 4] [SSEQ 2510] 
> 10:14:49.663252 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 636] [SID: 1] [SSEQ 2511] 
> 10:14:49.663254 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 637] [SID: 2] [SSEQ 2511] 
> 10:14:49.663255 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 638] [SID: 3] [SSEQ 2511] 
> 10:14:49.663257 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 639] [SID: 4] [SSEQ 2511] 
> 10:14:49.663305 ss7-3 > dsl-a: [SACK] [cum ack 579] [a_rwnd 62464]
> 10:14:49.663331 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 640] [SID: 1] [SSEQ 2512] 
> 10:14:49.663335 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 641] [SID: 2] [SSEQ 2512] 
> 10:14:49.663336 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 642] [SID: 3] [SSEQ 2512] 
> 10:14:49.663337 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 643] [SID: 4] [SSEQ 2512] 
> 10:14:49.663435 ss7-3 > dsl-a: [SACK] [cum ack 581] [a_rwnd 62168]
> 10:14:49.663447 ss7-3 > dsl-a: [SACK] [cum ack 583] [a_rwnd 61872]
> 10:14:49.663454 ss7-3 > dsl-a: [SACK] [cum ack 585] [a_rwnd 61872]
> 10:14:49.663465 ss7-3 > dsl-a: [SACK] [cum ack 587] [a_rwnd 61872]
> 10:14:49.663473 ss7-3 > dsl-a: [SACK] [cum ack 589] [a_rwnd 61576]
> 10:14:49.663485 ss7-3 > dsl-a: [SACK] [cum ack 591] [a_rwnd 61280]
> 10:14:49.663498 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 644] [SID: 1] [SSEQ 2513] 
> 10:14:49.663505 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 645] [SID: 2] [SSEQ 2513] 
> 10:14:49.663507 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 646] [SID: 3] [SSEQ 2513] 
> 10:14:49.663510 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 647] [SID: 4] [SSEQ 2513] 
> 10:14:49.663512 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 648] [SID: 1] [SSEQ 2514] 
> 10:14:49.663514 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 649] [SID: 2] [SSEQ 2514] ,
>                            (2) [DATA] (B)(E) [TSN: 650] [SID: 3] [SSEQ 2514] ,
>                            (3) [DATA] (B)(E) [TSN: 651] [SID: 4] [SSEQ 2514] ,
>                            (4) [DATA] (B)(E) [TSN: 652] [SID: 1] [SSEQ 2515] 
> 10:14:49.663515 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 653] [SID: 2] [SSEQ 2515] ,
>                            (2) [DATA] (B)(E) [TSN: 654] [SID: 3] [SSEQ 2515] ,
>                            (3) [DATA] (B)(E) [TSN: 655] [SID: 4] [SSEQ 2515] ,
>                            (4) [DATA] (B)(E) [TSN: 656] [SID: 1] [SSEQ 2516] 
> 10:14:49.663517 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 657] [SID: 2] [SSEQ 2516] ,
>                            (2) [DATA] (B)(E) [TSN: 658] [SID: 3] [SSEQ 2516] ,
>                            (3) [DATA] (B)(E) [TSN: 659] [SID: 4] [SSEQ 2516] ,
>                            (4) [DATA] (B)(E) [TSN: 660] [SID: 1] [SSEQ 2517] 
> 10:14:49.663519 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 661] [SID: 2] [SSEQ 2517] ,
>                            (2) [DATA] (B)(E) [TSN: 662] [SID: 3] [SSEQ 2517] ,
>                            (3) [DATA] (B)(E) [TSN: 663] [SID: 4] [SSEQ 2517] ,
>                            (4) [DATA] (B)(E) [TSN: 664] [SID: 1] [SSEQ 2518] 
> 10:14:49.663523 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 665] [SID: 2] [SSEQ 2518] ,
>                            (2) [DATA] (B)(E) [TSN: 666] [SID: 3] [SSEQ 2518] ,
>                            (3) [DATA] (B)(E) [TSN: 667] [SID: 4] [SSEQ 2518] ,
>                            (4) [DATA] (B)(E) [TSN: 668] [SID: 1] [SSEQ 2519] 
> 10:14:49.663524 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 669] [SID: 2] [SSEQ 2519] ,
>                            (2) [DATA] (B)(E) [TSN: 670] [SID: 3] [SSEQ 2519] ,
>                            (3) [DATA] (B)(E) [TSN: 671] [SID: 4] [SSEQ 2519] ,
>                            (4) [DATA] (B)(E) [TSN: 672] [SID: 1] [SSEQ 2520] 
> 10:14:49.663627 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 673] [SID: 2] [SSEQ 2520] ,
>                            (2) [DATA] (B)(E) [TSN: 674] [SID: 3] [SSEQ 2520] ,
>                            (3) [DATA] (B)(E) [TSN: 675] [SID: 4] [SSEQ 2520] ,
>                            (4) [DATA] (B)(E) [TSN: 676] [SID: 1] [SSEQ 2521] 
> 10:14:49.663631 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 677] [SID: 2] [SSEQ 2521] ,
>                            (2) [DATA] (B)(E) [TSN: 678] [SID: 3] [SSEQ 2521] 
> 10:14:49.663632 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 679] [SID: 4] [SSEQ 2521] ,
>                            (2) [DATA] (B)(E) [TSN: 680] [SID: 1] [SSEQ 2522] ,
>                            (3) [DATA] (B)(E) [TSN: 681] [SID: 2] [SSEQ 2522] ,
>                            (4) [DATA] (B)(E) [TSN: 682] [SID: 3] [SSEQ 2522] 
> 10:14:49.663633 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 683] [SID: 4] [SSEQ 2522] ,
>                            (2) [DATA] (B)(E) [TSN: 684] [SID: 1] [SSEQ 2523] ,
>                            (3) [DATA] (B)(E) [TSN: 685] [SID: 2] [SSEQ 2523] ,
>                            (4) [DATA] (B)(E) [TSN: 686] [SID: 3] [SSEQ 2523] 
> 10:14:49.663634 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 687] [SID: 4] [SSEQ 2523] ,
>                            (2) [DATA] (B)(E) [TSN: 688] [SID: 1] [SSEQ 2524] ,
>                            (3) [DATA] (B)(E) [TSN: 689] [SID: 2] [SSEQ 2524] ,
>                            (4) [DATA] (B)(E) [TSN: 690] [SID: 3] [SSEQ 2524] 
> 10:14:49.663674 ss7-3 > dsl-a: [SACK] [cum ack 593] [a_rwnd 61280]
> 10:14:49.663687 ss7-3 > dsl-a: [SACK] [cum ack 595] [a_rwnd 61280]
> 10:14:49.663695 ss7-3 > dsl-a: [SACK] [cum ack 597] [a_rwnd 61280]
> 10:14:49.663706 ss7-3 > dsl-a: [SACK] [cum ack 599] [a_rwnd 61280]
> 10:14:49.663715 ss7-3 > dsl-a: [SACK] [cum ack 601] [a_rwnd 61132]
> 10:14:49.663726 ss7-3 > dsl-a: [SACK] [cum ack 603] [a_rwnd 60836]
> 10:14:49.663729 ss7-3 > dsl-a: [SACK] [cum ack 605] [a_rwnd 60540]
> 10:14:49.663744 dsl-a > ss7-3: [DATA] (B)(E) [TSN: 691] [SID: 4] [SSEQ 2524] 
> 10:14:49.663834 ss7-3 > dsl-a: [SACK] [cum ack 606] [a_rwnd 62168]
> 10:14:49.663928 ss7-3 > dsl-a: [SACK] [cum ack 608] [a_rwnd 62168]
> 10:14:49.663939 ss7-3 > dsl-a: [SACK] [cum ack 610] [a_rwnd 62020]
> 10:14:49.663946 ss7-3 > dsl-a: [SACK] [cum ack 612] [a_rwnd 61724]
> 10:14:49.663957 ss7-3 > dsl-a: [SACK] [cum ack 614] [a_rwnd 61428]
> 10:14:49.663964 ss7-3 > dsl-a: [SACK] [cum ack 616] [a_rwnd 61132]
> 10:14:49.663976 ss7-3 > dsl-a: [SACK] [cum ack 618] [a_rwnd 61132]
> 10:14:49.664183 ss7-3 > dsl-a: [SACK] [cum ack 620] [a_rwnd 61132]
> 10:14:49.664194 ss7-3 > dsl-a: [SACK] [cum ack 622] [a_rwnd 61132]
> 10:14:49.664200 ss7-3 > dsl-a: [SACK] [cum ack 624] [a_rwnd 61132]
> 10:14:49.664209 ss7-3 > dsl-a: [SACK] [cum ack 626] [a_rwnd 61132]
> 10:14:49.664215 ss7-3 > dsl-a: [SACK] [cum ack 628] [a_rwnd 60984]
> 10:14:49.664224 ss7-3 > dsl-a: [SACK] [cum ack 630] [a_rwnd 60688]
> 10:14:49.664232 ss7-3 > dsl-a: [SACK] [cum ack 632] [a_rwnd 60392]
> 10:14:49.664320 ss7-3 > dsl-a: [SACK] [cum ack 632] [a_rwnd 62020]
> 10:14:49.664429 ss7-3 > dsl-a: [SACK] [cum ack 634] [a_rwnd 62020]
> 10:14:49.664439 ss7-3 > dsl-a: [SACK] [cum ack 636] [a_rwnd 62020]
> 10:14:49.664446 ss7-3 > dsl-a: [SACK] [cum ack 638] [a_rwnd 61724]
> 10:14:49.664457 ss7-3 > dsl-a: [SACK] [cum ack 640] [a_rwnd 61428]
> 10:14:49.664463 ss7-3 > dsl-a: [SACK] [cum ack 642] [a_rwnd 61132]
> 10:14:49.664473 ss7-3 > dsl-a: [SACK] [cum ack 644] [a_rwnd 60836]
> 10:14:49.664479 ss7-3 > dsl-a: [SACK] [cum ack 644] [a_rwnd 62464]
> 10:14:49.664676 ss7-3 > dsl-a: [SACK] [cum ack 646] [a_rwnd 62168]
> 10:14:49.664687 ss7-3 > dsl-a: [SACK] [cum ack 648] [a_rwnd 61872]
> 10:14:49.664693 ss7-3 > dsl-a: [SACK] [cum ack 656] [a_rwnd 60688]
> 10:14:49.664825 ss7-3 > dsl-a: [SACK] [cum ack 660] [a_rwnd 62316]
> 10:14:49.664945 ss7-3 > dsl-a: [SACK] [cum ack 668] [a_rwnd 61280]
> 10:14:49.664962 ss7-3 > dsl-a: [SACK] [cum ack 676] [a_rwnd 60096]
> 10:14:49.664979 ss7-3 > dsl-a: [SACK] [cum ack 676] [a_rwnd 61724]
> 10:14:49.665179 ss7-3 > dsl-a: [SACK] [cum ack 682] [a_rwnd 61724]
> 10:14:49.665193 ss7-3 > dsl-a: [SACK] [cum ack 690] [a_rwnd 61724]
> 10:14:49.864258 ss7-3 > dsl-a: [SACK] [cum ack 691] [a_rwnd 61724]
> 
> 
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-07-09 15:44 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-04 21:05 [PATCH net-next 2/5] net: sctp: implement rfc6458, 5.3.4. SCTP_SNDINFO cmsg support Daniel Borkmann
2014-07-07  8:46 ` David Laight
2014-07-08  9:34 ` Daniel Borkmann
2014-07-08 10:47 ` David Laight
2014-07-08 13:30 ` David Laight
2014-07-09 13:59 ` Vlad Yasevich
2014-07-09 14:57 ` David Laight
2014-07-09 15:19 ` Vlad Yasevich
2014-07-09 15:44 ` Michael Tuexen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.