From: Sean Hefty Date: Fri, 28 Jun 2013 07:12:57 +0000 (-0700) Subject: Refresh of add-support-for-preloading-ipv X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=1803155e6681be9e0a3260632ea136e1555d3bef;p=~shefty%2Fibacm.git Refresh of add-support-for-preloading-ipv --- diff --git a/src/acm.c b/src/acm.c index cb5b809..ba0d58c 100644 --- a/src/acm.c +++ b/src/acm.c @@ -82,6 +82,11 @@ enum acm_route_preload { ACM_ROUTE_PRELOAD_OSM_FULL_V1 }; +enum acm_addr_preload { + ACM_ADDR_PRELOAD_NONE, + ACM_ADDR_PRELOAD_HOSTS +}; + /* * Nested locking order: dest -> ep, dest -> port */ @@ -218,12 +223,8 @@ static atomic_t counter[ACM_MAX_COUNTER]; static char *acme = BINDIR "/ib_acme -A"; static char *opts_file = ACM_CONF_DIR "/" ACM_OPTS_FILE; static char *addr_file = ACM_CONF_DIR "/" ACM_ADDR_FILE; -<<<<<<< current static char route_data_file[128] = ACM_CONF_DIR "/ibacm_route.data"; -======= -static char path_rec_file[128] = ACM_CONF_DIR "/" ACM_PATH_REC_FILE; -static char hosts_file[128] = "none"; ->>>>>>> patched +static char addr_data_file[128] = ACM_CONF_DIR "/ibacm_hosts.data"; static char log_file[128] = "/var/log/ibacm.log"; static int log_level = 0; static char lock_file[128] = "/var/run/ibacm.pid"; @@ -243,6 +244,7 @@ static int hosts_opt = 0; static uint8_t min_mtu = IBV_MTU_2048; static uint8_t min_rate = IBV_RATE_10_GBPS; static enum acm_route_preload route_preload; +static enum acm_addr_preload addr_preload; #define acm_log(level, format, ...) \ acm_write(level, "%s: "format, __func__, ## __VA_ARGS__) @@ -2470,6 +2472,16 @@ static enum acm_route_preload acm_convert_route_preload(char *param) return route_preload; } +static enum acm_route_preload acm_convert_addr_preload(char *param) +{ + if (!stricmp("none", param) || !stricmp("no", param)) + return ACM_ADDR_PRELOAD_NONE; + else if (!stricmp("acm_hosts", param)) + return ACM_ADDR_PRELOAD_HOSTS; + + return addr_preload; +} + static enum ibv_rate acm_get_rate(uint8_t width, uint8_t speed) { switch (width) { @@ -2936,6 +2948,14 @@ static void acm_ep_preload(struct acm_ep *ep) if (acm_parse_osm_fullv1(ep)) acm_log(0, "ERROR - failed to preload EP\n"); break; + default: + return; + } + + switch (addr_preload) { + case ACM_ADDR_PRELOAD_HOSTS: + acm_parse_hosts_file(ep); + break; default: break; } @@ -3122,23 +3142,8 @@ static void acm_ep_up(struct acm_port *port, uint16_t pkey_index) lock_acquire(&port->lock); DListInsertHead(&ep->entry, &port->ep_list); lock_release(&port->lock); -<<<<<<< current acm_ep_preload(ep); -======= - - if (path_rec_fmt == ACM_PATH_REV_FMT_OSM_FULL_V1) { - ret = acm_parse_path_records(ep); - if (ret) - acm_log(1, "unable to find ep in path records\n"); - } - if (hosts_opt) { - if (path_rec_fmt == ACM_PATH_REV_FMT_NONE) - acm_log(0, "when using hosts file option should also use path records option\n"); - acm_parse_hosts_file(ep); - } - ->>>>>>> patched return; err2: @@ -3451,24 +3456,14 @@ static void acm_set_options(void) min_mtu = acm_convert_mtu(atoi(value)); else if (!stricmp("min_rate", opt)) min_rate = acm_convert_rate(atoi(value)); -<<<<<<< current else if (!stricmp("route_preload", opt)) route_preload = acm_convert_route_preload(value); else if (!stricmp("route_data_file", opt)) strcpy(route_data_file, value); -======= - else if (!stricmp("path_rec_fmt", opt)) - path_rec_fmt = acm_convert_path_rec_fmt(value); - else if (!stricmp("path_rec_file", opt)) - strcpy(path_rec_file, value); - else if (!stricmp("hosts_file", opt)) { - strcpy(hosts_file, value); - if (!stricmp(hosts_file, "none")) - hosts_opt = 0; - else - hosts_opt = 1; - } ->>>>>>> patched + else if (!stricmp("addr_preload", opt)) + addr_preload = acm_convert_addr_preload(value); + else if (!stricmp("addr_data_file", opt)) + strcpy(addr_data_file, opt); } fclose(f); @@ -3492,14 +3487,10 @@ static void acm_log_options(void) acm_log(0, "receive depth %d\n", recv_depth); acm_log(0, "minimum mtu %d\n", min_mtu); acm_log(0, "minimum rate %d\n", min_rate); -<<<<<<< current acm_log(0, "route preload %d\n", route_preload); acm_log(0, "route data file %s\n", route_data_file); -======= - acm_log(0, "path record format %d\n", path_rec_fmt); - acm_log(0, "path record file %s\n", path_rec_file); - acm_log(0, "hosts file %s\n", hosts_file); ->>>>>>> patched + acm_log(0, "address preload %d\n", addr_preload); + acm_log(0, "address data file %s\n", addr_data_file); } static FILE *acm_open_log(void) diff --git a/src/acme.c b/src/acme.c index 5022e05..cb2128c 100644 --- a/src/acme.c +++ b/src/acme.c @@ -260,11 +260,21 @@ static void gen_opts_temp(FILE *f) fprintf(f, "# Default is ACM_CONF_DIR/ibacm_route.data\n"); fprintf(f, "# /etc/rdma/ibacm_route.data\n"); fprintf(f, "\n"); - fprintf(f, "# hosts_file:\n"); - fprintf(f, "# none - No hosts file\n"); - fprintf(f, "# If hosts_file is other than \"none\", full pathname of hosts file\n"); + fprintf(f, "# addr_preload:\n"); + fprintf(f, "# Specifies if the ACM address cache should be preloaded, or built on demand.\n"); + fprintf(f, "# If preloaded, indicates the method used to build the cache.\n"); + fprintf(f, "# Supported preload values are:\n"); + fprintf(f, "# none - The address cache is not pre-built (default)\n"); + fprintf(f, "# acm_hosts - ACM address to GID file format\n"); + fprintf(f, "\n"); + fprintf(f, "addr_preload none\n"); fprintf(f, "\n"); - fprintf(f, "hosts_file none\n"); + fprintf(f, "# addr_data_file:\n"); + fprintf(f, "# Specifies the location of the address data file to use when preloading\n"); + fprintf(f, "# the ACM cache. This option is only valid if addr_preload\n"); + fprintf(f, "# indicates that address data should be read from a file.\n"); + fprintf(f, "# Default is ACM_CONF_DIR/ibacm_hosts.data\n"); + fprintf(f, "# /etc/rdma/ibacm_hosts.data\n"); fprintf(f, "\n"); }