aboutsummaryrefslogtreecommitdiff
path: root/include/net/sctp/structs.h
diff options
context:
space:
mode:
authorGravatar Xin Long <lucien.xin@gmail.com> 2017-12-08 21:04:04 +0800
committerGravatar David S. Miller <davem@davemloft.net> 2017-12-11 11:23:05 -0500
commitbd4d627dbd5adb8130d5c54a4135d89f45e41905 (patch)
tree7b6199437964741f39378f2571a206fe0e1fcd7f /include/net/sctp/structs.h
parentsctp: implement validate_data for sctp_stream_interleave (diff)
downloadlinux-bd4d627dbd5adb8130d5c54a4135d89f45e41905.tar.gz
linux-bd4d627dbd5adb8130d5c54a4135d89f45e41905.tar.bz2
linux-bd4d627dbd5adb8130d5c54a4135d89f45e41905.zip
sctp: implement ulpevent_data for sctp_stream_interleave
ulpevent_data is added as a member of sctp_stream_interleave, used to do the most process in ulpq, including to convert data or idata chunk to event, reasm them in reasm queue and put them in lobby queue in right order, and deliver them up to user sk rx queue. This procedure is described in section 2.2.3 of RFC8260. It adds most functions for idata here to do the similar process as the old functions for data. But since the details are very different between them, the old functions can not be reused for idata. event->ssn and event->ppid settings are moved to ulpevent_data from sctp_ulpevent_make_rcvmsg, so that sctp_ulpevent_make_rcvmsg could work for both data and idata. Note that mid is added in sctp_ulpevent for idata, __packed has to be used for defining sctp_ulpevent, or it would exceeds the skb cb that saves a sctp_ulpevent variable for ulp layer process. Signed-off-by: Xin Long <lucien.xin@gmail.com> Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/sctp/structs.h')
-rw-r--r--include/net/sctp/structs.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index be4cc73f3106..73b315de2fef 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -411,6 +411,8 @@ void sctp_stream_update(struct sctp_stream *stream, struct sctp_stream *new);
#define sctp_mid_skip(stream, type, sid, mid) \
((stream)->type[sid].mid = mid + 1)
+#define sctp_stream_in(asoc, sid) (&(asoc)->stream.in[sid])
+
/*
* Pointers to address related SCTP functions.
* (i.e. things that depend on the address family.)
@@ -1387,6 +1389,7 @@ struct sctp_stream_in {
__u16 ssn;
};
__u32 fsn;
+ char pd_mode;
};
struct sctp_stream {