diff -up opensm-3.3.13/man/opensm.8.in.prefix opensm-3.3.13/man/opensm.8.in --- opensm-3.3.13/man/opensm.8.in.prefix 2012-02-28 18:27:33.297714661 -0500 +++ opensm-3.3.13/man/opensm.8.in 2012-02-28 18:31:00.957696942 -0500 @@ -11,6 +11,7 @@ opensm \- InfiniBand subnet manager and [\-g(uid) ] [\-l(mc) ] [\-p(riority) ] +[\-\-subnet_prefix ] [\-smkey ] [\-\-sm_sl ] [\-r(eassign_lids)] @@ -130,6 +131,13 @@ This will effect the handover cases, whe is chosen by priority and GUID. Range goes from 0 (default and lowest priority) to 15 (highest). .TP +\fB\-\-subnet_prefix\fR +This option specifies the subnet prefix to use in +on the fabric. The default prefix is +0xfe80000000000000. OpenMPI in particular requires +separate fabrics plugged into different ports to +have different prefixes or else it won't run. +.TP \fB\-smkey\fR This option specifies the SM\'s SM_Key (64 bits). This will effect SM authentication. diff -up opensm-3.3.13/opensm/main.c.prefix opensm-3.3.13/opensm/main.c --- opensm-3.3.13/opensm/main.c.prefix 2012-01-17 08:22:40.000000000 -0500 +++ opensm-3.3.13/opensm/main.c 2012-02-28 18:31:34.224694111 -0500 @@ -156,6 +156,9 @@ static void show_usage(void) " This will effect the handover cases, where master\n" " is chosen by priority and GUID. Range goes\n" " from 0 (lowest priority) to 15 (highest).\n\n"); + printf("--subnet_prefix \n" + " Set the subnet prefix to something other than the\n" + " default value of 0xfe80000000000000\n\n"); printf("--smkey, -k \n" " This option specifies the SM's SM_Key (64 bits).\n" " This will effect SM authentication.\n" @@ -607,6 +610,7 @@ int main(int argc, char *argv[]) {"once", 0, NULL, 'o'}, {"reassign_lids", 0, NULL, 'r'}, {"priority", 1, NULL, 'p'}, + {"subnet_prefix", 1, NULL, 13}, {"smkey", 1, NULL, 'k'}, {"routing_engine", 1, NULL, 'R'}, {"ucast_cache", 0, NULL, 'A'}, @@ -911,6 +915,11 @@ int main(int argc, char *argv[]) printf(" Priority = %d\n", temp); break; + case 13: + opt.subnet_prefix = cl_hton64(strtoull(optarg, NULL, 16)); + printf(" Subnet_Prefix = <0x%" PRIx64 ">\n", cl_hton64(opt.subnet_prefix)); + break; + case 'k': sm_key = cl_hton64(strtoull(optarg, NULL, 16)); printf(" SM Key <0x%" PRIx64 ">\n", cl_hton64(sm_key));