mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 18:47:22 +00:00
ID: 48 - Remove hard-coded FRU inventory access length restriction
The patch removes hard-coded 16-byte length restriction onf FRU inventory transactions. Instead, it adds an optional command-line argument for devices which need such restriction. For other devices, 32 bytes cap length is used. Also, the patch contains several code optimizations as well as several bug-fixes in API implementations where absolute FRU device offsets were used instead on relative. Commit for Dmitry Bazhenov
This commit is contained in:
parent
041d8e4bf8
commit
c7412e5815
@ -63,6 +63,8 @@ enum {
|
|||||||
struct fru_info {
|
struct fru_info {
|
||||||
uint16_t size;
|
uint16_t size;
|
||||||
uint8_t access:1;
|
uint8_t access:1;
|
||||||
|
uint8_t max_read_size;
|
||||||
|
uint8_t max_write_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_PRAGMA_PACK
|
#ifdef HAVE_PRAGMA_PACK
|
||||||
@ -70,13 +72,16 @@ struct fru_info {
|
|||||||
#endif
|
#endif
|
||||||
struct fru_header {
|
struct fru_header {
|
||||||
uint8_t version;
|
uint8_t version;
|
||||||
struct {
|
union {
|
||||||
uint8_t internal;
|
struct {
|
||||||
uint8_t chassis;
|
uint8_t internal;
|
||||||
uint8_t board;
|
uint8_t chassis;
|
||||||
uint8_t product;
|
uint8_t board;
|
||||||
uint8_t multi;
|
uint8_t product;
|
||||||
} offset;
|
uint8_t multi;
|
||||||
|
} offset;
|
||||||
|
uint8_t offsets[5];
|
||||||
|
};
|
||||||
uint8_t pad;
|
uint8_t pad;
|
||||||
uint8_t checksum;
|
uint8_t checksum;
|
||||||
}ATTRIBUTE_PACKING;
|
}ATTRIBUTE_PACKING;
|
||||||
@ -598,6 +603,20 @@ static const char * chassis_type_desc[] __attribute__((unused)) = {
|
|||||||
"AdvancedTCA", "Blade", "Blade Enclosure"
|
"AdvancedTCA", "Blade", "Blade Enclosure"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct ipmi_fru_bloc {
|
||||||
|
struct ipmi_fru_bloc * next;
|
||||||
|
uint16_t start;
|
||||||
|
uint16_t size;
|
||||||
|
uint8_t blocId[32];
|
||||||
|
} t_ipmi_fru_bloc;
|
||||||
|
|
||||||
|
static const char *section_id[4] = {
|
||||||
|
"Internal Use Section",
|
||||||
|
"Chassis Section",
|
||||||
|
"Board Section",
|
||||||
|
"Product Section"
|
||||||
|
};
|
||||||
|
|
||||||
int ipmi_fru_main(struct ipmi_intf *intf, int argc, char **argv);
|
int ipmi_fru_main(struct ipmi_intf *intf, int argc, char **argv);
|
||||||
int ipmi_fru_print(struct ipmi_intf *intf, struct sdr_record_fru_locator *fru);
|
int ipmi_fru_print(struct ipmi_intf *intf, struct sdr_record_fru_locator *fru);
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -350,6 +350,7 @@ ipmi_kontron_set_serial_number(struct ipmi_intf * intf)
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(&fru, 0, sizeof(fru));
|
||||||
fru.size = (rsp->data[1] << 8) | rsp->data[0];
|
fru.size = (rsp->data[1] << 8) | rsp->data[0];
|
||||||
fru.access = rsp->data[2] & 0x1;
|
fru.access = rsp->data[2] & 0x1;
|
||||||
|
|
||||||
@ -637,6 +638,7 @@ ipmi_kontron_set_mfg_date (struct ipmi_intf * intf)
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(&fru, 0, sizeof(fru));
|
||||||
fru.size = (rsp->data[1] << 8) | rsp->data[0];
|
fru.size = (rsp->data[1] << 8) | rsp->data[0];
|
||||||
fru.access = rsp->data[2] & 0x1;
|
fru.access = rsp->data[2] & 0x1;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user