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