diff options
| author | David S. Miller <davem@davemloft.net> | 2013-09-05 14:58:52 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2013-09-05 14:58:52 -0400 |
| commit | 06c54055bebf919249aa1eb68312887c3cfe77b4 (patch) | |
| tree | 223a49c09e5d26516ed0161b8a52d08454ae028e /net/ipv4 | |
| parent | 1a5bbfc3d6b700178b75743a2ba1fd2e58a8f36f (diff) | |
| parent | e2e5c4c07caf810d7849658dca42f598b3938e21 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
net/bridge/br_multicast.c
net/ipv6/sit.c
The conflicts were minor:
1) sit.c changes overlap with change to ip_tunnel_xmit() signature.
2) br_multicast.c had an overlap between computing max_delay using
msecs_to_jiffies and turning MLDV2_MRC() into an inline function
with a name using lowercase instead of uppercase letters.
3) stmmac had two overlapping changes, one which conditionally allocated
and hooked up a dma_cfg based upon the presence of the pbl OF property,
and another one handling store-and-forward DMA made. The latter of
which should not go into the new of_find_property() basic block.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
| -rw-r--r-- | net/ipv4/ip_output.c | 8 | ||||
| -rw-r--r-- | net/ipv4/ipip.c | 5 | ||||
| -rw-r--r-- | net/ipv4/raw.c | 3 | ||||
| -rw-r--r-- | net/ipv4/tcp.c | 3 | ||||
| -rw-r--r-- | net/ipv4/tcp_input.c | 9 | ||||
| -rw-r--r-- | net/ipv4/tcp_output.c | 4 | ||||
| -rw-r--r-- | net/ipv4/xfrm4_output.c | 16 | ||||
| -rw-r--r-- | net/ipv4/xfrm4_state.c | 1 |
8 files changed, 27 insertions, 22 deletions
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 4bcabf3ab4ca..9ee17e3d11c3 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -211,14 +211,6 @@ static inline int ip_finish_output2(struct sk_buff *skb) | |||
| 211 | return -EINVAL; | 211 | return -EINVAL; |
| 212 | } | 212 | } |
| 213 | 213 | ||
| 214 | static inline int ip_skb_dst_mtu(struct sk_buff *skb) | ||
| 215 | { | ||
| 216 | struct inet_sock *inet = skb->sk ? inet_sk(skb->sk) : NULL; | ||
| 217 | |||
| 218 | return (inet && inet->pmtudisc == IP_PMTUDISC_PROBE) ? | ||
| 219 | skb_dst(skb)->dev->mtu : dst_mtu(skb_dst(skb)); | ||
| 220 | } | ||
| 221 | |||
| 222 | static int ip_finish_output(struct sk_buff *skb) | 214 | static int ip_finish_output(struct sk_buff *skb) |
| 223 | { | 215 | { |
| 224 | #if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM) | 216 | #if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM) |
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index 87bd2952c733..7f80fb4b82d3 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c | |||
| @@ -190,15 +190,14 @@ static int ipip_rcv(struct sk_buff *skb) | |||
| 190 | struct ip_tunnel *tunnel; | 190 | struct ip_tunnel *tunnel; |
| 191 | const struct iphdr *iph; | 191 | const struct iphdr *iph; |
| 192 | 192 | ||
| 193 | if (iptunnel_pull_header(skb, 0, tpi.proto)) | ||
| 194 | goto drop; | ||
| 195 | |||
| 196 | iph = ip_hdr(skb); | 193 | iph = ip_hdr(skb); |
| 197 | tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex, TUNNEL_NO_KEY, | 194 | tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex, TUNNEL_NO_KEY, |
| 198 | iph->saddr, iph->daddr, 0); | 195 | iph->saddr, iph->daddr, 0); |
| 199 | if (tunnel) { | 196 | if (tunnel) { |
| 200 | if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) | 197 | if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) |
| 201 | goto drop; | 198 | goto drop; |
| 199 | if (iptunnel_pull_header(skb, 0, tpi.proto)) | ||
| 200 | goto drop; | ||
| 202 | return ip_tunnel_rcv(tunnel, skb, &tpi, log_ecn_error); | 201 | return ip_tunnel_rcv(tunnel, skb, &tpi, log_ecn_error); |
| 203 | } | 202 | } |
| 204 | 203 | ||
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 41d84505a922..a86c7ae71881 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
| @@ -571,7 +571,8 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
| 571 | flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos, | 571 | flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos, |
| 572 | RT_SCOPE_UNIVERSE, | 572 | RT_SCOPE_UNIVERSE, |
| 573 | inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol, | 573 | inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol, |
| 574 | inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP, | 574 | inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP | |
| 575 | (inet->hdrincl ? FLOWI_FLAG_KNOWN_NH : 0), | ||
| 575 | daddr, saddr, 0, 0); | 576 | daddr, saddr, 0, 0); |
| 576 | 577 | ||
| 577 | if (!inet->hdrincl) { | 578 | if (!inet->hdrincl) { |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index fdf74090a001..6e5617b9f9db 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
| @@ -2468,10 +2468,11 @@ static int do_tcp_setsockopt(struct sock *sk, int level, | |||
| 2468 | case TCP_THIN_DUPACK: | 2468 | case TCP_THIN_DUPACK: |
| 2469 | if (val < 0 || val > 1) | 2469 | if (val < 0 || val > 1) |
| 2470 | err = -EINVAL; | 2470 | err = -EINVAL; |
| 2471 | else | 2471 | else { |
| 2472 | tp->thin_dupack = val; | 2472 | tp->thin_dupack = val; |
| 2473 | if (tp->thin_dupack) | 2473 | if (tp->thin_dupack) |
| 2474 | tcp_disable_early_retrans(tp); | 2474 | tcp_disable_early_retrans(tp); |
| 2475 | } | ||
| 2475 | break; | 2476 | break; |
| 2476 | 2477 | ||
| 2477 | case TCP_REPAIR: | 2478 | case TCP_REPAIR: |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 93d7e9de4143..1969e16d936d 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
| @@ -3574,7 +3574,10 @@ static bool tcp_parse_aligned_timestamp(struct tcp_sock *tp, const struct tcphdr | |||
| 3574 | ++ptr; | 3574 | ++ptr; |
| 3575 | tp->rx_opt.rcv_tsval = ntohl(*ptr); | 3575 | tp->rx_opt.rcv_tsval = ntohl(*ptr); |
| 3576 | ++ptr; | 3576 | ++ptr; |
| 3577 | tp->rx_opt.rcv_tsecr = ntohl(*ptr) - tp->tsoffset; | 3577 | if (*ptr) |
| 3578 | tp->rx_opt.rcv_tsecr = ntohl(*ptr) - tp->tsoffset; | ||
| 3579 | else | ||
| 3580 | tp->rx_opt.rcv_tsecr = 0; | ||
| 3578 | return true; | 3581 | return true; |
| 3579 | } | 3582 | } |
| 3580 | return false; | 3583 | return false; |
| @@ -3599,7 +3602,7 @@ static bool tcp_fast_parse_options(const struct sk_buff *skb, | |||
| 3599 | } | 3602 | } |
| 3600 | 3603 | ||
| 3601 | tcp_parse_options(skb, &tp->rx_opt, 1, NULL); | 3604 | tcp_parse_options(skb, &tp->rx_opt, 1, NULL); |
| 3602 | if (tp->rx_opt.saw_tstamp) | 3605 | if (tp->rx_opt.saw_tstamp && tp->rx_opt.rcv_tsecr) |
| 3603 | tp->rx_opt.rcv_tsecr -= tp->tsoffset; | 3606 | tp->rx_opt.rcv_tsecr -= tp->tsoffset; |
| 3604 | 3607 | ||
| 3605 | return true; | 3608 | return true; |
| @@ -5354,7 +5357,7 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb, | |||
| 5354 | int saved_clamp = tp->rx_opt.mss_clamp; | 5357 | int saved_clamp = tp->rx_opt.mss_clamp; |
| 5355 | 5358 | ||
| 5356 | tcp_parse_options(skb, &tp->rx_opt, 0, &foc); | 5359 | tcp_parse_options(skb, &tp->rx_opt, 0, &foc); |
| 5357 | if (tp->rx_opt.saw_tstamp) | 5360 | if (tp->rx_opt.saw_tstamp && tp->rx_opt.rcv_tsecr) |
| 5358 | tp->rx_opt.rcv_tsecr -= tp->tsoffset; | 5361 | tp->rx_opt.rcv_tsecr -= tp->tsoffset; |
| 5359 | 5362 | ||
| 5360 | if (th->ack) { | 5363 | if (th->ack) { |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index e63ae4c9691d..7c83cb8bf137 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -2673,7 +2673,7 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst, | |||
| 2673 | int tcp_header_size; | 2673 | int tcp_header_size; |
| 2674 | int mss; | 2674 | int mss; |
| 2675 | 2675 | ||
| 2676 | skb = alloc_skb(MAX_TCP_HEADER + 15, sk_gfp_atomic(sk, GFP_ATOMIC)); | 2676 | skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15, 1, GFP_ATOMIC); |
| 2677 | if (unlikely(!skb)) { | 2677 | if (unlikely(!skb)) { |
| 2678 | dst_release(dst); | 2678 | dst_release(dst); |
| 2679 | return NULL; | 2679 | return NULL; |
| @@ -2817,6 +2817,8 @@ void tcp_connect_init(struct sock *sk) | |||
| 2817 | 2817 | ||
| 2818 | if (likely(!tp->repair)) | 2818 | if (likely(!tp->repair)) |
| 2819 | tp->rcv_nxt = 0; | 2819 | tp->rcv_nxt = 0; |
| 2820 | else | ||
| 2821 | tp->rcv_tstamp = tcp_time_stamp; | ||
| 2820 | tp->rcv_wup = tp->rcv_nxt; | 2822 | tp->rcv_wup = tp->rcv_nxt; |
| 2821 | tp->copied_seq = tp->rcv_nxt; | 2823 | tp->copied_seq = tp->rcv_nxt; |
| 2822 | 2824 | ||
diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c index 327a617d594c..baa0f63731fd 100644 --- a/net/ipv4/xfrm4_output.c +++ b/net/ipv4/xfrm4_output.c | |||
| @@ -21,7 +21,6 @@ | |||
| 21 | static int xfrm4_tunnel_check_size(struct sk_buff *skb) | 21 | static int xfrm4_tunnel_check_size(struct sk_buff *skb) |
| 22 | { | 22 | { |
| 23 | int mtu, ret = 0; | 23 | int mtu, ret = 0; |
| 24 | struct dst_entry *dst; | ||
| 25 | 24 | ||
| 26 | if (IPCB(skb)->flags & IPSKB_XFRM_TUNNEL_SIZE) | 25 | if (IPCB(skb)->flags & IPSKB_XFRM_TUNNEL_SIZE) |
| 27 | goto out; | 26 | goto out; |
| @@ -29,12 +28,10 @@ static int xfrm4_tunnel_check_size(struct sk_buff *skb) | |||
| 29 | if (!(ip_hdr(skb)->frag_off & htons(IP_DF)) || skb->local_df) | 28 | if (!(ip_hdr(skb)->frag_off & htons(IP_DF)) || skb->local_df) |
| 30 | goto out; | 29 | goto out; |
| 31 | 30 | ||
| 32 | dst = skb_dst(skb); | 31 | mtu = dst_mtu(skb_dst(skb)); |
| 33 | mtu = dst_mtu(dst); | ||
| 34 | if (skb->len > mtu) { | 32 | if (skb->len > mtu) { |
| 35 | if (skb->sk) | 33 | if (skb->sk) |
| 36 | ip_local_error(skb->sk, EMSGSIZE, ip_hdr(skb)->daddr, | 34 | xfrm_local_error(skb, mtu); |
| 37 | inet_sk(skb->sk)->inet_dport, mtu); | ||
| 38 | else | 35 | else |
| 39 | icmp_send(skb, ICMP_DEST_UNREACH, | 36 | icmp_send(skb, ICMP_DEST_UNREACH, |
| 40 | ICMP_FRAG_NEEDED, htonl(mtu)); | 37 | ICMP_FRAG_NEEDED, htonl(mtu)); |
| @@ -99,3 +96,12 @@ int xfrm4_output(struct sk_buff *skb) | |||
| 99 | x->outer_mode->afinfo->output_finish, | 96 | x->outer_mode->afinfo->output_finish, |
| 100 | !(IPCB(skb)->flags & IPSKB_REROUTED)); | 97 | !(IPCB(skb)->flags & IPSKB_REROUTED)); |
| 101 | } | 98 | } |
| 99 | |||
| 100 | void xfrm4_local_error(struct sk_buff *skb, u32 mtu) | ||
| 101 | { | ||
| 102 | struct iphdr *hdr; | ||
| 103 | |||
| 104 | hdr = skb->encapsulation ? inner_ip_hdr(skb) : ip_hdr(skb); | ||
| 105 | ip_local_error(skb->sk, EMSGSIZE, hdr->daddr, | ||
| 106 | inet_sk(skb->sk)->inet_dport, mtu); | ||
| 107 | } | ||
diff --git a/net/ipv4/xfrm4_state.c b/net/ipv4/xfrm4_state.c index 9258e751baba..0b2a0641526a 100644 --- a/net/ipv4/xfrm4_state.c +++ b/net/ipv4/xfrm4_state.c | |||
| @@ -83,6 +83,7 @@ static struct xfrm_state_afinfo xfrm4_state_afinfo = { | |||
| 83 | .extract_input = xfrm4_extract_input, | 83 | .extract_input = xfrm4_extract_input, |
| 84 | .extract_output = xfrm4_extract_output, | 84 | .extract_output = xfrm4_extract_output, |
| 85 | .transport_finish = xfrm4_transport_finish, | 85 | .transport_finish = xfrm4_transport_finish, |
| 86 | .local_error = xfrm4_local_error, | ||
| 86 | }; | 87 | }; |
| 87 | 88 | ||
| 88 | void __init xfrm4_state_init(void) | 89 | void __init xfrm4_state_init(void) |
