Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 103522
b: refs/heads/master
c: 2da5991
h: refs/heads/master
v: v3
  • Loading branch information
Allan Stephens authored and David S. Miller committed Jul 15, 2008
1 parent 91b3e61 commit 520ea51
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 21 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: 8642bd9e04f51980b2b6293c66acf7e388c9a6e7
refs/heads/master: 2da59918e26837f305131cfac9c0f1b3b42bb8ae
42 changes: 22 additions & 20 deletions trunk/net/tipc/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
struct tipc_sock {
struct sock sk;
struct tipc_port *p;
struct tipc_portid peer_name;
};

#define tipc_sk(sk) ((struct tipc_sock *)(sk))
Expand Down Expand Up @@ -377,27 +378,29 @@ static int bind(struct socket *sock, struct sockaddr *uaddr, int uaddr_len)
* @sock: socket structure
* @uaddr: area for returned socket address
* @uaddr_len: area for returned length of socket address
* @peer: 0 to obtain socket name, 1 to obtain peer socket name
* @peer: 0 = own ID, 1 = current peer ID, 2 = current/former peer ID
*
* Returns 0 on success, errno otherwise
*
* NOTE: This routine doesn't need to take the socket lock since it doesn't
* access any non-constant socket information.
* NOTE: This routine doesn't need to take the socket lock since it only
* accesses socket information that is unchanging (or which changes in
* a completely predictable manner).
*/

static int get_name(struct socket *sock, struct sockaddr *uaddr,
int *uaddr_len, int peer)
{
struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr;
u32 portref = tipc_sk_port(sock->sk)->ref;
u32 res;
struct tipc_sock *tsock = tipc_sk(sock->sk);

if (peer) {
res = tipc_peer(portref, &addr->addr.id);
if (res)
return res;
if ((sock->state != SS_CONNECTED) &&
((peer != 2) || (sock->state != SS_DISCONNECTING)))
return -ENOTCONN;
addr->addr.id.ref = tsock->peer_name.ref;
addr->addr.id.node = tsock->peer_name.node;
} else {
tipc_ownidentity(portref, &addr->addr.id);
tipc_ownidentity(tsock->p->ref, &addr->addr.id);
}

*uaddr_len = sizeof(*addr);
Expand Down Expand Up @@ -766,18 +769,17 @@ static int send_stream(struct kiocb *iocb, struct socket *sock,

static int auto_connect(struct socket *sock, struct tipc_msg *msg)
{
struct tipc_port *tport = tipc_sk_port(sock->sk);
struct tipc_portid peer;
struct tipc_sock *tsock = tipc_sk(sock->sk);

if (msg_errcode(msg)) {
sock->state = SS_DISCONNECTING;
return -ECONNREFUSED;
}

peer.ref = msg_origport(msg);
peer.node = msg_orignode(msg);
tipc_connect2port(tport->ref, &peer);
tipc_set_portimportance(tport->ref, msg_importance(msg));
tsock->peer_name.ref = msg_origport(msg);
tsock->peer_name.node = msg_orignode(msg);
tipc_connect2port(tsock->p->ref, &tsock->peer_name);
tipc_set_portimportance(tsock->p->ref, msg_importance(msg));
sock->state = SS_CONNECTED;
return 0;
}
Expand Down Expand Up @@ -1529,9 +1531,9 @@ static int accept(struct socket *sock, struct socket *new_sock, int flags)
res = tipc_create(sock_net(sock->sk), new_sock, 0);
if (!res) {
struct sock *new_sk = new_sock->sk;
struct tipc_port *new_tport = tipc_sk_port(new_sk);
struct tipc_sock *new_tsock = tipc_sk(new_sk);
struct tipc_port *new_tport = new_tsock->p;
u32 new_ref = new_tport->ref;
struct tipc_portid id;
struct tipc_msg *msg = buf_msg(buf);

lock_sock(new_sk);
Expand All @@ -1545,9 +1547,9 @@ static int accept(struct socket *sock, struct socket *new_sock, int flags)

/* Connect new socket to it's peer */

id.ref = msg_origport(msg);
id.node = msg_orignode(msg);
tipc_connect2port(new_ref, &id);
new_tsock->peer_name.ref = msg_origport(msg);
new_tsock->peer_name.node = msg_orignode(msg);
tipc_connect2port(new_ref, &new_tsock->peer_name);
new_sock->state = SS_CONNECTED;

tipc_set_portimportance(new_ref, msg_importance(msg));
Expand Down

0 comments on commit 520ea51

Please sign in to comment.