1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32#ifndef __sctp_structs_h__
33#define __sctp_structs_h__
34
35#include <linux/ktime.h>
36#include <linux/generic-radix-tree.h>
37#include <linux/rhashtable-types.h>
38#include <linux/socket.h>
39#include <linux/in.h>
40#include <linux/in6.h>
41#include <linux/ipv6.h>
42#include <asm/param.h>
43#include <linux/atomic.h>
44#include <linux/skbuff.h>
45#include <linux/workqueue.h>
46#include <linux/sctp.h>
47#include <net/sctp/auth.h>
48#include <net/ip.h>
49
50
51
52
53union sctp_addr {
54 struct sockaddr_in v4;
55 struct sockaddr_in6 v6;
56 struct sockaddr sa;
57};
58
59
60struct sctp_globals;
61struct sctp_endpoint;
62struct sctp_association;
63struct sctp_transport;
64struct sctp_packet;
65struct sctp_chunk;
66struct sctp_inq;
67struct sctp_outq;
68struct sctp_bind_addr;
69struct sctp_ulpq;
70struct sctp_ep_common;
71struct crypto_shash;
72struct sctp_stream;
73
74
75#include <net/sctp/tsnmap.h>
76#include <net/sctp/ulpevent.h>
77#include <net/sctp/ulpqueue.h>
78#include <net/sctp/stream_interleave.h>
79
80
81
82struct sctp_bind_bucket {
83 unsigned short port;
84 signed char fastreuse;
85 signed char fastreuseport;
86 kuid_t fastuid;
87 struct hlist_node node;
88 struct hlist_head owner;
89 struct net *net;
90};
91
92struct sctp_bind_hashbucket {
93 spinlock_t lock;
94 struct hlist_head chain;
95};
96
97
98struct sctp_hashbucket {
99 rwlock_t lock;
100 struct hlist_head chain;
101} __attribute__((__aligned__(8)));
102
103
104
105extern struct sctp_globals {
106
107
108
109 struct list_head address_families;
110
111
112 struct sctp_hashbucket *ep_hashtable;
113
114 struct sctp_bind_hashbucket *port_hashtable;
115
116 struct rhltable transport_hashtable;
117
118
119 int ep_hashsize;
120 int port_hashsize;
121
122
123 __u16 max_instreams;
124 __u16 max_outstreams;
125
126
127
128 bool checksum_disable;
129} sctp_globals;
130
131#define sctp_max_instreams (sctp_globals.max_instreams)
132#define sctp_max_outstreams (sctp_globals.max_outstreams)
133#define sctp_address_families (sctp_globals.address_families)
134#define sctp_ep_hashsize (sctp_globals.ep_hashsize)
135#define sctp_ep_hashtable (sctp_globals.ep_hashtable)
136#define sctp_port_hashsize (sctp_globals.port_hashsize)
137#define sctp_port_hashtable (sctp_globals.port_hashtable)
138#define sctp_transport_hashtable (sctp_globals.transport_hashtable)
139#define sctp_checksum_disable (sctp_globals.checksum_disable)
140
141
142enum sctp_socket_type {
143 SCTP_SOCKET_UDP = 0,
144 SCTP_SOCKET_UDP_HIGH_BANDWIDTH,
145 SCTP_SOCKET_TCP
146};
147
148
149struct sctp_sock {
150
151 struct inet_sock inet;
152
153 enum sctp_socket_type type;
154
155
156 struct sctp_pf *pf;
157
158
159 struct crypto_shash *hmac;
160 char *sctp_hmac_alg;
161
162
163 struct sctp_endpoint *ep;
164
165 struct sctp_bind_bucket *bind_hash;
166
167 __u16 default_stream;
168 __u32 default_ppid;
169 __u16 default_flags;
170 __u32 default_context;
171 __u32 default_timetolive;
172 __u32 default_rcv_context;
173 int max_burst;
174
175
176
177
178
179 __u32 hbinterval;
180
181
182 __u16 pathmaxrxt;
183
184 __u32 flowlabel;
185 __u8 dscp;
186
187 __u16 pf_retrans;
188 __u16 ps_retrans;
189
190
191 __u32 pathmtu;
192
193
194 __u32 sackdelay;
195 __u32 sackfreq;
196
197
198 __u32 param_flags;
199
200 __u32 default_ss;
201
202 struct sctp_rtoinfo rtoinfo;
203 struct sctp_paddrparams paddrparam;
204 struct sctp_assocparams assocparams;
205
206
207
208
209
210 __u16 subscribe;
211 struct sctp_initmsg initmsg;
212
213 int user_frag;
214
215 __u32 autoclose;
216 __u32 adaptation_ind;
217 __u32 pd_point;
218 __u16 nodelay:1,
219 pf_expose:2,
220 reuse:1,
221 disable_fragments:1,
222 v4mapped:1,
223 frag_interleave:1,
224 recvrcvinfo:1,
225 recvnxtinfo:1,
226 data_ready_signalled:1;
227
228 atomic_t pd_mode;
229
230 struct sk_buff_head pd_lobby;
231
232
233
234
235 struct list_head auto_asconf_list;
236 int do_auto_asconf;
237};
238
239static inline struct sctp_sock *sctp_sk(const struct sock *sk)
240{
241 return (struct sctp_sock *)sk;
242}
243
244static inline struct sock *sctp_opt2sk(const struct sctp_sock *sp)
245{
246 return (struct sock *)sp;
247}
248
249#if IS_ENABLED(CONFIG_IPV6)
250struct sctp6_sock {
251 struct sctp_sock sctp;
252 struct ipv6_pinfo inet6;
253};
254#endif
255
256
257
258
259
260
261
262
263
264
265
266struct sctp_cookie {
267
268
269
270
271
272 __u32 my_vtag;
273
274
275
276
277
278 __u32 peer_vtag;
279
280
281
282
283
284
285 __u32 my_ttag;
286
287
288 __u32 peer_ttag;
289
290
291 ktime_t expiration;
292
293
294
295
296 __u16 sinit_num_ostreams;
297 __u16 sinit_max_instreams;
298
299
300 __u32 initial_tsn;
301
302
303 union sctp_addr peer_addr;
304
305
306
307
308 __u16 my_port;
309
310 __u8 prsctp_capable;
311
312
313 __u8 padding;
314
315 __u32 adaptation_ind;
316
317 __u8 auth_random[sizeof(struct sctp_paramhdr) +
318 SCTP_AUTH_RANDOM_LENGTH];
319 __u8 auth_hmacs[SCTP_AUTH_NUM_HMACS * sizeof(__u16) + 2];
320 __u8 auth_chunks[sizeof(struct sctp_paramhdr) + SCTP_AUTH_MAX_CHUNKS];
321
322
323
324
325
326
327
328 __u32 raw_addr_list_len;
329 struct sctp_init_chunk peer_init[];
330};
331
332
333
334struct sctp_signed_cookie {
335 __u8 signature[SCTP_SECRET_SIZE];
336 __u32 __pad;
337 struct sctp_cookie c;
338} __packed;
339
340
341
342
343
344union sctp_addr_param {
345 struct sctp_paramhdr p;
346 struct sctp_ipv4addr_param v4;
347 struct sctp_ipv6addr_param v6;
348};
349
350
351
352
353union sctp_params {
354 void *v;
355 struct sctp_paramhdr *p;
356 struct sctp_cookie_preserve_param *life;
357 struct sctp_hostname_param *dns;
358 struct sctp_cookie_param *cookie;
359 struct sctp_supported_addrs_param *sat;
360 struct sctp_ipv4addr_param *v4;
361 struct sctp_ipv6addr_param *v6;
362 union sctp_addr_param *addr;
363 struct sctp_adaptation_ind_param *aind;
364 struct sctp_supported_ext_param *ext;
365 struct sctp_random_param *random;
366 struct sctp_chunks_param *chunks;
367 struct sctp_hmac_algo_param *hmac_algo;
368 struct sctp_addip_param *addip;
369};
370
371
372
373
374
375
376
377
378struct sctp_sender_hb_info {
379 struct sctp_paramhdr param_hdr;
380 union sctp_addr daddr;
381 unsigned long sent_at;
382 __u64 hb_nonce;
383};
384
385int sctp_stream_init(struct sctp_stream *stream, __u16 outcnt, __u16 incnt,
386 gfp_t gfp);
387int sctp_stream_init_ext(struct sctp_stream *stream, __u16 sid);
388void sctp_stream_free(struct sctp_stream *stream);
389void sctp_stream_clear(struct sctp_stream *stream);
390void sctp_stream_update(struct sctp_stream *stream, struct sctp_stream *new);
391
392
393#define sctp_ssn_peek(stream, type, sid) \
394 (sctp_stream_##type((stream), (sid))->ssn)
395
396
397#define sctp_ssn_next(stream, type, sid) \
398 (sctp_stream_##type((stream), (sid))->ssn++)
399
400
401#define sctp_ssn_skip(stream, type, sid, ssn) \
402 (sctp_stream_##type((stream), (sid))->ssn = ssn + 1)
403
404
405#define sctp_mid_peek(stream, type, sid) \
406 (sctp_stream_##type((stream), (sid))->mid)
407
408
409#define sctp_mid_next(stream, type, sid) \
410 (sctp_stream_##type((stream), (sid))->mid++)
411
412
413#define sctp_mid_skip(stream, type, sid, mid) \
414 (sctp_stream_##type((stream), (sid))->mid = mid + 1)
415
416
417#define sctp_mid_uo_peek(stream, type, sid) \
418 (sctp_stream_##type((stream), (sid))->mid_uo)
419
420
421#define sctp_mid_uo_next(stream, type, sid) \
422 (sctp_stream_##type((stream), (sid))->mid_uo++)
423
424
425
426
427
428struct sctp_af {
429 int (*sctp_xmit) (struct sk_buff *skb,
430 struct sctp_transport *);
431 int (*setsockopt) (struct sock *sk,
432 int level,
433 int optname,
434 char __user *optval,
435 unsigned int optlen);
436 int (*getsockopt) (struct sock *sk,
437 int level,
438 int optname,
439 char __user *optval,
440 int __user *optlen);
441 int (*compat_setsockopt) (struct sock *sk,
442 int level,
443 int optname,
444 char __user *optval,
445 unsigned int optlen);
446 int (*compat_getsockopt) (struct sock *sk,
447 int level,
448 int optname,
449 char __user *optval,
450 int __user *optlen);
451 void (*get_dst) (struct sctp_transport *t,
452 union sctp_addr *saddr,
453 struct flowi *fl,
454 struct sock *sk);
455 void (*get_saddr) (struct sctp_sock *sk,
456 struct sctp_transport *t,
457 struct flowi *fl);
458 void (*copy_addrlist) (struct list_head *,
459 struct net_device *);
460 int (*cmp_addr) (const union sctp_addr *addr1,
461 const union sctp_addr *addr2);
462 void (*addr_copy) (union sctp_addr *dst,
463 union sctp_addr *src);
464 void (*from_skb) (union sctp_addr *,
465 struct sk_buff *skb,
466 int saddr);
467 void (*from_sk) (union sctp_addr *,
468 struct sock *sk);
469 void (*from_addr_param) (union sctp_addr *,
470 union sctp_addr_param *,
471 __be16 port, int iif);
472 int (*to_addr_param) (const union sctp_addr *,
473 union sctp_addr_param *);
474 int (*addr_valid) (union sctp_addr *,
475 struct sctp_sock *,
476 const struct sk_buff *);
477 enum sctp_scope (*scope)(union sctp_addr *);
478 void (*inaddr_any) (union sctp_addr *, __be16);
479 int (*is_any) (const union sctp_addr *);
480 int (*available) (union sctp_addr *,
481 struct sctp_sock *);
482 int (*skb_iif) (const struct sk_buff *sk);
483 int (*is_ce) (const struct sk_buff *sk);
484 void (*seq_dump_addr)(struct seq_file *seq,
485 union sctp_addr *addr);
486 void (*ecn_capable)(struct sock *sk);
487 __u16 net_header_len;
488 int sockaddr_len;
489 int (*ip_options_len)(struct sock *sk);
490 sa_family_t sa_family;
491 struct list_head list;
492};
493
494struct sctp_af *sctp_get_af_specific(sa_family_t);
495int sctp_register_af(struct sctp_af *);
496
497
498struct sctp_pf {
499 void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
500 void (*skb_msgname) (struct sk_buff *, char *, int *);
501 int (*af_supported) (sa_family_t, struct sctp_sock *);
502 int (*cmp_addr) (const union sctp_addr *,
503 const union sctp_addr *,
504 struct sctp_sock *);
505 int (*bind_verify) (struct sctp_sock *, union sctp_addr *);
506 int (*send_verify) (struct sctp_sock *, union sctp_addr *);
507 int (*supported_addrs)(const struct sctp_sock *, __be16 *);
508 struct sock *(*create_accept_sk) (struct sock *sk,
509 struct sctp_association *asoc,
510 bool kern);
511 int (*addr_to_user)(struct sctp_sock *sk, union sctp_addr *addr);
512 void (*to_sk_saddr)(union sctp_addr *, struct sock *sk);
513 void (*to_sk_daddr)(union sctp_addr *, struct sock *sk);
514 void (*copy_ip_options)(struct sock *sk, struct sock *newsk);
515 struct sctp_af *af;
516};
517
518
519
520
521
522struct sctp_datamsg {
523
524 struct list_head chunks;
525
526 refcount_t refcnt;
527
528 unsigned long expires_at;
529
530 int send_error;
531 u8 send_failed:1,
532 can_delay:1,
533 abandoned:1;
534};
535
536struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *,
537 struct sctp_sndrcvinfo *,
538 struct iov_iter *);
539void sctp_datamsg_free(struct sctp_datamsg *);
540void sctp_datamsg_put(struct sctp_datamsg *);
541void sctp_chunk_fail(struct sctp_chunk *, int error);
542int sctp_chunk_abandoned(struct sctp_chunk *);
543
544
545
546
547
548
549
550
551
552struct sctp_chunk {
553 struct list_head list;
554
555 refcount_t refcnt;
556
557
558 int sent_count;
559
560 union {
561
562 struct list_head transmitted_list;
563
564 struct list_head stream_list;
565 };
566
567
568
569
570
571
572 struct list_head frag_list;
573
574
575 struct sk_buff *skb;
576
577 union {
578
579 struct sk_buff *head_skb;
580
581 struct sctp_shared_key *shkey;
582 };
583
584
585
586
587
588
589
590
591 union sctp_params param_hdr;
592 union {
593 __u8 *v;
594 struct sctp_datahdr *data_hdr;
595 struct sctp_inithdr *init_hdr;
596 struct sctp_sackhdr *sack_hdr;
597 struct sctp_heartbeathdr *hb_hdr;
598 struct sctp_sender_hb_info *hbs_hdr;
599 struct sctp_shutdownhdr *shutdown_hdr;
600 struct sctp_signed_cookie *cookie_hdr;
601 struct sctp_ecnehdr *ecne_hdr;
602 struct sctp_cwrhdr *ecn_cwr_hdr;
603 struct sctp_errhdr *err_hdr;
604 struct sctp_addiphdr *addip_hdr;
605 struct sctp_fwdtsn_hdr *fwdtsn_hdr;
606 struct sctp_authhdr *auth_hdr;
607 struct sctp_idatahdr *idata_hdr;
608 struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
609 } subh;
610
611 __u8 *chunk_end;
612
613 struct sctp_chunkhdr *chunk_hdr;
614 struct sctphdr *sctp_hdr;
615
616
617 struct sctp_sndrcvinfo sinfo;
618
619
620 struct sctp_association *asoc;
621
622
623 struct sctp_ep_common *rcvr;
624
625
626 unsigned long sent_at;
627
628
629 union sctp_addr source;
630
631 union sctp_addr dest;
632
633
634 struct sctp_datamsg *msg;
635
636
637
638
639
640 struct sctp_transport *transport;
641
642
643
644
645
646
647 struct sk_buff *auth_chunk;
648
649#define SCTP_CAN_FRTX 0x0
650#define SCTP_NEED_FRTX 0x1
651#define SCTP_DONT_FRTX 0x2
652 __u16 rtt_in_progress:1,
653 has_tsn:1,
654 has_ssn:1,
655#define has_mid has_ssn
656 singleton:1,
657 end_of_packet:1,
658 ecn_ce_done:1,
659 pdiscard:1,
660 tsn_gap_acked:1,
661 data_accepted:1,
662 auth:1,
663 has_asconf:1,
664 tsn_missing_report:2,
665 fast_retransmit:2;
666};
667
668#define sctp_chunk_retransmitted(chunk) (chunk->sent_count > 1)
669void sctp_chunk_hold(struct sctp_chunk *);
670void sctp_chunk_put(struct sctp_chunk *);
671int sctp_user_addto_chunk(struct sctp_chunk *chunk, int len,
672 struct iov_iter *from);
673void sctp_chunk_free(struct sctp_chunk *);
674void *sctp_addto_chunk(struct sctp_chunk *, int len, const void *data);
675struct sctp_chunk *sctp_chunkify(struct sk_buff *,
676 const struct sctp_association *,
677 struct sock *, gfp_t gfp);
678void sctp_init_addrs(struct sctp_chunk *, union sctp_addr *,
679 union sctp_addr *);
680const union sctp_addr *sctp_source(const struct sctp_chunk *chunk);
681
682static inline __u16 sctp_chunk_stream_no(struct sctp_chunk *ch)
683{
684 return ntohs(ch->subh.data_hdr->stream);
685}
686
687enum {
688 SCTP_ADDR_NEW,
689 SCTP_ADDR_SRC,
690 SCTP_ADDR_DEL,
691};
692
693
694struct sctp_sockaddr_entry {
695 struct list_head list;
696 struct rcu_head rcu;
697 union sctp_addr a;
698 __u8 state;
699 __u8 valid;
700};
701
702#define SCTP_ADDRESS_TICK_DELAY 500
703
704
705
706
707struct sctp_packet {
708
709 __u16 source_port;
710 __u16 destination_port;
711 __u32 vtag;
712
713
714 struct list_head chunk_list;
715
716
717 size_t overhead;
718
719 size_t size;
720
721 size_t max_size;
722
723
724
725
726
727 struct sctp_transport *transport;
728
729
730 struct sctp_chunk *auth;
731
732 u8 has_cookie_echo:1,
733 has_sack:1,
734 has_auth:1,
735 has_data:1,
736 ipfragok:1;
737};
738
739void sctp_packet_init(struct sctp_packet *, struct sctp_transport *,
740 __u16 sport, __u16 dport);
741void sctp_packet_config(struct sctp_packet *, __u32 vtag, int);
742enum sctp_xmit sctp_packet_transmit_chunk(struct sctp_packet *packet,
743 struct sctp_chunk *chunk,
744 int one_packet, gfp_t gfp);
745enum sctp_xmit sctp_packet_append_chunk(struct sctp_packet *packet,
746 struct sctp_chunk *chunk);
747int sctp_packet_transmit(struct sctp_packet *, gfp_t);
748void sctp_packet_free(struct sctp_packet *);
749
750static inline int sctp_packet_empty(struct sctp_packet *packet)
751{
752 return packet->size == packet->overhead;
753}
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775struct sctp_transport {
776
777 struct list_head transports;
778 struct rhlist_head node;
779
780
781 refcount_t refcnt;
782
783
784
785
786
787
788
789
790
791 __u32 rto_pending:1,
792
793
794
795
796
797 hb_sent:1,
798
799
800 pmtu_pending:1,
801
802 dst_pending_confirm:1,
803
804
805 sack_generation:1;
806 u32 dst_cookie;
807
808 struct flowi fl;
809
810
811 union sctp_addr ipaddr;
812
813
814 struct sctp_af *af_specific;
815
816
817 struct sctp_association *asoc;
818
819
820
821
822
823
824
825
826
827
828 unsigned long rto;
829
830 __u32 rtt;
831
832
833 __u32 rttvar;
834
835
836 __u32 srtt;
837
838
839
840
841
842 __u32 cwnd;
843
844
845 __u32 ssthresh;
846
847
848
849
850 __u32 partial_bytes_acked;
851
852
853 __u32 flight_size;
854
855 __u32 burst_limited;
856
857
858 struct dst_entry *dst;
859
860 union sctp_addr saddr;
861
862
863
864
865 unsigned long hbinterval;
866
867
868 unsigned long sackdelay;
869 __u32 sackfreq;
870
871 atomic_t mtu_info;
872
873
874
875
876 ktime_t last_time_heard;
877
878
879
880
881 unsigned long last_time_sent;
882
883
884
885
886 unsigned long last_time_ecne_reduced;
887
888
889
890
891
892 __u16 pathmaxrxt;
893
894 __u32 flowlabel;
895 __u8 dscp;
896
897
898
899
900
901 __u16 pf_retrans;
902
903 __u16 ps_retrans;
904
905 __u32 pathmtu;
906
907
908 __u32 param_flags;
909
910
911 int init_sent_count;
912
913
914
915
916 int state;
917
918
919
920
921 unsigned short error_count;
922
923
924
925
926
927
928
929 struct timer_list T3_rtx_timer;
930
931
932 struct timer_list hb_timer;
933
934
935 struct timer_list proto_unreach_timer;
936
937
938 struct timer_list reconf_timer;
939
940
941
942
943
944
945 struct list_head transmitted;
946
947
948 struct sctp_packet packet;
949
950
951 struct list_head send_ready;
952
953
954
955
956
957
958
959
960
961 struct {
962
963
964
965 __u32 next_tsn_at_change;
966
967
968 char changeover_active;
969
970
971
972
973
974 char cycling_changeover;
975
976
977
978
979 char cacc_saw_newack;
980 } cacc;
981
982
983 __u64 hb_nonce;
984
985 struct rcu_head rcu;
986};
987
988struct sctp_transport *sctp_transport_new(struct net *, const union sctp_addr *,
989 gfp_t);
990void sctp_transport_set_owner(struct sctp_transport *,
991 struct sctp_association *);
992void sctp_transport_route(struct sctp_transport *, union sctp_addr *,
993 struct sctp_sock *);
994void sctp_transport_pmtu(struct sctp_transport *, struct sock *sk);
995void sctp_transport_free(struct sctp_transport *);
996void sctp_transport_reset_t3_rtx(struct sctp_transport *);
997void sctp_transport_reset_hb_timer(struct sctp_transport *);
998void sctp_transport_reset_reconf_timer(struct sctp_transport *transport);
999int sctp_transport_hold(struct sctp_transport *);
1000void sctp_transport_put(struct sctp_transport *);
1001void sctp_transport_update_rto(struct sctp_transport *, __u32);
1002void sctp_transport_raise_cwnd(struct sctp_transport *, __u32, __u32);
1003void sctp_transport_lower_cwnd(struct sctp_transport *t,
1004 enum sctp_lower_cwnd reason);
1005void sctp_transport_burst_limited(struct sctp_transport *);
1006void sctp_transport_burst_reset(struct sctp_transport *);
1007unsigned long sctp_transport_timeout(struct sctp_transport *);
1008void sctp_transport_reset(struct sctp_transport *t);
1009bool sctp_transport_update_pmtu(struct sctp_transport *t, u32 pmtu);
1010void sctp_transport_immediate_rtx(struct sctp_transport *);
1011void sctp_transport_dst_release(struct sctp_transport *t);
1012void sctp_transport_dst_confirm(struct sctp_transport *t);
1013
1014
1015
1016
1017
1018struct sctp_inq {
1019
1020
1021
1022 struct list_head in_chunk_list;
1023
1024
1025
1026 struct sctp_chunk *in_progress;
1027
1028
1029
1030
1031 struct work_struct immediate;
1032};
1033
1034void sctp_inq_init(struct sctp_inq *);
1035void sctp_inq_free(struct sctp_inq *);
1036void sctp_inq_push(struct sctp_inq *, struct sctp_chunk *packet);
1037struct sctp_chunk *sctp_inq_pop(struct sctp_inq *);
1038struct sctp_chunkhdr *sctp_inq_peek(struct sctp_inq *);
1039void sctp_inq_set_th_handler(struct sctp_inq *, work_func_t);
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060struct sctp_outq {
1061 struct sctp_association *asoc;
1062
1063
1064 struct list_head out_chunk_list;
1065
1066
1067 struct sctp_sched_ops *sched;
1068
1069 unsigned int out_qlen;
1070
1071
1072 unsigned int error;
1073
1074
1075 struct list_head control_chunk_list;
1076
1077
1078
1079
1080 struct list_head sacked;
1081
1082
1083
1084
1085 struct list_head retransmit;
1086
1087
1088
1089
1090 struct list_head abandoned;
1091
1092
1093 __u32 outstanding_bytes;
1094
1095
1096 char fast_rtx;
1097
1098
1099 char cork;
1100};
1101
1102void sctp_outq_init(struct sctp_association *, struct sctp_outq *);
1103void sctp_outq_teardown(struct sctp_outq *);
1104void sctp_outq_free(struct sctp_outq*);
1105void sctp_outq_tail(struct sctp_outq *, struct sctp_chunk *chunk, gfp_t);
1106int sctp_outq_sack(struct sctp_outq *, struct sctp_chunk *);
1107int sctp_outq_is_empty(const struct sctp_outq *);
1108void sctp_outq_restart(struct sctp_outq *);
1109
1110void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport,
1111 enum sctp_retransmit_reason reason);
1112void sctp_retransmit_mark(struct sctp_outq *, struct sctp_transport *, __u8);
1113void sctp_outq_uncork(struct sctp_outq *, gfp_t gfp);
1114void sctp_prsctp_prune(struct sctp_association *asoc,
1115 struct sctp_sndrcvinfo *sinfo, int msg_len);
1116void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 sack_ctsn);
1117
1118static inline void sctp_outq_cork(struct sctp_outq *q)
1119{
1120 q->cork = 1;
1121}
1122
1123
1124
1125
1126struct sctp_input_cb {
1127 union {
1128 struct inet_skb_parm h4;
1129#if IS_ENABLED(CONFIG_IPV6)
1130 struct inet6_skb_parm h6;
1131#endif
1132 } header;
1133 struct sctp_chunk *chunk;
1134 struct sctp_af *af;
1135};
1136#define SCTP_INPUT_CB(__skb) ((struct sctp_input_cb *)&((__skb)->cb[0]))
1137
1138struct sctp_output_cb {
1139 struct sk_buff *last;
1140};
1141#define SCTP_OUTPUT_CB(__skb) ((struct sctp_output_cb *)&((__skb)->cb[0]))
1142
1143static inline const struct sk_buff *sctp_gso_headskb(const struct sk_buff *skb)
1144{
1145 const struct sctp_chunk *chunk = SCTP_INPUT_CB(skb)->chunk;
1146
1147 return chunk->head_skb ? : skb;
1148}
1149
1150
1151struct sctp_bind_addr {
1152
1153
1154
1155
1156
1157
1158 __u16 port;
1159
1160
1161
1162
1163
1164
1165
1166 struct list_head address_list;
1167};
1168
1169void sctp_bind_addr_init(struct sctp_bind_addr *, __u16 port);
1170void sctp_bind_addr_free(struct sctp_bind_addr *);
1171int sctp_bind_addr_copy(struct net *net, struct sctp_bind_addr *dest,
1172 const struct sctp_bind_addr *src,
1173 enum sctp_scope scope, gfp_t gfp,
1174 int flags);
1175int sctp_bind_addr_dup(struct sctp_bind_addr *dest,
1176 const struct sctp_bind_addr *src,
1177 gfp_t gfp);
1178int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *,
1179 int new_size, __u8 addr_state, gfp_t gfp);
1180int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *);
1181int sctp_bind_addr_match(struct sctp_bind_addr *, const union sctp_addr *,
1182 struct sctp_sock *);
1183int sctp_bind_addr_conflict(struct sctp_bind_addr *, const union sctp_addr *,
1184 struct sctp_sock *, struct sctp_sock *);
1185int sctp_bind_addr_state(const struct sctp_bind_addr *bp,
1186 const union sctp_addr *addr);
1187int sctp_bind_addrs_check(struct sctp_sock *sp,
1188 struct sctp_sock *sp2, int cnt2);
1189union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr *bp,
1190 const union sctp_addr *addrs,
1191 int addrcnt,
1192 struct sctp_sock *opt);
1193union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
1194 int *addrs_len,
1195 gfp_t gfp);
1196int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw, int len,
1197 __u16 port, gfp_t gfp);
1198
1199enum sctp_scope sctp_scope(const union sctp_addr *addr);
1200int sctp_in_scope(struct net *net, const union sctp_addr *addr,
1201 const enum sctp_scope scope);
1202int sctp_is_any(struct sock *sk, const union sctp_addr *addr);
1203int sctp_is_ep_boundall(struct sock *sk);
1204
1205
1206
1207enum sctp_endpoint_type {
1208 SCTP_EP_TYPE_SOCKET,
1209 SCTP_EP_TYPE_ASSOCIATION,
1210};
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228struct sctp_ep_common {
1229
1230 struct hlist_node node;
1231 int hashent;
1232
1233
1234 enum sctp_endpoint_type type;
1235
1236
1237
1238
1239
1240 refcount_t refcnt;
1241 bool dead;
1242
1243
1244 struct sock *sk;
1245
1246
1247 struct net *net;
1248
1249
1250 struct sctp_inq inqueue;
1251
1252
1253
1254
1255
1256
1257 struct sctp_bind_addr bind_addr;
1258};
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280struct sctp_endpoint {
1281
1282 struct sctp_ep_common base;
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294 struct list_head asocs;
1295
1296
1297
1298
1299
1300
1301
1302 __u8 secret_key[SCTP_SECRET_SIZE];
1303
1304
1305
1306
1307
1308
1309
1310 __u8 *digest;
1311
1312
1313 __u32 sndbuf_policy;
1314
1315
1316 __u32 rcvbuf_policy;
1317
1318
1319
1320
1321 struct crypto_shash **auth_hmacs;
1322
1323
1324 struct sctp_hmac_algo_param *auth_hmacs_list;
1325
1326
1327 struct sctp_chunks_param *auth_chunk_list;
1328
1329
1330 struct list_head endpoint_shared_keys;
1331 __u16 active_key_id;
1332 __u8 ecn_enable:1,
1333 auth_enable:1,
1334 intl_enable:1,
1335 prsctp_enable:1,
1336 asconf_enable:1,
1337 reconf_enable:1;
1338
1339 __u8 strreset_enable;
1340
1341
1342
1343
1344
1345
1346
1347
1348 u32 secid;
1349 u32 peer_secid;
1350};
1351
1352
1353static inline struct sctp_endpoint *sctp_ep(struct sctp_ep_common *base)
1354{
1355 struct sctp_endpoint *ep;
1356
1357 ep = container_of(base, struct sctp_endpoint, base);
1358 return ep;
1359}
1360
1361
1362struct sctp_endpoint *sctp_endpoint_new(struct sock *, gfp_t);
1363void sctp_endpoint_free(struct sctp_endpoint *);
1364void sctp_endpoint_put(struct sctp_endpoint *);
1365void sctp_endpoint_hold(struct sctp_endpoint *);
1366void sctp_endpoint_add_asoc(struct sctp_endpoint *, struct sctp_association *);
1367struct sctp_association *sctp_endpoint_lookup_assoc(
1368 const struct sctp_endpoint *ep,
1369 const union sctp_addr *paddr,
1370 struct sctp_transport **);
1371bool sctp_endpoint_is_peeled_off(struct sctp_endpoint *ep,
1372 const union sctp_addr *paddr);
1373struct sctp_endpoint *sctp_endpoint_is_match(struct sctp_endpoint *,
1374 struct net *, const union sctp_addr *);
1375bool sctp_has_association(struct net *net, const union sctp_addr *laddr,
1376 const union sctp_addr *paddr);
1377
1378int sctp_verify_init(struct net *net, const struct sctp_endpoint *ep,
1379 const struct sctp_association *asoc,
1380 enum sctp_cid cid, struct sctp_init_chunk *peer_init,
1381 struct sctp_chunk *chunk, struct sctp_chunk **err_chunk);
1382int sctp_process_init(struct sctp_association *, struct sctp_chunk *chunk,
1383 const union sctp_addr *peer,
1384 struct sctp_init_chunk *init, gfp_t gfp);
1385__u32 sctp_generate_tag(const struct sctp_endpoint *);
1386__u32 sctp_generate_tsn(const struct sctp_endpoint *);
1387
1388struct sctp_inithdr_host {
1389 __u32 init_tag;
1390 __u32 a_rwnd;
1391 __u16 num_outbound_streams;
1392 __u16 num_inbound_streams;
1393 __u32 initial_tsn;
1394};
1395
1396struct sctp_stream_priorities {
1397
1398 struct list_head prio_sched;
1399
1400 struct list_head active;
1401
1402 struct sctp_stream_out_ext *next;
1403 __u16 prio;
1404};
1405
1406struct sctp_stream_out_ext {
1407 __u64 abandoned_unsent[SCTP_PR_INDEX(MAX) + 1];
1408 __u64 abandoned_sent[SCTP_PR_INDEX(MAX) + 1];
1409 struct list_head outq;
1410 union {
1411 struct {
1412
1413 struct list_head prio_list;
1414 struct sctp_stream_priorities *prio_head;
1415 };
1416
1417 struct {
1418 struct list_head rr_list;
1419 };
1420 };
1421};
1422
1423struct sctp_stream_out {
1424 union {
1425 __u32 mid;
1426 __u16 ssn;
1427 };
1428 __u32 mid_uo;
1429 struct sctp_stream_out_ext *ext;
1430 __u8 state;
1431};
1432
1433struct sctp_stream_in {
1434 union {
1435 __u32 mid;
1436 __u16 ssn;
1437 };
1438 __u32 mid_uo;
1439 __u32 fsn;
1440 __u32 fsn_uo;
1441 char pd_mode;
1442 char pd_mode_uo;
1443};
1444
1445struct sctp_stream {
1446 GENRADIX(struct sctp_stream_out) out;
1447 GENRADIX(struct sctp_stream_in) in;
1448
1449 __u16 outcnt;
1450 __u16 incnt;
1451
1452 struct sctp_stream_out *out_curr;
1453 union {
1454
1455 struct {
1456
1457 struct list_head prio_list;
1458 };
1459
1460 struct {
1461
1462 struct list_head rr_list;
1463
1464 struct sctp_stream_out_ext *rr_next;
1465 };
1466 };
1467 struct sctp_stream_interleave *si;
1468};
1469
1470static inline struct sctp_stream_out *sctp_stream_out(
1471 struct sctp_stream *stream,
1472 __u16 sid)
1473{
1474 return genradix_ptr(&stream->out, sid);
1475}
1476
1477static inline struct sctp_stream_in *sctp_stream_in(
1478 struct sctp_stream *stream,
1479 __u16 sid)
1480{
1481 return genradix_ptr(&stream->in, sid);
1482}
1483
1484#define SCTP_SO(s, i) sctp_stream_out((s), (i))
1485#define SCTP_SI(s, i) sctp_stream_in((s), (i))
1486
1487#define SCTP_STREAM_CLOSED 0x00
1488#define SCTP_STREAM_OPEN 0x01
1489
1490static inline __u16 sctp_datachk_len(const struct sctp_stream *stream)
1491{
1492 return stream->si->data_chunk_len;
1493}
1494
1495static inline __u16 sctp_datahdr_len(const struct sctp_stream *stream)
1496{
1497 return stream->si->data_chunk_len - sizeof(struct sctp_chunkhdr);
1498}
1499
1500static inline __u16 sctp_ftsnchk_len(const struct sctp_stream *stream)
1501{
1502 return stream->si->ftsn_chunk_len;
1503}
1504
1505static inline __u16 sctp_ftsnhdr_len(const struct sctp_stream *stream)
1506{
1507 return stream->si->ftsn_chunk_len - sizeof(struct sctp_chunkhdr);
1508}
1509
1510
1511struct sctp_priv_assoc_stats {
1512
1513
1514
1515
1516
1517 struct sockaddr_storage obs_rto_ipaddr;
1518 __u64 max_obs_rto;
1519
1520 __u64 isacks;
1521 __u64 osacks;
1522
1523 __u64 opackets;
1524 __u64 ipackets;
1525
1526 __u64 rtxchunks;
1527
1528 __u64 outofseqtsns;
1529
1530 __u64 idupchunks;
1531
1532 __u64 gapcnt;
1533
1534 __u64 ouodchunks;
1535 __u64 iuodchunks;
1536
1537 __u64 oodchunks;
1538 __u64 iodchunks;
1539
1540 __u64 octrlchunks;
1541 __u64 ictrlchunks;
1542};
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558struct sctp_association {
1559
1560
1561
1562
1563
1564 struct sctp_ep_common base;
1565
1566
1567 struct list_head asocs;
1568
1569
1570 sctp_assoc_t assoc_id;
1571
1572
1573 struct sctp_endpoint *ep;
1574
1575
1576 struct sctp_cookie c;
1577
1578
1579 struct {
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595 struct list_head transport_addr_list;
1596
1597
1598
1599
1600
1601 __u32 rwnd;
1602
1603
1604
1605
1606
1607
1608
1609
1610 __u16 transport_count;
1611
1612
1613
1614
1615 __u16 port;
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632 struct sctp_transport *primary_path;
1633
1634
1635
1636
1637 union sctp_addr primary_addr;
1638
1639
1640
1641
1642
1643 struct sctp_transport *active_path;
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655 struct sctp_transport *retran_path;
1656
1657
1658 struct sctp_transport *last_sent_to;
1659
1660
1661 struct sctp_transport *last_data_from;
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683 struct sctp_tsnmap tsn_map;
1684
1685
1686
1687
1688 __be16 addip_disabled_mask;
1689
1690
1691 __u16 ecn_capable:1,
1692 ipv4_address:1,
1693 ipv6_address:1,
1694 hostname_address:1,
1695 asconf_capable:1,
1696 prsctp_capable:1,
1697 reconf_capable:1,
1698 intl_capable:1,
1699 auth_capable:1,
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711 sack_needed:1,
1712 sack_generation:1,
1713 zero_window_announced:1;
1714
1715 __u32 sack_cnt;
1716
1717 __u32 adaptation_ind;
1718
1719 struct sctp_inithdr_host i;
1720 void *cookie;
1721 int cookie_len;
1722
1723
1724
1725
1726
1727 __u32 addip_serial;
1728
1729
1730
1731
1732
1733 struct sctp_random_param *peer_random;
1734 struct sctp_chunks_param *peer_chunks;
1735 struct sctp_hmac_algo_param *peer_hmacs;
1736 } peer;
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751 enum sctp_state state;
1752
1753
1754
1755
1756 int overall_error_count;
1757
1758
1759 ktime_t cookie_life;
1760
1761
1762
1763
1764
1765 unsigned long rto_initial;
1766 unsigned long rto_max;
1767 unsigned long rto_min;
1768
1769
1770 int max_burst;
1771
1772
1773
1774
1775
1776 int max_retrans;
1777
1778
1779
1780
1781
1782 __u16 pf_retrans;
1783
1784 __u16 ps_retrans;
1785
1786
1787 __u16 max_init_attempts;
1788
1789
1790 __u16 init_retries;
1791
1792
1793 unsigned long max_init_timeo;
1794
1795
1796
1797
1798
1799 unsigned long hbinterval;
1800
1801
1802
1803
1804 __u16 pathmaxrxt;
1805
1806 __u32 flowlabel;
1807 __u8 dscp;
1808
1809
1810 __u8 pmtu_pending;
1811
1812
1813
1814
1815 __u32 pathmtu;
1816
1817
1818 __u32 param_flags;
1819
1820 __u32 sackfreq;
1821
1822 unsigned long sackdelay;
1823
1824 unsigned long timeouts[SCTP_NUM_TIMEOUT_TYPES];
1825 struct timer_list timers[SCTP_NUM_TIMEOUT_TYPES];
1826
1827
1828 struct sctp_transport *shutdown_last_sent_to;
1829
1830
1831 struct sctp_transport *init_last_sent_to;
1832
1833
1834 int shutdown_retries;
1835
1836
1837
1838
1839
1840
1841
1842
1843 __u32 next_tsn;
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854 __u32 ctsn_ack_point;
1855
1856
1857 __u32 adv_peer_ack_point;
1858
1859
1860 __u32 highest_sacked;
1861
1862
1863 __u32 fast_recovery_exit;
1864
1865
1866 __u8 fast_recovery;
1867
1868
1869
1870
1871 __u16 unack_data;
1872
1873
1874
1875
1876 __u32 rtx_data_chunks;
1877
1878
1879
1880
1881 __u32 rwnd;
1882
1883
1884 __u32 a_rwnd;
1885
1886
1887
1888
1889 __u32 rwnd_over;
1890
1891
1892
1893
1894
1895 __u32 rwnd_press;
1896
1897
1898
1899
1900
1901 int sndbuf_used;
1902
1903
1904
1905
1906 atomic_t rmem_alloc;
1907
1908
1909
1910
1911 wait_queue_head_t wait;
1912
1913
1914 __u32 frag_point;
1915 __u32 user_frag;
1916
1917
1918 int init_err_counter;
1919
1920
1921 int init_cycle;
1922
1923
1924 __u16 default_stream;
1925 __u16 default_flags;
1926 __u32 default_ppid;
1927 __u32 default_context;
1928 __u32 default_timetolive;
1929
1930
1931 __u32 default_rcv_context;
1932
1933
1934 struct sctp_stream stream;
1935
1936
1937 struct sctp_outq outqueue;
1938
1939
1940
1941
1942 struct sctp_ulpq ulpq;
1943
1944
1945 __u32 last_ecne_tsn;
1946
1947
1948 __u32 last_cwr_tsn;
1949
1950
1951 int numduptsns;
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976 struct sctp_chunk *addip_last_asconf;
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987 struct list_head asconf_ack_list;
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017 struct list_head addip_chunk_list;
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039 __u32 addip_serial;
2040 int src_out_of_asoc_ok;
2041 union sctp_addr *asconf_addr_del_pending;
2042 struct sctp_transport *new_transport;
2043
2044
2045
2046
2047
2048 struct list_head endpoint_shared_keys;
2049
2050
2051
2052
2053 struct sctp_auth_bytes *asoc_shared_key;
2054 struct sctp_shared_key *shkey;
2055
2056
2057
2058
2059 __u16 default_hmac_id;
2060
2061 __u16 active_key_id;
2062
2063 __u8 need_ecne:1,
2064 temp:1,
2065 pf_expose:2,
2066 force_delay:1;
2067
2068 __u8 strreset_enable;
2069 __u8 strreset_outstanding;
2070
2071 __u32 strreset_outseq;
2072 __u32 strreset_inseq;
2073 __u32 strreset_result[2];
2074
2075 struct sctp_chunk *strreset_chunk;
2076
2077 struct sctp_priv_assoc_stats stats;
2078
2079 int sent_cnt_removable;
2080
2081 __u16 subscribe;
2082
2083 __u64 abandoned_unsent[SCTP_PR_INDEX(MAX) + 1];
2084 __u64 abandoned_sent[SCTP_PR_INDEX(MAX) + 1];
2085
2086 struct rcu_head rcu;
2087};
2088
2089
2090
2091
2092
2093enum {
2094 SCTP_ASSOC_EYECATCHER = 0xa550c123,
2095};
2096
2097
2098static inline struct sctp_association *sctp_assoc(struct sctp_ep_common *base)
2099{
2100 struct sctp_association *asoc;
2101
2102 asoc = container_of(base, struct sctp_association, base);
2103 return asoc;
2104}
2105
2106
2107
2108
2109struct sctp_association *
2110sctp_association_new(const struct sctp_endpoint *ep, const struct sock *sk,
2111 enum sctp_scope scope, gfp_t gfp);
2112void sctp_association_free(struct sctp_association *);
2113void sctp_association_put(struct sctp_association *);
2114void sctp_association_hold(struct sctp_association *);
2115
2116struct sctp_transport *sctp_assoc_choose_alter_transport(
2117 struct sctp_association *, struct sctp_transport *);
2118void sctp_assoc_update_retran_path(struct sctp_association *);
2119struct sctp_transport *sctp_assoc_lookup_paddr(const struct sctp_association *,
2120 const union sctp_addr *);
2121int sctp_assoc_lookup_laddr(struct sctp_association *asoc,
2122 const union sctp_addr *laddr);
2123struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *,
2124 const union sctp_addr *address,
2125 const gfp_t gfp,
2126 const int peer_state);
2127void sctp_assoc_del_peer(struct sctp_association *asoc,
2128 const union sctp_addr *addr);
2129void sctp_assoc_rm_peer(struct sctp_association *asoc,
2130 struct sctp_transport *peer);
2131void sctp_assoc_control_transport(struct sctp_association *asoc,
2132 struct sctp_transport *transport,
2133 enum sctp_transport_cmd command,
2134 sctp_sn_error_t error);
2135struct sctp_transport *sctp_assoc_lookup_tsn(struct sctp_association *, __u32);
2136void sctp_assoc_migrate(struct sctp_association *, struct sock *);
2137int sctp_assoc_update(struct sctp_association *old,
2138 struct sctp_association *new);
2139
2140__u32 sctp_association_get_next_tsn(struct sctp_association *);
2141
2142void sctp_assoc_update_frag_point(struct sctp_association *asoc);
2143void sctp_assoc_set_pmtu(struct sctp_association *asoc, __u32 pmtu);
2144void sctp_assoc_sync_pmtu(struct sctp_association *asoc);
2145void sctp_assoc_rwnd_increase(struct sctp_association *, unsigned int);
2146void sctp_assoc_rwnd_decrease(struct sctp_association *, unsigned int);
2147void sctp_assoc_set_primary(struct sctp_association *,
2148 struct sctp_transport *);
2149void sctp_assoc_del_nonprimary_peers(struct sctp_association *,
2150 struct sctp_transport *);
2151int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc,
2152 enum sctp_scope scope, gfp_t gfp);
2153int sctp_assoc_set_bind_addr_from_cookie(struct sctp_association *,
2154 struct sctp_cookie*,
2155 gfp_t gfp);
2156int sctp_assoc_set_id(struct sctp_association *, gfp_t);
2157void sctp_assoc_clean_asconf_ack_cache(const struct sctp_association *asoc);
2158struct sctp_chunk *sctp_assoc_lookup_asconf_ack(
2159 const struct sctp_association *asoc,
2160 __be32 serial);
2161void sctp_asconf_queue_teardown(struct sctp_association *asoc);
2162
2163int sctp_cmp_addr_exact(const union sctp_addr *ss1,
2164 const union sctp_addr *ss2);
2165struct sctp_chunk *sctp_get_ecne_prepend(struct sctp_association *asoc);
2166
2167
2168struct sctp_cmsgs {
2169 struct sctp_initmsg *init;
2170 struct sctp_sndrcvinfo *srinfo;
2171 struct sctp_sndinfo *sinfo;
2172 struct sctp_prinfo *prinfo;
2173 struct sctp_authinfo *authinfo;
2174 struct msghdr *addrs_msg;
2175};
2176
2177
2178struct sctp_dbg_objcnt_entry {
2179 char *label;
2180 atomic_t *counter;
2181};
2182
2183#endif
2184