diff --git a/lib/ipmi_main.c b/lib/ipmi_main.c index a033778..cfb05f7 100644 --- a/lib/ipmi_main.c +++ b/lib/ipmi_main.c @@ -940,36 +940,39 @@ ipmi_main(int argc, char ** argv, * used for open, Set the discovered IPMB address as my address if the * interface supports it. */ - if (addr != 0 && addr != ipmi_main_intf->my_addr && - ipmi_main_intf->set_my_addr) { - /* - * Only set the interface address on interfaces which support - * it - */ - (void) ipmi_main_intf->set_my_addr(ipmi_main_intf, addr); + if (addr != 0 && addr != ipmi_main_intf->my_addr) { + if (ipmi_main_intf->set_my_addr) { + /* + * Some interfaces need special handling + * when changing local address + */ + (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 (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) { + if (transit_addr > 0 || target_addr > 0) { /* sanity check, transit makes no sense without a target */ if ((transit_addr != 0 || transit_channel != 0) && - ipmi_main_intf->target_addr == 0) { + target_addr == 0) { lprintf(LOG_ERR, "Transit address/channel %#x/%#x ignored. " "Target address must be specified!", transit_addr, transit_channel); 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_channel = transit_channel; - } - if (ipmi_main_intf->target_addr > 0) { + + /* must be admin level to do this over lan */ ipmi_intf_session_set_privlvl(ipmi_main_intf, IPMI_SESSION_PRIV_ADMIN); /* 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 " "transit %#x:%#x target %#x:%#x " "ipmb_target %#x\n", diff --git a/src/plugins/serial/serial_basic.c b/src/plugins/serial/serial_basic.c index 68b36f1..f70fa11 100644 --- a/src/plugins/serial/serial_basic.c +++ b/src/plugins/serial/serial_basic.c @@ -998,13 +998,6 @@ serial_bm_send_request(struct ipmi_intf * intf, struct ipmi_rq * req) return NULL; } -int -serial_bm_set_my_addr(struct ipmi_intf * intf, uint8_t addr) -{ - intf->my_addr = addr; - return 0; -} - /* * Serial BM interface */ @@ -1015,5 +1008,4 @@ struct ipmi_intf ipmi_serial_bm_intf = { .open = serial_bm_open, .close = serial_bm_close, .sendrecv = serial_bm_send_request, - .set_my_addr = serial_bm_set_my_addr }; diff --git a/src/plugins/serial/serial_terminal.c b/src/plugins/serial/serial_terminal.c index 5e8a985..1bfd672 100644 --- a/src/plugins/serial/serial_terminal.c +++ b/src/plugins/serial/serial_terminal.c @@ -886,13 +886,7 @@ ipmi_serial_term_setup(struct ipmi_intf * intf) /* setup default LAN maximum request and response sizes */ intf->max_request_data_size = IPMI_SERIAL_MAX_RQ_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; } @@ -903,5 +897,4 @@ struct ipmi_intf ipmi_serial_term_intf = { .open = ipmi_serial_term_open, .close = ipmi_serial_term_close, .sendrecv = ipmi_serial_term_send_cmd, - .set_my_addr = ipmi_serial_term_set_my_addr };