int fill_nfsinfo(struct mic_info *mic, int type, char *mount, char *server, char **nfsserver, char **dir) { struct mbridge *br = NULL; char *nserver = NULL; char *ndir; if ((ndir = strchr(mount, ':')) != NULL) { *ndir = '\0'; ndir++; if (server != NULL) { if (!strcmp(mount, server)) { display(PERROR, "NFS server argument specifies a different server than " "the target argument (%s : %s)\n", server, ndir); return 1; } } switch (mic->config.net.type) { case NETWORK_TYPE_STATPAIR: display(PWARN, "%s: Server %s may not be reachable if the interface " "is not routed out of the host\n", mic->name, mount); break; case NETWORK_TYPE_STATBRIDGE: if ((br = mpss_bridge_byname(mic->config.net.bridge, brlist)) == NULL) return 1; if (br->type == BRIDGE_TYPE_INT) display(PWARN, "%s: Server %s may not be reachable if the internal " "bridge %s is not routed out of the host\n", mic->name, mount, br->name); break; case NETWORK_TYPE_BRIDGE: break; } nserver = mount; } else { ndir = mount; switch (mic->config.net.type) { case NETWORK_TYPE_STATPAIR: if (server != NULL) { display(PWARN, "%s: Server %s may not be reachable if the interface " "is not routed out of the host\n", mic->name, mount); nserver = server; } else { nserver = mic->config.net.hostIP; } break; case NETWORK_TYPE_STATBRIDGE: if ((br = mpss_bridge_byname(mic->config.net.bridge, brlist)) == NULL) return 1; if ((br->type == BRIDGE_TYPE_INT) && (server != NULL)) display(PWARN, "%s: Server %s may not be reachable if the internal " "bridge %s is not routed out of the host\n", mic->name, server, br->name); nserver = server; break; case NETWORK_TYPE_BRIDGE: if (server == NULL) { display(PERROR, "%s: DHCP requires a server to be " "specified\n", mic->name); return 1; } nserver = server; } } *nfsserver = nserver; *dir = ndir; return 0; }
/* * Display current configuration parameters in a human readable format. */ void display_config(struct mic_info *miclist) { struct mic_info *mic; struct mbridge *br; char netmask[16]; char micmac[64]; char hostmac[64]; int err = 0; int ret = 0; putchar('\n'); mic = miclist; while (mic != NULL) { printf("%s:\n", mic->name); printf("=============================================================\n"); if ((ret = micctrl_parse_config(&mpssenv, mic, &brlist, &mpssperr, PINFO))) { err++; if (ret < MIC_PARSE_ERRORS) { display(PERROR, "Not configured\n"); goto nextmic; } } printf(" Config Version: %d.%d\n\n", (mic->config.version >> 16) & 0xff, mic->config.version & 0xff); printf(" Linux Kernel: %s\n", check_set(mic->config.boot.osimage)); printf(" Map File: %s\n", check_set(mic->config.boot.systemmap)); printf(" Family: %s\n", family_to_str(mic->config.family)); printf(" MPSSVersion: %s\n", mpss_version_to_str(mic->config.mpss_version)); printf(" BootOnStart: %s\n", (mic->config.boot.onstart == TRUE)? "Enabled" : "Disabled"); printf(" Shutdowntimeout: %s seconds\n", check_set(mic->config.misc.shutdowntimeout)); printf("\n ExtraCommandLine: %s\n", check_set(mic->config.boot.extraCmdline)); printf(" PowerManagment: %s\n", check_set(mic->config.boot.pm)); printf("\n "); report_rootdev(mic); get_mac_strings(mic, micmac, hostmac, 64); switch (mic->config.net.type) { case NETWORK_TYPE_STATPAIR: printf("\n Network: Static Pair\n"); printf(" Hostname: %s\n", check_set(mic->config.net.hostname)); printf(" MIC IP: %s\n", check_set(mic->config.net.micIP)); printf(" Host IP: %s\n", check_set(mic->config.net.hostIP)); if (mic->config.net.prefix == NULL) mic->config.net.prefix = "24"; mpssnet_genmask(mic->config.net.prefix, netmask); printf(" Net Bits: %s\n", check_set(mic->config.net.prefix)); printf(" NetMask: %s\n", netmask); if (mic->config.net.mtu) printf(" MtuSize: %s\n", check_set(mic->config.net.mtu)); break; case NETWORK_TYPE_STATBRIDGE: printf("\n Network: Static bridge %s\n", check_set(mic->config.net.bridge)); printf(" MIC IP: %s\n", check_set(mic->config.net.micIP)); if ((br = mpss_bridge_byname(mic->config.net.bridge, brlist)) != NULL) { printf(" Host IP: %s\n", check_set(br->ip)); mpssnet_genmask(br->prefix, netmask); printf(" Net Bits: %s\n", check_set(br->prefix)); printf(" NetMask: %s\n", netmask); printf(" MtuSize: %s\n", check_set(br->mtu)); } printf(" Hostname: %s\n", check_set(mic->config.net.hostname)); break; case NETWORK_TYPE_BRIDGE: printf("\n Network: Bridge %s with DHCP\n", check_set(mic->config.net.bridge)); if ((br = mpss_bridge_byname(mic->config.net.bridge, brlist)) != NULL) { mpssnet_genmask(br->prefix, netmask); printf(" Net Bits: %s\n", check_set(br->prefix)); printf(" NetMask: %s\n", netmask); printf(" MtuSize: %s\n", check_set(br->mtu)); } printf(" Hostname: %s\n", check_set(mic->config.net.hostname)); break; default: printf("%s: Unknown network configuration type\n", mic->name); } printf(" MIC MAC: %s\n", micmac); printf(" Host MAC: %s\n", hostmac); printf("\n "); display_ldap(mic, TRUE); printf(" "); display_nis(mic, TRUE); printf("\n Cgroup:\n"); printf(" Memory: %s\n", (mic->config.cgroup.memory == TRUE)? "Enabled" : "Disabled"); printf("\n Console: %s\n", check_set(mic->config.boot.console)); printf(" VerboseLogging: %s\n", (mic->config.boot.verbose == TRUE)? "Enabled" : "Disabled"); if (mic->config.misc.crashdumpDir != NULL) printf(" CrashDump: %s %sGB\n", check_set(mic->config.misc.crashdumpDir), check_set(mic->config.misc.crashdumplimitgb)); else printf(" CrashDump: Not Enabled\n"); nextmic: putchar('\n'); mic = mic->next; } exit(err); }
static char * get_rootdev(struct mic_info *mic, struct mbridge *brlist) { char *cmdline = NULL; struct mbridge *br; char mtu[32]; char netmask[32]; char *netbits; switch (mic->config.rootdev.type) { case ROOT_TYPE_RAMFS: case ROOT_TYPE_STATICRAMFS: if ((cmdline = malloc(strlen("root=ramfs") + 1)) == NULL) return NULL; strcpy(cmdline, "root=ramfs"); break; case ROOT_TYPE_PFS: if ((cmdline = malloc(strlen("root=/dev/vda") + 1)) == NULL) return NULL; strcpy(cmdline, "root=/dev/vda"); break; case ROOT_TYPE_NFS: case ROOT_TYPE_SPLITNFS: if ((br = mpss_bridge_byname(mic->config.net.bridge, brlist)) != NULL) { if (br->mtu) snprintf(mtu, 31, " mtu=%s", br->mtu); else strcpy(mtu, " mtu=24"); if (br->prefix) netbits = br->prefix; else netbits = "24"; } else { netbits = "24"; mtu[0] = '\0'; } mpssnet_genmask(netbits, netmask); if ((cmdline = malloc(strlen( "root=nfs: ip=XXX.XXX.XXX.XXX hwaddr=00:00:00:00:00:00 netmask=ffffffff " "mtu=XXXXXX ") + strlen(mic->config.rootdev.target))) == NULL) return NULL; sprintf(cmdline, "root=nfs:%s ip=%s netmask=%s %s", mic->config.rootdev.target, mic->config.net.micIP, netmask, mtu); if (mic->config.net.hostMac > MIC_MAC_RANDOM) { strcat(cmdline, " hwaddr="); strcat(cmdline, mic->config.net.micMac); } break; } return cmdline; }