diff options
Diffstat (limited to 'net/dccp')
| -rw-r--r-- | net/dccp/ackvec.h | 21 | ||||
| -rw-r--r-- | net/dccp/ccid.h | 18 | ||||
| -rw-r--r-- | net/dccp/ccids/lib/loss_interval.h | 8 | ||||
| -rw-r--r-- | net/dccp/ccids/lib/packet_history.h | 25 | ||||
| -rw-r--r-- | net/dccp/ccids/lib/tfrc.h | 22 | ||||
| -rw-r--r-- | net/dccp/dccp.h | 185 | ||||
| -rw-r--r-- | net/dccp/feat.h | 26 | ||||
| -rw-r--r-- | net/dccp/input.c | 2 | ||||
| -rw-r--r-- | net/dccp/ipv4.c | 23 | ||||
| -rw-r--r-- | net/dccp/ipv6.c | 96 | ||||
| -rw-r--r-- | net/dccp/ipv6.h | 2 | ||||
| -rw-r--r-- | net/dccp/minisocks.c | 17 | ||||
| -rw-r--r-- | net/dccp/options.c | 32 | ||||
| -rw-r--r-- | net/dccp/output.c | 6 | ||||
| -rw-r--r-- | net/dccp/probe.c | 19 | ||||
| -rw-r--r-- | net/dccp/proto.c | 13 | ||||
| -rw-r--r-- | net/dccp/sysctl.c | 3 | ||||
| -rw-r--r-- | net/dccp/timer.c | 2 | 
18 files changed, 235 insertions, 285 deletions
diff --git a/net/dccp/ackvec.h b/net/dccp/ackvec.h index a269aa7f792..3284bfa988c 100644 --- a/net/dccp/ackvec.h +++ b/net/dccp/ackvec.h @@ -101,16 +101,16 @@ struct dccp_ackvec_record {  	u8		 avr_ack_nonce:1;  }; -extern int dccp_ackvec_init(void); -extern void dccp_ackvec_exit(void); +int dccp_ackvec_init(void); +void dccp_ackvec_exit(void); -extern struct dccp_ackvec *dccp_ackvec_alloc(const gfp_t priority); -extern void dccp_ackvec_free(struct dccp_ackvec *av); +struct dccp_ackvec *dccp_ackvec_alloc(const gfp_t priority); +void dccp_ackvec_free(struct dccp_ackvec *av); -extern void dccp_ackvec_input(struct dccp_ackvec *av, struct sk_buff *skb); -extern int  dccp_ackvec_update_records(struct dccp_ackvec *av, u64 seq, u8 sum); -extern void dccp_ackvec_clear_state(struct dccp_ackvec *av, const u64 ackno); -extern u16  dccp_ackvec_buflen(const struct dccp_ackvec *av); +void dccp_ackvec_input(struct dccp_ackvec *av, struct sk_buff *skb); +int dccp_ackvec_update_records(struct dccp_ackvec *av, u64 seq, u8 sum); +void dccp_ackvec_clear_state(struct dccp_ackvec *av, const u64 ackno); +u16 dccp_ackvec_buflen(const struct dccp_ackvec *av);  static inline bool dccp_ackvec_is_empty(const struct dccp_ackvec *av)  { @@ -133,7 +133,6 @@ struct dccp_ackvec_parsed {  	struct list_head node;  }; -extern int dccp_ackvec_parsed_add(struct list_head *head, -				  u8 *vec, u8 len, u8 nonce); -extern void dccp_ackvec_parsed_cleanup(struct list_head *parsed_chunks); +int dccp_ackvec_parsed_add(struct list_head *head, u8 *vec, u8 len, u8 nonce); +void dccp_ackvec_parsed_cleanup(struct list_head *parsed_chunks);  #endif /* _ACKVEC_H */ diff --git a/net/dccp/ccid.h b/net/dccp/ccid.h index fb85d371a8d..6eb837a47b5 100644 --- a/net/dccp/ccid.h +++ b/net/dccp/ccid.h @@ -93,8 +93,8 @@ extern struct ccid_operations ccid2_ops;  extern struct ccid_operations ccid3_ops;  #endif -extern int  ccid_initialize_builtins(void); -extern void ccid_cleanup_builtins(void); +int ccid_initialize_builtins(void); +void ccid_cleanup_builtins(void);  struct ccid {  	struct ccid_operations *ccid_ops; @@ -106,12 +106,12 @@ static inline void *ccid_priv(const struct ccid *ccid)  	return (void *)ccid->ccid_priv;  } -extern bool ccid_support_check(u8 const *ccid_array, u8 array_len); -extern int  ccid_get_builtin_ccids(u8 **ccid_array, u8 *array_len); -extern int  ccid_getsockopt_builtin_ccids(struct sock *sk, int len, -					  char __user *, int __user *); +bool ccid_support_check(u8 const *ccid_array, u8 array_len); +int ccid_get_builtin_ccids(u8 **ccid_array, u8 *array_len); +int ccid_getsockopt_builtin_ccids(struct sock *sk, int len, +				  char __user *, int __user *); -extern struct ccid *ccid_new(const u8 id, struct sock *sk, bool rx); +struct ccid *ccid_new(const u8 id, struct sock *sk, bool rx);  static inline int ccid_get_current_rx_ccid(struct dccp_sock *dp)  { @@ -131,8 +131,8 @@ static inline int ccid_get_current_tx_ccid(struct dccp_sock *dp)  	return ccid->ccid_ops->ccid_id;  } -extern void ccid_hc_rx_delete(struct ccid *ccid, struct sock *sk); -extern void ccid_hc_tx_delete(struct ccid *ccid, struct sock *sk); +void ccid_hc_rx_delete(struct ccid *ccid, struct sock *sk); +void ccid_hc_tx_delete(struct ccid *ccid, struct sock *sk);  /*   * Congestion control of queued data packets via CCID decision. diff --git a/net/dccp/ccids/lib/loss_interval.h b/net/dccp/ccids/lib/loss_interval.h index d1d2f5383b7..57f631a86cc 100644 --- a/net/dccp/ccids/lib/loss_interval.h +++ b/net/dccp/ccids/lib/loss_interval.h @@ -65,9 +65,9 @@ static inline u8 tfrc_lh_length(struct tfrc_loss_hist *lh)  struct tfrc_rx_hist; -extern int  tfrc_lh_interval_add(struct tfrc_loss_hist *, struct tfrc_rx_hist *, -				 u32 (*first_li)(struct sock *), struct sock *); -extern u8   tfrc_lh_update_i_mean(struct tfrc_loss_hist *lh, struct sk_buff *); -extern void tfrc_lh_cleanup(struct tfrc_loss_hist *lh); +int tfrc_lh_interval_add(struct tfrc_loss_hist *, struct tfrc_rx_hist *, +			 u32 (*first_li)(struct sock *), struct sock *); +u8 tfrc_lh_update_i_mean(struct tfrc_loss_hist *lh, struct sk_buff *); +void tfrc_lh_cleanup(struct tfrc_loss_hist *lh);  #endif /* _DCCP_LI_HIST_ */ diff --git a/net/dccp/ccids/lib/packet_history.h b/net/dccp/ccids/lib/packet_history.h index 7ee4a9d9d33..ee362b0b630 100644 --- a/net/dccp/ccids/lib/packet_history.h +++ b/net/dccp/ccids/lib/packet_history.h @@ -60,8 +60,8 @@ static inline struct tfrc_tx_hist_entry *  	return head;  } -extern int  tfrc_tx_hist_add(struct tfrc_tx_hist_entry **headp, u64 seqno); -extern void tfrc_tx_hist_purge(struct tfrc_tx_hist_entry **headp); +int tfrc_tx_hist_add(struct tfrc_tx_hist_entry **headp, u64 seqno); +void tfrc_tx_hist_purge(struct tfrc_tx_hist_entry **headp);  /* Subtraction a-b modulo-16, respects circular wrap-around */  #define SUB16(a, b) (((a) + 16 - (b)) & 0xF) @@ -139,20 +139,17 @@ static inline bool tfrc_rx_hist_loss_pending(const struct tfrc_rx_hist *h)  	return h->loss_count > 0;  } -extern void tfrc_rx_hist_add_packet(struct tfrc_rx_hist *h, -				    const struct sk_buff *skb, const u64 ndp); +void tfrc_rx_hist_add_packet(struct tfrc_rx_hist *h, const struct sk_buff *skb, +			     const u64 ndp); -extern int tfrc_rx_hist_duplicate(struct tfrc_rx_hist *h, struct sk_buff *skb); +int tfrc_rx_hist_duplicate(struct tfrc_rx_hist *h, struct sk_buff *skb);  struct tfrc_loss_hist; -extern int  tfrc_rx_handle_loss(struct tfrc_rx_hist *h, -				struct tfrc_loss_hist *lh, -				struct sk_buff *skb, const u64 ndp, -				u32 (*first_li)(struct sock *sk), -				struct sock *sk); -extern u32 tfrc_rx_hist_sample_rtt(struct tfrc_rx_hist *h, -				   const struct sk_buff *skb); -extern int tfrc_rx_hist_alloc(struct tfrc_rx_hist *h); -extern void tfrc_rx_hist_purge(struct tfrc_rx_hist *h); +int tfrc_rx_handle_loss(struct tfrc_rx_hist *h, struct tfrc_loss_hist *lh, +			struct sk_buff *skb, const u64 ndp, +			u32 (*first_li)(struct sock *sk), struct sock *sk); +u32 tfrc_rx_hist_sample_rtt(struct tfrc_rx_hist *h, const struct sk_buff *skb); +int tfrc_rx_hist_alloc(struct tfrc_rx_hist *h); +void tfrc_rx_hist_purge(struct tfrc_rx_hist *h);  #endif /* _DCCP_PKT_HIST_ */ diff --git a/net/dccp/ccids/lib/tfrc.h b/net/dccp/ccids/lib/tfrc.h index ed698c42a5f..40ee7d62b65 100644 --- a/net/dccp/ccids/lib/tfrc.h +++ b/net/dccp/ccids/lib/tfrc.h @@ -55,21 +55,21 @@ static inline u32 tfrc_ewma(const u32 avg, const u32 newval, const u8 weight)  	return avg ? (weight * avg + (10 - weight) * newval) / 10 : newval;  } -extern u32  tfrc_calc_x(u16 s, u32 R, u32 p); -extern u32  tfrc_calc_x_reverse_lookup(u32 fvalue); -extern u32  tfrc_invert_loss_event_rate(u32 loss_event_rate); +u32 tfrc_calc_x(u16 s, u32 R, u32 p); +u32 tfrc_calc_x_reverse_lookup(u32 fvalue); +u32 tfrc_invert_loss_event_rate(u32 loss_event_rate); -extern int  tfrc_tx_packet_history_init(void); -extern void tfrc_tx_packet_history_exit(void); -extern int  tfrc_rx_packet_history_init(void); -extern void tfrc_rx_packet_history_exit(void); +int tfrc_tx_packet_history_init(void); +void tfrc_tx_packet_history_exit(void); +int tfrc_rx_packet_history_init(void); +void tfrc_rx_packet_history_exit(void); -extern int  tfrc_li_init(void); -extern void tfrc_li_exit(void); +int tfrc_li_init(void); +void tfrc_li_exit(void);  #ifdef CONFIG_IP_DCCP_TFRC_LIB -extern int  tfrc_lib_init(void); -extern void tfrc_lib_exit(void); +int tfrc_lib_init(void); +void tfrc_lib_exit(void);  #else  #define tfrc_lib_init() (0)  #define tfrc_lib_exit() diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h index 708e75bf623..c67816647cc 100644 --- a/net/dccp/dccp.h +++ b/net/dccp/dccp.h @@ -53,7 +53,7 @@ extern struct inet_hashinfo dccp_hashinfo;  extern struct percpu_counter dccp_orphan_count; -extern void dccp_time_wait(struct sock *sk, int state, int timeo); +void dccp_time_wait(struct sock *sk, int state, int timeo);  /*   *  Set safe upper bounds for header and option length. Since Data Offset is 8 @@ -224,114 +224,108 @@ static inline void dccp_csum_outgoing(struct sk_buff *skb)  	skb->csum = skb_checksum(skb, 0, (cov > skb->len)? skb->len : cov, 0);  } -extern void dccp_v4_send_check(struct sock *sk, struct sk_buff *skb); +void dccp_v4_send_check(struct sock *sk, struct sk_buff *skb); -extern int  dccp_retransmit_skb(struct sock *sk); +int dccp_retransmit_skb(struct sock *sk); -extern void dccp_send_ack(struct sock *sk); -extern void dccp_reqsk_send_ack(struct sock *sk, struct sk_buff *skb, -				struct request_sock *rsk); +void dccp_send_ack(struct sock *sk); +void dccp_reqsk_send_ack(struct sock *sk, struct sk_buff *skb, +			 struct request_sock *rsk); -extern void dccp_send_sync(struct sock *sk, const u64 seq, -			   const enum dccp_pkt_type pkt_type); +void dccp_send_sync(struct sock *sk, const u64 seq, +		    const enum dccp_pkt_type pkt_type);  /*   * TX Packet Dequeueing Interface   */ -extern void		dccp_qpolicy_push(struct sock *sk, struct sk_buff *skb); -extern bool		dccp_qpolicy_full(struct sock *sk); -extern void		dccp_qpolicy_drop(struct sock *sk, struct sk_buff *skb); -extern struct sk_buff	*dccp_qpolicy_top(struct sock *sk); -extern struct sk_buff	*dccp_qpolicy_pop(struct sock *sk); -extern bool		dccp_qpolicy_param_ok(struct sock *sk, __be32 param); +void dccp_qpolicy_push(struct sock *sk, struct sk_buff *skb); +bool dccp_qpolicy_full(struct sock *sk); +void dccp_qpolicy_drop(struct sock *sk, struct sk_buff *skb); +struct sk_buff *dccp_qpolicy_top(struct sock *sk); +struct sk_buff *dccp_qpolicy_pop(struct sock *sk); +bool dccp_qpolicy_param_ok(struct sock *sk, __be32 param);  /*   * TX Packet Output and TX Timers   */ -extern void   dccp_write_xmit(struct sock *sk); -extern void   dccp_write_space(struct sock *sk); -extern void   dccp_flush_write_queue(struct sock *sk, long *time_budget); +void dccp_write_xmit(struct sock *sk); +void dccp_write_space(struct sock *sk); +void dccp_flush_write_queue(struct sock *sk, long *time_budget); -extern void dccp_init_xmit_timers(struct sock *sk); +void dccp_init_xmit_timers(struct sock *sk);  static inline void dccp_clear_xmit_timers(struct sock *sk)  {  	inet_csk_clear_xmit_timers(sk);  } -extern unsigned int dccp_sync_mss(struct sock *sk, u32 pmtu); +unsigned int dccp_sync_mss(struct sock *sk, u32 pmtu); -extern const char *dccp_packet_name(const int type); +const char *dccp_packet_name(const int type); -extern void dccp_set_state(struct sock *sk, const int state); -extern void dccp_done(struct sock *sk); +void dccp_set_state(struct sock *sk, const int state); +void dccp_done(struct sock *sk); -extern int  dccp_reqsk_init(struct request_sock *rq, struct dccp_sock const *dp, -			    struct sk_buff const *skb); +int dccp_reqsk_init(struct request_sock *rq, struct dccp_sock const *dp, +		    struct sk_buff const *skb); -extern int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb); +int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb); -extern struct sock *dccp_create_openreq_child(struct sock *sk, -					      const struct request_sock *req, -					      const struct sk_buff *skb); +struct sock *dccp_create_openreq_child(struct sock *sk, +				       const struct request_sock *req, +				       const struct sk_buff *skb); -extern int dccp_v4_do_rcv(struct sock *sk, struct sk_buff *skb); +int dccp_v4_do_rcv(struct sock *sk, struct sk_buff *skb); -extern struct sock *dccp_v4_request_recv_sock(struct sock *sk, -					      struct sk_buff *skb, -					      struct request_sock *req, -					      struct dst_entry *dst); -extern struct sock *dccp_check_req(struct sock *sk, struct sk_buff *skb, -				   struct request_sock *req, -				   struct request_sock **prev); +struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb, +				       struct request_sock *req, +				       struct dst_entry *dst); +struct sock *dccp_check_req(struct sock *sk, struct sk_buff *skb, +			    struct request_sock *req, +			    struct request_sock **prev); -extern int dccp_child_process(struct sock *parent, struct sock *child, -			      struct sk_buff *skb); -extern int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, -				  struct dccp_hdr *dh, unsigned int len); -extern int dccp_rcv_established(struct sock *sk, struct sk_buff *skb, -				const struct dccp_hdr *dh, const unsigned int len); +int dccp_child_process(struct sock *parent, struct sock *child, +		       struct sk_buff *skb); +int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, +			   struct dccp_hdr *dh, unsigned int len); +int dccp_rcv_established(struct sock *sk, struct sk_buff *skb, +			 const struct dccp_hdr *dh, const unsigned int len); -extern int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized); -extern void dccp_destroy_sock(struct sock *sk); +int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized); +void dccp_destroy_sock(struct sock *sk); -extern void		dccp_close(struct sock *sk, long timeout); -extern struct sk_buff	*dccp_make_response(struct sock *sk, -					    struct dst_entry *dst, -					    struct request_sock *req); +void dccp_close(struct sock *sk, long timeout); +struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst, +				   struct request_sock *req); -extern int	   dccp_connect(struct sock *sk); -extern int	   dccp_disconnect(struct sock *sk, int flags); -extern int	   dccp_getsockopt(struct sock *sk, int level, int optname, -				   char __user *optval, int __user *optlen); -extern int	   dccp_setsockopt(struct sock *sk, int level, int optname, -				   char __user *optval, unsigned int optlen); +int dccp_connect(struct sock *sk); +int dccp_disconnect(struct sock *sk, int flags); +int dccp_getsockopt(struct sock *sk, int level, int optname, +		    char __user *optval, int __user *optlen); +int dccp_setsockopt(struct sock *sk, int level, int optname, +		    char __user *optval, unsigned int optlen);  #ifdef CONFIG_COMPAT -extern int	   compat_dccp_getsockopt(struct sock *sk, -				int level, int optname, -				char __user *optval, int __user *optlen); -extern int	   compat_dccp_setsockopt(struct sock *sk, -				int level, int optname, -				char __user *optval, unsigned int optlen); +int compat_dccp_getsockopt(struct sock *sk, int level, int optname, +			   char __user *optval, int __user *optlen); +int compat_dccp_setsockopt(struct sock *sk, int level, int optname, +			   char __user *optval, unsigned int optlen);  #endif -extern int	   dccp_ioctl(struct sock *sk, int cmd, unsigned long arg); -extern int	   dccp_sendmsg(struct kiocb *iocb, struct sock *sk, -				struct msghdr *msg, size_t size); -extern int	   dccp_recvmsg(struct kiocb *iocb, struct sock *sk, -				struct msghdr *msg, size_t len, int nonblock, -				int flags, int *addr_len); -extern void	   dccp_shutdown(struct sock *sk, int how); -extern int	   inet_dccp_listen(struct socket *sock, int backlog); -extern unsigned int dccp_poll(struct file *file, struct socket *sock, -			     poll_table *wait); -extern int	   dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, -				   int addr_len); - -extern struct sk_buff *dccp_ctl_make_reset(struct sock *sk, -					   struct sk_buff *skb); -extern int	   dccp_send_reset(struct sock *sk, enum dccp_reset_codes code); -extern void	   dccp_send_close(struct sock *sk, const int active); -extern int	   dccp_invalid_packet(struct sk_buff *skb); -extern u32	   dccp_sample_rtt(struct sock *sk, long delta); +int dccp_ioctl(struct sock *sk, int cmd, unsigned long arg); +int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, +		 size_t size); +int dccp_recvmsg(struct kiocb *iocb, struct sock *sk, +		 struct msghdr *msg, size_t len, int nonblock, int flags, +		 int *addr_len); +void dccp_shutdown(struct sock *sk, int how); +int inet_dccp_listen(struct socket *sock, int backlog); +unsigned int dccp_poll(struct file *file, struct socket *sock, +		       poll_table *wait); +int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len); + +struct sk_buff *dccp_ctl_make_reset(struct sock *sk, struct sk_buff *skb); +int dccp_send_reset(struct sock *sk, enum dccp_reset_codes code); +void dccp_send_close(struct sock *sk, const int active); +int dccp_invalid_packet(struct sk_buff *skb); +u32 dccp_sample_rtt(struct sock *sk, long delta);  static inline int dccp_bad_service_code(const struct sock *sk,  					const __be32 service) @@ -475,25 +469,24 @@ static inline int dccp_ack_pending(const struct sock *sk)  	return dccp_ackvec_pending(sk) || inet_csk_ack_scheduled(sk);  } -extern int  dccp_feat_signal_nn_change(struct sock *sk, u8 feat, u64 nn_val); -extern int  dccp_feat_finalise_settings(struct dccp_sock *dp); -extern int  dccp_feat_server_ccid_dependencies(struct dccp_request_sock *dreq); -extern int  dccp_feat_insert_opts(struct dccp_sock*, struct dccp_request_sock*, -				  struct sk_buff *skb); -extern int  dccp_feat_activate_values(struct sock *sk, struct list_head *fn); -extern void dccp_feat_list_purge(struct list_head *fn_list); - -extern int dccp_insert_options(struct sock *sk, struct sk_buff *skb); -extern int dccp_insert_options_rsk(struct dccp_request_sock*, struct sk_buff*); -extern int dccp_insert_option_elapsed_time(struct sk_buff *skb, u32 elapsed); -extern u32 dccp_timestamp(void); -extern void dccp_timestamping_init(void); -extern int dccp_insert_option(struct sk_buff *skb, unsigned char option, -			      const void *value, unsigned char len); +int dccp_feat_signal_nn_change(struct sock *sk, u8 feat, u64 nn_val); +int dccp_feat_finalise_settings(struct dccp_sock *dp); +int dccp_feat_server_ccid_dependencies(struct dccp_request_sock *dreq); +int dccp_feat_insert_opts(struct dccp_sock*, struct dccp_request_sock*, +			  struct sk_buff *skb); +int dccp_feat_activate_values(struct sock *sk, struct list_head *fn); +void dccp_feat_list_purge(struct list_head *fn_list); + +int dccp_insert_options(struct sock *sk, struct sk_buff *skb); +int dccp_insert_options_rsk(struct dccp_request_sock *, struct sk_buff *); +u32 dccp_timestamp(void); +void dccp_timestamping_init(void); +int dccp_insert_option(struct sk_buff *skb, unsigned char option, +		       const void *value, unsigned char len);  #ifdef CONFIG_SYSCTL -extern int dccp_sysctl_init(void); -extern void dccp_sysctl_exit(void); +int dccp_sysctl_init(void); +void dccp_sysctl_exit(void);  #else  static inline int dccp_sysctl_init(void)  { diff --git a/net/dccp/feat.h b/net/dccp/feat.h index 90b957d34d2..0e75cebb218 100644 --- a/net/dccp/feat.h +++ b/net/dccp/feat.h @@ -107,13 +107,13 @@ extern unsigned long sysctl_dccp_sequence_window;  extern int	     sysctl_dccp_rx_ccid;  extern int	     sysctl_dccp_tx_ccid; -extern int  dccp_feat_init(struct sock *sk); -extern void dccp_feat_initialise_sysctls(void); -extern int  dccp_feat_register_sp(struct sock *sk, u8 feat, u8 is_local, -				  u8 const *list, u8 len); -extern int  dccp_feat_parse_options(struct sock *, struct dccp_request_sock *, -				    u8 mand, u8 opt, u8 feat, u8 *val, u8 len); -extern int  dccp_feat_clone_list(struct list_head const *, struct list_head *); +int dccp_feat_init(struct sock *sk); +void dccp_feat_initialise_sysctls(void); +int dccp_feat_register_sp(struct sock *sk, u8 feat, u8 is_local, +			  u8 const *list, u8 len); +int dccp_feat_parse_options(struct sock *, struct dccp_request_sock *, +			    u8 mand, u8 opt, u8 feat, u8 *val, u8 len); +int dccp_feat_clone_list(struct list_head const *, struct list_head *);  /*   * Encoding variable-length options and their maximum length. @@ -127,11 +127,11 @@ extern int  dccp_feat_clone_list(struct list_head const *, struct list_head *);   */  #define DCCP_OPTVAL_MAXLEN	6 -extern void dccp_encode_value_var(const u64 value, u8 *to, const u8 len); -extern u64  dccp_decode_value_var(const u8 *bf, const u8 len); -extern u64  dccp_feat_nn_get(struct sock *sk, u8 feat); +void dccp_encode_value_var(const u64 value, u8 *to, const u8 len); +u64 dccp_decode_value_var(const u8 *bf, const u8 len); +u64 dccp_feat_nn_get(struct sock *sk, u8 feat); -extern int  dccp_insert_option_mandatory(struct sk_buff *skb); -extern int  dccp_insert_fn_opt(struct sk_buff *skb, u8 type, u8 feat, -			       u8 *val, u8 len, bool repeat_first); +int dccp_insert_option_mandatory(struct sk_buff *skb); +int dccp_insert_fn_opt(struct sk_buff *skb, u8 type, u8 feat, u8 *val, u8 len, +		       bool repeat_first);  #endif /* _DCCP_FEAT_H */ diff --git a/net/dccp/input.c b/net/dccp/input.c index 14cdafad7a9..3c8ec7d4a34 100644 --- a/net/dccp/input.c +++ b/net/dccp/input.c @@ -28,7 +28,7 @@ static void dccp_enqueue_skb(struct sock *sk, struct sk_buff *skb)  	__skb_pull(skb, dccp_hdr(skb)->dccph_doff * 4);  	__skb_queue_tail(&sk->sk_receive_queue, skb);  	skb_set_owner_r(skb, sk); -	sk->sk_data_ready(sk, 0); +	sk->sk_data_ready(sk);  }  static void dccp_fin(struct sock *sk, struct sk_buff *skb) diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index ebc54fef85a..6ca645c4b48 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c @@ -75,7 +75,7 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)  	rt = ip_route_connect(fl4, nexthop, inet->inet_saddr,  			      RT_CONN_FLAGS(sk), sk->sk_bound_dev_if,  			      IPPROTO_DCCP, -			      orig_sport, orig_dport, sk, true); +			      orig_sport, orig_dport, sk);  	if (IS_ERR(rt))  		return PTR_ERR(rt); @@ -174,6 +174,7 @@ static inline void dccp_do_pmtu_discovery(struct sock *sk,  	mtu = dst_mtu(dst);  	if (inet->pmtudisc != IP_PMTUDISC_DONT && +	    ip_sk_accept_pmtu(sk) &&  	    inet_csk(sk)->icsk_pmtu_cookie > mtu) {  		dccp_sync_mss(sk, mtu); @@ -409,9 +410,9 @@ struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb,  	newinet		   = inet_sk(newsk);  	ireq		   = inet_rsk(req); -	newinet->inet_daddr	= ireq->rmt_addr; -	newinet->inet_rcv_saddr = ireq->loc_addr; -	newinet->inet_saddr	= ireq->loc_addr; +	newinet->inet_daddr	= ireq->ir_rmt_addr; +	newinet->inet_rcv_saddr = ireq->ir_loc_addr; +	newinet->inet_saddr	= ireq->ir_loc_addr;  	newinet->inet_opt	= ireq->opt;  	ireq->opt	   = NULL;  	newinet->mc_index  = inet_iif(skb); @@ -516,10 +517,10 @@ static int dccp_v4_send_response(struct sock *sk, struct request_sock *req)  		const struct inet_request_sock *ireq = inet_rsk(req);  		struct dccp_hdr *dh = dccp_hdr(skb); -		dh->dccph_checksum = dccp_v4_csum_finish(skb, ireq->loc_addr, -							      ireq->rmt_addr); -		err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr, -					    ireq->rmt_addr, +		dh->dccph_checksum = dccp_v4_csum_finish(skb, ireq->ir_loc_addr, +							      ireq->ir_rmt_addr); +		err = ip_build_and_send_pkt(skb, sk, ireq->ir_loc_addr, +					    ireq->ir_rmt_addr,  					    ireq->opt);  		err = net_xmit_eval(err);  	} @@ -641,8 +642,8 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb)  		goto drop_and_free;  	ireq = inet_rsk(req); -	ireq->loc_addr = ip_hdr(skb)->daddr; -	ireq->rmt_addr = ip_hdr(skb)->saddr; +	ireq->ir_loc_addr = ip_hdr(skb)->daddr; +	ireq->ir_rmt_addr = ip_hdr(skb)->saddr;  	/*  	 * Step 3: Process LISTEN state @@ -988,6 +989,7 @@ static const struct net_protocol dccp_v4_protocol = {  	.err_handler	= dccp_v4_err,  	.no_policy	= 1,  	.netns_ok	= 1, +	.icmp_strict_tag_validation = 1,  };  static const struct proto_ops inet_dccp_ops = { @@ -1022,7 +1024,6 @@ static struct inet_protosw dccp_v4_protosw = {  	.protocol	= IPPROTO_DCCP,  	.prot		= &dccp_v4_prot,  	.ops		= &inet_dccp_ops, -	.no_check	= 0,  	.flags		= INET_PROTOSW_ICSK,  }; diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c index 9c61f9c02fd..4db3c2a1679 100644 --- a/net/dccp/ipv6.c +++ b/net/dccp/ipv6.c @@ -67,7 +67,7 @@ static inline void dccp_v6_send_check(struct sock *sk, struct sk_buff *skb)  	struct dccp_hdr *dh = dccp_hdr(skb);  	dccp_csum_outgoing(skb); -	dh->dccph_checksum = dccp_v6_csum_finish(skb, &np->saddr, &np->daddr); +	dh->dccph_checksum = dccp_v6_csum_finish(skb, &np->saddr, &sk->sk_v6_daddr);  }  static inline __u64 dccp_v6_init_sequence(struct sk_buff *skb) @@ -135,11 +135,15 @@ static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,  		if (dst)  			dst->ops->redirect(dst, sk, skb); +		goto out;  	}  	if (type == ICMPV6_PKT_TOOBIG) {  		struct dst_entry *dst = NULL; +		if (!ip6_sk_accept_pmtu(sk)) +			goto out; +  		if (sock_owned_by_user(sk))  			goto out;  		if ((1 << sk->sk_state) & (DCCPF_LISTEN | DCCPF_CLOSED)) @@ -215,7 +219,7 @@ out:  static int dccp_v6_send_response(struct sock *sk, struct request_sock *req)  { -	struct inet6_request_sock *ireq6 = inet6_rsk(req); +	struct inet_request_sock *ireq = inet_rsk(req);  	struct ipv6_pinfo *np = inet6_sk(sk);  	struct sk_buff *skb;  	struct in6_addr *final_p, final; @@ -225,18 +229,18 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req)  	memset(&fl6, 0, sizeof(fl6));  	fl6.flowi6_proto = IPPROTO_DCCP; -	fl6.daddr = ireq6->rmt_addr; -	fl6.saddr = ireq6->loc_addr; +	fl6.daddr = ireq->ir_v6_rmt_addr; +	fl6.saddr = ireq->ir_v6_loc_addr;  	fl6.flowlabel = 0; -	fl6.flowi6_oif = ireq6->iif; -	fl6.fl6_dport = inet_rsk(req)->rmt_port; -	fl6.fl6_sport = inet_rsk(req)->loc_port; +	fl6.flowi6_oif = ireq->ir_iif; +	fl6.fl6_dport = ireq->ir_rmt_port; +	fl6.fl6_sport = htons(ireq->ir_num);  	security_req_classify_flow(req, flowi6_to_flowi(&fl6));  	final_p = fl6_update_dst(&fl6, np->opt, &final); -	dst = ip6_dst_lookup_flow(sk, &fl6, final_p, false); +	dst = ip6_dst_lookup_flow(sk, &fl6, final_p);  	if (IS_ERR(dst)) {  		err = PTR_ERR(dst);  		dst = NULL; @@ -248,9 +252,9 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req)  		struct dccp_hdr *dh = dccp_hdr(skb);  		dh->dccph_checksum = dccp_v6_csum_finish(skb, -							 &ireq6->loc_addr, -							 &ireq6->rmt_addr); -		fl6.daddr = ireq6->rmt_addr; +							 &ireq->ir_v6_loc_addr, +							 &ireq->ir_v6_rmt_addr); +		fl6.daddr = ireq->ir_v6_rmt_addr;  		err = ip6_xmit(sk, skb, &fl6, np->opt, np->tclass);  		err = net_xmit_eval(err);  	} @@ -263,8 +267,7 @@ done:  static void dccp_v6_reqsk_destructor(struct request_sock *req)  {  	dccp_feat_list_purge(&dccp_rsk(req)->dreq_featneg); -	if (inet6_rsk(req)->pktopts != NULL) -		kfree_skb(inet6_rsk(req)->pktopts); +	kfree_skb(inet_rsk(req)->pktopts);  }  static void dccp_v6_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb) @@ -301,7 +304,7 @@ static void dccp_v6_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb)  	security_skb_classify_flow(rxskb, flowi6_to_flowi(&fl6));  	/* sk = NULL, but it is safe for now. RST socket required. */ -	dst = ip6_dst_lookup_flow(ctl_sk, &fl6, NULL, false); +	dst = ip6_dst_lookup_flow(ctl_sk, &fl6, NULL);  	if (!IS_ERR(dst)) {  		skb_dst_set(skb, dst);  		ip6_xmit(ctl_sk, skb, &fl6, NULL, 0); @@ -358,7 +361,7 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)  {  	struct request_sock *req;  	struct dccp_request_sock *dreq; -	struct inet6_request_sock *ireq6; +	struct inet_request_sock *ireq;  	struct ipv6_pinfo *np = inet6_sk(sk);  	const __be32 service = dccp_hdr_request(skb)->dccph_req_service;  	struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb); @@ -397,22 +400,22 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)  	if (security_inet_conn_request(sk, skb, req))  		goto drop_and_free; -	ireq6 = inet6_rsk(req); -	ireq6->rmt_addr = ipv6_hdr(skb)->saddr; -	ireq6->loc_addr = ipv6_hdr(skb)->daddr; +	ireq = inet_rsk(req); +	ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr; +	ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr;  	if (ipv6_opt_accepted(sk, skb) ||  	    np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||  	    np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {  		atomic_inc(&skb->users); -		ireq6->pktopts = skb; +		ireq->pktopts = skb;  	} -	ireq6->iif = sk->sk_bound_dev_if; +	ireq->ir_iif = sk->sk_bound_dev_if;  	/* So that link locals have meaning */  	if (!sk->sk_bound_dev_if && -	    ipv6_addr_type(&ireq6->rmt_addr) & IPV6_ADDR_LINKLOCAL) -		ireq6->iif = inet6_iif(skb); +	    ipv6_addr_type(&ireq->ir_v6_rmt_addr) & IPV6_ADDR_LINKLOCAL) +		ireq->ir_iif = inet6_iif(skb);  	/*  	 * Step 3: Process LISTEN state @@ -445,7 +448,7 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,  					      struct request_sock *req,  					      struct dst_entry *dst)  { -	struct inet6_request_sock *ireq6 = inet6_rsk(req); +	struct inet_request_sock *ireq = inet_rsk(req);  	struct ipv6_pinfo *newnp, *np = inet6_sk(sk);  	struct inet_sock *newinet;  	struct dccp6_sock *newdp6; @@ -466,11 +469,11 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,  		memcpy(newnp, np, sizeof(struct ipv6_pinfo)); -		ipv6_addr_set_v4mapped(newinet->inet_daddr, &newnp->daddr); +		ipv6_addr_set_v4mapped(newinet->inet_daddr, &newsk->sk_v6_daddr);  		ipv6_addr_set_v4mapped(newinet->inet_saddr, &newnp->saddr); -		newnp->rcv_saddr = newnp->saddr; +		newsk->sk_v6_rcv_saddr = newnp->saddr;  		inet_csk(newsk)->icsk_af_ops = &dccp_ipv6_mapped;  		newsk->sk_backlog_rcv = dccp_v4_do_rcv; @@ -504,15 +507,15 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,  		memset(&fl6, 0, sizeof(fl6));  		fl6.flowi6_proto = IPPROTO_DCCP; -		fl6.daddr = ireq6->rmt_addr; +		fl6.daddr = ireq->ir_v6_rmt_addr;  		final_p = fl6_update_dst(&fl6, np->opt, &final); -		fl6.saddr = ireq6->loc_addr; +		fl6.saddr = ireq->ir_v6_loc_addr;  		fl6.flowi6_oif = sk->sk_bound_dev_if; -		fl6.fl6_dport = inet_rsk(req)->rmt_port; -		fl6.fl6_sport = inet_rsk(req)->loc_port; +		fl6.fl6_dport = ireq->ir_rmt_port; +		fl6.fl6_sport = htons(ireq->ir_num);  		security_sk_classify_flow(sk, flowi6_to_flowi(&fl6)); -		dst = ip6_dst_lookup_flow(sk, &fl6, final_p, false); +		dst = ip6_dst_lookup_flow(sk, &fl6, final_p);  		if (IS_ERR(dst))  			goto out;  	} @@ -537,10 +540,10 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,  	memcpy(newnp, np, sizeof(struct ipv6_pinfo)); -	newnp->daddr = ireq6->rmt_addr; -	newnp->saddr = ireq6->loc_addr; -	newnp->rcv_saddr = ireq6->loc_addr; -	newsk->sk_bound_dev_if = ireq6->iif; +	newsk->sk_v6_daddr	= ireq->ir_v6_rmt_addr; +	newnp->saddr		= ireq->ir_v6_loc_addr; +	newsk->sk_v6_rcv_saddr	= ireq->ir_v6_loc_addr; +	newsk->sk_bound_dev_if	= ireq->ir_iif;  	/* Now IPv6 options... @@ -553,10 +556,10 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,  	/* Clone pktoptions received with SYN */  	newnp->pktoptions = NULL; -	if (ireq6->pktopts != NULL) { -		newnp->pktoptions = skb_clone(ireq6->pktopts, GFP_ATOMIC); -		consume_skb(ireq6->pktopts); -		ireq6->pktopts = NULL; +	if (ireq->pktopts != NULL) { +		newnp->pktoptions = skb_clone(ireq->pktopts, GFP_ATOMIC); +		consume_skb(ireq->pktopts); +		ireq->pktopts = NULL;  		if (newnp->pktoptions)  			skb_set_owner_r(newnp->pktoptions, newsk);  	} @@ -851,7 +854,6 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,  			flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);  			if (flowlabel == NULL)  				return -EINVAL; -			usin->sin6_addr = flowlabel->dst;  			fl6_sock_release(flowlabel);  		}  	} @@ -884,7 +886,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,  			return -EINVAL;  	} -	np->daddr = usin->sin6_addr; +	sk->sk_v6_daddr = usin->sin6_addr;  	np->flow_label = fl6.flowlabel;  	/* @@ -914,16 +916,16 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,  			goto failure;  		}  		ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr); -		ipv6_addr_set_v4mapped(inet->inet_rcv_saddr, &np->rcv_saddr); +		ipv6_addr_set_v4mapped(inet->inet_rcv_saddr, &sk->sk_v6_rcv_saddr);  		return err;  	} -	if (!ipv6_addr_any(&np->rcv_saddr)) -		saddr = &np->rcv_saddr; +	if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr)) +		saddr = &sk->sk_v6_rcv_saddr;  	fl6.flowi6_proto = IPPROTO_DCCP; -	fl6.daddr = np->daddr; +	fl6.daddr = sk->sk_v6_daddr;  	fl6.saddr = saddr ? *saddr : np->saddr;  	fl6.flowi6_oif = sk->sk_bound_dev_if;  	fl6.fl6_dport = usin->sin6_port; @@ -932,7 +934,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,  	final_p = fl6_update_dst(&fl6, np->opt, &final); -	dst = ip6_dst_lookup_flow(sk, &fl6, final_p, true); +	dst = ip6_dst_lookup_flow(sk, &fl6, final_p);  	if (IS_ERR(dst)) {  		err = PTR_ERR(dst);  		goto failure; @@ -940,7 +942,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,  	if (saddr == NULL) {  		saddr = &fl6.saddr; -		np->rcv_saddr = *saddr; +		sk->sk_v6_rcv_saddr = *saddr;  	}  	/* set the source address */ @@ -962,7 +964,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,  		goto late_failure;  	dp->dccps_iss = secure_dccpv6_sequence_number(np->saddr.s6_addr32, -						      np->daddr.s6_addr32, +						      sk->sk_v6_daddr.s6_addr32,  						      inet->inet_sport,  						      inet->inet_dport);  	err = dccp_connect(sk); diff --git a/net/dccp/ipv6.h b/net/dccp/ipv6.h index 6eef81fdbe5..af259e15e7f 100644 --- a/net/dccp/ipv6.h +++ b/net/dccp/ipv6.h @@ -25,12 +25,10 @@ struct dccp6_sock {  struct dccp6_request_sock {  	struct dccp_request_sock  dccp; -	struct inet6_request_sock inet6;  };  struct dccp6_timewait_sock {  	struct inet_timewait_sock   inet; -	struct inet6_timewait_sock  tw6;  };  #endif /* _DCCP_IPV6_H */ diff --git a/net/dccp/minisocks.c b/net/dccp/minisocks.c index 662071b249c..c69eb9c4fbb 100644 --- a/net/dccp/minisocks.c +++ b/net/dccp/minisocks.c @@ -56,12 +56,9 @@ void dccp_time_wait(struct sock *sk, int state, int timeo)  #if IS_ENABLED(CONFIG_IPV6)  		if (tw->tw_family == PF_INET6) {  			const struct ipv6_pinfo *np = inet6_sk(sk); -			struct inet6_timewait_sock *tw6; -			tw->tw_ipv6_offset = inet6_tw_offset(sk->sk_prot); -			tw6 = inet6_twsk((struct sock *)tw); -			tw6->tw_v6_daddr = np->daddr; -			tw6->tw_v6_rcv_saddr = np->rcv_saddr; +			tw->tw_v6_daddr = sk->sk_v6_daddr; +			tw->tw_v6_rcv_saddr = sk->sk_v6_rcv_saddr;  			tw->tw_ipv6only = np->ipv6only;  		}  #endif @@ -240,7 +237,7 @@ int dccp_child_process(struct sock *parent, struct sock *child,  		/* Wakeup parent, send SIGIO */  		if (state == DCCP_RESPOND && child->sk_state != state) -			parent->sk_data_ready(parent, 0); +			parent->sk_data_ready(parent);  	} else {  		/* Alas, it is possible again, because we do lookup  		 * in main socket hash table and lock on listening @@ -269,10 +266,10 @@ int dccp_reqsk_init(struct request_sock *req,  {  	struct dccp_request_sock *dreq = dccp_rsk(req); -	inet_rsk(req)->rmt_port	  = dccp_hdr(skb)->dccph_sport; -	inet_rsk(req)->loc_port	  = dccp_hdr(skb)->dccph_dport; -	inet_rsk(req)->acked	  = 0; -	dreq->dreq_timestamp_echo = 0; +	inet_rsk(req)->ir_rmt_port = dccp_hdr(skb)->dccph_sport; +	inet_rsk(req)->ir_num	   = ntohs(dccp_hdr(skb)->dccph_dport); +	inet_rsk(req)->acked	   = 0; +	dreq->dreq_timestamp_echo  = 0;  	/* inherit feature negotiation options from listening socket */  	return dccp_feat_clone_list(&dp->dccps_featneg, &dreq->dreq_featneg); diff --git a/net/dccp/options.c b/net/dccp/options.c index a58e0b63405..9bce31886bd 100644 --- a/net/dccp/options.c +++ b/net/dccp/options.c @@ -343,38 +343,6 @@ static inline int dccp_elapsed_time_len(const u32 elapsed_time)  	return elapsed_time == 0 ? 0 : elapsed_time <= 0xFFFF ? 2 : 4;  } -/* FIXME: This function is currently not used anywhere */ -int dccp_insert_option_elapsed_time(struct sk_buff *skb, u32 elapsed_time) -{ -	const int elapsed_time_len = dccp_elapsed_time_len(elapsed_time); -	const int len = 2 + elapsed_time_len; -	unsigned char *to; - -	if (elapsed_time_len == 0) -		return 0; - -	if (DCCP_SKB_CB(skb)->dccpd_opt_len + len > DCCP_MAX_OPT_LEN) -		return -1; - -	DCCP_SKB_CB(skb)->dccpd_opt_len += len; - -	to    = skb_push(skb, len); -	*to++ = DCCPO_ELAPSED_TIME; -	*to++ = len; - -	if (elapsed_time_len == 2) { -		const __be16 var16 = htons((u16)elapsed_time); -		memcpy(to, &var16, 2); -	} else { -		const __be32 var32 = htonl(elapsed_time); -		memcpy(to, &var32, 4); -	} - -	return 0; -} - -EXPORT_SYMBOL_GPL(dccp_insert_option_elapsed_time); -  static int dccp_insert_option_timestamp(struct sk_buff *skb)  {  	__be32 now = htonl(dccp_timestamp()); diff --git a/net/dccp/output.c b/net/dccp/output.c index d17fc90a74b..0248e8a3460 100644 --- a/net/dccp/output.c +++ b/net/dccp/output.c @@ -138,7 +138,7 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)  		DCCP_INC_STATS(DCCP_MIB_OUTSEGS); -		err = icsk->icsk_af_ops->queue_xmit(skb, &inet->cork.fl); +		err = icsk->icsk_af_ops->queue_xmit(sk, skb, &inet->cork.fl);  		return net_xmit_eval(err);  	}  	return -ENOBUFS; @@ -424,8 +424,8 @@ struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,  	/* Build and checksum header */  	dh = dccp_zeroed_hdr(skb, dccp_header_size); -	dh->dccph_sport	= inet_rsk(req)->loc_port; -	dh->dccph_dport	= inet_rsk(req)->rmt_port; +	dh->dccph_sport	= htons(inet_rsk(req)->ir_num); +	dh->dccph_dport	= inet_rsk(req)->ir_rmt_port;  	dh->dccph_doff	= (dccp_header_size +  			   DCCP_SKB_CB(skb)->dccpd_opt_len) / 4;  	dh->dccph_type	= DCCP_PKT_RESPONSE; diff --git a/net/dccp/probe.c b/net/dccp/probe.c index 4c6bdf97a65..595ddf0459d 100644 --- a/net/dccp/probe.c +++ b/net/dccp/probe.c @@ -152,17 +152,6 @@ static const struct file_operations dccpprobe_fops = {  	.llseek  = noop_llseek,  }; -static __init int setup_jprobe(void) -{ -	int ret = register_jprobe(&dccp_send_probe); - -	if (ret) { -		request_module("dccp"); -		ret = register_jprobe(&dccp_send_probe); -	} -	return ret; -} -  static __init int dccpprobe_init(void)  {  	int ret = -ENOMEM; @@ -174,7 +163,13 @@ static __init int dccpprobe_init(void)  	if (!proc_create(procname, S_IRUSR, init_net.proc_net, &dccpprobe_fops))  		goto err0; -	ret = setup_jprobe(); +	ret = register_jprobe(&dccp_send_probe); +	if (ret) { +		ret = request_module("dccp"); +		if (!ret) +			ret = register_jprobe(&dccp_send_probe); +	} +  	if (ret)  		goto err1; diff --git a/net/dccp/proto.c b/net/dccp/proto.c index ba64750f038..de2c1e71930 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c @@ -1084,14 +1084,15 @@ EXPORT_SYMBOL_GPL(dccp_shutdown);  static inline int dccp_mib_init(void)  { -	return snmp_mib_init((void __percpu **)dccp_statistics, -			     sizeof(struct dccp_mib), -			     __alignof__(struct dccp_mib)); +	dccp_statistics = alloc_percpu(struct dccp_mib); +	if (!dccp_statistics) +		return -ENOMEM; +	return 0;  }  static inline void dccp_mib_exit(void)  { -	snmp_mib_free((void __percpu **)dccp_statistics); +	free_percpu(dccp_statistics);  }  static int thash_entries; @@ -1158,10 +1159,8 @@ static int __init dccp_init(void)  		goto out_free_bind_bucket_cachep;  	} -	for (i = 0; i <= dccp_hashinfo.ehash_mask; i++) { +	for (i = 0; i <= dccp_hashinfo.ehash_mask; i++)  		INIT_HLIST_NULLS_HEAD(&dccp_hashinfo.ehash[i].chain, i); -		INIT_HLIST_NULLS_HEAD(&dccp_hashinfo.ehash[i].twchain, i); -	}  	if (inet_ehash_locks_alloc(&dccp_hashinfo))  			goto out_free_dccp_ehash; diff --git a/net/dccp/sysctl.c b/net/dccp/sysctl.c index 607ab71b5a0..53731e45403 100644 --- a/net/dccp/sysctl.c +++ b/net/dccp/sysctl.c @@ -20,6 +20,7 @@  /* Boundary values */  static int		zero     = 0, +			one      = 1,  			u8_max   = 0xFF;  static unsigned long	seqw_min = DCCPF_SEQ_WMIN,  			seqw_max = 0xFFFFFFFF;		/* maximum on 32 bit */ @@ -58,7 +59,7 @@ static struct ctl_table dccp_default_table[] = {  		.maxlen		= sizeof(sysctl_dccp_request_retries),  		.mode		= 0644,  		.proc_handler	= proc_dointvec_minmax, -		.extra1		= &zero, +		.extra1		= &one,  		.extra2		= &u8_max,  	},  	{ diff --git a/net/dccp/timer.c b/net/dccp/timer.c index 16f0b223102..1cd46a345cb 100644 --- a/net/dccp/timer.c +++ b/net/dccp/timer.c @@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;   */  u32 dccp_timestamp(void)  { -	s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed); +	u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);  	do_div(delta, 10);  	return delta;  | 
