@@ -541,13 +541,13 @@ static int run_server(void)
if (ret)
goto out;
if (test.addr.src_addr.sa_family == AF_INET)
- ((struct sockaddr_in *) &test.addr.src_addr)->sin_port = port;
+ test.addr.src_sin.sin_port = port;
else
- ((struct sockaddr_in6 *) &test.addr.src_addr)->sin6_port = port;
+ test.addr.src_sin6.sin6_port = port;
} else {
- test.addr.src_addr.sa_family = PF_INET;
- ((struct sockaddr_in *) &test.addr.src_addr)->sin_port = port;
+ test.addr.src_addr.sa_family = AF_INET;
+ test.addr.src_sin.sin_port = port;
}
ret = rdma_bind_addr(listen_id, &test.addr.src_addr);
@@ -628,9 +628,9 @@ static int run_client(void)
return ret;
if (test.addr.dst_addr.sa_family == AF_INET)
- ((struct sockaddr_in *) &test.addr.dst_addr)->sin_port = port;
+ test.addr.dst_sin.sin_port = port;
else
- ((struct sockaddr_in6 *) &test.addr.dst_addr)->sin6_port = port;
+ test.addr.dst_sin6.sin6_port = port;
printf("cmatose: connecting\n");
for (i = 0; i < connections; i++) {
@@ -91,12 +91,18 @@ struct rdma_ib_addr {
};
struct rdma_addr {
- struct sockaddr src_addr;
- uint8_t src_pad[sizeof(struct sockaddr_storage) -
- sizeof(struct sockaddr)];
- struct sockaddr dst_addr;
- uint8_t dst_pad[sizeof(struct sockaddr_storage) -
- sizeof(struct sockaddr)];
+ union {
+ struct sockaddr src_addr;
+ struct sockaddr_in src_sin;
+ struct sockaddr_in6 src_sin6;
+ struct sockaddr_storage src_storage;
+ };
+ union {
+ struct sockaddr dst_addr;
+ struct sockaddr_in dst_sin;
+ struct sockaddr_in6 dst_sin6;
+ struct sockaddr_storage dst_storage;
+ };
union {
struct rdma_ib_addr ibaddr;
} addr;
@@ -578,15 +584,15 @@ int rdma_ack_cm_event(struct rdma_cm_event *event);
static inline uint16_t rdma_get_src_port(struct rdma_cm_id *id)
{
return id->route.addr.src_addr.sa_family == PF_INET6 ?
- ((struct sockaddr_in6 *) &id->route.addr.src_addr)->sin6_port :
- ((struct sockaddr_in *) &id->route.addr.src_addr)->sin_port;
+ id->route.addr.src_sin6.sin6_port :
+ id->route.addr.src_sin.sin_port;
}
static inline uint16_t rdma_get_dst_port(struct rdma_cm_id *id)
{
return id->route.addr.dst_addr.sa_family == PF_INET6 ?
- ((struct sockaddr_in6 *) &id->route.addr.dst_addr)->sin6_port :
- ((struct sockaddr_in *) &id->route.addr.dst_addr)->sin_port;
+ id->route.addr.dst_sin6.sin6_port :
+ id->route.addr.dst_sin.sin_port;
}
static inline struct sockaddr *rdma_get_local_addr(struct rdma_cm_id *id)
To avoid strict aliasing compiler warnings, use an unamed union to store the src and dst addresses. This eliminates the need for padding and sockaddr casts. Signed-off-by: Sean Hefty <sean.hefty@intel.com> --- This isn't related to XRC support; I just got tired of seeing a bunch of warnings when compiling. This removed most of the warnings. examples/cmatose.c | 12 ++++++------ include/rdma/rdma_cma.h | 26 ++++++++++++++++---------- 2 files changed, 22 insertions(+), 16 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html