diff options
Diffstat (limited to 'net/ipv4/af_inet.c')
| -rw-r--r-- | net/ipv4/af_inet.c | 53 | 
1 files changed, 27 insertions, 26 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index a5a820ee2026..55bd72997b31 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -119,6 +119,7 @@  #endif  #include <net/l3mdev.h>  #include <net/compat.h> +#include <net/rps.h>  #include <trace/events/sock.h> @@ -1103,7 +1104,7 @@ const struct proto_ops inet_dgram_ops = {  	.recvmsg	   = inet_recvmsg,  	.mmap		   = sock_no_mmap,  	.splice_eof	   = inet_splice_eof, -	.set_peek_off	   = sk_set_peek_off, +	.set_peek_off	   = udp_set_peek_off,  #ifdef CONFIG_COMPAT  	.compat_ioctl	   = inet_compat_ioctl,  #endif @@ -1326,7 +1327,7 @@ int inet_sk_rebuild_header(struct sock *sk)  	fl4 = &inet->cork.fl.u.ip4;  	rt = ip_route_output_ports(sock_net(sk), fl4, sk, daddr, inet->inet_saddr,  				   inet->inet_dport, inet->inet_sport, -				   sk->sk_protocol, RT_CONN_FLAGS(sk), +				   sk->sk_protocol, ip_sock_rt_tos(sk),  				   sk->sk_bound_dev_if);  	if (!IS_ERR(rt)) {  		err = 0; @@ -1751,19 +1752,6 @@ static const struct net_protocol igmp_protocol = {  };  #endif -static const struct net_protocol tcp_protocol = { -	.handler	=	tcp_v4_rcv, -	.err_handler	=	tcp_v4_err, -	.no_policy	=	1, -	.icmp_strict_tag_validation = 1, -}; - -static const struct net_protocol udp_protocol = { -	.handler =	udp_rcv, -	.err_handler =	udp_err, -	.no_policy =	1, -}; -  static const struct net_protocol icmp_protocol = {  	.handler =	icmp_rcv,  	.err_handler =	icmp_err, @@ -1904,14 +1892,6 @@ static int ipv4_proc_init(void);   *	IP protocol layer initialiser   */ -static struct packet_offload ip_packet_offload __read_mostly = { -	.type = cpu_to_be16(ETH_P_IP), -	.callbacks = { -		.gso_segment = inet_gso_segment, -		.gro_receive = inet_gro_receive, -		.gro_complete = inet_gro_complete, -	}, -};  static const struct net_offload ipip_offload = {  	.callbacks = { @@ -1938,7 +1918,15 @@ static int __init ipv4_offload_init(void)  	if (ipip_offload_init() < 0)  		pr_crit("%s: Cannot add IPIP protocol offload\n", __func__); -	dev_add_offload(&ip_packet_offload); +	net_hotdata.ip_packet_offload = (struct packet_offload) { +		.type = cpu_to_be16(ETH_P_IP), +		.callbacks = { +			.gso_segment = inet_gso_segment, +			.gro_receive = inet_gro_receive, +			.gro_complete = inet_gro_complete, +		}, +	}; +	dev_add_offload(&net_hotdata.ip_packet_offload);  	return 0;  } @@ -1992,9 +1980,22 @@ static int __init inet_init(void)  	if (inet_add_protocol(&icmp_protocol, IPPROTO_ICMP) < 0)  		pr_crit("%s: Cannot add ICMP protocol\n", __func__); -	if (inet_add_protocol(&udp_protocol, IPPROTO_UDP) < 0) + +	net_hotdata.udp_protocol = (struct net_protocol) { +		.handler =	udp_rcv, +		.err_handler =	udp_err, +		.no_policy =	1, +	}; +	if (inet_add_protocol(&net_hotdata.udp_protocol, IPPROTO_UDP) < 0)  		pr_crit("%s: Cannot add UDP protocol\n", __func__); -	if (inet_add_protocol(&tcp_protocol, IPPROTO_TCP) < 0) + +	net_hotdata.tcp_protocol = (struct net_protocol) { +		.handler	=	tcp_v4_rcv, +		.err_handler	=	tcp_v4_err, +		.no_policy	=	1, +		.icmp_strict_tag_validation = 1, +	}; +	if (inet_add_protocol(&net_hotdata.tcp_protocol, IPPROTO_TCP) < 0)  		pr_crit("%s: Cannot add TCP protocol\n", __func__);  #ifdef CONFIG_IP_MULTICAST  	if (inet_add_protocol(&igmp_protocol, IPPROTO_IGMP) < 0)  | 
