* Keys for matching a connection.
  */
 struct rxrpc_conn_proto {
-       unsigned long           hash_key;
-       struct rxrpc_local      *local;         /* Representation of local endpoint */
-       u32                     epoch;          /* epoch of this connection */
-       u32                     cid;            /* connection ID */
-       u8                      in_clientflag;  /* RXRPC_CLIENT_INITIATED if we are server */
-       u8                      addr_size;      /* Size of the address */
-       sa_family_t             family;         /* Transport protocol */
-       __be16                  port;           /* Peer UDP/UDP6 port */
-       union {                                 /* Peer address */
-               struct in_addr  ipv4_addr;
-               struct in6_addr ipv6_addr;
-               u32             raw_addr[0];
+       union {
+               struct {
+                       u32     epoch;          /* epoch of this connection */
+                       u32     cid;            /* connection ID */
+               };
+               u64             index_key;
        };
 };
 
 
 static inline bool rxrpc_conn_is_service(const struct rxrpc_connection *conn)
 {
-       return conn->proto.in_clientflag;
+       return !rxrpc_conn_is_client(conn);
 }
 
 static inline void rxrpc_get_connection(struct rxrpc_connection *conn)
 
        }
        call->epoch = conn->proto.epoch;
        call->service_id = conn->params.service_id;
-       call->in_clientflag = conn->proto.in_clientflag;
+       call->in_clientflag = RXRPC_CLIENT_INITIATED;
        /* Add the new call to the hashtable */
        rxrpc_call_hash_add(call);
 
 
        }
 
        conn->params            = *cp;
-       conn->proto.local       = cp->local;
        conn->proto.epoch       = rxrpc_epoch;
        conn->proto.cid         = 0;
-       conn->proto.in_clientflag = 0;
-       conn->proto.family      = cp->peer->srx.transport.family;
        conn->out_clientflag    = RXRPC_CLIENT_INITIATED;
        conn->state             = RXRPC_CONN_CLIENT;
 
-       switch (conn->proto.family) {
-       case AF_INET:
-               conn->proto.addr_size = sizeof(conn->proto.ipv4_addr);
-               conn->proto.ipv4_addr = cp->peer->srx.transport.sin.sin_addr;
-               conn->proto.port = cp->peer->srx.transport.sin.sin_port;
-               break;
-       }
-
        ret = rxrpc_get_client_connection_id(conn, gfp);
        if (ret < 0)
                goto error_0;
 
                return ERR_PTR(-ENOMEM);
        }
 
-       candidate->proto.local          = local;
        candidate->proto.epoch          = sp->hdr.epoch;
        candidate->proto.cid            = sp->hdr.cid & RXRPC_CIDMASK;
-       candidate->proto.in_clientflag  = RXRPC_CLIENT_INITIATED;
        candidate->params.local         = local;
        candidate->params.peer          = peer;
        candidate->params.service_id    = sp->hdr.serviceId;