diff options
author | David S. Miller <davem@davemloft.net> | 2012-07-16 06:44:56 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-07-16 06:44:56 -0400 |
commit | 35ad9b9cf7d8a2e6259a0d24022e910adb6f3489 (patch) | |
tree | d9772467e072f3f1d142aa0ce2fc56ef69c57cb7 /net/dccp | |
parent | 80d0a69fc57715dc9080c0567df1ed911b78abea (diff) |
ipv6: Add helper inet6_csk_update_pmtu().
This is the ipv6 version of inet_csk_update_pmtu().
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp')
-rw-r--r-- | net/dccp/ipv6.c | 35 |
1 files changed, 4 insertions, 31 deletions
diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c index 090c0800ce0..3ee0342e1ce 100644 --- a/net/dccp/ipv6.c +++ b/net/dccp/ipv6.c | |||
@@ -145,39 +145,12 @@ static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
145 | if ((1 << sk->sk_state) & (DCCPF_LISTEN | DCCPF_CLOSED)) | 145 | if ((1 << sk->sk_state) & (DCCPF_LISTEN | DCCPF_CLOSED)) |
146 | goto out; | 146 | goto out; |
147 | 147 | ||
148 | /* icmp should have updated the destination cache entry */ | 148 | dst = inet6_csk_update_pmtu(sk, ntohl(info)); |
149 | dst = __sk_dst_check(sk, np->dst_cookie); | 149 | if (!dst) |
150 | if (dst == NULL) { | 150 | goto out; |
151 | struct inet_sock *inet = inet_sk(sk); | ||
152 | struct flowi6 fl6; | ||
153 | |||
154 | /* BUGGG_FUTURE: Again, it is not clear how | ||
155 | to handle rthdr case. Ignore this complexity | ||
156 | for now. | ||
157 | */ | ||
158 | memset(&fl6, 0, sizeof(fl6)); | ||
159 | fl6.flowi6_proto = IPPROTO_DCCP; | ||
160 | fl6.daddr = np->daddr; | ||
161 | fl6.saddr = np->saddr; | ||
162 | fl6.flowi6_oif = sk->sk_bound_dev_if; | ||
163 | fl6.fl6_dport = inet->inet_dport; | ||
164 | fl6.fl6_sport = inet->inet_sport; | ||
165 | security_sk_classify_flow(sk, flowi6_to_flowi(&fl6)); | ||
166 | |||
167 | dst = ip6_dst_lookup_flow(sk, &fl6, NULL, false); | ||
168 | if (IS_ERR(dst)) { | ||
169 | sk->sk_err_soft = -PTR_ERR(dst); | ||
170 | goto out; | ||
171 | } | ||
172 | } else | ||
173 | dst_hold(dst); | ||
174 | |||
175 | dst->ops->update_pmtu(dst, ntohl(info)); | ||
176 | 151 | ||
177 | if (inet_csk(sk)->icsk_pmtu_cookie > dst_mtu(dst)) { | 152 | if (inet_csk(sk)->icsk_pmtu_cookie > dst_mtu(dst)) |
178 | dccp_sync_mss(sk, dst_mtu(dst)); | 153 | dccp_sync_mss(sk, dst_mtu(dst)); |
179 | } /* else let the usual retransmit timer handle it */ | ||
180 | dst_release(dst); | ||
181 | goto out; | 154 | goto out; |
182 | } | 155 | } |
183 | 156 | ||