diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/if_bonding.h | 10 | ||||
| -rw-r--r-- | include/linux/sysctl.h | 3 | ||||
| -rw-r--r-- | include/net/dst.h | 2 | ||||
| -rw-r--r-- | include/net/sctp/sctp.h | 4 | ||||
| -rw-r--r-- | include/net/sctp/sm.h | 13 | ||||
| -rw-r--r-- | include/net/sctp/structs.h | 29 |
6 files changed, 44 insertions, 17 deletions
diff --git a/include/linux/if_bonding.h b/include/linux/if_bonding.h index a263da6bd01c..b673b0830ddd 100644 --- a/include/linux/if_bonding.h +++ b/include/linux/if_bonding.h @@ -37,9 +37,10 @@ #define BOND_CHECK_MII_STATUS (SIOCGMIIPHY) -#define BOND_MODE_ROUNDROBIN 0 -#define BOND_MODE_ACTIVEBACKUP 1 -#define BOND_MODE_XOR 2 +#define BOND_MODE_ROUNDROBIN 0 +#define BOND_MODE_ACTIVEBACKUP 1 +#define BOND_MODE_XOR 2 +#define BOND_MODE_BROADCAST 3 /* each slave's link has 4 states */ #define BOND_LINK_UP 0 /* link is up and running */ @@ -74,6 +75,7 @@ typedef struct slave { struct slave *prev; struct net_device *dev; short delay; + unsigned long jiffies; char link; /* one of BOND_LINK_XXXX */ char state; /* one of BOND_STATE_XXXX */ unsigned short original_flags; @@ -93,6 +95,8 @@ typedef struct bonding { slave_t *next; slave_t *prev; slave_t *current_slave; + slave_t *primary_slave; + slave_t *current_arp_slave; __s32 slave_cnt; rwlock_t lock; rwlock_t ptrlock; diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index 0b905659ac4b..b115623159e9 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h @@ -544,7 +544,8 @@ enum { NET_SCTP_PATH_MAX_RETRANS = 8, NET_SCTP_MAX_INIT_RETRANSMITS = 9, NET_SCTP_HB_INTERVAL = 10, - NET_SCTP_MAX_BURST = 11, + NET_SCTP_PRESERVE_ENABLE = 11, + NET_SCTP_MAX_BURST = 12, }; /* CTL_PROC names: */ diff --git a/include/net/dst.h b/include/net/dst.h index 1fbb39584b97..2fccbbfe5eb6 100644 --- a/include/net/dst.h +++ b/include/net/dst.h @@ -10,6 +10,7 @@ #include <linux/config.h> #include <linux/rtnetlink.h> +#include <linux/rcupdate.h> #include <net/neighbour.h> #include <asm/processor.h> @@ -71,6 +72,7 @@ struct dst_entry #endif struct dst_ops *ops; + struct rcu_head rcu_head; char info[0]; }; diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index 73c948813e72..f12e54cd4919 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h @@ -123,8 +123,8 @@ extern sctp_protocol_t sctp_proto; extern struct sock *sctp_get_ctl_sock(void); extern int sctp_copy_local_addr_list(sctp_protocol_t *, sctp_bind_addr_t *, sctp_scope_t, int priority, int flags); -extern sctp_pf_t *sctp_get_pf_specific(int family); -extern void sctp_set_pf_specific(int family, sctp_pf_t *); +extern struct sctp_pf *sctp_get_pf_specific(sa_family_t family); +extern int sctp_register_pf(struct sctp_pf *, sa_family_t); /* * sctp_socket.c diff --git a/include/net/sctp/sm.h b/include/net/sctp/sm.h index e811bf37e4ca..68af144ef56c 100644 --- a/include/net/sctp/sm.h +++ b/include/net/sctp/sm.h @@ -140,6 +140,8 @@ sctp_state_fn_t sctp_sf_do_5_2_2_dupinit; sctp_state_fn_t sctp_sf_do_5_2_4_dupcook; sctp_state_fn_t sctp_sf_unk_chunk; sctp_state_fn_t sctp_sf_do_8_5_1_E_sa; +sctp_state_fn_t sctp_sf_cookie_echoed_err; +sctp_state_fn_t sctp_sf_do_5_2_6_stale; /* Prototypes for primitive event state functions. */ sctp_state_fn_t sctp_sf_do_prm_asoc; @@ -175,7 +177,6 @@ sctp_state_fn_t sctp_sf_autoclose_timer_expire; */ /* Prototypes for chunk state functions. Not in use. */ -sctp_state_fn_t sctp_sf_do_5_2_6_stale; sctp_state_fn_t sctp_sf_do_9_2_reshutack; sctp_state_fn_t sctp_sf_do_9_2_reshut; sctp_state_fn_t sctp_sf_do_9_2_shutack; @@ -211,7 +212,7 @@ void sctp_populate_tie_tags(__u8 *cookie, __u32 curTag, __u32 hisTag); /* Prototypes for chunk-building functions. */ sctp_chunk_t *sctp_make_init(const sctp_association_t *, const sctp_bind_addr_t *, - int priority); + int priority, int vparam_len); sctp_chunk_t *sctp_make_init_ack(const sctp_association_t *, const sctp_chunk_t *, const int priority, @@ -322,9 +323,15 @@ sctp_pack_cookie(const sctp_endpoint_t *, const sctp_association_t *, const __u8 *, int addrs_len); sctp_association_t *sctp_unpack_cookie(const sctp_endpoint_t *, const sctp_association_t *, - sctp_chunk_t *, int priority, int *err); + sctp_chunk_t *, int priority, int *err, + sctp_chunk_t **err_chk_p); int sctp_addip_addr_config(sctp_association_t *, sctp_param_t, struct sockaddr_storage*, int); +void sctp_send_stale_cookie_err(const sctp_endpoint_t *ep, + const sctp_association_t *asoc, + const sctp_chunk_t *chunk, + sctp_cmd_seq_t *commands, + sctp_chunk_t *err_chunk); /* 3rd level prototypes */ __u32 sctp_generate_tag(const sctp_endpoint_t *); diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index d7b5674bdbdc..db3a3041bfe8 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -42,6 +42,7 @@ * Sridhar Samudrala <sri@us.ibm.com> * Daisy Chang <daisyc@us.ibm.com> * Dajiang Zhang <dajiang.zhang@nokia.com> + * Ardelle Fan <ardelle.fan@intel.com> * * Any bugs reported given to us we will try to fix... any fixes shared will * be incorporated into the next SCTP release. @@ -182,6 +183,9 @@ struct SCTP_protocol { /* Valid.Cookie.Life - 60 seconds */ int valid_cookie_life; + + /* Whether Cookie Preservative is enabled(1) or not(0) */ + int cookie_preserve_enable; /* Association.Max.Retrans - 10 attempts * Path.Max.Retrans - 5 attempts (per destination address) @@ -234,7 +238,7 @@ struct SCTP_protocol { * Pointers to address related SCTP functions. * (i.e. things that depend on the address family.) */ -typedef struct sctp_func { +struct sctp_af { int (*queue_xmit) (struct sk_buff *skb); int (*setsockopt) (struct sock *sk, int level, @@ -259,27 +263,34 @@ typedef struct sctp_func { void (*from_skb) (union sctp_addr *, struct sk_buff *skb, int saddr); + void (*from_sk) (union sctp_addr *, + struct sock *sk); + void (*to_sk) (union sctp_addr *, + struct sock *sk); int (*addr_valid) (union sctp_addr *); sctp_scope_t (*scope) (union sctp_addr *); void (*inaddr_any) (union sctp_addr *, unsigned short); int (*is_any) (const union sctp_addr *); + int (*available) (const union sctp_addr *); __u16 net_header_len; int sockaddr_len; sa_family_t sa_family; struct list_head list; -} sctp_func_t; +}; -sctp_func_t *sctp_get_af_specific(sa_family_t); +struct sctp_af *sctp_get_af_specific(sa_family_t); +int sctp_register_af(struct sctp_af *); /* Protocol family functions. */ typedef struct sctp_pf { void (*event_msgname)(sctp_ulpevent_t *, char *, int *); - void (*skb_msgname)(struct sk_buff *, char *, int *); - int (*af_supported)(sa_family_t); + void (*skb_msgname) (struct sk_buff *, char *, int *); + int (*af_supported) (sa_family_t); int (*cmp_addr) (const union sctp_addr *, const union sctp_addr *, struct sctp_opt *); - struct sctp_func *af; + int (*bind_verify) (struct sctp_opt *, union sctp_addr *); + struct sctp_af *af; } sctp_pf_t; /* SCTP Socket type: UDP or TCP style. */ @@ -623,7 +634,7 @@ struct SCTP_transport { union sctp_addr ipaddr; /* These are the functions we call to handle LLP stuff. */ - sctp_func_t *af_specific; + struct sctp_af *af_specific; /* Which association do we belong to? */ sctp_association_t *asoc; @@ -1271,7 +1282,6 @@ struct SCTP_association { /* The cookie life I award for any cookie. */ struct timeval cookie_life; - __u32 cookie_preserve; /* Overall : The overall association error count. * Error Count : [Clear this any time I get something.] @@ -1350,6 +1360,9 @@ struct SCTP_association { */ __u32 rwnd; + /* This is the last advertised value of rwnd over a SACK chunk. */ + __u32 a_rwnd; + /* Number of bytes by which the rwnd has slopped. The rwnd is allowed * to slop over a maximum of the association's frag_point. */ |
