Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 247001
b: refs/heads/master
c: 9c6a02f
h: refs/heads/master
i:
  246999: ac88488
v: v3
  • Loading branch information
Vlad Yasevich authored and David S. Miller committed Apr 27, 2011
1 parent 3019e3d commit 1d8152f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9914ae3ca770389a3bec3114d0a07532a7f235dd
refs/heads/master: 9c6a02f41d10dc9fbf5dd42058e8846f38dd2d9a
16 changes: 11 additions & 5 deletions trunk/net/sctp/ipv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -262,22 +262,27 @@ static struct dst_entry *sctp_v6_get_dst(struct sctp_association *asoc,
__u8 matchlen = 0;
__u8 bmatchlen;
sctp_scope_t scope;
int err = 0;

memset(fl6, 0, sizeof(struct flowi6));
ipv6_addr_copy(&fl6->daddr, &daddr->v6.sin6_addr);
fl6->fl6_dport = daddr->v6.sin6_port;
fl6->flowi6_proto = IPPROTO_SCTP;
if (ipv6_addr_type(&daddr->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL)
fl6->flowi6_oif = daddr->v6.sin6_scope_id;


SCTP_DEBUG_PRINTK("%s: DST=%pI6 ", __func__, &fl6->daddr);

if (asoc)
fl6->fl6_sport = htons(asoc->base.bind_addr.port);

if (saddr) {
ipv6_addr_copy(&fl6->saddr, &saddr->v6.sin6_addr);
fl6->fl6_sport = saddr->v6.sin6_port;
SCTP_DEBUG_PRINTK("SRC=%pI6 - ", &fl6->saddr);
}

err = ip6_dst_lookup(sk, &dst, fl6);
dst = ip6_dst_lookup_flow(sk, fl6, NULL, false);
if (!asoc || saddr)
goto out;

Expand All @@ -286,7 +291,7 @@ static struct dst_entry *sctp_v6_get_dst(struct sctp_association *asoc,
/* ip6_dst_lookup has filled in the fl6->saddr for us. Check
* to see if we can use it.
*/
if (!err) {
if (!IS_ERR(dst)) {
/* Walk through the bind address list and look for a bind
* address that matches the source address of the returned dst.
*/
Expand Down Expand Up @@ -330,11 +335,12 @@ static struct dst_entry *sctp_v6_get_dst(struct sctp_association *asoc,
rcu_read_unlock();
if (baddr) {
ipv6_addr_copy(&fl6->saddr, &baddr->v6.sin6_addr);
err = ip6_dst_lookup(sk, &dst, fl6);
fl6->fl6_sport = baddr->v6.sin6_port;
dst = ip6_dst_lookup_flow(sk, fl6, NULL, false);
}

out:
if (!err) {
if (!IS_ERR(dst)) {
struct rt6_info *rt;
rt = (struct rt6_info *)dst;
SCTP_DEBUG_PRINTK("rt6_dst:%pI6 rt6_src:%pI6\n",
Expand Down

0 comments on commit 1d8152f

Please sign in to comment.