RDMA: Support .is_local method (#1089)
There is no ethernet style virtual device (like lo 127.0.0.1) for RDMA, however a connection with the same local address and peer address are considered as local. Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
This commit is contained in:
parent
bb57dfe630
commit
a7cbca4066
21
src/rdma.c
21
src/rdma.c
@ -1501,6 +1501,26 @@ end:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int connRdmaIsLocal(connection *conn) {
|
||||||
|
rdma_connection *rdma_conn = (rdma_connection *)conn;
|
||||||
|
struct sockaddr *laddr = rdma_get_local_addr(rdma_conn->cm_id);
|
||||||
|
struct sockaddr *raddr = rdma_get_peer_addr(rdma_conn->cm_id);
|
||||||
|
struct sockaddr_in *lsa4, *rsa4;
|
||||||
|
struct sockaddr_in6 *lsa6, *rsa6;
|
||||||
|
|
||||||
|
if (laddr->sa_family == AF_INET) {
|
||||||
|
lsa4 = (struct sockaddr_in *)laddr;
|
||||||
|
rsa4 = (struct sockaddr_in *)raddr;
|
||||||
|
return !memcmp(&lsa4->sin_addr, &rsa4->sin_addr, sizeof(lsa4->sin_addr));
|
||||||
|
} else if (laddr->sa_family == AF_INET6) {
|
||||||
|
lsa6 = (struct sockaddr_in6 *)laddr;
|
||||||
|
rsa6 = (struct sockaddr_in6 *)raddr;
|
||||||
|
return !memcmp(&lsa6->sin6_addr, &rsa6->sin6_addr, sizeof(lsa6->sin6_addr));
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int connRdmaListen(connListener *listener) {
|
int connRdmaListen(connListener *listener) {
|
||||||
int j, ret;
|
int j, ret;
|
||||||
char **bindaddr = listener->bindaddr;
|
char **bindaddr = listener->bindaddr;
|
||||||
@ -1673,6 +1693,7 @@ static ConnectionType CT_RDMA = {
|
|||||||
.ae_handler = connRdmaEventHandler,
|
.ae_handler = connRdmaEventHandler,
|
||||||
.accept_handler = connRdmaAcceptHandler,
|
.accept_handler = connRdmaAcceptHandler,
|
||||||
//.cluster_accept_handler = NULL,
|
//.cluster_accept_handler = NULL,
|
||||||
|
.is_local = connRdmaIsLocal,
|
||||||
.listen = connRdmaListen,
|
.listen = connRdmaListen,
|
||||||
.addr = connRdmaAddr,
|
.addr = connRdmaAddr,
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user