SCTP: Update RCU handling during the ADD-IP case
[deliverable/linux.git] / include / net / sctp / structs.h
index 18b06afacea022bc9e32be88ff1a1b98554ec54c..a17701740624f5a512ff21b39b6dda648443aa9f 100644 (file)
@@ -197,8 +197,6 @@ extern struct sctp_globals {
 
        /* This is the sctp port control hash.  */
        int port_hashsize;
-       int port_rover;
-       spinlock_t port_alloc_lock;  /* Protects port_rover. */
        struct sctp_bind_hashbucket *port_hashtable;
 
        /* This is the global local address list.
@@ -724,6 +722,13 @@ struct sctp_chunk {
         */
        struct sctp_transport *transport;
 
+       /* SCTP-AUTH:  For the special case inbound processing of COOKIE-ECHO
+        * we need save a pointer to the AUTH chunk, since the SCTP-AUTH
+        * spec violates the principle premis that all chunks are processed
+        * in order.
+        */
+       struct sk_buff *auth_chunk;
+
        __u8 rtt_in_progress;   /* Is this chunk used for RTT calculation? */
        __u8 resent;            /* Has this chunk ever been retransmitted. */
        __u8 has_tsn;           /* Does this chunk have a TSN yet? */
@@ -798,6 +803,9 @@ struct sctp_packet {
        /* This packet contains an AUTH chunk */
        __u8 has_auth;
 
+       /* This packet contains at least 1 DATA chunk */
+       __u8 has_data;
+
        /* SCTP cannot fragment this packet. So let ip fragment it. */
        __u8 ipfragok;
 
@@ -865,10 +873,11 @@ struct sctp_transport {
         * address list derived from the INIT or INIT ACK chunk, a
         * number of data elements needs to be maintained including:
         */
-       __u32 rtt;              /* This is the most recent RTT.  */
-
        /* RTO         : The current retransmission timeout value.  */
        unsigned long rto;
+       unsigned long last_rto;
+
+       __u32 rtt;              /* This is the most recent RTT.  */
 
        /* RTTVAR      : The current RTT variation.  */
        __u32 rttvar;
@@ -1064,6 +1073,7 @@ void sctp_inq_init(struct sctp_inq *);
 void sctp_inq_free(struct sctp_inq *);
 void sctp_inq_push(struct sctp_inq *, struct sctp_chunk *packet);
 struct sctp_chunk *sctp_inq_pop(struct sctp_inq *);
+struct sctp_chunkhdr *sctp_inq_peek(struct sctp_inq *);
 void sctp_inq_set_th_handler(struct sctp_inq *, work_func_t);
 
 /* This is the structure we use to hold outbound chunks.  You push
@@ -1175,9 +1185,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
                        int flags);
 int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *,
                       __u8 use_as_src, gfp_t gfp);
-int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *,
-                       void fastcall (*rcu_call)(struct rcu_head *,
-                                         void (*func)(struct rcu_head *)));
+int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *);
 int sctp_bind_addr_match(struct sctp_bind_addr *, const union sctp_addr *,
                         struct sctp_sock *);
 union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr  *bp,
@@ -1532,6 +1540,7 @@ struct sctp_association {
                __u8    asconf_capable;  /* Does peer support ADDIP? */
                __u8    prsctp_capable;  /* Can peer do PR-SCTP? */
                __u8    auth_capable;    /* Is peer doing SCTP-AUTH? */
+               __u8    addip_capable;   /* Can peer do ADD-IP */
 
                __u32   adaptation_ind;  /* Adaptation Code point. */
 
This page took 0.027263 seconds and 5 git commands to generate.