diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2006-07-03 22:32:23 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-07-03 22:32:23 -0400 |
commit | d85838c55d836c33077344fab424f200f2827d84 (patch) | |
tree | 780dbeaa81b38b0edf3631f945b2ea9582dfe48e /net/rose/af_rose.c | |
parent | 18601a7d30c8340af4d786793ee52828471d2630 (diff) |
[ROSE]: Try all routes when establishing a ROSE connections.
From Jean-Paul F6FBB
ROSE will only try to establish a route using the first route in its
routing table. Fix to iterate through all additional routes if a
connection attempt has failed.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/rose/af_rose.c')
-rw-r--r-- | net/rose/af_rose.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index 7799fe82aeb6..d0a67bb31363 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c | |||
@@ -752,7 +752,7 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le | |||
752 | 752 | ||
753 | rose_insert_socket(sk); /* Finish the bind */ | 753 | rose_insert_socket(sk); /* Finish the bind */ |
754 | } | 754 | } |
755 | 755 | rose_try_next_neigh: | |
756 | rose->dest_addr = addr->srose_addr; | 756 | rose->dest_addr = addr->srose_addr; |
757 | rose->dest_call = addr->srose_call; | 757 | rose->dest_call = addr->srose_call; |
758 | rose->rand = ((long)rose & 0xFFFF) + rose->lci; | 758 | rose->rand = ((long)rose & 0xFFFF) + rose->lci; |
@@ -810,6 +810,11 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le | |||
810 | } | 810 | } |
811 | 811 | ||
812 | if (sk->sk_state != TCP_ESTABLISHED) { | 812 | if (sk->sk_state != TCP_ESTABLISHED) { |
813 | /* Try next neighbour */ | ||
814 | rose->neighbour = rose_get_neigh(&addr->srose_addr, &cause, &diagnostic); | ||
815 | if (rose->neighbour) | ||
816 | goto rose_try_next_neigh; | ||
817 | /* No more neighbour */ | ||
813 | sock->state = SS_UNCONNECTED; | 818 | sock->state = SS_UNCONNECTED; |
814 | return sock_error(sk); /* Always set at this point */ | 819 | return sock_error(sk); /* Always set at this point */ |
815 | } | 820 | } |