Lines Matching refs:intf

89 static int ipmi_lan_send_packet(struct ipmi_intf * intf, uint8_t * data, int data_len);
90 static struct ipmi_rs * ipmi_lan_recv_packet(struct ipmi_intf * intf);
91 static struct ipmi_rs * ipmi_lan_poll_recv(struct ipmi_intf * intf);
92 static int ipmi_lan_setup(struct ipmi_intf * intf);
93 static int ipmi_lan_keepalive(struct ipmi_intf * intf);
94 static struct ipmi_rs * ipmi_lan_recv_sol(struct ipmi_intf * intf);
95 static struct ipmi_rs * ipmi_lan_send_sol(struct ipmi_intf * intf,
97 static struct ipmi_rs * ipmi_lan_send_cmd(struct ipmi_intf * intf, struct ipmi_rq * req);
98 static int ipmi_lan_send_rsp(struct ipmi_intf * intf, struct ipmi_rs * rsp);
99 static int ipmi_lan_open(struct ipmi_intf * intf);
100 static void ipmi_lan_close(struct ipmi_intf * intf);
101 static int ipmi_lan_ping(struct ipmi_intf * intf);
102 static void ipmi_lan_set_max_rq_data_size(struct ipmi_intf * intf, uint16_t size);
103 static void ipmi_lan_set_max_rp_data_size(struct ipmi_intf * intf, uint16_t size);
122 ipmi_req_add_entry(struct ipmi_intf * intf, struct ipmi_rq * req, uint8_t req_seq) in ipmi_req_add_entry() argument
135 e->intf = intf; in ipmi_req_add_entry()
243 ipmi_lan_send_packet(struct ipmi_intf * intf, uint8_t * data, int data_len) in ipmi_lan_send_packet() argument
248 return send(intf->fd, data, data_len, 0); in ipmi_lan_send_packet()
252 ipmi_lan_recv_packet(struct ipmi_intf * intf) in ipmi_lan_recv_packet() argument
261 FD_SET(intf->fd, &read_set); in ipmi_lan_recv_packet()
264 FD_SET(intf->fd, &err_set); in ipmi_lan_recv_packet()
266 tmout.tv_sec = intf->ssn_params.timeout; in ipmi_lan_recv_packet()
269 ret = select(intf->fd + 1, &read_set, NULL, &err_set, &tmout); in ipmi_lan_recv_packet()
270 if (ret < 0 || FD_ISSET(intf->fd, &err_set) || !FD_ISSET(intf->fd, &read_set)) in ipmi_lan_recv_packet()
283 ret = recv(intf->fd, &rsp.data, IPMI_BUF_SIZE, 0); in ipmi_lan_recv_packet()
287 FD_SET(intf->fd, &read_set); in ipmi_lan_recv_packet()
290 FD_SET(intf->fd, &err_set); in ipmi_lan_recv_packet()
292 tmout.tv_sec = intf->ssn_params.timeout; in ipmi_lan_recv_packet()
295 ret = select(intf->fd + 1, &read_set, NULL, &err_set, &tmout); in ipmi_lan_recv_packet()
296 if (ret < 0 || FD_ISSET(intf->fd, &err_set) || !FD_ISSET(intf->fd, &read_set)) in ipmi_lan_recv_packet()
299 ret = recv(intf->fd, &rsp.data, IPMI_BUF_SIZE, 0); in ipmi_lan_recv_packet()
344 ipmi_handle_pong(struct ipmi_intf * intf, struct ipmi_rs * rsp) in ipmi_handle_pong() argument
389 ipmi_lan_ping(struct ipmi_intf * intf) in ipmi_lan_ping() argument
415 rv = ipmi_lan_send_packet(intf, data, len); in ipmi_lan_ping()
425 if (ipmi_lan_poll_recv(intf) == 0) in ipmi_lan_ping()
437 ipmi_lan_thump_first(struct ipmi_intf * intf) in ipmi_lan_thump_first() argument
442 ipmi_lan_send_packet(intf, data, 16); in ipmi_lan_thump_first()
446 ipmi_lan_thump(struct ipmi_intf * intf) in ipmi_lan_thump() argument
449 ipmi_lan_send_packet(intf, data, 10); in ipmi_lan_thump()
453 ipmi_lan_poll_recv(struct ipmi_intf * intf) in ipmi_lan_poll_recv() argument
459 uint8_t our_address = intf->my_addr; in ipmi_lan_poll_recv()
464 rsp = ipmi_lan_recv_packet(intf); in ipmi_lan_poll_recv()
474 rv = ipmi_handle_pong(intf, rsp); in ipmi_lan_poll_recv()
482 rsp = ipmi_lan_recv_packet(intf); in ipmi_lan_poll_recv()
493 if (rsp->session.id == (intf->session->session_id + 0x10000000)) { in ipmi_lan_poll_recv()
553 if (intf->session->active && (rsp->session.authtype || intf->session->authtype)) in ipmi_lan_poll_recv()
600 if ((intf->target_addr != our_address) && bridge_possible) { in ipmi_lan_poll_recv()
613 rsp = !rsp->ccode ? ipmi_lan_recv_packet(intf) : NULL; in ipmi_lan_poll_recv()
644 rsp = ipmi_lan_recv_packet(intf); in ipmi_lan_poll_recv()
693 ipmi_lan_build_cmd(struct ipmi_intf * intf, struct ipmi_rq * req, int isRetry) in ipmi_lan_build_cmd() argument
706 struct ipmi_session * s = intf->session; in ipmi_lan_build_cmd()
708 uint8_t our_address = intf->my_addr; in ipmi_lan_build_cmd()
741 entry = ipmi_req_add_entry(intf, req, curr_seq); in ipmi_lan_build_cmd()
749 if (intf->transit_addr != intf->my_addr && intf->transit_addr != 0) in ipmi_lan_build_cmd()
780 if ((intf->target_addr == our_address) || !bridge_possible) { in ipmi_lan_build_cmd()
788 (intf->transit_addr != intf->my_addr && intf->transit_addr != 0 ? 8 : 0); in ipmi_lan_build_cmd()
801 if (intf->transit_addr == intf->my_addr || intf->transit_addr == 0) { in ipmi_lan_build_cmd()
802 msg[len++] = (0x40|intf->target_channel); /* Track request*/ in ipmi_lan_build_cmd()
805 msg[len++] = (0x40|intf->transit_channel); /* Track request*/ in ipmi_lan_build_cmd()
807 msg[len++] = intf->transit_addr; in ipmi_lan_build_cmd()
812 msg[len++] = intf->my_addr; in ipmi_lan_build_cmd()
815 msg[len++] = (0x40|intf->target_channel); /* Track request */ in ipmi_lan_build_cmd()
821 msg[len++] = entry->bridging_level ? intf->target_addr : IPMI_BMC_SLAVE_ADDR; in ipmi_lan_build_cmd()
831 msg[len++] = intf->my_addr; in ipmi_lan_build_cmd()
843 lprintf(LOG_DEBUG+1, ">> Rs Addr : %02x", intf->target_addr); in ipmi_lan_build_cmd()
863 if (intf->transit_addr != intf->my_addr && intf->transit_addr != 0) { in ipmi_lan_build_cmd()
902 ipmi_lan_send_cmd(struct ipmi_intf * intf, struct ipmi_rq * req) in ipmi_lan_send_cmd() argument
910 intf->opened, intf->open); in ipmi_lan_send_cmd()
912 if (intf->opened == 0 && intf->open != NULL) { in ipmi_lan_send_cmd()
913 if (intf->open(intf) < 0) { in ipmi_lan_send_cmd()
918 intf->opened, intf->open); in ipmi_lan_send_cmd()
924 entry = ipmi_lan_build_cmd(intf, req, isRetry); in ipmi_lan_send_cmd()
930 if (ipmi_lan_send_packet(intf, entry->msg_data, entry->msg_len) < 0) { in ipmi_lan_send_cmd()
938 if (intf->noanswer) in ipmi_lan_send_cmd()
941 if (ipmi_oem_active(intf, "intelwv2")) in ipmi_lan_send_cmd()
942 ipmi_lan_thump(intf); in ipmi_lan_send_cmd()
946 rsp = ipmi_lan_poll_recv(intf); in ipmi_lan_send_cmd()
952 rsp = ipmi_lan_poll_recv(intf); in ipmi_lan_send_cmd()
959 if (++try >= intf->ssn_params.retry) { in ipmi_lan_send_cmd()
993 ipmi_lan_build_rsp(struct ipmi_intf * intf, struct ipmi_rs * rsp, int * llen) in ipmi_lan_build_rsp() argument
1000 struct ipmi_session * s = intf->session; in ipmi_lan_build_rsp()
1086 ipmi_lan_send_rsp(struct ipmi_intf * intf, struct ipmi_rs * rsp) in ipmi_lan_send_rsp() argument
1092 msg = ipmi_lan_build_rsp(intf, rsp, &len); in ipmi_lan_send_rsp()
1102 rv = sendto(intf->fd, msg, len, 0, in ipmi_lan_send_rsp()
1103 (struct sockaddr *)&intf->session->addr, in ipmi_lan_send_rsp()
1104 intf->session->addrlen); in ipmi_lan_send_rsp()
1144 uint8_t * ipmi_lan_build_sol_msg(struct ipmi_intf * intf, in ipmi_lan_build_sol_msg() argument
1153 struct ipmi_session * session = intf->session; in ipmi_lan_build_sol_msg()
1251 ipmi_lan_send_sol_payload(struct ipmi_intf * intf, in ipmi_lan_send_sol_payload() argument
1259 if (intf->opened == 0 && intf->open != NULL) { in ipmi_lan_send_sol_payload()
1260 if (intf->open(intf) < 0) in ipmi_lan_send_sol_payload()
1264 msg = ipmi_lan_build_sol_msg(intf, payload, &len); in ipmi_lan_send_sol_payload()
1277 if (ipmi_lan_send_packet(intf, msg, len) < 0) { in ipmi_lan_send_sol_payload()
1284 if (intf->noanswer) in ipmi_lan_send_sol_payload()
1294 rsp = ipmi_lan_recv_sol(intf); /* Grab the next packet */ in ipmi_lan_send_sol_payload()
1305 intf->session->sol_data.sol_input_handler(rsp); in ipmi_lan_send_sol_payload()
1309 if (++try >= intf->ssn_params.retry) { in ipmi_lan_send_sol_payload()
1361 static void set_sol_packet_sequence_number(struct ipmi_intf * intf, in set_sol_packet_sequence_number() argument
1365 if (intf->session->sol_data.sequence_number > 0x0F) in set_sol_packet_sequence_number()
1366 intf->session->sol_data.sequence_number = 1; in set_sol_packet_sequence_number()
1369 intf->session->sol_data.sequence_number++; in set_sol_packet_sequence_number()
1382 ipmi_lan_send_sol(struct ipmi_intf * intf, in ipmi_lan_send_sol() argument
1396 set_sol_packet_sequence_number(intf, v2_payload); in ipmi_lan_send_sol()
1400 rsp = ipmi_lan_send_sol_payload(intf, v2_payload); in ipmi_lan_send_sol()
1412 intf->session->sol_data.sol_input_handler(rsp); in ipmi_lan_send_sol()
1414 set_sol_packet_sequence_number(intf, v2_payload); in ipmi_lan_send_sol()
1424 rsp = ipmi_lan_send_sol_payload(intf, v2_payload); in ipmi_lan_send_sol()
1445 check_sol_packet_for_new_data(struct ipmi_intf * intf, in check_sol_packet_for_new_data() argument
1498 ack_sol_packet(struct ipmi_intf * intf, in ack_sol_packet() argument
1525 ipmi_lan_send_sol_payload(intf, &ack); in ack_sol_packet()
1536 ipmi_lan_recv_sol(struct ipmi_intf * intf) in ipmi_lan_recv_sol() argument
1538 struct ipmi_rs * rsp = ipmi_lan_poll_recv(intf); in ipmi_lan_recv_sol()
1540 ack_sol_packet(intf, rsp); in ipmi_lan_recv_sol()
1546 check_sol_packet_for_new_data(intf, rsp); in ipmi_lan_recv_sol()
1553 ipmi_lan_keepalive(struct ipmi_intf * intf) in ipmi_lan_keepalive() argument
1563 if (!intf->opened) in ipmi_lan_keepalive()
1566 rsp = intf->sendrecv(intf, &req); in ipmi_lan_keepalive()
1579 ipmi_get_auth_capabilities_cmd(struct ipmi_intf * intf) in ipmi_get_auth_capabilities_cmd() argument
1583 struct ipmi_session * s = intf->session; in ipmi_get_auth_capabilities_cmd()
1584 struct ipmi_session_params *p = &intf->ssn_params; in ipmi_get_auth_capabilities_cmd()
1596 rsp = intf->sendrecv(intf, &req); in ipmi_get_auth_capabilities_cmd()
1694 ipmi_get_session_challenge_cmd(struct ipmi_intf * intf) in ipmi_get_session_challenge_cmd() argument
1698 struct ipmi_session * s = intf->session; in ipmi_get_session_challenge_cmd()
1703 memcpy(msg_data+1, intf->ssn_params.username, 16); in ipmi_get_session_challenge_cmd()
1711 rsp = intf->sendrecv(intf, &req); in ipmi_get_session_challenge_cmd()
1748 ipmi_activate_session_cmd(struct ipmi_intf * intf) in ipmi_activate_session_cmd() argument
1752 struct ipmi_session * s = intf->session; in ipmi_activate_session_cmd()
1760 msg_data[1] = intf->ssn_params.privlvl; in ipmi_activate_session_cmd()
1763 if (ipmi_oem_active(intf, "supermicro")) { in ipmi_activate_session_cmd()
1765 memcpy(intf->session->authcode, special, 16); in ipmi_activate_session_cmd()
1786 rsp = intf->sendrecv(intf, &req); in ipmi_activate_session_cmd()
1858 ipmi_set_session_privlvl_cmd(struct ipmi_intf * intf) in ipmi_set_session_privlvl_cmd() argument
1862 uint8_t privlvl = intf->ssn_params.privlvl; in ipmi_set_session_privlvl_cmd()
1875 rsp = intf->sendrecv(intf, &req); in ipmi_set_session_privlvl_cmd()
1900 ipmi_close_session_cmd(struct ipmi_intf * intf) in ipmi_close_session_cmd() argument
1905 uint32_t session_id = intf->session->session_id; in ipmi_close_session_cmd()
1907 if (intf->session->active == 0) in ipmi_close_session_cmd()
1910 intf->target_addr = IPMI_BMC_SLAVE_ADDR; in ipmi_close_session_cmd()
1921 rsp = intf->sendrecv(intf, &req); in ipmi_close_session_cmd()
1963 ipmi_lan_activate_session(struct ipmi_intf * intf) in ipmi_lan_activate_session() argument
1970 if (!ipmi_oem_active(intf, "supermicro")) in ipmi_lan_activate_session()
1971 ipmi_lan_ping(intf); in ipmi_lan_activate_session()
1975 if (ipmi_oem_active(intf, "intelwv2")) in ipmi_lan_activate_session()
1976 ipmi_lan_thump_first(intf); in ipmi_lan_activate_session()
1978 rc = ipmi_get_auth_capabilities_cmd(intf); in ipmi_lan_activate_session()
1983 rc = ipmi_get_session_challenge_cmd(intf); in ipmi_lan_activate_session()
1987 rc = ipmi_activate_session_cmd(intf); in ipmi_lan_activate_session()
1991 intf->abort = 0; in ipmi_lan_activate_session()
1993 rc = ipmi_set_session_privlvl_cmd(intf); in ipmi_lan_activate_session()
2000 ipmi_close_session_cmd(intf); in ipmi_lan_activate_session()
2007 ipmi_lan_close(struct ipmi_intf * intf) in ipmi_lan_close() argument
2009 if (!intf->abort && intf->session) in ipmi_lan_close()
2010 ipmi_close_session_cmd(intf); in ipmi_lan_close()
2012 if (intf->fd >= 0) { in ipmi_lan_close()
2013 close(intf->fd); in ipmi_lan_close()
2014 intf->fd = -1; in ipmi_lan_close()
2018 ipmi_intf_session_cleanup(intf); in ipmi_lan_close()
2019 intf->opened = 0; in ipmi_lan_close()
2020 intf->manufacturer_id = IPMI_OEM_UNKNOWN; in ipmi_lan_close()
2021 intf = NULL; in ipmi_lan_close()
2025 ipmi_lan_open(struct ipmi_intf * intf) in ipmi_lan_open() argument
2031 if (intf == NULL || intf->opened) in ipmi_lan_open()
2034 s = intf->session; in ipmi_lan_open()
2035 p = &intf->ssn_params; in ipmi_lan_open()
2051 if (ipmi_intf_socket_connect(intf) == -1) { in ipmi_lan_open()
2062 intf->opened = 1; in ipmi_lan_open()
2063 intf->abort = 1; in ipmi_lan_open()
2065 intf->session = s; in ipmi_lan_open()
2072 if (getsockname(intf->fd, (struct sockaddr *)&s->addr, &s->addrlen)) { in ipmi_lan_open()
2077 rc = ipmi_lan_activate_session(intf); in ipmi_lan_open()
2083 hpm2_detect_max_payload_size(intf); in ipmi_lan_open()
2086 intf->manufacturer_id = ipmi_get_oem(intf); in ipmi_lan_open()
2090 return intf->fd; in ipmi_lan_open()
2094 intf->close(intf); in ipmi_lan_open()
2099 ipmi_lan_setup(struct ipmi_intf * intf) in ipmi_lan_setup() argument
2102 intf->max_request_data_size = IPMI_LAN_MAX_REQUEST_SIZE; in ipmi_lan_setup()
2103 intf->max_response_data_size = IPMI_LAN_MAX_RESPONSE_SIZE; in ipmi_lan_setup()
2109 ipmi_lan_set_max_rq_data_size(struct ipmi_intf * intf, uint16_t size) in ipmi_lan_set_max_rq_data_size() argument
2115 intf->max_request_data_size = size; in ipmi_lan_set_max_rq_data_size()
2119 ipmi_lan_set_max_rp_data_size(struct ipmi_intf * intf, uint16_t size) in ipmi_lan_set_max_rp_data_size() argument
2125 intf->max_response_data_size = size; in ipmi_lan_set_max_rp_data_size()