aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/sctp/structs.h1
-rw-r--r--net/sctp/ipv6.c4
-rw-r--r--net/sctp/transport.c4
3 files changed, 3 insertions, 6 deletions
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 8f6619dbb666..275195620145 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -904,7 +904,6 @@ struct sctp_transport {
904 struct dst_entry *dst; 904 struct dst_entry *dst;
905 /* Source address. */ 905 /* Source address. */
906 union sctp_addr saddr; 906 union sctp_addr saddr;
907 union sctp_addr saddr_h;
908 907
909 /* When was the last time(in jiffies) that a data packet was sent on 908 /* When was the last time(in jiffies) that a data packet was sent on
910 * this transport? This is used to adjust the cwnd when the transport 909 * this transport? This is used to adjust the cwnd when the transport
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
index 7f4c5bafea14..3dc8ed143521 100644
--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -162,12 +162,12 @@ static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport,
162 * and the source address from the transport. 162 * and the source address from the transport.
163 */ 163 */
164 ipv6_addr_copy(&fl.fl6_dst, &transport->ipaddr_h.v6.sin6_addr); 164 ipv6_addr_copy(&fl.fl6_dst, &transport->ipaddr_h.v6.sin6_addr);
165 ipv6_addr_copy(&fl.fl6_src, &transport->saddr_h.v6.sin6_addr); 165 ipv6_addr_copy(&fl.fl6_src, &transport->saddr.v6.sin6_addr);
166 166
167 fl.fl6_flowlabel = np->flow_label; 167 fl.fl6_flowlabel = np->flow_label;
168 IP6_ECN_flow_xmit(sk, fl.fl6_flowlabel); 168 IP6_ECN_flow_xmit(sk, fl.fl6_flowlabel);
169 if (ipv6_addr_type(&fl.fl6_src) & IPV6_ADDR_LINKLOCAL) 169 if (ipv6_addr_type(&fl.fl6_src) & IPV6_ADDR_LINKLOCAL)
170 fl.oif = transport->saddr_h.v6.sin6_scope_id; 170 fl.oif = transport->saddr.v6.sin6_scope_id;
171 else 171 else
172 fl.oif = sk->sk_bound_dev_if; 172 fl.oif = sk->sk_bound_dev_if;
173 fl.fl_ip_sport = inet_sk(sk)->sport; 173 fl.fl_ip_sport = inet_sk(sk)->sport;
diff --git a/net/sctp/transport.c b/net/sctp/transport.c
index d1b6834a3a47..05ab5e9c7c47 100644
--- a/net/sctp/transport.c
+++ b/net/sctp/transport.c
@@ -68,7 +68,6 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer,
68 68
69 peer->dst = NULL; 69 peer->dst = NULL;
70 memset(&peer->saddr, 0, sizeof(union sctp_addr)); 70 memset(&peer->saddr, 0, sizeof(union sctp_addr));
71 memset(&peer->saddr_h, 0, sizeof(union sctp_addr));
72 71
73 /* From 6.3.1 RTO Calculation: 72 /* From 6.3.1 RTO Calculation:
74 * 73 *
@@ -261,7 +260,6 @@ void sctp_transport_route(struct sctp_transport *transport,
261 else 260 else
262 af->get_saddr(asoc, dst, daddr, &transport->saddr); 261 af->get_saddr(asoc, dst, daddr, &transport->saddr);
263 262
264 flip_to_h(&transport->saddr_h, &transport->saddr);
265 transport->dst = dst; 263 transport->dst = dst;
266 if ((transport->param_flags & SPP_PMTUD_DISABLE) && transport->pathmtu) { 264 if ((transport->param_flags & SPP_PMTUD_DISABLE) && transport->pathmtu) {
267 return; 265 return;
@@ -273,7 +271,7 @@ void sctp_transport_route(struct sctp_transport *transport,
273 * association's active path for getsockname(). 271 * association's active path for getsockname().
274 */ 272 */
275 if (asoc && (transport == asoc->peer.active_path)) 273 if (asoc && (transport == asoc->peer.active_path))
276 opt->pf->af->to_sk_saddr(&transport->saddr_h, 274 opt->pf->af->to_sk_saddr(&transport->saddr,
277 asoc->base.sk); 275 asoc->base.sk);
278 } else 276 } else
279 transport->pathmtu = SCTP_DEFAULT_MAXSEGMENT; 277 transport->pathmtu = SCTP_DEFAULT_MAXSEGMENT;