[SCTP]: Handle address add/delete events in a more efficient way.
[linux-2.6.git] / include / net / sctp / structs.h
index 1616a38..b00d85e 100644 (file)
@@ -74,28 +74,6 @@ union sctp_addr {
        struct sockaddr sa;
 };
 
-static inline void flip_to_n(union sctp_addr *to, const union sctp_addr *from)
-{
-       size_t len;
-       if (from->sa.sa_family == AF_INET6)
-               len = sizeof(struct sockaddr_in6);
-       else
-               len = sizeof(struct sockaddr);
-       memcpy(to, from, len);
-       to->v4.sin_port = htons(from->v4.sin_port);
-}
-
-static inline void flip_to_h(union sctp_addr *to, const union sctp_addr *from)
-{
-       size_t len;
-       if (from->sa.sa_family == AF_INET6)
-               len = sizeof(struct sockaddr_in6);
-       else
-               len = sizeof(struct sockaddr);
-       memcpy(to, from, len);
-       to->v4.sin_port = ntohs(from->v4.sin_port);
-}
-
 /* Forward declarations for data structures. */
 struct sctp_globals;
 struct sctp_endpoint;
@@ -223,13 +201,12 @@ extern struct sctp_globals {
        struct sctp_bind_hashbucket *port_hashtable;
 
        /* This is the global local address list.
-        * We actively maintain this complete list of interfaces on
-        * the system by catching routing events.
+        * We actively maintain this complete list of addresses on
+        * the system by catching address add/delete events.
         *
         * It is a list of sctp_sockaddr_entry.
         */
        struct list_head local_addr_list;
-       spinlock_t local_addr_lock;
        
        /* Flag to indicate if addip is enabled. */
        int addip_enable;
@@ -265,7 +242,6 @@ extern struct sctp_globals {
 #define sctp_port_alloc_lock           (sctp_globals.port_alloc_lock)
 #define sctp_port_hashtable            (sctp_globals.port_hashtable)
 #define sctp_local_addr_list           (sctp_globals.local_addr_list)
-#define sctp_local_addr_lock           (sctp_globals.local_addr_lock)
 #define sctp_addip_enable              (sctp_globals.addip_enable)
 #define sctp_prsctp_enable             (sctp_globals.prsctp_enable)
 
@@ -575,14 +551,14 @@ struct sctp_af {
                                         struct sock *sk);
        void            (*from_addr_param) (union sctp_addr *,
                                            union sctp_addr_param *,
-                                           __u16 port, int iif);       
+                                           __be16 port, int iif);
        int             (*to_addr_param) (const union sctp_addr *,
                                          union sctp_addr_param *); 
        int             (*addr_valid)   (union sctp_addr *,
                                         struct sctp_sock *,
                                         const struct sk_buff *);
        sctp_scope_t    (*scope) (union sctp_addr *);
-       void            (*inaddr_any)   (union sctp_addr *, unsigned short);
+       void            (*inaddr_any)   (union sctp_addr *, __be16);
        int             (*is_any)       (const union sctp_addr *);
        int             (*available)    (union sctp_addr *,
                                         struct sctp_sock *);
@@ -609,7 +585,7 @@ struct sctp_pf {
                          struct sctp_sock *);
        int  (*bind_verify) (struct sctp_sock *, union sctp_addr *);
        int  (*send_verify) (struct sctp_sock *, union sctp_addr *);
-       int  (*supported_addrs)(const struct sctp_sock *, __u16 *);
+       int  (*supported_addrs)(const struct sctp_sock *, __be16 *);
        struct sock *(*create_accept_sk) (struct sock *sk,
                                          struct sctp_association *asoc);
        void (*addr_v4map) (struct sctp_sock *, union sctp_addr *);
@@ -714,7 +690,6 @@ struct sctp_chunk {
 
        /* What is the origin IP address for this chunk?  */
        union sctp_addr source;
-       union sctp_addr source_h;
        /* Destination address for this chunk. */
        union sctp_addr dest;
 
@@ -758,7 +733,6 @@ const union sctp_addr *sctp_source(const struct sctp_chunk *chunk);
 struct sctp_sockaddr_entry {
        struct list_head list;
        union sctp_addr a;
-       union sctp_addr a_h;
        __u8 use_as_src;
 };
 
@@ -845,7 +819,6 @@ struct sctp_transport {
 
        /* This is the peer's IP address and port. */
        union sctp_addr ipaddr;
-       union sctp_addr ipaddr_h;
 
        /* These are the functions we call to handle LLP stuff.  */
        struct sctp_af *af_specific;
@@ -904,7 +877,6 @@ struct sctp_transport {
        struct dst_entry *dst;
        /* Source address. */
        union sctp_addr saddr;
-       union sctp_addr saddr_h;
 
        /* When was the last time(in jiffies) that a data packet was sent on
         * this transport?  This is used to adjust the cwnd when the transport
@@ -1056,7 +1028,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 *);
-void sctp_inq_set_th_handler(struct sctp_inq *, void (*)(void *), void *);
+void sctp_inq_set_th_handler(struct sctp_inq *, work_func_t);
 
 /* This is the structure we use to hold outbound chunks.  You push
  * chunks in and they automatically pop out the other end as bundled
@@ -1340,6 +1312,13 @@ int sctp_process_init(struct sctp_association *, sctp_cid_t cid,
 __u32 sctp_generate_tag(const struct sctp_endpoint *);
 __u32 sctp_generate_tsn(const struct sctp_endpoint *);
 
+struct sctp_inithdr_host {
+       __u32 init_tag;
+       __u32 a_rwnd;
+       __u16 num_outbound_streams;
+       __u16 num_inbound_streams;
+       __u32 initial_tsn;
+};
 
 /* RFC2960
  *
@@ -1510,7 +1489,7 @@ struct sctp_association {
                 */
                __be16 addip_disabled_mask;
 
-               struct sctp_inithdr i;
+               struct sctp_inithdr_host i;
                int cookie_len;
                void *cookie;