[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>
This commit is contained in:
Родитель
18601a7d30
Коммит
d85838c55d
|
@ -752,7 +752,7 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le
|
|||
|
||||
rose_insert_socket(sk); /* Finish the bind */
|
||||
}
|
||||
|
||||
rose_try_next_neigh:
|
||||
rose->dest_addr = addr->srose_addr;
|
||||
rose->dest_call = addr->srose_call;
|
||||
rose->rand = ((long)rose & 0xFFFF) + rose->lci;
|
||||
|
@ -810,6 +810,11 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le
|
|||
}
|
||||
|
||||
if (sk->sk_state != TCP_ESTABLISHED) {
|
||||
/* Try next neighbour */
|
||||
rose->neighbour = rose_get_neigh(&addr->srose_addr, &cause, &diagnostic);
|
||||
if (rose->neighbour)
|
||||
goto rose_try_next_neigh;
|
||||
/* No more neighbour */
|
||||
sock->state = SS_UNCONNECTED;
|
||||
return sock_error(sk); /* Always set at this point */
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче