From: Sean Hefty Date: Tue, 7 Dec 2010 16:51:09 +0000 (-0800) Subject: undo 1 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=52ece98b67a1a21502ff596074a7bb318d342e09;p=~shefty%2Fibacm.git undo 1 --- diff --git a/meta b/meta index b68bfcc..57ae38f 100644 --- a/meta +++ b/meta @@ -1,5 +1,5 @@ Version: 1 -Previous: 7d72f302c1651f7db27819679cc6b97ff01b2720 +Previous: 1205d3221e69f0c94f1747759067e8290c04aa7b Head: 6a2b0d237cd3af83e331edd5fbc3f750f2e145f2 Applied: logging: 549692c49922dce3911d97dcc6d0a2fc583ab5f7 @@ -13,9 +13,9 @@ Applied: dbg_1: 3258ebd9b3f17653231089184f29ee2352be9d46 no_addr: 775cf275e0feddd7b884ded8cdc341a919e4f9a6 log_port: 92f81cd1f299db9d83aa21d794cfdfc4c4b5794f - acme_dest: 6a2b0d237cd3af83e331edd5fbc3f750f2e145f2 Unapplied: nodelay: 3dc208def66463660ee185a0346722561e7c2448 + acme_dest: f5cc9c1794700bda0a62967250a00ea9bae5839e show_err: aadb98a10bf5192f36dba186eefb696794864ad6 acme_verbose: 45cba0846874c93ef7af156bf0afe59f43d82ea6 1.0.4: 9f452b8e59adb21b90fbdda980d25a54d4360d37 diff --git a/patches/acme_dest b/patches/acme_dest index a1da992..886ad59 100644 --- a/patches/acme_dest +++ b/patches/acme_dest @@ -1,5 +1,5 @@ -Bottom: 5cb19eb81ed40ac6bba59f5d10974e9fc25a49af -Top: 5cb19eb81ed40ac6bba59f5d10974e9fc25a49af +Bottom: 6b1a8889e0c9bde043dfd2126fed3c613bff07a0 +Top: f141944c9884ee22acc7dfcfeed6b44674772b46 Author: Sean Hefty Date: 2010-12-06 16:13:22 -0800 @@ -14,4 +14,202 @@ Signed-off-by: Sean Hefty --- - +diff --git a/man/ib_acme.1 b/man/ib_acme.1 +index 52000a3..56c49f0 100644 +--- a/man/ib_acme.1 ++++ b/man/ib_acme.1 +@@ -4,7 +4,7 @@ ib_acme \- test and configuration utility for the IB ACM + .SH SYNOPSIS + .sp + .nf +-\fIib_acme\fR [-f addr_format] -s src_addr -d dest_addr [-v] ++\fIib_acme\fR [-f addr_format] [-s src_addr] -d dest_addr [-v] + .fi + .nf + \fIib_acme\fR [-G] [-O] +diff --git a/src/acme.c b/src/acme.c +index 3ee2073..a75ef34 100644 +--- a/src/acme.c ++++ b/src/acme.c +@@ -68,10 +68,10 @@ static void show_usage(char *program) + printf("usage 1: %s\n", program); + printf(" [-f addr_format] - i(p), n(ame), or l(id)\n"); + printf(" default: 'i'\n"); +- printf(" -s src_addr - format defined by -f option\n"); ++ printf(" [-s src_addr] - format defined by -f option\n"); + printf(" -d dest_addr - format defined by -f option\n"); + printf(" [-v] - verify ACM response against SA query response\n"); +- printf(" [-c] - read ACM cached data only\n") ++ printf(" [-c] - read ACM cached data only\n"); + printf("usage 2: %s\n", program); + printf(" -A [addr_file] - generate local address configuration file\n"); + printf(" (default is %s)\n", ACM_ADDR_FILE); +@@ -434,13 +434,19 @@ static int resolve_ip(struct ibv_path_record *path) + { + struct ibv_path_data *paths; + struct sockaddr_in src, dest; ++ struct sockaddr *saddr; + int ret, count; + +- src.sin_family = AF_INET; +- ret = inet_pton(AF_INET, src_addr, &src.sin_addr); +- if (ret <= 0) { +- printf("inet_pton error on source address (%s): 0x%x\n", src_addr, ret); +- return ret; ++ if (src_addr) { ++ src.sin_family = AF_INET; ++ ret = inet_pton(AF_INET, src_addr, &src.sin_addr); ++ if (ret <= 0) { ++ printf("inet_pton error on source address (%s): 0x%x\n", src_addr, ret); ++ return ret; ++ } ++ saddr = (struct sockaddr *) &src; ++ } else { ++ saddr = NULL; + } + + dest.sin_family = AF_INET; +@@ -450,7 +456,7 @@ static int resolve_ip(struct ibv_path_record *path) + return ret; + } + +- ret = ib_acm_resolve_ip((struct sockaddr *) &src, (struct sockaddr *) &dest, ++ ret = ib_acm_resolve_ip(saddr, (struct sockaddr *) &dest, + &paths, &count, get_resolve_flags()); + if (ret) { + printf("ib_acm_resolve_ip failed: 0x%x\n", ret); +@@ -601,13 +607,13 @@ int CDECL_FUNC main(int argc, char **argv) + } + } + +- if ((src_addr && !dest_addr) || (dest_addr && !src_addr) || +- (!src_addr && !dest_addr && !make_addr && !make_opts)) { ++ if ((src_addr && !dest_addr) || ++ (!src_addr && !dest_addr && !make_addr && !make_opts)) { + show_usage(argv[0]); + exit(1); + } + +- if (src_addr) ++ if (dest_addr) + ret = resolve(argv[0]); + + if (!ret && make_addr) +diff --git a/src/libacm.c b/src/libacm.c +index 59a181b..d32e749 100644 +--- a/src/libacm.c ++++ b/src/libacm.c +@@ -113,6 +113,7 @@ static int acm_format_resp(struct acm_resolve_msg *msg, + struct ibv_path_data **paths, int *count) + { + struct ibv_path_data *path_data; ++ char addr[ACM_MAX_ADDRESS]; + int i, addr_cnt; + + *count = 0; +@@ -131,7 +132,24 @@ static int acm_format_resp(struct acm_resolve_msg *msg, + (*count)++; + break; + default: +- goto err; ++ if (!(msg->data[i].flags & ACM_EP_FLAG_SOURCE)) ++ goto err; ++ ++ switch (msg->data[i].type) { ++ case ACM_EP_INFO_ADDRESS_IP: ++ inet_ntop(AF_INET, msg->data[i].info.addr, addr, sizeof addr); ++ break; ++ case ACM_EP_INFO_ADDRESS_IP6: ++ inet_ntop(AF_INET6, msg->data[i].info.addr, addr, sizeof addr); ++ break; ++ case ACM_EP_INFO_NAME: ++ memcpy(addr, msg->data[i].info.name, ACM_MAX_ADDRESS); ++ break; ++ default: ++ goto err; ++ } ++ printf("source: %s\n", addr); ++ break; + } + } + +@@ -142,45 +160,53 @@ err: + return -1; + } + ++static int acm_format_ep_addr(struct acm_ep_addr_data *data, uint8_t *addr, ++ uint8_t type, uint32_t flags) ++{ ++ data->type = type; ++ data->flags = flags; ++ ++ switch (type) { ++ case ACM_EP_INFO_NAME: ++ strncpy((char *) data->info.name, (char *) addr, ACM_MAX_ADDRESS); ++ break; ++ case ACM_EP_INFO_ADDRESS_IP: ++ memcpy(data->info.addr, &((struct sockaddr_in *) addr)->sin_addr, 4); ++ break; ++ case ACM_EP_INFO_ADDRESS_IP6: ++ memcpy(data->info.addr, &((struct sockaddr_in6 *) addr)->sin6_addr, 16); ++ break; ++ default: ++ return -1; ++ } ++ ++ return 0; ++} + static int acm_resolve(uint8_t *src, uint8_t *dest, uint8_t type, + struct ibv_path_data **paths, int *count, uint32_t flags) + { + struct acm_msg msg; + struct acm_resolve_msg *resolve_msg = (struct acm_resolve_msg *) &msg; +- struct acm_ep_addr_data *src_data, *dest_data; +- int ret; ++ int ret, cnt = 0; + + lock_acquire(&lock); + memset(&msg, 0, sizeof msg); + msg.hdr.version = ACM_VERSION; + msg.hdr.opcode = ACM_OP_RESOLVE; +- msg.hdr.length = ACM_MSG_HDR_LENGTH + (2 * ACM_MSG_EP_LENGTH); + +- src_data = &resolve_msg->data[0]; +- dest_data = &resolve_msg->data[1]; +- +- src_data->type = type; +- src_data->flags = ACM_EP_FLAG_SOURCE; +- dest_data->type = type; +- dest_data->flags = ACM_EP_FLAG_DEST | flags; ++ if (src) { ++ ret = acm_format_ep_addr(&resolve_msg->data[cnt++], src, type, ++ ACM_EP_FLAG_SOURCE); ++ if (ret) ++ goto out; ++ } + +- switch (type) { +- case ACM_EP_INFO_NAME: +- strncpy((char *) src_data->info.name, (char *) src, ACM_MAX_ADDRESS); +- strncpy((char *) dest_data->info.name, (char *) dest, ACM_MAX_ADDRESS); +- break; +- case ACM_EP_INFO_ADDRESS_IP: +- memcpy(src_data->info.addr, &((struct sockaddr_in *) src)->sin_addr, 4); +- memcpy(dest_data->info.addr, &((struct sockaddr_in *) dest)->sin_addr, 4); +- break; +- case ACM_EP_INFO_ADDRESS_IP6: +- memcpy(src_data->info.addr, &((struct sockaddr_in6 *) src)->sin6_addr, 16); +- memcpy(dest_data->info.addr, &((struct sockaddr_in6 *) dest)->sin6_addr, 16); +- break; +- default: +- ret = -1; ++ ret = acm_format_ep_addr(&resolve_msg->data[cnt++], dest, type, ++ ACM_EP_FLAG_DEST | flags); ++ if (ret) + goto out; +- } ++ ++ msg.hdr.length = ACM_MSG_HDR_LENGTH + (cnt * ACM_MSG_EP_LENGTH); + + ret = send(sock, (char *) &msg, msg.hdr.length, 0); + if (ret != msg.hdr.length)