ID:368 - Fix handling of bridging-related parameters

1. my_addr is not set if an interface does not expose set_my_addr.
   Currently, the only interface which requires some special handling to set
   my_addr is OpenIPMI. But changing of my_addr still needed for other interfaces.
   So, we must set it regardless of presence of set_my_addr().
2. Since set_my_addr() for serial interfaces only sets my_addr, we remove them
   as redundand.
3. Bridging is enabled when either trasit_addr or target_addr is not 0.
   Currentle transit_addr is not regarded.
4. target_lun does not relate to briging. It is needed for "raw" command. We
   set it regardles of bridging.

Commit for: Dmitry Bazhenov
This commit is contained in:
Zdenek Styblik 2015-07-25 13:03:37 +02:00
parent fb6e311d27
commit c87aa0b96a
3 changed files with 22 additions and 31 deletions

View File

@ -940,36 +940,39 @@ ipmi_main(int argc, char ** argv,
* used for open, Set the discovered IPMB address as my address if the * used for open, Set the discovered IPMB address as my address if the
* interface supports it. * interface supports it.
*/ */
if (addr != 0 && addr != ipmi_main_intf->my_addr && if (addr != 0 && addr != ipmi_main_intf->my_addr) {
ipmi_main_intf->set_my_addr) { if (ipmi_main_intf->set_my_addr) {
/* /*
* Only set the interface address on interfaces which support * Some interfaces need special handling
* it * when changing local address
*/ */
(void) ipmi_main_intf->set_my_addr(ipmi_main_intf, addr); (void)ipmi_main_intf->set_my_addr(ipmi_main_intf, addr);
}
/* set local address */
ipmi_main_intf->my_addr = addr;
} }
ipmi_main_intf->target_addr = ipmi_main_intf->my_addr;
/* If bridging addresses are specified, handle them */ /* If bridging addresses are specified, handle them */
if (target_addr > 0) { if (transit_addr > 0 || target_addr > 0) {
ipmi_main_intf->target_addr = target_addr;
ipmi_main_intf->target_lun = target_lun ;
ipmi_main_intf->target_channel = target_channel ;
}
if (transit_addr > 0) {
/* sanity check, transit makes no sense without a target */ /* sanity check, transit makes no sense without a target */
if ((transit_addr != 0 || transit_channel != 0) && if ((transit_addr != 0 || transit_channel != 0) &&
ipmi_main_intf->target_addr == 0) { target_addr == 0) {
lprintf(LOG_ERR, lprintf(LOG_ERR,
"Transit address/channel %#x/%#x ignored. " "Transit address/channel %#x/%#x ignored. "
"Target address must be specified!", "Target address must be specified!",
transit_addr, transit_channel); transit_addr, transit_channel);
goto out_free; goto out_free;
} }
ipmi_main_intf->target_addr = target_addr;
ipmi_main_intf->target_channel = target_channel ;
ipmi_main_intf->transit_addr = transit_addr; ipmi_main_intf->transit_addr = transit_addr;
ipmi_main_intf->transit_channel = transit_channel; ipmi_main_intf->transit_channel = transit_channel;
}
if (ipmi_main_intf->target_addr > 0) {
/* must be admin level to do this over lan */ /* must be admin level to do this over lan */
ipmi_intf_session_set_privlvl(ipmi_main_intf, IPMI_SESSION_PRIV_ADMIN); ipmi_intf_session_set_privlvl(ipmi_main_intf, IPMI_SESSION_PRIV_ADMIN);
/* Get the ipmb address of the targeted entity */ /* Get the ipmb address of the targeted entity */
@ -986,6 +989,9 @@ ipmi_main(int argc, char ** argv,
} }
} }
/* set target LUN (for RAW command) */
ipmi_main_intf->target_lun = target_lun ;
lprintf(LOG_DEBUG, "Interface address: my_addr %#x " lprintf(LOG_DEBUG, "Interface address: my_addr %#x "
"transit %#x:%#x target %#x:%#x " "transit %#x:%#x target %#x:%#x "
"ipmb_target %#x\n", "ipmb_target %#x\n",

View File

@ -998,13 +998,6 @@ serial_bm_send_request(struct ipmi_intf * intf, struct ipmi_rq * req)
return NULL; return NULL;
} }
int
serial_bm_set_my_addr(struct ipmi_intf * intf, uint8_t addr)
{
intf->my_addr = addr;
return 0;
}
/* /*
* Serial BM interface * Serial BM interface
*/ */
@ -1015,5 +1008,4 @@ struct ipmi_intf ipmi_serial_bm_intf = {
.open = serial_bm_open, .open = serial_bm_open,
.close = serial_bm_close, .close = serial_bm_close,
.sendrecv = serial_bm_send_request, .sendrecv = serial_bm_send_request,
.set_my_addr = serial_bm_set_my_addr
}; };

View File

@ -886,13 +886,7 @@ ipmi_serial_term_setup(struct ipmi_intf * intf)
/* setup default LAN maximum request and response sizes */ /* setup default LAN maximum request and response sizes */
intf->max_request_data_size = IPMI_SERIAL_MAX_RQ_SIZE; intf->max_request_data_size = IPMI_SERIAL_MAX_RQ_SIZE;
intf->max_response_data_size = IPMI_SERIAL_MAX_RS_SIZE; intf->max_response_data_size = IPMI_SERIAL_MAX_RS_SIZE;
return 0;
}
int
ipmi_serial_term_set_my_addr(struct ipmi_intf * intf, uint8_t addr)
{
intf->my_addr = addr;
return 0; return 0;
} }
@ -903,5 +897,4 @@ struct ipmi_intf ipmi_serial_term_intf = {
.open = ipmi_serial_term_open, .open = ipmi_serial_term_open,
.close = ipmi_serial_term_close, .close = ipmi_serial_term_close,
.sendrecv = ipmi_serial_term_send_cmd, .sendrecv = ipmi_serial_term_send_cmd,
.set_my_addr = ipmi_serial_term_set_my_addr
}; };