From cb4fb055f5c87b97226d1e47240c58cf25f0a271 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Mon, 3 Dec 2012 12:42:45 -0800 Subject: [PATCH] Refresh of dsocket --- src/rsocket.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/rsocket.c b/src/rsocket.c index f62fe905..63bb225c 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -354,6 +354,9 @@ struct ds_udp_header { } addr; }; +#define DS_UDP_IPV4_HDR_LEN 16 +#define DS_UDP_IPV6_HDR_LEN 28 + #define ds_next_qp(qp) container_of((qp)->list.next, struct ds_qp, list) static void ds_insert_qp(struct rsocket *rs, struct ds_qp *qp) @@ -2486,11 +2489,18 @@ static ssize_t ds_sendv_udp(struct rsocket *rs, const struct iovec *iov, if (iovcnt > 8) return ERR(ENOTSUP); - hdr.tag = htonll(DS_UDP_TAG); + hdr.tag = htonl(DS_UDP_TAG); hdr.version = 1; hdr.op = op; - memset(&hdr->reserved, 0, sizeof hdr->reserved); + hdr.reserved = 0; hdr.qpn = htonl(rs->conn_dest->qp->cm_id->qp->qp_num & 0xFFFFFF); + if (rs->conn_dest->qp->hdr.version == 4) { + hdr.length = DS_UDP_IPV4_HDR_LEN; + hdr.addr.ipv4 = rs->conn_dest->qp->hdr.addr.ipv4; + } else { + hdr.length = DS_UDP_IPV6_HDR_LEN; + memcpy(hdr.addr.ipv6.addr, rs->conn_dest->qp->hdr.addr.ipv6.addr, 16); + } miov[0].iov_base = &hdr; miov[0].iov_len = sizeof hdr; -- 2.41.0