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