mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 10:37:22 +00:00
Refactor bridging level detection to dedicated function
Signed-off-by: Patrick Huesmann <info@patrick-huesmann.de>
This commit is contained in:
parent
7c47cf75f4
commit
15418696ea
@ -242,6 +242,7 @@ struct ipmi_intf {
|
||||
|
||||
uint16_t ipmi_intf_get_max_request_data_size(struct ipmi_intf *intf);
|
||||
uint16_t ipmi_intf_get_max_response_data_size(struct ipmi_intf *intf);
|
||||
uint8_t ipmi_intf_get_bridging_level(const struct ipmi_intf *intf);
|
||||
|
||||
struct ipmi_intf * ipmi_intf_load(char * name);
|
||||
void ipmi_intf_print(struct ipmi_intf_support * intflist);
|
||||
|
@ -502,6 +502,7 @@ uint16_t
|
||||
ipmi_intf_get_max_request_data_size(struct ipmi_intf * intf)
|
||||
{
|
||||
int16_t size;
|
||||
uint8_t bridging_level = ipmi_intf_get_bridging_level(intf);
|
||||
|
||||
size = intf->max_request_data_size;
|
||||
|
||||
@ -521,14 +522,14 @@ ipmi_intf_get_max_request_data_size(struct ipmi_intf * intf)
|
||||
size = IPMI_DEFAULT_PAYLOAD_SIZE;
|
||||
|
||||
/* check if message is forwarded */
|
||||
if (intf->target_addr && intf->target_addr != intf->my_addr) {
|
||||
if (bridging_level) {
|
||||
/* add Send Message request size */
|
||||
size += 8;
|
||||
}
|
||||
}
|
||||
|
||||
/* check if message is forwarded */
|
||||
if (intf->target_addr && intf->target_addr != intf->my_addr) {
|
||||
if (bridging_level) {
|
||||
/* subtract send message request size */
|
||||
size -= 8;
|
||||
|
||||
@ -541,8 +542,7 @@ ipmi_intf_get_max_request_data_size(struct ipmi_intf * intf)
|
||||
}
|
||||
|
||||
/* check for double bridging */
|
||||
if (intf->transit_addr &&
|
||||
(intf->transit_addr != intf->target_addr || intf->transit_channel != intf->target_channel) {
|
||||
if (bridging_level == 2) {
|
||||
/* subtract inner send message request size */
|
||||
size -= 8;
|
||||
}
|
||||
@ -560,6 +560,7 @@ uint16_t
|
||||
ipmi_intf_get_max_response_data_size(struct ipmi_intf * intf)
|
||||
{
|
||||
int16_t size;
|
||||
uint8_t bridging_level = ipmi_intf_get_bridging_level(intf);
|
||||
|
||||
size = intf->max_response_data_size;
|
||||
|
||||
@ -579,14 +580,14 @@ ipmi_intf_get_max_response_data_size(struct ipmi_intf * intf)
|
||||
size = IPMI_DEFAULT_PAYLOAD_SIZE; /* response length with subtracted header and checksum byte */
|
||||
|
||||
/* check if message is forwarded */
|
||||
if (intf->target_addr && intf->target_addr != intf->my_addr) {
|
||||
if (bridging_level) {
|
||||
/* add Send Message header size */
|
||||
size += 7;
|
||||
}
|
||||
}
|
||||
|
||||
/* check if message is forwarded */
|
||||
if (intf->target_addr && intf->target_addr != intf->my_addr) {
|
||||
if (bridging_level) {
|
||||
/*
|
||||
* Some IPMI controllers like PICMG AMC Carriers embed responses
|
||||
* to the forwarded messages into the Send Message response.
|
||||
@ -604,8 +605,7 @@ ipmi_intf_get_max_response_data_size(struct ipmi_intf * intf)
|
||||
}
|
||||
|
||||
/* check for double bridging */
|
||||
if (intf->transit_addr &&
|
||||
(intf->transit_addr != intf->target_addr || intf->transit_channel != intf->target_channel) {
|
||||
if (bridging_level == 2) {
|
||||
/* subtract inner send message header size */
|
||||
size -= 8;
|
||||
}
|
||||
@ -619,6 +619,25 @@ ipmi_intf_get_max_response_data_size(struct ipmi_intf * intf)
|
||||
return size;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
ipmi_intf_get_bridging_level(const struct ipmi_intf *intf)
|
||||
{
|
||||
uint8_t bridging_level;
|
||||
|
||||
if (intf->target_addr && (intf->target_addr != intf->my_addr)) {
|
||||
if (intf->transit_addr &&
|
||||
(intf->transit_addr != intf->target_addr || intf->transit_channel != intf->target_channel)) {
|
||||
bridging_level = 2;
|
||||
} else {
|
||||
bridging_level = 1;
|
||||
}
|
||||
} else {
|
||||
bridging_level = 0;
|
||||
}
|
||||
|
||||
return bridging_level;
|
||||
}
|
||||
|
||||
void
|
||||
ipmi_intf_set_max_request_data_size(struct ipmi_intf * intf, uint16_t size)
|
||||
{
|
||||
|
@ -612,18 +612,7 @@ serial_bm_build_msg(const struct ipmi_intf * intf,
|
||||
uint8_t * data = msg, seq;
|
||||
struct ipmb_msg_hdr * hdr = (struct ipmb_msg_hdr *) msg;
|
||||
struct ipmi_send_message_rq * inner_rq = NULL, * outer_rq = NULL;
|
||||
int bridging_level;
|
||||
|
||||
/* acquire bridging level */
|
||||
if (intf->target_addr && intf->target_addr != intf->my_addr) {
|
||||
if (intf->transit_addr != 0) {
|
||||
bridging_level = 2;
|
||||
} else {
|
||||
bridging_level = 1;
|
||||
}
|
||||
} else {
|
||||
bridging_level = 0;
|
||||
}
|
||||
int bridging_level = ipmi_intf_get_bridging_level(intf);
|
||||
|
||||
/* check overall packet length */
|
||||
if(req->msg.data_len + 7 + bridging_level * 8 > max_len) {
|
||||
|
@ -473,18 +473,7 @@ serial_term_build_msg(const struct ipmi_intf * intf,
|
||||
struct serial_term_hdr * term_hdr = (struct serial_term_hdr *) msg;
|
||||
struct ipmi_send_message_rq * outer_rq = NULL;
|
||||
struct ipmi_send_message_rq * inner_rq = NULL;
|
||||
int bridging_level;
|
||||
|
||||
/* acquire bridging level */
|
||||
if (intf->target_addr && intf->target_addr != intf->my_addr) {
|
||||
if (intf->transit_addr != 0) {
|
||||
bridging_level = 2;
|
||||
} else {
|
||||
bridging_level = 1;
|
||||
}
|
||||
} else {
|
||||
bridging_level = 0;
|
||||
}
|
||||
int bridging_level = ipmi_intf_get_bridging_level(intf);
|
||||
|
||||
/* check overall packet length */
|
||||
if(req->msg.data_len + 3 + bridging_level * 8 > max_len) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user