Commit d85838c5 authored by Ralf Baechle's avatar Ralf Baechle Committed by David S. Miller
Browse files

[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: default avatarRalf Baechle <ralf@linux-mips.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 18601a7d
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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 */
	}