linux-headers (unknown)

(root)/
include/
linux/
sctp.h
       1  /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
       2  /* SCTP kernel implementation
       3   * (C) Copyright IBM Corp. 2001, 2004
       4   * Copyright (c) 1999-2000 Cisco, Inc.
       5   * Copyright (c) 1999-2001 Motorola, Inc.
       6   * Copyright (c) 2002 Intel Corp.
       7   *
       8   * This file is part of the SCTP kernel implementation
       9   *
      10   * This header represents the structures and constants needed to support
      11   * the SCTP Extension to the Sockets API.
      12   *
      13   * This SCTP implementation is free software;
      14   * you can redistribute it and/or modify it under the terms of
      15   * the GNU General Public License as published by
      16   * the Free Software Foundation; either version 2, or (at your option)
      17   * any later version.
      18   *
      19   * This SCTP implementation is distributed in the hope that it
      20   * will be useful, but WITHOUT ANY WARRANTY; without even the implied
      21   *                 ************************
      22   * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
      23   * See the GNU General Public License for more details.
      24   *
      25   * You should have received a copy of the GNU General Public License
      26   * along with GNU CC; see the file COPYING.  If not, see
      27   * <http://www.gnu.org/licenses/>.
      28   *
      29   * Please send any bug reports or fixes you make to the
      30   * email address(es):
      31   *    lksctp developers <linux-sctp@vger.kernel.org>
      32   *
      33   * Or submit a bug report through the following website:
      34   *    http://www.sf.net/projects/lksctp
      35   *
      36   * Written or modified by:
      37   *    La Monte H.P. Yarroll    <piggy@acm.org>
      38   *    R. Stewart               <randall@sctp.chicago.il.us>
      39   *    K. Morneau               <kmorneau@cisco.com>
      40   *    Q. Xie                   <qxie1@email.mot.com>
      41   *    Karl Knutson             <karl@athena.chicago.il.us>
      42   *    Jon Grimm                <jgrimm@us.ibm.com>
      43   *    Daisy Chang              <daisyc@us.ibm.com>
      44   *    Ryan Layer               <rmlayer@us.ibm.com>
      45   *    Ardelle Fan              <ardelle.fan@intel.com>
      46   *    Sridhar Samudrala        <sri@us.ibm.com>
      47   *    Inaky Perez-Gonzalez     <inaky.gonzalez@intel.com>
      48   *    Vlad Yasevich            <vladislav.yasevich@hp.com>
      49   *
      50   * Any bugs reported given to us we will try to fix... any fixes shared will
      51   * be incorporated into the next SCTP release.
      52   */
      53  
      54  #ifndef _SCTP_H
      55  #define _SCTP_H
      56  
      57  #include <linux/types.h>
      58  #include <linux/socket.h>
      59  
      60  typedef __s32 sctp_assoc_t;
      61  
      62  #define SCTP_FUTURE_ASSOC	0
      63  #define SCTP_CURRENT_ASSOC	1
      64  #define SCTP_ALL_ASSOC		2
      65  
      66  /* The following symbols come from the Sockets API Extensions for
      67   * SCTP <draft-ietf-tsvwg-sctpsocket-07.txt>.
      68   */
      69  #define SCTP_RTOINFO	0
      70  #define SCTP_ASSOCINFO  1
      71  #define SCTP_INITMSG	2
      72  #define SCTP_NODELAY	3		/* Get/set nodelay option. */
      73  #define SCTP_AUTOCLOSE	4
      74  #define SCTP_SET_PEER_PRIMARY_ADDR 5
      75  #define SCTP_PRIMARY_ADDR	6
      76  #define SCTP_ADAPTATION_LAYER	7
      77  #define SCTP_DISABLE_FRAGMENTS	8
      78  #define SCTP_PEER_ADDR_PARAMS	9
      79  #define SCTP_DEFAULT_SEND_PARAM	10
      80  #define SCTP_EVENTS	11
      81  #define SCTP_I_WANT_MAPPED_V4_ADDR 12	/* Turn on/off mapped v4 addresses  */
      82  #define SCTP_MAXSEG	13		/* Get/set maximum fragment. */
      83  #define SCTP_STATUS	14
      84  #define SCTP_GET_PEER_ADDR_INFO	15
      85  #define SCTP_DELAYED_ACK_TIME	16
      86  #define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME
      87  #define SCTP_DELAYED_SACK SCTP_DELAYED_ACK_TIME
      88  #define SCTP_CONTEXT	17
      89  #define SCTP_FRAGMENT_INTERLEAVE	18
      90  #define SCTP_PARTIAL_DELIVERY_POINT	19 /* Set/Get partial delivery point */
      91  #define SCTP_MAX_BURST	20		/* Set/Get max burst */
      92  #define SCTP_AUTH_CHUNK	21	/* Set only: add a chunk type to authenticate */
      93  #define SCTP_HMAC_IDENT	22
      94  #define SCTP_AUTH_KEY	23
      95  #define SCTP_AUTH_ACTIVE_KEY	24
      96  #define SCTP_AUTH_DELETE_KEY	25
      97  #define SCTP_PEER_AUTH_CHUNKS	26	/* Read only */
      98  #define SCTP_LOCAL_AUTH_CHUNKS	27	/* Read only */
      99  #define SCTP_GET_ASSOC_NUMBER	28	/* Read only */
     100  #define SCTP_GET_ASSOC_ID_LIST	29	/* Read only */
     101  #define SCTP_AUTO_ASCONF       30
     102  #define SCTP_PEER_ADDR_THLDS	31
     103  #define SCTP_RECVRCVINFO	32
     104  #define SCTP_RECVNXTINFO	33
     105  #define SCTP_DEFAULT_SNDINFO	34
     106  #define SCTP_AUTH_DEACTIVATE_KEY	35
     107  #define SCTP_REUSE_PORT		36
     108  #define SCTP_PEER_ADDR_THLDS_V2	37
     109  
     110  /* Internal Socket Options. Some of the sctp library functions are
     111   * implemented using these socket options.
     112   */
     113  #define SCTP_SOCKOPT_BINDX_ADD	100	/* BINDX requests for adding addrs */
     114  #define SCTP_SOCKOPT_BINDX_REM	101	/* BINDX requests for removing addrs. */
     115  #define SCTP_SOCKOPT_PEELOFF	102	/* peel off association. */
     116  /* Options 104-106 are deprecated and removed. Do not use this space */
     117  #define SCTP_SOCKOPT_CONNECTX_OLD	107	/* CONNECTX old requests. */
     118  #define SCTP_GET_PEER_ADDRS	108		/* Get all peer address. */
     119  #define SCTP_GET_LOCAL_ADDRS	109		/* Get all local address. */
     120  #define SCTP_SOCKOPT_CONNECTX	110		/* CONNECTX requests. */
     121  #define SCTP_SOCKOPT_CONNECTX3	111	/* CONNECTX requests (updated) */
     122  #define SCTP_GET_ASSOC_STATS	112	/* Read only */
     123  #define SCTP_PR_SUPPORTED	113
     124  #define SCTP_DEFAULT_PRINFO	114
     125  #define SCTP_PR_ASSOC_STATUS	115
     126  #define SCTP_PR_STREAM_STATUS	116
     127  #define SCTP_RECONFIG_SUPPORTED	117
     128  #define SCTP_ENABLE_STREAM_RESET	118
     129  #define SCTP_RESET_STREAMS	119
     130  #define SCTP_RESET_ASSOC	120
     131  #define SCTP_ADD_STREAMS	121
     132  #define SCTP_SOCKOPT_PEELOFF_FLAGS 122
     133  #define SCTP_STREAM_SCHEDULER	123
     134  #define SCTP_STREAM_SCHEDULER_VALUE	124
     135  #define SCTP_INTERLEAVING_SUPPORTED	125
     136  #define SCTP_SENDMSG_CONNECT	126
     137  #define SCTP_EVENT	127
     138  #define SCTP_ASCONF_SUPPORTED	128
     139  #define SCTP_AUTH_SUPPORTED	129
     140  #define SCTP_ECN_SUPPORTED	130
     141  #define SCTP_EXPOSE_POTENTIALLY_FAILED_STATE	131
     142  #define SCTP_EXPOSE_PF_STATE	SCTP_EXPOSE_POTENTIALLY_FAILED_STATE
     143  #define SCTP_REMOTE_UDP_ENCAPS_PORT	132
     144  #define SCTP_PLPMTUD_PROBE_INTERVAL	133
     145  
     146  /* PR-SCTP policies */
     147  #define SCTP_PR_SCTP_NONE	0x0000
     148  #define SCTP_PR_SCTP_TTL	0x0010
     149  #define SCTP_PR_SCTP_RTX	0x0020
     150  #define SCTP_PR_SCTP_PRIO	0x0030
     151  #define SCTP_PR_SCTP_MAX	SCTP_PR_SCTP_PRIO
     152  #define SCTP_PR_SCTP_MASK	0x0030
     153  
     154  #define __SCTP_PR_INDEX(x)	((x >> 4) - 1)
     155  #define SCTP_PR_INDEX(x)	__SCTP_PR_INDEX(SCTP_PR_SCTP_ ## x)
     156  
     157  #define SCTP_PR_POLICY(x)	((x) & SCTP_PR_SCTP_MASK)
     158  #define SCTP_PR_SET_POLICY(flags, x)	\
     159  	do {				\
     160  		flags &= ~SCTP_PR_SCTP_MASK;	\
     161  		flags |= x;		\
     162  	} while (0)
     163  
     164  #define SCTP_PR_TTL_ENABLED(x)	(SCTP_PR_POLICY(x) == SCTP_PR_SCTP_TTL)
     165  #define SCTP_PR_RTX_ENABLED(x)	(SCTP_PR_POLICY(x) == SCTP_PR_SCTP_RTX)
     166  #define SCTP_PR_PRIO_ENABLED(x)	(SCTP_PR_POLICY(x) == SCTP_PR_SCTP_PRIO)
     167  
     168  /* For enable stream reset */
     169  #define SCTP_ENABLE_RESET_STREAM_REQ	0x01
     170  #define SCTP_ENABLE_RESET_ASSOC_REQ	0x02
     171  #define SCTP_ENABLE_CHANGE_ASSOC_REQ	0x04
     172  #define SCTP_ENABLE_STRRESET_MASK	0x07
     173  
     174  #define SCTP_STREAM_RESET_INCOMING	0x01
     175  #define SCTP_STREAM_RESET_OUTGOING	0x02
     176  
     177  /* These are bit fields for msghdr->msg_flags.  See section 5.1.  */
     178  /* On user space Linux, these live in <bits/socket.h> as an enum.  */
     179  enum sctp_msg_flags {
     180  	MSG_NOTIFICATION = 0x8000,
     181  #define MSG_NOTIFICATION MSG_NOTIFICATION
     182  };
     183  
     184  /* 5.3.1 SCTP Initiation Structure (SCTP_INIT)
     185   *
     186   *   This cmsghdr structure provides information for initializing new
     187   *   SCTP associations with sendmsg().  The SCTP_INITMSG socket option
     188   *   uses this same data structure.  This structure is not used for
     189   *   recvmsg().
     190   *
     191   *   cmsg_level    cmsg_type      cmsg_data[]
     192   *   ------------  ------------   ----------------------
     193   *   IPPROTO_SCTP  SCTP_INIT      struct sctp_initmsg
     194   */
     195  struct sctp_initmsg {
     196  	__u16 sinit_num_ostreams;
     197  	__u16 sinit_max_instreams;
     198  	__u16 sinit_max_attempts;
     199  	__u16 sinit_max_init_timeo;
     200  };
     201  
     202  /* 5.3.2 SCTP Header Information Structure (SCTP_SNDRCV)
     203   *
     204   *   This cmsghdr structure specifies SCTP options for sendmsg() and
     205   *   describes SCTP header information about a received message through
     206   *   recvmsg().
     207   *
     208   *   cmsg_level    cmsg_type      cmsg_data[]
     209   *   ------------  ------------   ----------------------
     210   *   IPPROTO_SCTP  SCTP_SNDRCV    struct sctp_sndrcvinfo
     211   */
     212  struct sctp_sndrcvinfo {
     213  	__u16 sinfo_stream;
     214  	__u16 sinfo_ssn;
     215  	__u16 sinfo_flags;
     216  	__u32 sinfo_ppid;
     217  	__u32 sinfo_context;
     218  	__u32 sinfo_timetolive;
     219  	__u32 sinfo_tsn;
     220  	__u32 sinfo_cumtsn;
     221  	sctp_assoc_t sinfo_assoc_id;
     222  };
     223  
     224  /* 5.3.4 SCTP Send Information Structure (SCTP_SNDINFO)
     225   *
     226   *   This cmsghdr structure specifies SCTP options for sendmsg().
     227   *
     228   *   cmsg_level    cmsg_type      cmsg_data[]
     229   *   ------------  ------------   -------------------
     230   *   IPPROTO_SCTP  SCTP_SNDINFO   struct sctp_sndinfo
     231   */
     232  struct sctp_sndinfo {
     233  	__u16 snd_sid;
     234  	__u16 snd_flags;
     235  	__u32 snd_ppid;
     236  	__u32 snd_context;
     237  	sctp_assoc_t snd_assoc_id;
     238  };
     239  
     240  /* 5.3.5 SCTP Receive Information Structure (SCTP_RCVINFO)
     241   *
     242   *   This cmsghdr structure describes SCTP receive information
     243   *   about a received message through recvmsg().
     244   *
     245   *   cmsg_level    cmsg_type      cmsg_data[]
     246   *   ------------  ------------   -------------------
     247   *   IPPROTO_SCTP  SCTP_RCVINFO   struct sctp_rcvinfo
     248   */
     249  struct sctp_rcvinfo {
     250  	__u16 rcv_sid;
     251  	__u16 rcv_ssn;
     252  	__u16 rcv_flags;
     253  	__u32 rcv_ppid;
     254  	__u32 rcv_tsn;
     255  	__u32 rcv_cumtsn;
     256  	__u32 rcv_context;
     257  	sctp_assoc_t rcv_assoc_id;
     258  };
     259  
     260  /* 5.3.6 SCTP Next Receive Information Structure (SCTP_NXTINFO)
     261   *
     262   *   This cmsghdr structure describes SCTP receive information
     263   *   of the next message that will be delivered through recvmsg()
     264   *   if this information is already available when delivering
     265   *   the current message.
     266   *
     267   *   cmsg_level    cmsg_type      cmsg_data[]
     268   *   ------------  ------------   -------------------
     269   *   IPPROTO_SCTP  SCTP_NXTINFO   struct sctp_nxtinfo
     270   */
     271  struct sctp_nxtinfo {
     272  	__u16 nxt_sid;
     273  	__u16 nxt_flags;
     274  	__u32 nxt_ppid;
     275  	__u32 nxt_length;
     276  	sctp_assoc_t nxt_assoc_id;
     277  };
     278  
     279  /* 5.3.7 SCTP PR-SCTP Information Structure (SCTP_PRINFO)
     280   *
     281   *   This cmsghdr structure specifies SCTP options for sendmsg().
     282   *
     283   *   cmsg_level    cmsg_type      cmsg_data[]
     284   *   ------------  ------------   -------------------
     285   *   IPPROTO_SCTP  SCTP_PRINFO    struct sctp_prinfo
     286   */
     287  struct sctp_prinfo {
     288  	__u16 pr_policy;
     289  	__u32 pr_value;
     290  };
     291  
     292  /* 5.3.8 SCTP AUTH Information Structure (SCTP_AUTHINFO)
     293   *
     294   *   This cmsghdr structure specifies SCTP options for sendmsg().
     295   *
     296   *   cmsg_level    cmsg_type      cmsg_data[]
     297   *   ------------  ------------   -------------------
     298   *   IPPROTO_SCTP  SCTP_AUTHINFO  struct sctp_authinfo
     299   */
     300  struct sctp_authinfo {
     301  	__u16 auth_keynumber;
     302  };
     303  
     304  /*
     305   *  sinfo_flags: 16 bits (unsigned integer)
     306   *
     307   *   This field may contain any of the following flags and is composed of
     308   *   a bitwise OR of these values.
     309   */
     310  enum sctp_sinfo_flags {
     311  	SCTP_UNORDERED		= (1 << 0), /* Send/receive message unordered. */
     312  	SCTP_ADDR_OVER		= (1 << 1), /* Override the primary destination. */
     313  	SCTP_ABORT		= (1 << 2), /* Send an ABORT message to the peer. */
     314  	SCTP_SACK_IMMEDIATELY	= (1 << 3), /* SACK should be sent without delay. */
     315  	/* 2 bits here have been used by SCTP_PR_SCTP_MASK */
     316  	SCTP_SENDALL		= (1 << 6),
     317  	SCTP_PR_SCTP_ALL	= (1 << 7),
     318  	SCTP_NOTIFICATION	= MSG_NOTIFICATION, /* Next message is not user msg but notification. */
     319  	SCTP_EOF		= MSG_FIN,  /* Initiate graceful shutdown process. */
     320  };
     321  
     322  typedef union {
     323  	__u8   			raw;
     324  	struct sctp_initmsg	init;
     325  	struct sctp_sndrcvinfo	sndrcv;
     326  } sctp_cmsg_data_t;
     327  
     328  /* These are cmsg_types.  */
     329  typedef enum sctp_cmsg_type {
     330  	SCTP_INIT,		/* 5.2.1 SCTP Initiation Structure */
     331  #define SCTP_INIT	SCTP_INIT
     332  	SCTP_SNDRCV,		/* 5.2.2 SCTP Header Information Structure */
     333  #define SCTP_SNDRCV	SCTP_SNDRCV
     334  	SCTP_SNDINFO,		/* 5.3.4 SCTP Send Information Structure */
     335  #define SCTP_SNDINFO	SCTP_SNDINFO
     336  	SCTP_RCVINFO,		/* 5.3.5 SCTP Receive Information Structure */
     337  #define SCTP_RCVINFO	SCTP_RCVINFO
     338  	SCTP_NXTINFO,		/* 5.3.6 SCTP Next Receive Information Structure */
     339  #define SCTP_NXTINFO	SCTP_NXTINFO
     340  	SCTP_PRINFO,		/* 5.3.7 SCTP PR-SCTP Information Structure */
     341  #define SCTP_PRINFO	SCTP_PRINFO
     342  	SCTP_AUTHINFO,		/* 5.3.8 SCTP AUTH Information Structure */
     343  #define SCTP_AUTHINFO	SCTP_AUTHINFO
     344  	SCTP_DSTADDRV4,		/* 5.3.9 SCTP Destination IPv4 Address Structure */
     345  #define SCTP_DSTADDRV4	SCTP_DSTADDRV4
     346  	SCTP_DSTADDRV6,		/* 5.3.10 SCTP Destination IPv6 Address Structure */
     347  #define SCTP_DSTADDRV6	SCTP_DSTADDRV6
     348  } sctp_cmsg_t;
     349  
     350  /*
     351   * 5.3.1.1 SCTP_ASSOC_CHANGE
     352   *
     353   *   Communication notifications inform the ULP that an SCTP association
     354   *   has either begun or ended. The identifier for a new association is
     355   *   provided by this notificaion. The notification information has the
     356   *   following format:
     357   *
     358   */
     359  struct sctp_assoc_change {
     360  	__u16 sac_type;
     361  	__u16 sac_flags;
     362  	__u32 sac_length;
     363  	__u16 sac_state;
     364  	__u16 sac_error;
     365  	__u16 sac_outbound_streams;
     366  	__u16 sac_inbound_streams;
     367  	sctp_assoc_t sac_assoc_id;
     368  	__u8 sac_info[];
     369  };
     370  
     371  /*
     372   *   sac_state: 32 bits (signed integer)
     373   *
     374   *   This field holds one of a number of values that communicate the
     375   *   event that happened to the association.  They include:
     376   *
     377   *   Note:  The following state names deviate from the API draft as
     378   *   the names clash too easily with other kernel symbols.
     379   */
     380  enum sctp_sac_state {
     381  	SCTP_COMM_UP,
     382  	SCTP_COMM_LOST,
     383  	SCTP_RESTART,
     384  	SCTP_SHUTDOWN_COMP,
     385  	SCTP_CANT_STR_ASSOC,
     386  };
     387  
     388  /*
     389   * 5.3.1.2 SCTP_PEER_ADDR_CHANGE
     390   *
     391   *   When a destination address on a multi-homed peer encounters a change
     392   *   an interface details event is sent.  The information has the
     393   *   following structure:
     394   */
     395  struct sctp_paddr_change {
     396  	__u16 spc_type;
     397  	__u16 spc_flags;
     398  	__u32 spc_length;
     399  	struct sockaddr_storage spc_aaddr;
     400  	int spc_state;
     401  	int spc_error;
     402  	sctp_assoc_t spc_assoc_id;
     403  } __attribute__((packed, aligned(4)));
     404  
     405  /*
     406   *    spc_state:  32 bits (signed integer)
     407   *
     408   *   This field holds one of a number of values that communicate the
     409   *   event that happened to the address.  They include:
     410   */
     411  enum sctp_spc_state {
     412  	SCTP_ADDR_AVAILABLE,
     413  	SCTP_ADDR_UNREACHABLE,
     414  	SCTP_ADDR_REMOVED,
     415  	SCTP_ADDR_ADDED,
     416  	SCTP_ADDR_MADE_PRIM,
     417  	SCTP_ADDR_CONFIRMED,
     418  	SCTP_ADDR_POTENTIALLY_FAILED,
     419  #define SCTP_ADDR_PF	SCTP_ADDR_POTENTIALLY_FAILED
     420  };
     421  
     422  
     423  /*
     424   * 5.3.1.3 SCTP_REMOTE_ERROR
     425   *
     426   *   A remote peer may send an Operational Error message to its peer.
     427   *   This message indicates a variety of error conditions on an
     428   *   association. The entire error TLV as it appears on the wire is
     429   *   included in a SCTP_REMOTE_ERROR event.  Please refer to the SCTP
     430   *   specification [SCTP] and any extensions for a list of possible
     431   *   error formats. SCTP error TLVs have the format:
     432   */
     433  struct sctp_remote_error {
     434  	__u16 sre_type;
     435  	__u16 sre_flags;
     436  	__u32 sre_length;
     437  	__be16 sre_error;
     438  	sctp_assoc_t sre_assoc_id;
     439  	__u8 sre_data[];
     440  };
     441  
     442  
     443  /*
     444   * 5.3.1.4 SCTP_SEND_FAILED
     445   *
     446   *   If SCTP cannot deliver a message it may return the message as a
     447   *   notification.
     448   */
     449  struct sctp_send_failed {
     450  	__u16 ssf_type;
     451  	__u16 ssf_flags;
     452  	__u32 ssf_length;
     453  	__u32 ssf_error;
     454  	struct sctp_sndrcvinfo ssf_info;
     455  	sctp_assoc_t ssf_assoc_id;
     456  	__u8 ssf_data[];
     457  };
     458  
     459  struct sctp_send_failed_event {
     460  	__u16 ssf_type;
     461  	__u16 ssf_flags;
     462  	__u32 ssf_length;
     463  	__u32 ssf_error;
     464  	struct sctp_sndinfo ssfe_info;
     465  	sctp_assoc_t ssf_assoc_id;
     466  	__u8 ssf_data[];
     467  };
     468  
     469  /*
     470   *   ssf_flags: 16 bits (unsigned integer)
     471   *
     472   *   The flag value will take one of the following values
     473   *
     474   *   SCTP_DATA_UNSENT  - Indicates that the data was never put on
     475   *                       the wire.
     476   *
     477   *   SCTP_DATA_SENT    - Indicates that the data was put on the wire.
     478   *                       Note that this does not necessarily mean that the
     479   *                       data was (or was not) successfully delivered.
     480   */
     481  enum sctp_ssf_flags {
     482  	SCTP_DATA_UNSENT,
     483  	SCTP_DATA_SENT,
     484  };
     485  
     486  /*
     487   * 5.3.1.5 SCTP_SHUTDOWN_EVENT
     488   *
     489   *   When a peer sends a SHUTDOWN, SCTP delivers this notification to
     490   *   inform the application that it should cease sending data.
     491   */
     492  struct sctp_shutdown_event {
     493  	__u16 sse_type;
     494  	__u16 sse_flags;
     495  	__u32 sse_length;
     496  	sctp_assoc_t sse_assoc_id;
     497  };
     498  
     499  /*
     500   * 5.3.1.6 SCTP_ADAPTATION_INDICATION
     501   *
     502   *   When a peer sends a Adaptation Layer Indication parameter , SCTP
     503   *   delivers this notification to inform the application
     504   *   that of the peers requested adaptation layer.
     505   */
     506  struct sctp_adaptation_event {
     507  	__u16 sai_type;
     508  	__u16 sai_flags;
     509  	__u32 sai_length;
     510  	__u32 sai_adaptation_ind;
     511  	sctp_assoc_t sai_assoc_id;
     512  };
     513  
     514  /*
     515   * 5.3.1.7 SCTP_PARTIAL_DELIVERY_EVENT
     516   *
     517   *   When a receiver is engaged in a partial delivery of a
     518   *   message this notification will be used to indicate
     519   *   various events.
     520   */
     521  struct sctp_pdapi_event {
     522  	__u16 pdapi_type;
     523  	__u16 pdapi_flags;
     524  	__u32 pdapi_length;
     525  	__u32 pdapi_indication;
     526  	sctp_assoc_t pdapi_assoc_id;
     527  	__u32 pdapi_stream;
     528  	__u32 pdapi_seq;
     529  };
     530  
     531  enum { SCTP_PARTIAL_DELIVERY_ABORTED=0, };
     532  
     533  /*
     534   * 5.3.1.8.  SCTP_AUTHENTICATION_EVENT
     535   *
     536   *  When a receiver is using authentication this message will provide
     537   *  notifications regarding new keys being made active as well as errors.
     538   */
     539  struct sctp_authkey_event {
     540  	__u16 auth_type;
     541  	__u16 auth_flags;
     542  	__u32 auth_length;
     543  	__u16 auth_keynumber;
     544  	__u16 auth_altkeynumber;
     545  	__u32 auth_indication;
     546  	sctp_assoc_t auth_assoc_id;
     547  };
     548  
     549  enum {
     550  	SCTP_AUTH_NEW_KEY,
     551  #define	SCTP_AUTH_NEWKEY	SCTP_AUTH_NEW_KEY /* compatible with before */
     552  	SCTP_AUTH_FREE_KEY,
     553  	SCTP_AUTH_NO_AUTH,
     554  };
     555  
     556  /*
     557   * 6.1.9. SCTP_SENDER_DRY_EVENT
     558   *
     559   * When the SCTP stack has no more user data to send or retransmit, this
     560   * notification is given to the user. Also, at the time when a user app
     561   * subscribes to this event, if there is no data to be sent or
     562   * retransmit, the stack will immediately send up this notification.
     563   */
     564  struct sctp_sender_dry_event {
     565  	__u16 sender_dry_type;
     566  	__u16 sender_dry_flags;
     567  	__u32 sender_dry_length;
     568  	sctp_assoc_t sender_dry_assoc_id;
     569  };
     570  
     571  #define SCTP_STREAM_RESET_INCOMING_SSN	0x0001
     572  #define SCTP_STREAM_RESET_OUTGOING_SSN	0x0002
     573  #define SCTP_STREAM_RESET_DENIED	0x0004
     574  #define SCTP_STREAM_RESET_FAILED	0x0008
     575  struct sctp_stream_reset_event {
     576  	__u16 strreset_type;
     577  	__u16 strreset_flags;
     578  	__u32 strreset_length;
     579  	sctp_assoc_t strreset_assoc_id;
     580  	__u16 strreset_stream_list[];
     581  };
     582  
     583  #define SCTP_ASSOC_RESET_DENIED		0x0004
     584  #define SCTP_ASSOC_RESET_FAILED		0x0008
     585  struct sctp_assoc_reset_event {
     586  	__u16 assocreset_type;
     587  	__u16 assocreset_flags;
     588  	__u32 assocreset_length;
     589  	sctp_assoc_t assocreset_assoc_id;
     590  	__u32 assocreset_local_tsn;
     591  	__u32 assocreset_remote_tsn;
     592  };
     593  
     594  #define SCTP_ASSOC_CHANGE_DENIED	0x0004
     595  #define SCTP_ASSOC_CHANGE_FAILED	0x0008
     596  #define SCTP_STREAM_CHANGE_DENIED	SCTP_ASSOC_CHANGE_DENIED
     597  #define SCTP_STREAM_CHANGE_FAILED	SCTP_ASSOC_CHANGE_FAILED
     598  struct sctp_stream_change_event {
     599  	__u16 strchange_type;
     600  	__u16 strchange_flags;
     601  	__u32 strchange_length;
     602  	sctp_assoc_t strchange_assoc_id;
     603  	__u16 strchange_instrms;
     604  	__u16 strchange_outstrms;
     605  };
     606  
     607  /*
     608   * Described in Section 7.3
     609   *   Ancillary Data and Notification Interest Options
     610   */
     611  struct sctp_event_subscribe {
     612  	__u8 sctp_data_io_event;
     613  	__u8 sctp_association_event;
     614  	__u8 sctp_address_event;
     615  	__u8 sctp_send_failure_event;
     616  	__u8 sctp_peer_error_event;
     617  	__u8 sctp_shutdown_event;
     618  	__u8 sctp_partial_delivery_event;
     619  	__u8 sctp_adaptation_layer_event;
     620  	__u8 sctp_authentication_event;
     621  	__u8 sctp_sender_dry_event;
     622  	__u8 sctp_stream_reset_event;
     623  	__u8 sctp_assoc_reset_event;
     624  	__u8 sctp_stream_change_event;
     625  	__u8 sctp_send_failure_event_event;
     626  };
     627  
     628  /*
     629   * 5.3.1 SCTP Notification Structure
     630   *
     631   *   The notification structure is defined as the union of all
     632   *   notification types.
     633   *
     634   */
     635  union sctp_notification {
     636  	struct {
     637  		__u16 sn_type;             /* Notification type. */
     638  		__u16 sn_flags;
     639  		__u32 sn_length;
     640  	} sn_header;
     641  	struct sctp_assoc_change sn_assoc_change;
     642  	struct sctp_paddr_change sn_paddr_change;
     643  	struct sctp_remote_error sn_remote_error;
     644  	struct sctp_send_failed sn_send_failed;
     645  	struct sctp_shutdown_event sn_shutdown_event;
     646  	struct sctp_adaptation_event sn_adaptation_event;
     647  	struct sctp_pdapi_event sn_pdapi_event;
     648  	struct sctp_authkey_event sn_authkey_event;
     649  	struct sctp_sender_dry_event sn_sender_dry_event;
     650  	struct sctp_stream_reset_event sn_strreset_event;
     651  	struct sctp_assoc_reset_event sn_assocreset_event;
     652  	struct sctp_stream_change_event sn_strchange_event;
     653  	struct sctp_send_failed_event sn_send_failed_event;
     654  };
     655  
     656  /* Section 5.3.1
     657   * All standard values for sn_type flags are greater than 2^15.
     658   * Values from 2^15 and down are reserved.
     659   */
     660  
     661  enum sctp_sn_type {
     662  	SCTP_SN_TYPE_BASE	= (1<<15),
     663  	SCTP_DATA_IO_EVENT	= SCTP_SN_TYPE_BASE,
     664  #define SCTP_DATA_IO_EVENT		SCTP_DATA_IO_EVENT
     665  	SCTP_ASSOC_CHANGE,
     666  #define SCTP_ASSOC_CHANGE		SCTP_ASSOC_CHANGE
     667  	SCTP_PEER_ADDR_CHANGE,
     668  #define SCTP_PEER_ADDR_CHANGE		SCTP_PEER_ADDR_CHANGE
     669  	SCTP_SEND_FAILED,
     670  #define SCTP_SEND_FAILED		SCTP_SEND_FAILED
     671  	SCTP_REMOTE_ERROR,
     672  #define SCTP_REMOTE_ERROR		SCTP_REMOTE_ERROR
     673  	SCTP_SHUTDOWN_EVENT,
     674  #define SCTP_SHUTDOWN_EVENT		SCTP_SHUTDOWN_EVENT
     675  	SCTP_PARTIAL_DELIVERY_EVENT,
     676  #define SCTP_PARTIAL_DELIVERY_EVENT	SCTP_PARTIAL_DELIVERY_EVENT
     677  	SCTP_ADAPTATION_INDICATION,
     678  #define SCTP_ADAPTATION_INDICATION	SCTP_ADAPTATION_INDICATION
     679  	SCTP_AUTHENTICATION_EVENT,
     680  #define SCTP_AUTHENTICATION_INDICATION	SCTP_AUTHENTICATION_EVENT
     681  	SCTP_SENDER_DRY_EVENT,
     682  #define SCTP_SENDER_DRY_EVENT		SCTP_SENDER_DRY_EVENT
     683  	SCTP_STREAM_RESET_EVENT,
     684  #define SCTP_STREAM_RESET_EVENT		SCTP_STREAM_RESET_EVENT
     685  	SCTP_ASSOC_RESET_EVENT,
     686  #define SCTP_ASSOC_RESET_EVENT		SCTP_ASSOC_RESET_EVENT
     687  	SCTP_STREAM_CHANGE_EVENT,
     688  #define SCTP_STREAM_CHANGE_EVENT	SCTP_STREAM_CHANGE_EVENT
     689  	SCTP_SEND_FAILED_EVENT,
     690  #define SCTP_SEND_FAILED_EVENT		SCTP_SEND_FAILED_EVENT
     691  	SCTP_SN_TYPE_MAX	= SCTP_SEND_FAILED_EVENT,
     692  #define SCTP_SN_TYPE_MAX		SCTP_SN_TYPE_MAX
     693  };
     694  
     695  /* Notification error codes used to fill up the error fields in some
     696   * notifications.
     697   * SCTP_PEER_ADDRESS_CHAGE 	: spc_error
     698   * SCTP_ASSOC_CHANGE		: sac_error
     699   * These names should be potentially included in the draft 04 of the SCTP
     700   * sockets API specification.
     701   */
     702  typedef enum sctp_sn_error {
     703  	SCTP_FAILED_THRESHOLD,
     704  	SCTP_RECEIVED_SACK,
     705  	SCTP_HEARTBEAT_SUCCESS,
     706  	SCTP_RESPONSE_TO_USER_REQ,
     707  	SCTP_INTERNAL_ERROR,
     708  	SCTP_SHUTDOWN_GUARD_EXPIRES,
     709  	SCTP_PEER_FAULTY,
     710  } sctp_sn_error_t;
     711  
     712  /*
     713   * 7.1.1 Retransmission Timeout Parameters (SCTP_RTOINFO)
     714   *
     715   *   The protocol parameters used to initialize and bound retransmission
     716   *   timeout (RTO) are tunable.  See [SCTP] for more information on how
     717   *   these parameters are used in RTO calculation.
     718   */
     719  struct sctp_rtoinfo {
     720  	sctp_assoc_t	srto_assoc_id;
     721  	__u32		srto_initial;
     722  	__u32		srto_max;
     723  	__u32		srto_min;
     724  };
     725  
     726  /*
     727   * 7.1.2 Association Parameters (SCTP_ASSOCINFO)
     728   *
     729   *   This option is used to both examine and set various association and
     730   *   endpoint parameters.
     731   */
     732  struct sctp_assocparams {
     733  	sctp_assoc_t	sasoc_assoc_id;
     734  	__u16		sasoc_asocmaxrxt;
     735  	__u16		sasoc_number_peer_destinations;
     736  	__u32		sasoc_peer_rwnd;
     737  	__u32		sasoc_local_rwnd;
     738  	__u32		sasoc_cookie_life;
     739  };
     740  
     741  /*
     742   * 7.1.9 Set Peer Primary Address (SCTP_SET_PEER_PRIMARY_ADDR)
     743   *
     744   *  Requests that the peer mark the enclosed address as the association
     745   *  primary. The enclosed address must be one of the association's
     746   *  locally bound addresses. The following structure is used to make a
     747   *   set primary request:
     748   */
     749  struct sctp_setpeerprim {
     750  	sctp_assoc_t            sspp_assoc_id;
     751  	struct sockaddr_storage sspp_addr;
     752  } __attribute__((packed, aligned(4)));
     753  
     754  /*
     755   * 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR)
     756   *
     757   *  Requests that the local SCTP stack use the enclosed peer address as
     758   *  the association primary. The enclosed address must be one of the
     759   *  association peer's addresses. The following structure is used to
     760   *  make a set peer primary request:
     761   */
     762  struct sctp_prim {
     763  	sctp_assoc_t            ssp_assoc_id;
     764  	struct sockaddr_storage ssp_addr;
     765  } __attribute__((packed, aligned(4)));
     766  
     767  /* For backward compatibility use, define the old name too */
     768  #define sctp_setprim	sctp_prim
     769  
     770  /*
     771   * 7.1.11 Set Adaptation Layer Indicator (SCTP_ADAPTATION_LAYER)
     772   *
     773   * Requests that the local endpoint set the specified Adaptation Layer
     774   * Indication parameter for all future INIT and INIT-ACK exchanges.
     775   */
     776  struct sctp_setadaptation {
     777  	__u32	ssb_adaptation_ind;
     778  };
     779  
     780  /*
     781   * 7.1.13 Peer Address Parameters  (SCTP_PEER_ADDR_PARAMS)
     782   *
     783   *   Applications can enable or disable heartbeats for any peer address
     784   *   of an association, modify an address's heartbeat interval, force a
     785   *   heartbeat to be sent immediately, and adjust the address's maximum
     786   *   number of retransmissions sent before an address is considered
     787   *   unreachable. The following structure is used to access and modify an
     788   *   address's parameters:
     789   */
     790  enum  sctp_spp_flags {
     791  	SPP_HB_ENABLE = 1<<0,		/*Enable heartbeats*/
     792  	SPP_HB_DISABLE = 1<<1,		/*Disable heartbeats*/
     793  	SPP_HB = SPP_HB_ENABLE | SPP_HB_DISABLE,
     794  	SPP_HB_DEMAND = 1<<2,		/*Send heartbeat immediately*/
     795  	SPP_PMTUD_ENABLE = 1<<3,	/*Enable PMTU discovery*/
     796  	SPP_PMTUD_DISABLE = 1<<4,	/*Disable PMTU discovery*/
     797  	SPP_PMTUD = SPP_PMTUD_ENABLE | SPP_PMTUD_DISABLE,
     798  	SPP_SACKDELAY_ENABLE = 1<<5,	/*Enable SACK*/
     799  	SPP_SACKDELAY_DISABLE = 1<<6,	/*Disable SACK*/
     800  	SPP_SACKDELAY = SPP_SACKDELAY_ENABLE | SPP_SACKDELAY_DISABLE,
     801  	SPP_HB_TIME_IS_ZERO = 1<<7,	/* Set HB delay to 0 */
     802  	SPP_IPV6_FLOWLABEL = 1<<8,
     803  	SPP_DSCP = 1<<9,
     804  };
     805  
     806  struct sctp_paddrparams {
     807  	sctp_assoc_t		spp_assoc_id;
     808  	struct sockaddr_storage	spp_address;
     809  	__u32			spp_hbinterval;
     810  	__u16			spp_pathmaxrxt;
     811  	__u32			spp_pathmtu;
     812  	__u32			spp_sackdelay;
     813  	__u32			spp_flags;
     814  	__u32			spp_ipv6_flowlabel;
     815  	__u8			spp_dscp;
     816  } __attribute__((packed, aligned(4)));
     817  
     818  /*
     819   * 7.1.18.  Add a chunk that must be authenticated (SCTP_AUTH_CHUNK)
     820   *
     821   * This set option adds a chunk type that the user is requesting to be
     822   * received only in an authenticated way.  Changes to the list of chunks
     823   * will only effect future associations on the socket.
     824   */
     825  struct sctp_authchunk {
     826  	__u8		sauth_chunk;
     827  };
     828  
     829  /*
     830   * 7.1.19.  Get or set the list of supported HMAC Identifiers (SCTP_HMAC_IDENT)
     831   *
     832   * This option gets or sets the list of HMAC algorithms that the local
     833   * endpoint requires the peer to use.
     834   */
     835  /* This here is only used by user space as is. It might not be a good idea
     836   * to export/reveal the whole structure with reserved fields etc.
     837   */
     838  enum {
     839  	SCTP_AUTH_HMAC_ID_SHA1 = 1,
     840  	SCTP_AUTH_HMAC_ID_SHA256 = 3,
     841  };
     842  
     843  struct sctp_hmacalgo {
     844  	__u32		shmac_num_idents;
     845  	__u16		shmac_idents[];
     846  };
     847  
     848  /* Sadly, user and kernel space have different names for
     849   * this structure member, so this is to not break anything.
     850   */
     851  #define shmac_number_of_idents	shmac_num_idents
     852  
     853  /*
     854   * 7.1.20.  Set a shared key (SCTP_AUTH_KEY)
     855   *
     856   * This option will set a shared secret key which is used to build an
     857   * association shared key.
     858   */
     859  struct sctp_authkey {
     860  	sctp_assoc_t	sca_assoc_id;
     861  	__u16		sca_keynumber;
     862  	__u16		sca_keylength;
     863  	__u8		sca_key[];
     864  };
     865  
     866  /*
     867   * 7.1.21.  Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY)
     868   *
     869   * This option will get or set the active shared key to be used to build
     870   * the association shared key.
     871   */
     872  
     873  struct sctp_authkeyid {
     874  	sctp_assoc_t	scact_assoc_id;
     875  	__u16		scact_keynumber;
     876  };
     877  
     878  
     879  /*
     880   * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
     881   *
     882   * This option will effect the way delayed acks are performed.  This
     883   * option allows you to get or set the delayed ack time, in
     884   * milliseconds.  It also allows changing the delayed ack frequency.
     885   * Changing the frequency to 1 disables the delayed sack algorithm.  If
     886   * the assoc_id is 0, then this sets or gets the endpoints default
     887   * values.  If the assoc_id field is non-zero, then the set or get
     888   * effects the specified association for the one to many model (the
     889   * assoc_id field is ignored by the one to one model).  Note that if
     890   * sack_delay or sack_freq are 0 when setting this option, then the
     891   * current values will remain unchanged.
     892   */
     893  struct sctp_sack_info {
     894  	sctp_assoc_t	sack_assoc_id;
     895  	uint32_t	sack_delay;
     896  	uint32_t	sack_freq;
     897  };
     898  
     899  struct sctp_assoc_value {
     900      sctp_assoc_t            assoc_id;
     901      uint32_t                assoc_value;
     902  };
     903  
     904  struct sctp_stream_value {
     905  	sctp_assoc_t assoc_id;
     906  	uint16_t stream_id;
     907  	uint16_t stream_value;
     908  };
     909  
     910  /*
     911   * 7.2.2 Peer Address Information
     912   *
     913   *   Applications can retrieve information about a specific peer address
     914   *   of an association, including its reachability state, congestion
     915   *   window, and retransmission timer values.  This information is
     916   *   read-only. The following structure is used to access this
     917   *   information:
     918   */
     919  struct sctp_paddrinfo {
     920  	sctp_assoc_t		spinfo_assoc_id;
     921  	struct sockaddr_storage	spinfo_address;
     922  	__s32			spinfo_state;
     923  	__u32			spinfo_cwnd;
     924  	__u32			spinfo_srtt;
     925  	__u32			spinfo_rto;
     926  	__u32			spinfo_mtu;
     927  } __attribute__((packed, aligned(4)));
     928  
     929  /* Peer addresses's state. */
     930  /* UNKNOWN: Peer address passed by the upper layer in sendmsg or connect[x]
     931   * calls.
     932   * UNCONFIRMED: Peer address received in INIT/INIT-ACK address parameters.
     933   *              Not yet confirmed by a heartbeat and not available for data
     934   *		transfers.
     935   * ACTIVE : Peer address confirmed, active and available for data transfers.
     936   * INACTIVE: Peer address inactive and not available for data transfers.
     937   */
     938  enum sctp_spinfo_state {
     939  	SCTP_INACTIVE,
     940  	SCTP_PF,
     941  #define	SCTP_POTENTIALLY_FAILED		SCTP_PF
     942  	SCTP_ACTIVE,
     943  	SCTP_UNCONFIRMED,
     944  	SCTP_UNKNOWN = 0xffff  /* Value used for transport state unknown */
     945  };
     946  
     947  /*
     948   * 7.2.1 Association Status (SCTP_STATUS)
     949   *
     950   *   Applications can retrieve current status information about an
     951   *   association, including association state, peer receiver window size,
     952   *   number of unacked data chunks, and number of data chunks pending
     953   *   receipt.  This information is read-only.  The following structure is
     954   *   used to access this information:
     955   */
     956  struct sctp_status {
     957  	sctp_assoc_t		sstat_assoc_id;
     958  	__s32			sstat_state;
     959  	__u32			sstat_rwnd;
     960  	__u16			sstat_unackdata;
     961  	__u16			sstat_penddata;
     962  	__u16			sstat_instrms;
     963  	__u16			sstat_outstrms;
     964  	__u32			sstat_fragmentation_point;
     965  	struct sctp_paddrinfo	sstat_primary;
     966  };
     967  
     968  /*
     969   * 7.2.3.  Get the list of chunks the peer requires to be authenticated
     970   *         (SCTP_PEER_AUTH_CHUNKS)
     971   *
     972   * This option gets a list of chunks for a specified association that
     973   * the peer requires to be received authenticated only.
     974   */
     975  struct sctp_authchunks {
     976  	sctp_assoc_t	gauth_assoc_id;
     977  	__u32		gauth_number_of_chunks;
     978  	uint8_t		gauth_chunks[];
     979  };
     980  
     981  /* The broken spelling has been released already in lksctp-tools header,
     982   * so don't break anyone, now that it's fixed.
     983   */
     984  #define guth_number_of_chunks	gauth_number_of_chunks
     985  
     986  /* Association states.  */
     987  enum sctp_sstat_state {
     988  	SCTP_EMPTY                = 0,
     989  	SCTP_CLOSED               = 1,
     990  	SCTP_COOKIE_WAIT          = 2,
     991  	SCTP_COOKIE_ECHOED        = 3,
     992  	SCTP_ESTABLISHED          = 4,
     993  	SCTP_SHUTDOWN_PENDING     = 5,
     994  	SCTP_SHUTDOWN_SENT        = 6,
     995  	SCTP_SHUTDOWN_RECEIVED    = 7,
     996  	SCTP_SHUTDOWN_ACK_SENT    = 8,
     997  };
     998  
     999  /*
    1000   * 8.2.6. Get the Current Identifiers of Associations
    1001   *        (SCTP_GET_ASSOC_ID_LIST)
    1002   *
    1003   * This option gets the current list of SCTP association identifiers of
    1004   * the SCTP associations handled by a one-to-many style socket.
    1005   */
    1006  struct sctp_assoc_ids {
    1007  	__u32		gaids_number_of_ids;
    1008  	sctp_assoc_t	gaids_assoc_id[];
    1009  };
    1010  
    1011  /*
    1012   * 8.3, 8.5 get all peer/local addresses in an association.
    1013   * This parameter struct is used by SCTP_GET_PEER_ADDRS and
    1014   * SCTP_GET_LOCAL_ADDRS socket options used internally to implement
    1015   * sctp_getpaddrs() and sctp_getladdrs() API.
    1016   */
    1017  struct sctp_getaddrs_old {
    1018  	sctp_assoc_t            assoc_id;
    1019  	int			addr_num;
    1020  	struct sockaddr		*addrs;
    1021  };
    1022  
    1023  struct sctp_getaddrs {
    1024  	sctp_assoc_t		assoc_id; /*input*/
    1025  	__u32			addr_num; /*output*/
    1026  	__u8			addrs[]; /*output, variable size*/
    1027  };
    1028  
    1029  /* A socket user request obtained via SCTP_GET_ASSOC_STATS that retrieves
    1030   * association stats. All stats are counts except sas_maxrto and
    1031   * sas_obs_rto_ipaddr. maxrto is the max observed rto + transport since
    1032   * the last call. Will return 0 when RTO was not update since last call
    1033   */
    1034  struct sctp_assoc_stats {
    1035  	sctp_assoc_t	sas_assoc_id;    /* Input */
    1036  					 /* Transport of observed max RTO */
    1037  	struct sockaddr_storage sas_obs_rto_ipaddr;
    1038  	__u64		sas_maxrto;      /* Maximum Observed RTO for period */
    1039  	__u64		sas_isacks;	 /* SACKs received */
    1040  	__u64		sas_osacks;	 /* SACKs sent */
    1041  	__u64		sas_opackets;	 /* Packets sent */
    1042  	__u64		sas_ipackets;	 /* Packets received */
    1043  	__u64		sas_rtxchunks;   /* Retransmitted Chunks */
    1044  	__u64		sas_outofseqtsns;/* TSN received > next expected */
    1045  	__u64		sas_idupchunks;  /* Dups received (ordered+unordered) */
    1046  	__u64		sas_gapcnt;      /* Gap Acknowledgements Received */
    1047  	__u64		sas_ouodchunks;  /* Unordered data chunks sent */
    1048  	__u64		sas_iuodchunks;  /* Unordered data chunks received */
    1049  	__u64		sas_oodchunks;	 /* Ordered data chunks sent */
    1050  	__u64		sas_iodchunks;	 /* Ordered data chunks received */
    1051  	__u64		sas_octrlchunks; /* Control chunks sent */
    1052  	__u64		sas_ictrlchunks; /* Control chunks received */
    1053  };
    1054  
    1055  /*
    1056   * 8.1 sctp_bindx()
    1057   *
    1058   * The flags parameter is formed from the bitwise OR of zero or more of the
    1059   * following currently defined flags:
    1060   */
    1061  #define SCTP_BINDX_ADD_ADDR 0x01
    1062  #define SCTP_BINDX_REM_ADDR 0x02
    1063  
    1064  /* This is the structure that is passed as an argument(optval) to
    1065   * getsockopt(SCTP_SOCKOPT_PEELOFF).
    1066   */
    1067  typedef struct {
    1068  	sctp_assoc_t associd;
    1069  	int sd;
    1070  } sctp_peeloff_arg_t;
    1071  
    1072  typedef struct {
    1073  	sctp_peeloff_arg_t p_arg;
    1074  	unsigned flags;
    1075  } sctp_peeloff_flags_arg_t;
    1076  
    1077  /*
    1078   *  Peer Address Thresholds socket option
    1079   */
    1080  struct sctp_paddrthlds {
    1081  	sctp_assoc_t spt_assoc_id;
    1082  	struct sockaddr_storage spt_address;
    1083  	__u16 spt_pathmaxrxt;
    1084  	__u16 spt_pathpfthld;
    1085  };
    1086  
    1087  /* Use a new structure with spt_pathcpthld for back compatibility */
    1088  struct sctp_paddrthlds_v2 {
    1089  	sctp_assoc_t spt_assoc_id;
    1090  	struct sockaddr_storage spt_address;
    1091  	__u16 spt_pathmaxrxt;
    1092  	__u16 spt_pathpfthld;
    1093  	__u16 spt_pathcpthld;
    1094  };
    1095  
    1096  /*
    1097   * Socket Option for Getting the Association/Stream-Specific PR-SCTP Status
    1098   */
    1099  struct sctp_prstatus {
    1100  	sctp_assoc_t sprstat_assoc_id;
    1101  	__u16 sprstat_sid;
    1102  	__u16 sprstat_policy;
    1103  	__u64 sprstat_abandoned_unsent;
    1104  	__u64 sprstat_abandoned_sent;
    1105  };
    1106  
    1107  struct sctp_default_prinfo {
    1108  	sctp_assoc_t pr_assoc_id;
    1109  	__u32 pr_value;
    1110  	__u16 pr_policy;
    1111  };
    1112  
    1113  struct sctp_info {
    1114  	__u32	sctpi_tag;
    1115  	__u32	sctpi_state;
    1116  	__u32	sctpi_rwnd;
    1117  	__u16	sctpi_unackdata;
    1118  	__u16	sctpi_penddata;
    1119  	__u16	sctpi_instrms;
    1120  	__u16	sctpi_outstrms;
    1121  	__u32	sctpi_fragmentation_point;
    1122  	__u32	sctpi_inqueue;
    1123  	__u32	sctpi_outqueue;
    1124  	__u32	sctpi_overall_error;
    1125  	__u32	sctpi_max_burst;
    1126  	__u32	sctpi_maxseg;
    1127  	__u32	sctpi_peer_rwnd;
    1128  	__u32	sctpi_peer_tag;
    1129  	__u8	sctpi_peer_capable;
    1130  	__u8	sctpi_peer_sack;
    1131  	__u16	__reserved1;
    1132  
    1133  	/* assoc status info */
    1134  	__u64	sctpi_isacks;
    1135  	__u64	sctpi_osacks;
    1136  	__u64	sctpi_opackets;
    1137  	__u64	sctpi_ipackets;
    1138  	__u64	sctpi_rtxchunks;
    1139  	__u64	sctpi_outofseqtsns;
    1140  	__u64	sctpi_idupchunks;
    1141  	__u64	sctpi_gapcnt;
    1142  	__u64	sctpi_ouodchunks;
    1143  	__u64	sctpi_iuodchunks;
    1144  	__u64	sctpi_oodchunks;
    1145  	__u64	sctpi_iodchunks;
    1146  	__u64	sctpi_octrlchunks;
    1147  	__u64	sctpi_ictrlchunks;
    1148  
    1149  	/* primary transport info */
    1150  	struct sockaddr_storage	sctpi_p_address;
    1151  	__s32	sctpi_p_state;
    1152  	__u32	sctpi_p_cwnd;
    1153  	__u32	sctpi_p_srtt;
    1154  	__u32	sctpi_p_rto;
    1155  	__u32	sctpi_p_hbinterval;
    1156  	__u32	sctpi_p_pathmaxrxt;
    1157  	__u32	sctpi_p_sackdelay;
    1158  	__u32	sctpi_p_sackfreq;
    1159  	__u32	sctpi_p_ssthresh;
    1160  	__u32	sctpi_p_partial_bytes_acked;
    1161  	__u32	sctpi_p_flight_size;
    1162  	__u16	sctpi_p_error;
    1163  	__u16	__reserved2;
    1164  
    1165  	/* sctp sock info */
    1166  	__u32	sctpi_s_autoclose;
    1167  	__u32	sctpi_s_adaptation_ind;
    1168  	__u32	sctpi_s_pd_point;
    1169  	__u8	sctpi_s_nodelay;
    1170  	__u8	sctpi_s_disable_fragments;
    1171  	__u8	sctpi_s_v4mapped;
    1172  	__u8	sctpi_s_frag_interleave;
    1173  	__u32	sctpi_s_type;
    1174  	__u32	__reserved3;
    1175  };
    1176  
    1177  struct sctp_reset_streams {
    1178  	sctp_assoc_t srs_assoc_id;
    1179  	uint16_t srs_flags;
    1180  	uint16_t srs_number_streams;	/* 0 == ALL */
    1181  	uint16_t srs_stream_list[];	/* list if srs_num_streams is not 0 */
    1182  };
    1183  
    1184  struct sctp_add_streams {
    1185  	sctp_assoc_t sas_assoc_id;
    1186  	uint16_t sas_instrms;
    1187  	uint16_t sas_outstrms;
    1188  };
    1189  
    1190  struct sctp_event {
    1191  	sctp_assoc_t se_assoc_id;
    1192  	uint16_t se_type;
    1193  	uint8_t se_on;
    1194  };
    1195  
    1196  struct sctp_udpencaps {
    1197  	sctp_assoc_t sue_assoc_id;
    1198  	struct sockaddr_storage sue_address;
    1199  	uint16_t sue_port;
    1200  };
    1201  
    1202  /* SCTP Stream schedulers */
    1203  enum sctp_sched_type {
    1204  	SCTP_SS_FCFS,
    1205  	SCTP_SS_DEFAULT = SCTP_SS_FCFS,
    1206  	SCTP_SS_PRIO,
    1207  	SCTP_SS_RR,
    1208  	SCTP_SS_FC,
    1209  	SCTP_SS_WFQ,
    1210  	SCTP_SS_MAX = SCTP_SS_WFQ
    1211  };
    1212  
    1213  /* Probe Interval socket option */
    1214  struct sctp_probeinterval {
    1215  	sctp_assoc_t spi_assoc_id;
    1216  	struct sockaddr_storage spi_address;
    1217  	__u32 spi_interval;
    1218  };
    1219  
    1220  #endif /* _SCTP_H */