aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2007-04-20 15:23:15 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 01:27:59 -0400
commitb6e1331f3ce25a56edb956054eaf8011654686cb (patch)
tree63995f7e1de7d717df69cb4d138bce3fa4fe77ba /include
parentc95e939508e64863a1c5c73a9e1a908784e06820 (diff)
[SCTP]: Implement SCTP_FRAGMENT_INTERLEAVE socket option
This option was introduced in draft-ietf-tsvwg-sctpsocket-13. It prevents head-of-line blocking in the case of one-to-many endpoint. Applications enabling this option really must enable SCTP_SNDRCV event so that they would know where the data belongs. Based on an earlier patch by Ivan Skytte Jørgensen. Additionally, this functionality now permits multiple associations on the same endpoint to enter Partial Delivery. Applications should be extra careful, when using this functionality, to track EOR indicators. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/net/sctp/structs.h3
-rw-r--r--include/net/sctp/ulpqueue.h2
-rw-r--r--include/net/sctp/user.h4
3 files changed, 6 insertions, 3 deletions
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index f431acf3dcea..fe7f5ae1c513 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -304,10 +304,11 @@ struct sctp_sock {
304 __u32 autoclose; 304 __u32 autoclose;
305 __u8 nodelay; 305 __u8 nodelay;
306 __u8 disable_fragments; 306 __u8 disable_fragments;
307 __u8 pd_mode;
308 __u8 v4mapped; 307 __u8 v4mapped;
308 __u8 frag_interleave;
309 __u32 adaptation_ind; 309 __u32 adaptation_ind;
310 310
311 atomic_t pd_mode;
311 /* Receive to here while partial delivery is in effect. */ 312 /* Receive to here while partial delivery is in effect. */
312 struct sk_buff_head pd_lobby; 313 struct sk_buff_head pd_lobby;
313}; 314};
diff --git a/include/net/sctp/ulpqueue.h b/include/net/sctp/ulpqueue.h
index ab26ab3adae1..39ea3f442b47 100644
--- a/include/net/sctp/ulpqueue.h
+++ b/include/net/sctp/ulpqueue.h
@@ -78,7 +78,7 @@ void sctp_ulpq_partial_delivery(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
78void sctp_ulpq_abort_pd(struct sctp_ulpq *, gfp_t); 78void sctp_ulpq_abort_pd(struct sctp_ulpq *, gfp_t);
79 79
80/* Clear the partial data delivery condition on this socket. */ 80/* Clear the partial data delivery condition on this socket. */
81int sctp_clear_pd(struct sock *sk); 81int sctp_clear_pd(struct sock *sk, struct sctp_association *asoc);
82 82
83/* Skip over an SSN. */ 83/* Skip over an SSN. */
84void sctp_ulpq_skip(struct sctp_ulpq *ulpq, __u16 sid, __u16 ssn); 84void sctp_ulpq_skip(struct sctp_ulpq *ulpq, __u16 sid, __u16 ssn);
diff --git a/include/net/sctp/user.h b/include/net/sctp/user.h
index 67a30eb2b3a4..e77316088dc7 100644
--- a/include/net/sctp/user.h
+++ b/include/net/sctp/user.h
@@ -97,6 +97,8 @@ enum sctp_optname {
97#define SCTP_DELAYED_ACK_TIME SCTP_DELAYED_ACK_TIME 97#define SCTP_DELAYED_ACK_TIME SCTP_DELAYED_ACK_TIME
98 SCTP_CONTEXT, /* Receive Context */ 98 SCTP_CONTEXT, /* Receive Context */
99#define SCTP_CONTEXT SCTP_CONTEXT 99#define SCTP_CONTEXT SCTP_CONTEXT
100 SCTP_FRAGMENT_INTERLEAVE,
101#define SCTP_FRAGMENT_INTERLEAVE SCTP_FRAGMENT_INTERLEAVE
100 102
101 /* Internal Socket Options. Some of the sctp library functions are 103 /* Internal Socket Options. Some of the sctp library functions are
102 * implemented using these socket options. 104 * implemented using these socket options.
@@ -530,7 +532,7 @@ struct sctp_paddrparams {
530 __u32 spp_flags; 532 __u32 spp_flags;
531} __attribute__((packed, aligned(4))); 533} __attribute__((packed, aligned(4)));
532 534
533/* 7.1.24. Delayed Ack Timer (SCTP_DELAYED_ACK_TIME) 535/* 7.1.23. Delayed Ack Timer (SCTP_DELAYED_ACK_TIME)
534 * 536 *
535 * This options will get or set the delayed ack timer. The time is set 537 * This options will get or set the delayed ack timer. The time is set
536 * in milliseconds. If the assoc_id is 0, then this sets or gets the 538 * in milliseconds. If the assoc_id is 0, then this sets or gets the