1107
1123
data++; /* Skip over the revision byte. */
1109
sel = data[0] & 0xf;
1125
if ((data[0] & 0xf) != lanc->curr_sel) {
1126
/* Yikes, wrong selector came back! */
1127
ipmi_log(IPMI_LOG_WARNING,
1128
"lanparm.c(got_parm): "
1129
"Error fetching dest type %d,"
1130
" wrong selector came back, expecting %d, was %d."
1131
" Assuming it is %d.",
1132
lanc->curr_parm, lanc->curr_sel, data[0] & 0xf,
1136
sel = lanc->curr_sel;
1110
1137
if (sel > lanc->num_alert_destinations)
1111
1138
return 0; /* Another error check will get this later. */
1146
1173
data++; /* Skip over the revision byte. */
1148
sel = data[0] & 0xf;
1175
if ((data[0] & 0xf) != lanc->curr_sel) {
1176
/* Yikes, wrong selector came back! */
1177
ipmi_log(IPMI_LOG_ERR_INFO,
1178
"lanparm.c(got_parm): "
1179
"Error fetching dest addr %d,"
1180
" wrong selector came back, expecting %d, was %d."
1181
" Assuming it is %d.",
1182
lanc->curr_parm, lanc->curr_sel, data[0] & 0xf,
1186
sel = lanc->curr_sel;
1149
1187
if (sel > lanc->num_alert_destinations)
1150
1188
return 0; /* Another error check will get this later. */
1416
1464
{ 1, S, 1, 0, gvp, svp }, /* IPMI_LANPARM_VLAN_PRIORITY */
1417
1465
{ 1, 0, 1, 0, gnc, NULL }, /* IPMI_LANPARM_NUM_CIPHER_SUITE_ENTRIES */
1418
1466
{ 1, 0, 17, 0, gcs, NULL }, /* IPMI_LANPARM_CIPHER_SUITE_ENTRY_SUPPORT */
1419
{ 1, 0, 9, 0, gcp, scp }, /* IPMI_LANPARM_CIPHER_SUITE_ENTRY_PRIV */
1468
#define S OFFSET_OF(max_priv_for_cipher_suite_supported)
1469
{ 1, S, 9, 0, gcp, scp }, /* IPMI_LANPARM_CIPHER_SUITE_ENTRY_PRIV */
1421
1471
#define S OFFSET_OF(vlan_tag_supported)
1422
1472
{ 1, S, 4, 0, gvt, svt }, /* IPMI_LANPARM_DEST_VLAN_TAG */
1447
1497
lanparms_t *lp = &(lanparms[lanc->curr_parm]);
1449
1499
/* Check the length, and don't forget the revision byte must be added. */
1450
if ((!err) && (data_len < (lp->length+1))) {
1500
if ((!err) && (data_len < (unsigned int) (lp->length+1))) {
1451
1501
if ((data_len == 1) && (lp->optional_offset)) {
1452
1502
/* Some systems return zero-length data for optional parms. */
1453
1503
unsigned char *opt = ((unsigned char *)lanc) + lp->optional_offset;
1485
1535
case IPMI_LANPARM_DEST_TYPE:
1486
if ((data[1] & 0xf) != lanc->curr_sel) {
1487
/* Yikes, wrong selector came back! */
1488
ipmi_log(IPMI_LOG_ERR_INFO,
1489
"lanparm.c(got_parm): "
1490
"Error fetching dest type %d,"
1491
" wrong selector came back, expecting %d, was %d",
1492
lanc->curr_parm, lanc->curr_sel, data[1] & 0xf);
1496
1536
lanc->curr_sel++;
1497
1537
if (lanc->curr_sel >= lanc->num_alert_destinations) {
1498
1538
lanc->curr_parm++;
1503
1543
case IPMI_LANPARM_DEST_ADDR:
1504
if ((data[1] & 0xf) != lanc->curr_sel) {
1505
/* Yikes, wrong selector came back! */
1506
ipmi_log(IPMI_LOG_ERR_INFO,
1507
"lanparm.c(got_parm): "
1508
"Error fetching dest addr %d,"
1509
" wrong selector came back, expecting %d, was %d",
1510
lanc->curr_parm, lanc->curr_sel, data[1] & 0xf);
1514
1544
lanc->curr_sel++;
1515
1545
if (lanc->curr_sel >= lanc->num_alert_destinations) {
1516
1546
lanc->curr_parm = IPMI_LANPARM_VLAN_ID;
2434
2468
F_BOOLR(support_auth_md2),
2435
2469
F_BOOLR(support_auth_none),
2436
2470
F_INT(ip_addr_source), /* 5 */
2437
F_INTR(num_alert_destinations),
2438
2471
F_INTV(ipv4_ttl),
2439
2472
F_INTV(ipv4_flags),
2440
2473
F_INTV(ipv4_precedence),
2441
F_INTV(ipv4_tos), /* 10 */
2442
F_BOOLIV(enable_auth_oem, ret_user_cnt),
2475
F_BOOLIV(enable_auth_oem, ret_user_cnt), /* 10 */
2443
2476
F_BOOLIV(enable_auth_straight, ret_user_cnt),
2444
2477
F_BOOLIV(enable_auth_md5, ret_user_cnt),
2445
2478
F_BOOLIV(enable_auth_md2, ret_user_cnt),
2446
F_BOOLIV(enable_auth_none, ret_user_cnt), /* 15 */
2479
F_BOOLIV(enable_auth_none, ret_user_cnt),
2480
F_IP(ip_addr), /* 15 */
2448
2481
F_MAC(mac_addr),
2449
2482
F_IP(subnet_mask),
2450
2483
F_INTV(port_rmcp_primary),
2451
F_INTV(port_rmcp_secondary), /* 20 */
2452
F_BOOLV(bmc_generated_arps),
2484
F_INTV(port_rmcp_secondary),
2485
F_BOOLV(bmc_generated_arps), /* 20 */
2453
2486
F_BOOLV(bmc_generated_garps),
2454
2487
F_INTV(garp_interval),
2455
2488
F_IP(default_gateway_ip_addr),
2456
F_MAC(default_gateway_mac_addr), /* 25 */
2457
F_IP(backup_gateway_ip_addr),
2489
F_MAC(default_gateway_mac_addr),
2490
F_IP(backup_gateway_ip_addr), /* 25 */
2458
2491
F_MAC(backup_gateway_mac_addr),
2459
2492
F_DATA(community_string),
2493
F_INTR(num_alert_destinations),
2460
2494
F_BOOLIV(alert_ack, ipmi_lanconfig_get_num_alert_destinations),
2461
2495
F_INTIV(dest_type, ipmi_lanconfig_get_num_alert_destinations), /* 30 */
2462
2496
F_INTIV(alert_retry_interval, ipmi_lanconfig_get_num_alert_destinations),
2477
2511
#define NUM_GDATA_ENTRIES (sizeof(gdata) / sizeof(lanparm_gendata_t))
2514
ipmi_lanconfig_enum_val(unsigned int parm, int val, int *nval,
2519
if (parm == 5) { /* ip_addr_source */
2527
rval = "unspecified";
2531
rval = "manually configured";
2539
rval = "BIOS configured";
2543
rval = "other protocol";
2551
} else if (parm == 43) { /* cipher_suite_entry */
2558
case 0: rval = "RAKP-none,none,none"; rnval = 1; break;
2559
case 1: rval = "RAKP-HMAC-SHA1,none,none"; rnval = 2; break;
2560
case 2: rval = "RAKP-HMAC-SHA1,HMAC-SHA1-96,none"; rnval = 3; break;
2561
case 3: rval = "RAKP-HMAC-SHA1,HMAC-SHA1-96,AES-CBC-128"; rnval = 4; break;
2562
case 4: rval = "RAKP-HMAC-SHA1,HMAC-SHA1-96,xRC4-128"; rnval = 5; break;
2563
case 5: rval = "RAKP-HMAC-SHA1,HMAC-SHA1-96,xRC4-40"; rnval = 6; break;
2564
case 6: rval = "RAKP-HMAC-MD5,none,none"; rnval = 7; break;
2565
case 7: rval = "RAKP-HMAC-MD5,HMAC-MD5-128,none"; rnval = 8; break;
2566
case 8: rval = "RAKP-HMAC-MD5,HMAC-MD5-128,AES-CBC-128"; rnval = 9; break;
2567
case 9: rval = "RAKP-HMAC-MD5,HMAC-MD5-128,xRC4-128"; rnval = 10; break;
2568
case 10: rval = "RAKP-HMAC-MD5,HMAC-MD5-128,xRC4-40"; rnval = 11; break;
2569
case 11: rval = "RAKP-HMAC-MD5,MD5-128,none"; rnval = 12; break;
2570
case 12: rval = "RAKP-HMAC-MD5,MD5-128,AES-CBC-128"; rnval = 13; break;
2571
case 13: rval = "RAKP-HMAC-MD5,MD5-128,xRC4-128"; rnval = 14; break;
2572
case 14: rval = "RAKP-HMAC-MD5,MD5-128,xRC4-40"; rnval = -1; break;
2578
} else if (parm == 44) { /* max_priv_for_cipher_suite */
2585
case 0: rval = "disabled"; rnval = 1; break;
2586
case 1: rval = "callback"; rnval = 2; break;
2587
case 2: rval = "user"; rnval = 3; break;
2588
case 3: rval = "admin"; rnval = 4; break;
2589
case 4: rval = "oem"; rnval = -1; break;
2607
ipmi_lanconfig_enum_idx(unsigned int parm, int idx, const char **sval)
2611
if ((parm < 10) || (parm > 14))
2615
case 0: rval = "callback"; break;
2616
case 1: rval = "user"; break;
2617
case 2: rval = "operator"; break;
2618
case 3: rval = "admin"; break;
2619
case 4: rval = "oem"; break;
2620
default: return EINVAL;
2480
2630
ipmi_lanconfig_get_val(ipmi_lan_config_t *lanc,
2481
2631
unsigned int parm,
2482
2632
const char **name,
2578
2728
if (gdata[parm].iv_cnt) {
2579
2729
count = gdata[parm].iv_cnt(lanc);
2730
if (index >= (int) count)
2584
2734
switch (gdata[parm].datatype) {
2585
2735
case IPMI_LANCONFIG_INT:
2586
2736
case IPMI_LANCONFIG_BOOL:
2589
2737
if (gdata[parm].u.ival.sval)
2590
2738
rv = gdata[parm].u.ival.sval(lanc, ival);
2591
2739
else if (gdata[parm].u.ival.sval_v)