diff options
Diffstat (limited to 'lib/ipmi_lanp.c')
-rw-r--r-- | lib/ipmi_lanp.c | 968 |
1 files changed, 561 insertions, 407 deletions
diff --git a/lib/ipmi_lanp.c b/lib/ipmi_lanp.c index 060e753..ecd313a 100644 --- a/lib/ipmi_lanp.c +++ b/lib/ipmi_lanp.c @@ -53,9 +53,24 @@ #include <ipmitool/ipmi_strings.h> #include <ipmitool/ipmi_lanp.h> #include <ipmitool/ipmi_channel.h> +#include <ipmitool/ipmi_user.h> extern int verbose; +static void print_lan_alert_print_usage(void); +static void print_lan_alert_set_usage(void); +static void print_lan_set_usage(void); +static void print_lan_set_access_usage(void); +static void print_lan_set_arp_usage(void); +static void print_lan_set_auth_usage(void); +static void print_lan_set_bakgw_usage(void); +static void print_lan_set_cipher_privs_usage(void); +static void print_lan_set_defgw_usage(void); +static void print_lan_set_ipsrc_usage(void); +static void print_lan_set_snmp_usage(void); +static void print_lan_set_vlan_usage(void); +static void print_lan_usage(void); + /* is_lan_channel - Check if channel is LAN medium * * return 1 if channel is LAN @@ -530,7 +545,7 @@ lan_set_arp_respond(struct ipmi_intf * intf, return set_lan_param(intf, chan, IPMI_LANP_BMC_ARP, &data, 1); } - +/* TODO - probably move elsewhere */ static char priv_level_to_char(unsigned char priv_level) { char ret = 'X'; @@ -562,7 +577,6 @@ static int ipmi_lan_print(struct ipmi_intf * intf, uint8_t chan) { struct lan_param * p; - int rc = 0; if (chan < 1 || chan > IPMI_CHANNEL_NUMBER_MAX) { lprintf(LOG_ERR, "Invalid Channel %d", chan); @@ -827,10 +841,29 @@ ipmi_lan_print(struct ipmi_intf * intf, uint8_t chan) else printf("%-24s: Not Available\n", p->desc); - return rc; + /* Bad Password Threshold */ + p = get_lan_param(intf, chan, IPMI_LANP_BAD_PASS_THRESH); + if (p == NULL) + return -1; + if ((p->data != NULL) && (p->data_len == 6)) { + int tmp; + + printf("%-24s: %d\n", p->desc, p->data[1]); + printf("%-24s: %s\n", "Invalid password disable", + p->data[0] & 1 ? "yes" : "no" ); + tmp = p->data[2] + (p->data[3] << 8); + printf("%-24s: %d\n", "Attempt Count Reset Int.", tmp * 10); + tmp = p->data[4] + (p->data[5] << 8); + printf("%-24s: %d\n", "User Lockout Interval", tmp * 10); + } else { + printf("%-24s: Not Available\n", p->desc); + } + + return 0; } /* Configure Authentication Types */ +/* TODO - probably some code duplication going on ??? */ static int ipmi_lan_set_auth(struct ipmi_intf * intf, uint8_t chan, char * level, char * types) { @@ -898,272 +931,206 @@ ipmi_lan_set_auth(struct ipmi_intf * intf, uint8_t chan, char * level, char * ty } static int -ipmi_lan_set_password(struct ipmi_intf * intf, - uint8_t userid, uint8_t * password) +ipmi_lan_set_password(struct ipmi_intf *intf, + uint8_t user_id, const char *password) { - struct ipmi_rs * rsp; - struct ipmi_rq req; - uint8_t data[18]; - - memset(&data, 0, sizeof(data)); - data[0] = userid & 0x3f;/* user ID */ - data[1] = 0x02; /* set password */ - - if (password != NULL) - memcpy(data+2, password, __min(strlen((const char *)password), 16)); - - memset(&req, 0, sizeof(req)); - req.msg.netfn = IPMI_NETFN_APP; - req.msg.cmd = 0x47; - req.msg.data = data; - req.msg.data_len = 18; - - rsp = intf->sendrecv(intf, &req); - if (rsp == NULL) { - lprintf(LOG_ERR, "Unable to Set LAN Password for user %d", userid); - return -1; - } - if (rsp->ccode > 0) { - lprintf(LOG_ERR, "Set LAN Password for user %d failed: %s", - userid, val2str(rsp->ccode, completion_code_vals)); - return -1; + int ccode = 0; + ccode = _ipmi_set_user_password(intf, user_id, + IPMI_PASSWORD_SET_PASSWORD, password, 0); + if (eval_ccode(ccode) != 0) { + lprintf(LOG_ERR, "Unable to Set LAN Password for user %d", + user_id); + return (-1); } - /* adjust our session password * or we will no longer be able to communicate with BMC */ ipmi_intf_session_set_password(intf, (char *)password); printf("Password %s for user %d\n", - (password == NULL) ? "cleared" : "set", userid); + (password == NULL) ? "cleared" : "set", user_id); return 0; } +/* ipmi_set_alert_enable - enable/disable PEF alerting for given channel. + * + * @channel - IPMI channel + * @enable - whether to enable/disable PEF alerting for given channel + * + * returns - 0 on success, (-1) on error. + */ static int -ipmi_set_alert_enable(struct ipmi_intf * intf, uint8_t channel, uint8_t enable) +ipmi_set_alert_enable(struct ipmi_intf *intf, uint8_t channel, uint8_t enable) { - struct ipmi_rs * rsp; - struct ipmi_rq req; - uint8_t rqdata[3]; - - memset(&req, 0, sizeof(req)); - - /* update non-volatile access */ - rqdata[0] = channel; - rqdata[1] = 0x40; - - req.msg.netfn = IPMI_NETFN_APP; - req.msg.cmd = 0x41; - req.msg.data = rqdata; - req.msg.data_len = 2; - - rsp = intf->sendrecv(intf, &req); - if (rsp == NULL) { - lprintf(LOG_ERR, "Unable to Get Channel Access for channel %d", channel); - return -1; - } - if (rsp->ccode > 0) { - lprintf(LOG_ERR, "Get Channel Access for channel %d failed: %s", - channel, val2str(rsp->ccode, completion_code_vals)); - return -1; - } - - /* SAVE TO NVRAM */ - memset(rqdata, 0, 3); - rqdata[0] = channel & 0xf; - rqdata[1] = rsp->data[0]; - if (enable != 0) - rqdata[1] &= ~0x20; - else - rqdata[1] |= 0x20; - rqdata[1] |= 0x40; - rqdata[2] = 0; - - req.msg.cmd = 0x40; - req.msg.data_len = 3; - - rsp = intf->sendrecv(intf, &req); - if (rsp == NULL) { - lprintf(LOG_ERR, "Unable to Set Channel Access for channel %d", channel); - return -1; - } - if (rsp->ccode > 0) { - lprintf(LOG_ERR, "Set Channel Access for channel %d failed: %s", - channel, val2str(rsp->ccode, completion_code_vals)); - return -1; + struct channel_access_t channel_access; + int ccode = 0; + memset(&channel_access, 0, sizeof(channel_access)); + channel_access.channel = channel; + ccode = _ipmi_get_channel_access(intf, &channel_access, 0); + if (eval_ccode(ccode) != 0) { + lprintf(LOG_ERR, + "Unable to Get Channel Access(non-volatile) for channel %d", + channel); + return (-1); } - - /* SAVE TO CURRENT */ - rqdata[1] &= 0xc0; - rqdata[1] |= 0x80; - - rsp = intf->sendrecv(intf, &req); - if (rsp == NULL) { - lprintf(LOG_ERR, "Unable to Set Channel Access for channel %d", channel); - return -1; + if (enable != 0) { + channel_access.alerting = 1; + } else { + channel_access.alerting = 0; + } + /* non-volatile */ + ccode = _ipmi_set_channel_access(intf, channel_access, 1, 0); + if (eval_ccode(ccode) != 0) { + lprintf(LOG_ERR, + "Unable to Set Channel Access(non-volatile) for channel %d", + channel); + return (-1); } - if (rsp->ccode > 0) { - lprintf(LOG_ERR, "Set Channel Access for channel %d failed: %s", - channel, val2str(rsp->ccode, completion_code_vals)); - return -1; + /* volatile */ + ccode = _ipmi_set_channel_access(intf, channel_access, 2, 0); + if (eval_ccode(ccode) != 0) { + lprintf(LOG_ERR, + "Unable to Set Channel Access(volatile) for channel %d", + channel); + return (-1); } - + printf("PEF alerts for channel %d %s.\n", + channel, + (enable) ? "enabled" : "disabled"); return 0; } +/* ipmi_set_channel_access - enable/disable IPMI messaging for given channel and + * set Privilege Level to Administrator. + * + * @channel - IPMI channel + * @enable - whether to enable/disable IPMI messaging for given channel. + * + * returns - 0 on success, (-1) on error + */ static int -ipmi_set_channel_access(struct ipmi_intf * intf, uint8_t channel, uint8_t enable) +ipmi_set_channel_access(struct ipmi_intf *intf, uint8_t channel, + uint8_t enable) { - struct ipmi_rs * rsp; - struct ipmi_rq req; - uint8_t rqdata[3]; - uint8_t byteEnable; - - memset(&req, 0, sizeof(req)); - - /* RETREIVE VALUE IN NVRAM */ - req.msg.netfn = IPMI_NETFN_APP; - req.msg.cmd = 0x41; /* Get Channel Access Command */ - req.msg.data = rqdata; - req.msg.data_len = 2; - - memset(rqdata, 0, 2); - rqdata[0] = channel & 0xf; - rqdata[1] = 0x40; /* retreive NV */ + struct channel_access_t channel_access; + int ccode = 0; + memset(&channel_access, 0, sizeof(channel_access)); + channel_access.channel = channel; + /* Get Non-Volatile Channel Access first */ + ccode = _ipmi_get_channel_access(intf, &channel_access, 0); + if (eval_ccode(ccode) != 0) { + lprintf(LOG_ERR, + "Unable to Get Channel Access(non-volatile) for channel %d", + channel); + return (-1); + } - rsp = intf->sendrecv(intf, &req); - if (rsp == NULL) { - lprintf(LOG_ERR, "Unable to Get Channel Access for channel %d", channel); - return -1; - } else if (rsp->ccode > 0) { - lprintf(LOG_ERR, "Set Channel Access for channel %d failed: %s", - channel, val2str(rsp->ccode, completion_code_vals)); - return -1; + if (enable != 0) { + channel_access.access_mode = 2; } else { - byteEnable = *(rsp->data + 0); + channel_access.access_mode = 0; + } + channel_access.privilege_limit = 0x04; + ccode = _ipmi_set_channel_access(intf, channel_access, 1, 1); + if (eval_ccode(ccode) != 0) { + lprintf(LOG_ERR, + "Unable to Set Channel Access(non-volatile) for channel %d", + channel); + return (-1); } - /* SAVE TO NVRAM */ - memset(&req, 0, sizeof(req)); - - req.msg.netfn = IPMI_NETFN_APP; - req.msg.cmd = 0x40; /* Set Channel Access Command */ - req.msg.data = rqdata; - req.msg.data_len = 3; - - memset(rqdata, 0, 3); - rqdata[0] = channel & 0xf; - rqdata[1] = 0x40 | (byteEnable & 0x38); /* use previously set values */ - if (enable != 0) - rqdata[1] |= 0x2; /* set always available if enable is set */ - rqdata[2] = 0x44; /* set channel privilege limit to ADMIN */ - - rsp = intf->sendrecv(intf, &req); - if (rsp == NULL) { - lprintf(LOG_ERR, "Unable to Set Channel Access for channel %d", channel); - return -1; - } else if (rsp->ccode > 0) { - lprintf(LOG_ERR, "Set Channel Access for channel %d failed: %s", - channel, val2str(rsp->ccode, completion_code_vals)); - return -1; + memset(&channel_access, 0, sizeof(channel_access)); + channel_access.channel = channel; + /* Get Volatile Channel Access */ + ccode = _ipmi_get_channel_access(intf, &channel_access, 1); + if (eval_ccode(ccode) != 0) { + lprintf(LOG_ERR, + "Unable to Get Channel Access(volatile) for channel %d", + channel); + return (-1); } - /* RETREIVE VALUE IN NVRAM */ - req.msg.netfn = IPMI_NETFN_APP; - req.msg.cmd = 0x41; /* Get Channel Access Command */ - req.msg.data = rqdata; - req.msg.data_len = 2; - - memset(rqdata, 0, 2); - rqdata[0] = channel & 0xf; - rqdata[1] = 0x80; /* retreive NV */ - - rsp = intf->sendrecv(intf, &req); - if (rsp == NULL) { - lprintf(LOG_ERR, "Unable to Get Channel Access for channel %d", channel); - return -1; - } else if (rsp->ccode > 0) { - lprintf(LOG_ERR, "Set Channel Access for channel %d failed: %s", - channel, val2str(rsp->ccode, completion_code_vals)); - return -1; + if (enable != 0) { + channel_access.access_mode = 2; } else { - byteEnable = *(rsp->data + 0); - } - - /* SAVE TO CURRENT */ - memset(&req, 0, sizeof(req)); - - req.msg.netfn = IPMI_NETFN_APP; - req.msg.cmd = 0x40; /* Set Channel Access Command */ - req.msg.data = rqdata; - req.msg.data_len = 3; - - memset(rqdata, 0, 3); - rqdata[0] = channel & 0xf; - rqdata[1] = 0x80 | (byteEnable & 0x38); /* use previously set values */ - if (enable != 0) - rqdata[1] |= 0x2; /* set always available if enable is set */ - rqdata[2] = 0x84; /* set channel privilege limit to ADMIN */ - - rsp = intf->sendrecv(intf, &req); - if (rsp == NULL) { - lprintf(LOG_ERR, "Unable to Set Channel Access for channel %d", channel); - return -1; - } else if (rsp->ccode > 0) { - lprintf(LOG_ERR, "Set Channel Access for channel %d failed: %s", - channel, val2str(rsp->ccode, completion_code_vals)); - return -1; + channel_access.access_mode = 0; + } + channel_access.privilege_limit = 0x04; + ccode = _ipmi_set_channel_access(intf, channel_access, 2, 2); + if (eval_ccode(ccode) != 0) { + lprintf(LOG_ERR, + "Unable to Set Channel Access(volatile) for channel %d", + channel); + return (-1); } /* can't send close session if access off so abort instead */ - if (enable == 0) + if (enable == 0) { intf->abort = 1; - + } + printf("Set Channel Access for channel %d was successful.\n", + channel); return 0; } +/* ipmi_set_user_access - set admin access for given user and channel. + * + * @intf - IPMI interface + * @channel - IPMI channel + * @user_id - IPMI User ID + * + * returns - 0 on success, (-1) on error. + */ static int -ipmi_set_user_access(struct ipmi_intf * intf, uint8_t channel, uint8_t userid) +ipmi_set_user_access(struct ipmi_intf *intf, uint8_t channel, uint8_t user_id) { - struct ipmi_rs * rsp; - struct ipmi_rq req; - uint8_t rqdata[4]; - - memset(rqdata, 0, 4); - rqdata[0] = 0x90 | (channel & 0xf); - rqdata[1] = userid & 0x3f; - rqdata[2] = 0x4; - rqdata[3] = 0; - - memset(&req, 0, sizeof(req)); - req.msg.netfn = IPMI_NETFN_APP; - req.msg.cmd = 0x43; - req.msg.data = rqdata; - req.msg.data_len = 4; - - rsp = intf->sendrecv(intf, &req); - if (rsp == NULL) { - lprintf(LOG_ERR, "Unable to Set User Access for channel %d", channel); - return -1; - } - if (rsp->ccode > 0) { - lprintf(LOG_ERR, "Set User Access for channel %d failed: %s", - channel, val2str(rsp->ccode, completion_code_vals)); - return -1; + struct user_access_t user_access; + int ccode = 0; + memset(&user_access, 0, sizeof(user_access)); + user_access.channel = channel; + user_access.user_id = user_id; + user_access.privilege_limit = 0x04; + + ccode = _ipmi_set_user_access(intf, &user_access, 1); + if (eval_ccode(ccode) != 0) { + lprintf(LOG_ERR, "Set User Access for channel %d failed", + channel); + return (-1); + } else { + printf("Set User Access for channel %d was successful.", + channel); + return 0; } - - return 0; } +/* get_cmdline_macaddr - parse-out MAC address from given string and store it + * into buffer. + * + * @arg: string to be parsed. + * @buf: buffer of 6 to hold parsed MAC address. + * + * returns zero on success, (-1) on error and error message is printed-out. + */ static int -get_cmdline_macaddr(char * arg, uint8_t * buf) +get_cmdline_macaddr(char *arg, uint8_t *buf) { - uint32_t m1, m2, m3, m4, m5, m6; + uint32_t m1 = 0; + uint32_t m2 = 0; + uint32_t m3 = 0; + uint32_t m4 = 0; + uint32_t m5 = 0; + uint32_t m6 = 0; if (sscanf(arg, "%02x:%02x:%02x:%02x:%02x:%02x", &m1, &m2, &m3, &m4, &m5, &m6) != 6) { lprintf(LOG_ERR, "Invalid MAC address: %s", arg); return -1; } + if (m1 > UINT8_MAX || m2 > UINT8_MAX + || m3 > UINT8_MAX || m4 > UINT8_MAX + || m5 > UINT8_MAX || m6 > UINT8_MAX) { + lprintf(LOG_ERR, "Invalid MAC address: %s", arg); + return -1; + } buf[0] = (uint8_t)m1; buf[1] = (uint8_t)m2; buf[2] = (uint8_t)m3; @@ -1198,8 +1165,7 @@ get_cmdline_cipher_suite_priv_data(char * arg, uint8_t * buf) * data 3 - maximum priv level for third (LSN) and fourth (MSN) ciphers * data 9 - maximum priv level for 15th (LSN) cipher. */ - bzero(buf, 9); - + memset(buf, 0, 9); for (i = 0; i < 15; ++i) { unsigned char priv_level = IPMI_SESSION_PRIV_ADMIN; @@ -1256,9 +1222,16 @@ static int get_cmdline_ipaddr(char * arg, uint8_t * buf) { uint32_t ip1, ip2, ip3, ip4; - if (sscanf(arg, "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4) != 4) { + if (sscanf(arg, + "%" PRIu32 ".%" PRIu32 ".%" PRIu32 ".%" PRIu32, + &ip1, &ip2, &ip3, &ip4) != 4) { lprintf(LOG_ERR, "Invalid IP address: %s", arg); - return -1; + return (-1); + } + if (ip1 > UINT8_MAX || ip2 > UINT8_MAX + || ip3 > UINT8_MAX || ip4 > UINT8_MAX) { + lprintf(LOG_ERR, "Invalid IP address: %s", arg); + return (-1); } buf[0] = (uint8_t)ip1; buf[1] = (uint8_t)ip2; @@ -1267,55 +1240,8 @@ get_cmdline_ipaddr(char * arg, uint8_t * buf) return 0; } -static void ipmi_lan_set_usage(void) -{ - lprintf(LOG_NOTICE, "\nusage: lan set <channel> <command> <parameter>\n"); - lprintf(LOG_NOTICE, "LAN set command/parameter options:"); - lprintf(LOG_NOTICE, " ipaddr <x.x.x.x> Set channel IP address"); - lprintf(LOG_NOTICE, " netmask <x.x.x.x> Set channel IP netmask"); - lprintf(LOG_NOTICE, " macaddr <x:x:x:x:x:x> Set channel MAC address"); - lprintf(LOG_NOTICE, " defgw ipaddr <x.x.x.x> Set default gateway IP address"); - lprintf(LOG_NOTICE, " defgw macaddr <x:x:x:x:x:x> Set default gateway MAC address"); - lprintf(LOG_NOTICE, " bakgw ipaddr <x.x.x.x> Set backup gateway IP address"); - lprintf(LOG_NOTICE, " bakgw macaddr <x:x:x:x:x:x> Set backup gateway MAC address"); - lprintf(LOG_NOTICE, " password <password> Set session password for this channel"); - lprintf(LOG_NOTICE, " snmp <community string> Set SNMP public community string"); - lprintf(LOG_NOTICE, " user Enable default user for this channel"); - lprintf(LOG_NOTICE, " access <on|off> Enable or disable access to this channel"); - lprintf(LOG_NOTICE, " alert <on|off> Enable or disable PEF alerting for this channel"); - lprintf(LOG_NOTICE, " arp respond <on|off> Enable or disable BMC ARP responding"); - lprintf(LOG_NOTICE, " arp generate <on|off> Enable or disable BMC gratuitous ARP generation"); - lprintf(LOG_NOTICE, " arp interval <seconds> Set gratuitous ARP generation interval"); - lprintf(LOG_NOTICE, " vlan id <off|<id>> Disable or enable VLAN and set ID (1-4094)"); - lprintf(LOG_NOTICE, " vlan priority <priority> Set vlan priority (0-7)"); - lprintf(LOG_NOTICE, " auth <level> <type,..> Set channel authentication types"); - lprintf(LOG_NOTICE, " level = CALLBACK, USER, OPERATOR, ADMIN"); - lprintf(LOG_NOTICE, " type = NONE, MD2, MD5, PASSWORD, OEM"); - lprintf(LOG_NOTICE, " ipsrc <source> Set IP Address source"); - lprintf(LOG_NOTICE, " none = unspecified source"); - lprintf(LOG_NOTICE, " static = address manually configured to be static"); - lprintf(LOG_NOTICE, " dhcp = address obtained by BMC running DHCP"); - lprintf(LOG_NOTICE, " bios = address loaded by BIOS or system software"); - lprintf(LOG_NOTICE, " cipher_privs XXXXXXXXXXXXXXX Set RMCP+ cipher suite privilege levels"); - lprintf(LOG_NOTICE, " X = Cipher Suite Unused"); - lprintf(LOG_NOTICE, " c = CALLBACK"); - lprintf(LOG_NOTICE, " u = USER"); - lprintf(LOG_NOTICE, " o = OPERATOR"); - lprintf(LOG_NOTICE, " a = ADMIN"); - lprintf(LOG_NOTICE, " O = OEM\n"); -} - -static void -ipmi_lan_set_vlan_usage(void) -{ - lprintf(LOG_NOTICE, - "lan set <channel> vlan id <id>\n" - "lan set <channel> vlan id off\n" - "lan set <channel> vlan priority <priority>\n"); -} - static int -ipmi_lan_set_vlan_id(struct ipmi_intf * intf, uint8_t chan, char *string) +ipmi_lan_set_vlan_id(struct ipmi_intf *intf, uint8_t chan, char *string) { uint8_t data[2]; int rc; @@ -1332,8 +1258,8 @@ ipmi_lan_set_vlan_id(struct ipmi_intf * intf, uint8_t chan, char *string) } if (id < 1 || id > 4094) { - lprintf(LOG_NOTICE, "vlan id must be between 1 and 4094."); - return -1; + lprintf(LOG_NOTICE, "VLAN ID must be between 1 and 4094."); + return (-1); } else { data[0] = (uint8_t)id; @@ -1345,7 +1271,7 @@ ipmi_lan_set_vlan_id(struct ipmi_intf * intf, uint8_t chan, char *string) } static int -ipmi_lan_set_vlan_priority(struct ipmi_intf * intf, uint8_t chan, char *string) +ipmi_lan_set_vlan_priority(struct ipmi_intf *intf, uint8_t chan, char *string) { uint8_t data; int rc; @@ -1356,14 +1282,63 @@ ipmi_lan_set_vlan_priority(struct ipmi_intf * intf, uint8_t chan, char *string) } if (priority < 0 || priority > 7) { - lprintf(LOG_NOTICE, "vlan priority must be between 0 and 7."); - return -1; + lprintf(LOG_NOTICE, "VLAN priority must be between 0 and 7."); + return (-1); } data = (uint8_t)priority; rc = set_lan_param(intf, chan, IPMI_LANP_VLAN_PRIORITY, &data, 1); return rc; } +static void +print_lan_set_bad_pass_thresh_usage(void) +{ + lprintf(LOG_NOTICE, +"lan set <chanel> bad_pass_thresh <thresh_num> <1|0> <reset_interval> <lockout_interval>\n" +" <thresh_num> Bad Pasword Threshold number.\n" +" <1|0> 1 = generate a Session Audit sensor event.\n" +" 0 = do not generate an event.\n" +" <reset_interval> Attempt Count Reset Interval. In tens of seconds.\n" +" <lockount_interval> User Lockout Interval. In tens of seconds."); +} + +/* get_cmdline_bad_pass_thresh - parse-out bad password threshold from given + * string and store it into buffer. + * + * @arg: string to be parsed. + * @buf: buffer of 6 to hold parsed Bad Password Threshold. + * + * returns zero on success, (-1) on error. + */ +static int +get_cmdline_bad_pass_thresh(char *argv[], uint8_t *buf) +{ + uint16_t reset, lockout; + + if (str2uchar(argv[0], &buf[1])) { + return -1; + } + + if (str2uchar(argv[1], &buf[0]) || buf[0] > 1) { + return -1; + } + + if (str2ushort(argv[2], &reset)) { + return -1; + } + + if (str2ushort(argv[3], &lockout)) { + return -1; + } + + /* store parsed data */ + buf[2] = reset & 0xFF; + buf[3] = reset >> 8; + buf[4] = lockout & 0xFF; + buf[5] = lockout >> 8; + return 0; +} + static int ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) { @@ -1372,13 +1347,13 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) int rc = 0; if (argc < 2) { - ipmi_lan_set_usage(); + print_lan_set_usage(); return (-1); } if (strncmp(argv[0], "help", 4) == 0 || strncmp(argv[1], "help", 4) == 0) { - ipmi_lan_set_usage(); + print_lan_set_usage(); return 0; } @@ -1390,7 +1365,7 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) /* find type of channel and only accept 802.3 LAN */ if (!is_lan_channel(intf, chan)) { lprintf(LOG_ERR, "Channel %d is not a LAN channel!", chan); - ipmi_lan_set_usage(); + print_lan_set_usage(); return -1; } @@ -1403,11 +1378,11 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) /* set channel access mode */ else if (strncmp(argv[1], "access", 6) == 0) { if (argc < 3) { - lprintf(LOG_NOTICE, "lan set access <on|off>"); + print_lan_set_access_usage(); return (-1); } else if (strncmp(argv[2], "help", 4) == 0) { - lprintf(LOG_NOTICE, "lan set access <on|off>"); + print_lan_set_access_usage(); return 0; } else if (strncmp(argv[2], "on", 2) == 0) { @@ -1417,27 +1392,18 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) rc = ipmi_set_channel_access(intf, chan, 0); } else { - lprintf(LOG_NOTICE, "lan set access <on|off>"); + print_lan_set_access_usage(); return (-1); } } /* set ARP control */ else if (strncmp(argv[1], "arp", 3) == 0) { if (argc < 3) { - lprintf(LOG_NOTICE, - "lan set <channel> arp respond <on|off>\n" - "lan set <channel> arp generate <on|off>\n" - "lan set <channel> arp interval <seconds>\n\n" - "example: lan set 7 arp gratuitous off\n"); + print_lan_set_arp_usage(); return (-1); } else if (strncmp(argv[2], "help", 4) == 0) { - lprintf(LOG_NOTICE, - "lan set <channel> arp respond <on|off>\n" - "lan set <channel> arp generate <on|off>\n" - "lan set <channel> arp interval <seconds>\n\n" - "example: lan set 7 arp gratuitous off\n"); - return 0; + print_lan_set_arp_usage(); } else if (strncmp(argv[2], "interval", 8) == 0) { uint8_t interval = 0; @@ -1449,7 +1415,7 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) } else if (strncmp(argv[2], "generate", 8) == 0) { if (argc < 4) { - lprintf(LOG_NOTICE, "lan set <channel> arp generate <on|off>"); + print_lan_set_arp_usage(); return (-1); } else if (strncmp(argv[3], "on", 2) == 0) @@ -1457,13 +1423,13 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) else if (strncmp(argv[3], "off", 3) == 0) rc = lan_set_arp_generate(intf, chan, 0); else { - lprintf(LOG_NOTICE, "lan set <channel> arp generate <on|off>"); + print_lan_set_arp_usage(); return (-1); } } else if (strncmp(argv[2], "respond", 7) == 0) { if (argc < 4) { - lprintf(LOG_NOTICE, "lan set <channel> arp respond <on|off>"); + print_lan_set_arp_usage(); return (-1); } else if (strncmp(argv[3], "on", 2) == 0) @@ -1471,34 +1437,22 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) else if (strncmp(argv[3], "off", 3) == 0) rc = lan_set_arp_respond(intf, chan, 0); else { - lprintf(LOG_NOTICE, "lan set <channel> arp respond <on|off>"); + print_lan_set_arp_usage(); return (-1); } } else { - lprintf(LOG_NOTICE, - "lan set <channel> arp respond <on|off>\n" - "lan set <channel> arp generate <on|off>\n" - "lan set <channel> arp interval <seconds>\n"); - return (-1); + print_lan_set_arp_usage(); } } /* set authentication types */ else if (strncmp(argv[1], "auth", 4) == 0) { if (argc < 3) { - lprintf(LOG_NOTICE, - "lan set <channel> auth <level> <type,type,...>\n" - " level = CALLBACK, USER, OPERATOR, ADMIN\n" - " types = NONE, MD2, MD5, PASSWORD, OEM\n" - "example: lan set 7 auth ADMIN PASSWORD,MD5\n"); + print_lan_set_auth_usage(); return (-1); } else if (strncmp(argv[2], "help", 4) == 0) { - lprintf(LOG_NOTICE, - "lan set <channel> auth <level> <type,type,...>\n" - " level = CALLBACK, USER, OPERATOR, ADMIN\n" - " types = NONE, MD2, MD5, PASSWORD, OEM\n" - "example: lan set 7 auth ADMIN PASSWORD,MD5\n"); + print_lan_set_auth_usage(); return 0; } else { rc = ipmi_lan_set_auth(intf, chan, argv[2], argv[3]); @@ -1507,21 +1461,11 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) /* ip address source */ else if (strncmp(argv[1], "ipsrc", 5) == 0) { if (argc < 3) { - lprintf(LOG_NOTICE, - "lan set <channel> ipsrc <source>\n" - " none = unspecified\n" - " static = static address (manually configured)\n" - " dhcp = address obtained by BMC running DHCP\n" - " bios = address loaded by BIOS or system software\n"); + print_lan_set_ipsrc_usage(); return (-1); } else if (strncmp(argv[2], "help", 4) == 0) { - lprintf(LOG_NOTICE, - "lan set <channel> ipsrc <source>\n" - " none = unspecified\n" - " static = static address (manually configured)\n" - " dhcp = address obtained by BMC running DHCP\n" - " bios = address loaded by BIOS or system software\n"); + print_lan_set_ipsrc_usage(); return 0; } else if (strncmp(argv[2], "none", 4) == 0) @@ -1533,12 +1477,7 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) else if (strncmp(argv[2], "bios", 4) == 0) data[0] = 3; else { - lprintf(LOG_NOTICE, - "lan set <channel> ipsrc <source>\n" - " none = unspecified\n" - " static = static address (manually configured)\n" - " dhcp = address obtained by BMC running DHCP\n" - " bios = address loaded by BIOS or system software\n"); + print_lan_set_ipsrc_usage(); return -1; } rc = set_lan_param(intf, chan, IPMI_LANP_IP_ADDR_SRC, data, 1); @@ -1546,16 +1485,16 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) /* session password * not strictly a lan setting, but its used for lan connections */ else if (strncmp(argv[1], "password", 8) == 0) { - rc = ipmi_lan_set_password(intf, 1, (uint8_t *)argv[2]); + rc = ipmi_lan_set_password(intf, 1, argv[2]); } /* snmp community string */ else if (strncmp(argv[1], "snmp", 4) == 0) { if (argc < 3) { - lprintf(LOG_NOTICE, "lan set <channel> snmp <community string>"); + print_lan_set_snmp_usage(); return (-1); } else if (strncmp(argv[2], "help", 4) == 0) { - lprintf(LOG_NOTICE, "lan set <channel> snmp <community string>"); + print_lan_set_snmp_usage(); return 0; } else { memcpy(data, argv[2], __min(strlen(argv[2]), 18)); @@ -1568,7 +1507,7 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) else if (strncmp(argv[1], "ipaddr", 6) == 0) { if(argc != 3) { - ipmi_lan_set_usage(); + print_lan_set_usage(); return -1; } rc = get_cmdline_ipaddr(argv[2], data); @@ -1583,7 +1522,7 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) else if (strncmp(argv[1], "netmask", 7) == 0) { if(argc != 3) { - ipmi_lan_set_usage(); + print_lan_set_usage(); return -1; } rc = get_cmdline_ipaddr(argv[2], data); @@ -1598,7 +1537,7 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) else if (strncmp(argv[1], "macaddr", 7) == 0) { if(argc != 3) { - ipmi_lan_set_usage(); + print_lan_set_usage(); return -1; } rc = get_cmdline_macaddr(argv[2], data); @@ -1612,11 +1551,11 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) /* default gateway settings */ else if (strncmp(argv[1], "defgw", 5) == 0) { if (argc < 4) { - lprintf(LOG_NOTICE, "LAN set default gateway Commands: ipaddr, macaddr"); + print_lan_set_defgw_usage(); return (-1); } else if (strncmp(argv[2], "help", 4) == 0) { - lprintf(LOG_NOTICE, "LAN set default gateway Commands: ipaddr, macaddr"); + print_lan_set_defgw_usage(); return 0; } else if ((strncmp(argv[2], "ipaddr", 5) == 0) && @@ -1634,18 +1573,18 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) rc = set_lan_param(intf, chan, IPMI_LANP_DEF_GATEWAY_MAC, data, 6); } else { - ipmi_lan_set_usage(); + print_lan_set_usage(); return -1; } } /* backup gateway settings */ else if (strncmp(argv[1], "bakgw", 5) == 0) { if (argc < 4) { - lprintf(LOG_NOTICE, "LAN set backup gateway commands: ipaddr, macaddr"); + print_lan_set_bakgw_usage(); return (-1); } else if (strncmp(argv[2], "help", 4) == 0) { - lprintf(LOG_NOTICE, "LAN set backup gateway commands: ipaddr, macaddr"); + print_lan_set_bakgw_usage(); return 0; } else if ((strncmp(argv[2], "ipaddr", 5) == 0) && @@ -1663,17 +1602,17 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) rc = set_lan_param(intf, chan, IPMI_LANP_BAK_GATEWAY_MAC, data, 6); } else { - ipmi_lan_set_usage(); + print_lan_set_usage(); return -1; } } else if (strncasecmp(argv[1], "vlan", 4) == 0) { if (argc < 4) { - ipmi_lan_set_vlan_usage(); + print_lan_set_vlan_usage(); return (-1); } else if (strncmp(argv[2], "help", 4) == 0) { - ipmi_lan_set_vlan_usage(); + print_lan_set_vlan_usage(); return 0; } else if (strncasecmp(argv[2], "id", 2) == 0) { @@ -1688,7 +1627,7 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) ipmi_lan_set_vlan_priority(intf, chan, argv[3]); } else { - ipmi_lan_set_vlan_usage(); + print_lan_set_vlan_usage(); return (-1); } } @@ -1717,25 +1656,13 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) else if (strncmp(argv[1], "cipher_privs", 12) == 0) { if (argc != 3) { - lprintf(LOG_NOTICE, "lan set <channel> cipher_privs XXXXXXXXXXXXXXX"); - lprintf(LOG_NOTICE, " X = Cipher Suite Unused"); - lprintf(LOG_NOTICE, " c = CALLBACK"); - lprintf(LOG_NOTICE, " u = USER"); - lprintf(LOG_NOTICE, " o = OPERATOR"); - lprintf(LOG_NOTICE, " a = ADMIN"); - lprintf(LOG_NOTICE, " O = OEM\n"); + print_lan_set_cipher_privs_usage(); return (-1); } else if ((strncmp(argv[2], "help", 4) == 0) || get_cmdline_cipher_suite_priv_data(argv[2], data)) { - lprintf(LOG_NOTICE, "lan set <channel> cipher_privs XXXXXXXXXXXXXXX"); - lprintf(LOG_NOTICE, " X = Cipher Suite Unused"); - lprintf(LOG_NOTICE, " c = CALLBACK"); - lprintf(LOG_NOTICE, " u = USER"); - lprintf(LOG_NOTICE, " o = OPERATOR"); - lprintf(LOG_NOTICE, " a = ADMIN"); - lprintf(LOG_NOTICE, " O = OEM\n"); + print_lan_set_cipher_privs_usage(); return 0; } else @@ -1743,8 +1670,20 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv) rc = set_lan_param(intf, chan, IPMI_LANP_RMCP_PRIV_LEVELS, data, 9); } } + else if (strncmp(argv[1], "bad_pass_thresh", 15) == 0) + { + if (argc == 3 && strncmp(argv[2], "help", 4) == 0) { + print_lan_set_bad_pass_thresh_usage(); + return 0; + } + if (argc < 6 || get_cmdline_bad_pass_thresh(&argv[2], data)) { + print_lan_set_bad_pass_thresh_usage(); + return (-1); + } + rc = set_lan_param(intf, chan, IPMI_LANP_BAD_PASS_THRESH, data, 6); + } else { - ipmi_lan_set_usage(); + print_lan_set_usage(); return (-1); } @@ -1865,28 +1804,6 @@ ipmi_lan_alert_print_all(struct ipmi_intf * intf, uint8_t channel) return 0; } -static void -ipmi_lan_alert_print_usage(void) -{ - lprintf(LOG_NOTICE, "\nusage: lan alert print [channel number] [alert destination]\n"); - lprintf(LOG_NOTICE, "Default will print all alerts for the first found LAN channel"); -} - -static void -ipmi_lan_alert_set_usage(void) -{ - lprintf(LOG_NOTICE, "\nusage: lan alert set <channel number> <alert destination> <command> <parameter>\n"); - lprintf(LOG_NOTICE, " Command/parameter options:\n"); - lprintf(LOG_NOTICE, " ipaddr <x.x.x.x> Set alert IP address"); - lprintf(LOG_NOTICE, " macaddr <x:x:x:x:x:x> Set alert MAC address"); - lprintf(LOG_NOTICE, " gateway <default|backup> Set channel gateway to use for alerts"); - lprintf(LOG_NOTICE, " ack <on|off> Set Alert Acknowledge on or off"); - lprintf(LOG_NOTICE, " type <pet|oem1|oem2> Set destination type as PET or OEM"); - lprintf(LOG_NOTICE, " time <seconds> Set ack timeout or unack retry interval"); - lprintf(LOG_NOTICE, " retry <number> Set number of alert retries"); - lprintf(LOG_NOTICE, ""); -} - static int ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, int argc, char ** argv) @@ -1896,13 +1813,13 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, int rc = 0; if (argc < 2) { - ipmi_lan_alert_set_usage(); + print_lan_alert_set_usage(); return (-1); } if (strncmp(argv[0], "help", 4) == 0 || strncmp(argv[1], "help", 4) == 0) { - ipmi_lan_alert_set_usage(); + print_lan_alert_set_usage(); return 0; } @@ -1960,7 +1877,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, data[2] = 1; } else { - ipmi_lan_alert_set_usage(); + print_lan_alert_set_usage(); return -1; } @@ -1986,7 +1903,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, data[1] &= ~0x80; } else { - ipmi_lan_alert_set_usage(); + print_lan_alert_set_usage(); return -1; } rc = set_lan_param_nowait(intf, chan, IPMI_LANP_DEST_TYPE, data, p->data_len); @@ -2014,7 +1931,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, data[1] |= 0x07; } else { - ipmi_lan_alert_set_usage(); + print_lan_alert_set_usage(); return -1; } rc = set_lan_param_nowait(intf, chan, IPMI_LANP_DEST_TYPE, data, p->data_len); @@ -2053,7 +1970,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, rc = set_lan_param_nowait(intf, chan, IPMI_LANP_DEST_TYPE, data, p->data_len); } else { - ipmi_lan_alert_set_usage(); + print_lan_alert_set_usage(); return -1; } @@ -2067,13 +1984,13 @@ ipmi_lan_alert(struct ipmi_intf * intf, int argc, char ** argv) uint8_t channel = 1; if (argc < 1) { - ipmi_lan_alert_print_usage(); - ipmi_lan_alert_set_usage(); + print_lan_alert_print_usage(); + print_lan_alert_set_usage(); return (-1); } else if (strncasecmp(argv[0], "help", 4) == 0) { - ipmi_lan_alert_print_usage(); - ipmi_lan_alert_set_usage(); + print_lan_alert_print_usage(); + print_lan_alert_set_usage(); return 0; } @@ -2089,7 +2006,7 @@ ipmi_lan_alert(struct ipmi_intf * intf, int argc, char ** argv) } if (strncasecmp(argv[1], "help", 4) == 0) { - ipmi_lan_alert_print_usage(); + print_lan_alert_print_usage(); return 0; } @@ -2119,11 +2036,11 @@ ipmi_lan_alert(struct ipmi_intf * intf, int argc, char ** argv) /* alert set <channel> <alert> [option] */ if (strncasecmp(argv[0], "set", 3) == 0) { if (argc < 5) { - ipmi_lan_alert_set_usage(); + print_lan_alert_set_usage(); return (-1); } else if (strncasecmp(argv[1], "help", 4) == 0) { - ipmi_lan_alert_set_usage(); + print_lan_alert_set_usage(); return 0; } @@ -2268,6 +2185,234 @@ ipmi_lan_stats_clear(struct ipmi_intf * intf, uint8_t chan) return rc; } +static void +print_lan_alert_print_usage(void) +{ + lprintf(LOG_NOTICE, +""); + lprintf(LOG_NOTICE, +"usage: lan alert print [channel number] [alert destination]"); + lprintf(LOG_NOTICE, +""); + lprintf(LOG_NOTICE, +"Default will print all alerts for the first found LAN channel"); +} + +static void +print_lan_alert_set_usage(void) +{ + lprintf(LOG_NOTICE, +""); + lprintf(LOG_NOTICE, +"usage: lan alert set <channel number> <alert destination> <command> <parameter>"); + lprintf(LOG_NOTICE, +""); + lprintf(LOG_NOTICE, +" Command/parameter options:"); + lprintf(LOG_NOTICE, +""); + lprintf(LOG_NOTICE, +" ipaddr <x.x.x.x> Set alert IP address"); + lprintf(LOG_NOTICE, +" macaddr <x:x:x:x:x:x> Set alert MAC address"); + lprintf(LOG_NOTICE, +" gateway <default|backup> Set channel gateway to use for alerts"); + lprintf(LOG_NOTICE, +" ack <on|off> Set Alert Acknowledge on or off"); + lprintf(LOG_NOTICE, +" type <pet|oem1|oem2> Set destination type as PET or OEM"); + lprintf(LOG_NOTICE, +" time <seconds> Set ack timeout or unack retry interval"); + lprintf(LOG_NOTICE, +" retry <number> Set number of alert retries"); + lprintf(LOG_NOTICE, +""); +} + +static void +print_lan_set_usage(void) +{ + lprintf(LOG_NOTICE, +""); + lprintf(LOG_NOTICE, +"usage: lan set <channel> <command> <parameter>"); + lprintf(LOG_NOTICE, +""); + lprintf(LOG_NOTICE, +"LAN set command/parameter options:"); + lprintf(LOG_NOTICE, +" ipaddr <x.x.x.x> Set channel IP address"); + lprintf(LOG_NOTICE, +" netmask <x.x.x.x> Set channel IP netmask"); + lprintf(LOG_NOTICE, +" macaddr <x:x:x:x:x:x> Set channel MAC address"); + lprintf(LOG_NOTICE, +" defgw ipaddr <x.x.x.x> Set default gateway IP address"); + lprintf(LOG_NOTICE, +" defgw macaddr <x:x:x:x:x:x> Set default gateway MAC address"); + lprintf(LOG_NOTICE, +" bakgw ipaddr <x.x.x.x> Set backup gateway IP address"); + lprintf(LOG_NOTICE, +" bakgw macaddr <x:x:x:x:x:x> Set backup gateway MAC address"); + lprintf(LOG_NOTICE, +" password <password> Set session password for this channel"); + lprintf(LOG_NOTICE, +" snmp <community string> Set SNMP public community string"); + lprintf(LOG_NOTICE, +" user Enable default user for this channel"); + lprintf(LOG_NOTICE, +" access <on|off> Enable or disable access to this channel"); + lprintf(LOG_NOTICE, +" alert <on|off> Enable or disable PEF alerting for this channel"); + lprintf(LOG_NOTICE, +" arp respond <on|off> Enable or disable BMC ARP responding"); + lprintf(LOG_NOTICE, +" arp generate <on|off> Enable or disable BMC gratuitous ARP generation"); + lprintf(LOG_NOTICE, +" arp interval <seconds> Set gratuitous ARP generation interval"); + lprintf(LOG_NOTICE, +" vlan id <off|<id>> Disable or enable VLAN and set ID (1-4094)"); + lprintf(LOG_NOTICE, +" vlan priority <priority> Set vlan priority (0-7)"); + lprintf(LOG_NOTICE, +" auth <level> <type,..> Set channel authentication types"); + lprintf(LOG_NOTICE, +" level = CALLBACK, USER, OPERATOR, ADMIN"); + lprintf(LOG_NOTICE, +" type = NONE, MD2, MD5, PASSWORD, OEM"); + lprintf(LOG_NOTICE, +" ipsrc <source> Set IP Address source"); + lprintf(LOG_NOTICE, +" none = unspecified source"); + lprintf(LOG_NOTICE, +" static = address manually configured to be static"); + lprintf(LOG_NOTICE, +" dhcp = address obtained by BMC running DHCP"); + lprintf(LOG_NOTICE, +" bios = address loaded by BIOS or system software"); + lprintf(LOG_NOTICE, +" cipher_privs XXXXXXXXXXXXXXX Set RMCP+ cipher suite privilege levels"); + lprintf(LOG_NOTICE, +" X = Cipher Suite Unused"); + lprintf(LOG_NOTICE, +" c = CALLBACK"); + lprintf(LOG_NOTICE, +" u = USER"); + lprintf(LOG_NOTICE, +" o = OPERATOR"); + lprintf(LOG_NOTICE, +" a = ADMIN"); + lprintf(LOG_NOTICE, +" O = OEM"); + lprintf(LOG_NOTICE, +""); + lprintf(LOG_NOTICE, +" bad_pass_thresh <thresh_num> <1|0> <reset_interval> <lockout_interval>\n" +" Set bad password threshold"); +} + +static void +print_lan_set_access_usage(void) +{ + lprintf(LOG_NOTICE, +"lan set access <on|off>"); +} + +static void +print_lan_set_arp_usage(void) +{ + lprintf(LOG_NOTICE, +"lan set <channel> arp respond <on|off>"); + lprintf(LOG_NOTICE, +"lan set <channel> arp generate <on|off>"); + lprintf(LOG_NOTICE, +"lan set <channel> arp interval <seconds>"); + lprintf(LOG_NOTICE, +""); + lprintf(LOG_NOTICE, +"example: lan set 7 arp gratuitous off"); +} + +static void +print_lan_set_auth_usage(void) +{ + lprintf(LOG_NOTICE, +"lan set <channel> auth <level> <type,type,...>"); + lprintf(LOG_NOTICE, +" level = CALLBACK, USER, OPERATOR, ADMIN"); + lprintf(LOG_NOTICE, +" types = NONE, MD2, MD5, PASSWORD, OEM"); + lprintf(LOG_NOTICE, +"example: lan set 7 auth ADMIN PASSWORD,MD5"); +} + +static void +print_lan_set_bakgw_usage(void) +{ + lprintf(LOG_NOTICE, +"LAN set backup gateway commands: ipaddr, macaddr"); +} + +static void +print_lan_set_cipher_privs_usage(void) +{ + lprintf(LOG_NOTICE, +"lan set <channel> cipher_privs XXXXXXXXXXXXXXX"); + lprintf(LOG_NOTICE, +" X = Cipher Suite Unused"); + lprintf(LOG_NOTICE, +" c = CALLBACK"); + lprintf(LOG_NOTICE, +" u = USER"); + lprintf(LOG_NOTICE, +" o = OPERATOR"); + lprintf(LOG_NOTICE, +" a = ADMIN"); + lprintf(LOG_NOTICE, +" O = OEM"); + lprintf(LOG_NOTICE, +""); +} + +static void +print_lan_set_defgw_usage(void) +{ + lprintf(LOG_NOTICE, +"LAN set default gateway Commands: ipaddr, macaddr"); +} + +static void +print_lan_set_ipsrc_usage(void) +{ + lprintf(LOG_NOTICE, +"lan set <channel> ipsrc <source>"); + lprintf(LOG_NOTICE, +" none = unspecified"); + lprintf(LOG_NOTICE, +" static = static address (manually configured)"); + lprintf(LOG_NOTICE, +" dhcp = address obtained by BMC running DHCP"); + lprintf(LOG_NOTICE, +" bios = address loaded by BIOS or system software"); +} + +static void +print_lan_set_snmp_usage(void) +{ + lprintf(LOG_NOTICE, +"lan set <channel> snmp <community string>"); +} + +static void +print_lan_set_vlan_usage(void) +{ + lprintf(LOG_NOTICE, +"lan set <channel> vlan id <id>"); + lprintf(LOG_NOTICE, +"lan set <channel> vlan id off"); + lprintf(LOG_NOTICE, +"lan set <channel> vlan priority <priority>"); +} /* * print_lan_usage @@ -2275,13 +2420,20 @@ ipmi_lan_stats_clear(struct ipmi_intf * intf, uint8_t chan) static void print_lan_usage(void) { - lprintf(LOG_NOTICE, "LAN Commands:"); - lprintf(LOG_NOTICE, " print [<channel number>]"); - lprintf(LOG_NOTICE, " set <channel number> <command> <parameter>"); - lprintf(LOG_NOTICE, " alert print <channel number> <alert destination>"); - lprintf(LOG_NOTICE, " alert set <channel number> <alert destination> <command> <parameter>"); - lprintf(LOG_NOTICE, " stats get [<channel number>]"); - lprintf(LOG_NOTICE, " stats clear [<channel number>]"); + lprintf(LOG_NOTICE, +"LAN Commands:"); + lprintf(LOG_NOTICE, +" print [<channel number>]"); + lprintf(LOG_NOTICE, +" set <channel number> <command> <parameter>"); + lprintf(LOG_NOTICE, +" alert print <channel number> <alert destination>"); + lprintf(LOG_NOTICE, +" alert set <channel number> <alert destination> <command> <parameter>"); + lprintf(LOG_NOTICE, +" stats get [<channel number>]"); + lprintf(LOG_NOTICE, +" stats clear [<channel number>]"); } @@ -2299,8 +2451,6 @@ ipmi_lanp_main(struct ipmi_intf * intf, int argc, char ** argv) return 0; } - chan = find_lan_channel(intf, 1); - if (strncmp(argv[0], "printconf", 9) == 0 || strncmp(argv[0], "print", 5) == 0) { @@ -2312,6 +2462,8 @@ ipmi_lanp_main(struct ipmi_intf * intf, int argc, char ** argv) lprintf(LOG_ERR, "Invalid channel: %s", argv[1]); return (-1); } + } else { + chan = find_lan_channel(intf, 1); } if (!is_lan_channel(intf, chan)) { lprintf(LOG_ERR, "Invalid channel: %d", chan); @@ -2331,6 +2483,8 @@ ipmi_lanp_main(struct ipmi_intf * intf, int argc, char ** argv) lprintf(LOG_ERR, "Invalid channel: %s", argv[2]); return (-1); } + } else { + chan = find_lan_channel(intf, 1); } if (!is_lan_channel(intf, chan)) { lprintf(LOG_ERR, "Invalid channel: %d", chan); |