Lines Matching full:intf
89 static int ipmi_lanplus_setup(struct ipmi_intf * intf);
90 static int ipmi_lanplus_keepalive(struct ipmi_intf * intf);
91 static int ipmi_lan_send_packet(struct ipmi_intf * intf, uint8_t * data, int data_len);
92 static struct ipmi_rs * ipmi_lan_recv_packet(struct ipmi_intf * intf);
93 static struct ipmi_rs * ipmi_lan_poll_recv(struct ipmi_intf * intf);
94 static struct ipmi_rs * ipmi_lanplus_send_ipmi_cmd(struct ipmi_intf * intf, struct ipmi_rq * req);
95 static struct ipmi_rs * ipmi_lanplus_send_payload(struct ipmi_intf * intf,
98 struct ipmi_intf * intf,
105 struct ipmi_intf * intf,
116 static struct ipmi_rs * ipmi_lanplus_recv_sol(struct ipmi_intf * intf);
118 struct ipmi_intf * intf,
121 struct ipmi_intf * intf,
124 struct ipmi_intf * intf,
126 static void ipmi_lanp_set_max_rq_data_size(struct ipmi_intf * intf, uint16_t size);
127 static void ipmi_lanp_set_max_rp_data_size(struct ipmi_intf * intf, uint16_t size);
295 ipmi_req_add_entry(struct ipmi_intf * intf, struct ipmi_rq * req, uint8_t req_seq) in ipmi_req_add_entry() argument
308 e->intf = intf; in ipmi_req_add_entry()
397 struct ipmi_intf * intf, in ipmi_lan_send_packet() argument
404 return send(intf->fd, data, data_len, 0); in ipmi_lan_send_packet()
410 ipmi_lan_recv_packet(struct ipmi_intf * intf) in ipmi_lan_recv_packet() argument
418 FD_SET(intf->fd, &read_set); in ipmi_lan_recv_packet()
421 FD_SET(intf->fd, &err_set); in ipmi_lan_recv_packet()
423 tmout.tv_sec = intf->session->timeout; in ipmi_lan_recv_packet()
426 ret = select(intf->fd + 1, &read_set, NULL, &err_set, &tmout); in ipmi_lan_recv_packet()
427 if (ret < 0 || FD_ISSET(intf->fd, &err_set) || !FD_ISSET(intf->fd, &read_set)) in ipmi_lan_recv_packet()
440 ret = recv(intf->fd, &rsp.data, IPMI_BUF_SIZE, 0); in ipmi_lan_recv_packet()
444 FD_SET(intf->fd, &read_set); in ipmi_lan_recv_packet()
447 FD_SET(intf->fd, &err_set); in ipmi_lan_recv_packet()
449 tmout.tv_sec = intf->session->timeout; in ipmi_lan_recv_packet()
452 ret = select(intf->fd + 1, &read_set, NULL, &err_set, &tmout); in ipmi_lan_recv_packet()
453 if (ret < 0 || FD_ISSET(intf->fd, &err_set) || !FD_ISSET(intf->fd, &read_set)) in ipmi_lan_recv_packet()
456 ret = recv(intf->fd, &rsp.data, IPMI_BUF_SIZE, 0); in ipmi_lan_recv_packet()
503 ipmi_handle_pong(struct ipmi_intf * intf, struct ipmi_rs * rsp) in ipmi_handle_pong() argument
559 ipmiv2_lan_ping(struct ipmi_intf * intf) in ipmiv2_lan_ping() argument
585 rv = ipmi_lan_send_packet(intf, data, len); in ipmiv2_lan_ping()
595 if (ipmi_lan_poll_recv(intf) == 0) in ipmiv2_lan_ping()
612 ipmi_lan_poll_single(struct ipmi_intf * intf) in ipmi_lan_poll_single() argument
616 struct ipmi_session * session = intf->session; in ipmi_lan_poll_single()
621 rsp = ipmi_lan_recv_packet(intf); in ipmi_lan_poll_single()
633 rv = ipmi_handle_pong(intf, rsp); in ipmi_lan_poll_single()
663 read_session_data(rsp, &offset, intf->session); in ipmi_lan_poll_single()
665 if (lanplus_has_valid_auth_code(rsp, intf->session) == 0) { in ipmi_lan_poll_single()
869 ipmi_lan_poll_recv(struct ipmi_intf * intf) in ipmi_lan_poll_recv() argument
875 rsp = ipmi_lan_poll_single(intf); in ipmi_lan_poll_recv()
1342 struct ipmi_intf * intf, /* in out */ in getIpmiPayloadWireRep() argument
1352 uint8_t ourAddress = intf->my_addr; in getIpmiPayloadWireRep()
1361 if ((intf->target_addr == ourAddress) || (!bridgePossible)) { in getIpmiPayloadWireRep()
1366 if(intf->transit_addr != ourAddress && intf->transit_addr != 0) in getIpmiPayloadWireRep()
1383 msg[len++] = (0x40|intf->transit_channel); /* Track request*/ in getIpmiPayloadWireRep()
1385 msg[len++] = (0x40|intf->target_channel); /* Track request*/ in getIpmiPayloadWireRep()
1394 msg[len++] = intf->transit_addr; in getIpmiPayloadWireRep()
1406 msg[len++] = (0x40|intf->target_channel); /* Track request*/ in getIpmiPayloadWireRep()
1417 intf->my_addr, intf->transit_addr, intf->transit_channel, in getIpmiPayloadWireRep()
1418 intf->target_addr, intf->target_channel, in getIpmiPayloadWireRep()
1423 msg[len++] = intf->target_addr; in getIpmiPayloadWireRep()
1439 msg[len++] = intf->my_addr; in getIpmiPayloadWireRep()
1481 struct ipmi_intf * intf, /* in out */ in getSolPayloadWireRep() argument
1580 struct ipmi_intf * intf, /* in */ in ipmi_lanplus_build_v2x_msg() argument
1587 struct ipmi_session * session = intf->session; in ipmi_lanplus_build_v2x_msg()
1678 getIpmiPayloadWireRep(intf, in ipmi_lanplus_build_v2x_msg()
1687 getSolPayloadWireRep(intf, in ipmi_lanplus_build_v2x_msg()
1777 if (ipmi_oem_active(intf, "icts")) { in ipmi_lanplus_build_v2x_msg()
1863 struct ipmi_intf * intf, in ipmi_lanplus_build_v2x_ipmi_cmd() argument
1886 if ((intf->target_addr == intf->my_addr) || (!bridgePossible)) { in ipmi_lanplus_build_v2x_ipmi_cmd()
1887 entry = ipmi_req_add_entry(intf, req, curr_seq); in ipmi_lanplus_build_v2x_ipmi_cmd()
1893 entry = ipmi_req_add_entry(intf, req, curr_seq); in ipmi_lanplus_build_v2x_ipmi_cmd()
1899 if (intf->transit_addr && in ipmi_lanplus_build_v2x_ipmi_cmd()
1900 intf->transit_addr != intf->my_addr) in ipmi_lanplus_build_v2x_ipmi_cmd()
1916 ipmi_lanplus_build_v2x_msg(intf, // in in ipmi_lanplus_build_v2x_ipmi_cmd()
1959 struct ipmi_intf * intf, in ipmi_lanplus_build_v15_ipmi_cmd() argument
1969 struct ipmi_session * session = intf->session; in ipmi_lanplus_build_v15_ipmi_cmd()
1972 entry = ipmi_req_add_entry(intf, req, 0); in ipmi_lanplus_build_v15_ipmi_cmd()
2100 struct ipmi_intf * intf, in ipmi_lanplus_send_payload() argument
2106 struct ipmi_session * session = intf->session; in ipmi_lanplus_send_payload()
2113 if (!intf->opened && intf->open && intf->open(intf) < 0) in ipmi_lanplus_send_payload()
2121 while (try < intf->ssn_params.retry) { in ipmi_lanplus_send_payload()
2160 entry = ipmi_lanplus_build_v15_ipmi_cmd(intf, ipmi_request); in ipmi_lanplus_send_payload()
2167 entry = ipmi_lanplus_build_v2x_ipmi_cmd(intf, ipmi_request, isRetry); in ipmi_lanplus_send_payload()
2185 ipmi_lanplus_build_v2x_msg(intf, /* in */ in ipmi_lanplus_send_payload()
2199 ipmi_lanplus_build_v2x_msg(intf, /* in */ in ipmi_lanplus_send_payload()
2213 ipmi_lanplus_build_v2x_msg(intf, /* in */ in ipmi_lanplus_send_payload()
2226 ipmi_lanplus_build_v2x_msg(intf, /* in */ in ipmi_lanplus_send_payload()
2241 if (ipmi_lan_send_packet(intf, msg_data, msg_length) < 0) { in ipmi_lanplus_send_payload()
2248 if (intf->noanswer) in ipmi_lanplus_send_payload()
2259 try = intf->ssn_params.retry; in ipmi_lanplus_send_payload()
2264 try = intf->ssn_params.retry; in ipmi_lanplus_send_payload()
2268 try = intf->ssn_params.retry; in ipmi_lanplus_send_payload()
2286 rsp = ipmi_lanplus_recv_sol(intf); /* Grab the next packet */ in ipmi_lanplus_send_payload()
2297 intf->session->sol_data.sol_input_handler(rsp); in ipmi_lanplus_send_payload()
2307 rsp = ipmi_lan_poll_recv(intf); in ipmi_lanplus_send_payload()
2314 rsp = ipmi_lan_poll_recv(intf); in ipmi_lanplus_send_payload()
2364 struct ipmi_intf * intf, in is_sol_partial_ack() argument
2377 if (ipmi_oem_active(intf, "intelplus") && in is_sol_partial_ack()
2395 struct ipmi_intf * intf, in set_sol_packet_sequence_number() argument
2399 if (intf->session->sol_data.sequence_number > 0x0F) in set_sol_packet_sequence_number()
2400 intf->session->sol_data.sequence_number = 1; in set_sol_packet_sequence_number()
2403 intf->session->sol_data.sequence_number++; in set_sol_packet_sequence_number()
2419 struct ipmi_intf * intf, in ipmi_lanplus_send_sol() argument
2440 set_sol_packet_sequence_number(intf, v2_payload); in ipmi_lanplus_send_sol()
2444 rs = ipmi_lanplus_send_payload(intf, v2_payload); in ipmi_lanplus_send_sol()
2447 chars_to_resend = is_sol_partial_ack(intf, v2_payload, rs); in ipmi_lanplus_send_sol()
2458 intf->session->sol_data.sol_input_handler(rs); in ipmi_lanplus_send_sol()
2460 set_sol_packet_sequence_number(intf, v2_payload); in ipmi_lanplus_send_sol()
2472 rs = ipmi_lanplus_send_payload(intf, v2_payload); in ipmi_lanplus_send_sol()
2474 chars_to_resend = is_sol_partial_ack(intf, v2_payload, rs); in ipmi_lanplus_send_sol()
2497 struct ipmi_intf * intf, in check_sol_packet_for_new_data() argument
2560 struct ipmi_intf * intf, in ack_sol_packet() argument
2588 ipmi_lanplus_send_payload(intf, &ack); in ack_sol_packet()
2601 ipmi_lanplus_recv_sol(struct ipmi_intf * intf) in ipmi_lanplus_recv_sol() argument
2603 struct ipmi_rs * rsp = ipmi_lan_poll_recv(intf); in ipmi_lanplus_recv_sol()
2607 ack_sol_packet(intf, rsp); in ipmi_lanplus_recv_sol()
2613 check_sol_packet_for_new_data(intf, rsp); in ipmi_lanplus_recv_sol()
2627 struct ipmi_intf * intf, in ipmi_lanplus_send_ipmi_cmd() argument
2635 return ipmi_lanplus_send_payload(intf, &v2_payload); in ipmi_lanplus_send_ipmi_cmd()
2647 * param intf is the initialized (but possibly) pre-session interface
2660 struct ipmi_intf * intf, in ipmi_get_auth_capabilities_cmd() argument
2673 msg_data[1] = intf->ssn_params.privlvl; in ipmi_get_auth_capabilities_cmd()
2681 rsp = intf->sendrecv(intf, &req); in ipmi_get_auth_capabilities_cmd()
2690 rsp = intf->sendrecv(intf, &req); in ipmi_get_auth_capabilities_cmd()
2716 ipmi_close_session_cmd(struct ipmi_intf * intf) in ipmi_close_session_cmd() argument
2724 if (intf->session == NULL in ipmi_close_session_cmd()
2725 || intf->session->v2_data.session_state != LANPLUS_STATE_ACTIVE) in ipmi_close_session_cmd()
2730 intf->target_addr = IPMI_BMC_SLAVE_ADDR; in ipmi_close_session_cmd()
2733 bmc_session_lsbf = intf->session->v2_data.bmc_id; in ipmi_close_session_cmd()
2746 rsp = intf->sendrecv(intf, &req); in ipmi_close_session_cmd()
2758 (long)intf->session->v2_data.bmc_id); in ipmi_close_session_cmd()
2768 (long)intf->session->v2_data.bmc_id); in ipmi_close_session_cmd()
2784 ipmi_lanplus_open_session(struct ipmi_intf * intf) in ipmi_lanplus_open_session() argument
2787 struct ipmi_session * session = intf->session; in ipmi_lanplus_open_session()
2806 if (ipmi_oem_active(intf, "intelplus") || intf->ssn_params.privlvl != IPMI_SESSION_PRIV_ADMIN) in ipmi_lanplus_open_session()
2807 msg[1] = intf->ssn_params.privlvl; in ipmi_lanplus_open_session()
2821 if (lanplus_get_requested_ciphers(intf->ssn_params.cipher_suite_id, in ipmi_lanplus_open_session()
2827 intf->ssn_params.cipher_suite_id); in ipmi_lanplus_open_session()
2875 rsp = ipmi_lanplus_send_payload(intf, &v2_payload); in ipmi_lanplus_open_session()
2972 ipmi_lanplus_rakp1(struct ipmi_intf * intf) in ipmi_lanplus_rakp1() argument
2975 struct ipmi_session * session = intf->session; in ipmi_lanplus_rakp1()
3027 msg[24] = intf->ssn_params.privlvl | intf->ssn_params.lookupbit; in ipmi_lanplus_rakp1()
3034 msg[27] = strlen((const char *)intf->ssn_params.username); in ipmi_lanplus_rakp1()
3044 memcpy(msg + 28, intf->ssn_params.username, msg[27]); in ipmi_lanplus_rakp1()
3047 if (ipmi_oem_active(intf, "i82571spt")) { in ipmi_lanplus_rakp1()
3060 rsp = ipmi_lanplus_send_payload(intf, &v2_payload); in ipmi_lanplus_rakp1()
3100 intf)) in ipmi_lanplus_rakp1()
3130 * param intf is the intf that holds all the state we are concerned with
3136 ipmi_lanplus_rakp3(struct ipmi_intf * intf) in ipmi_lanplus_rakp3() argument
3139 struct ipmi_session * session = intf->session; in ipmi_lanplus_rakp3()
3182 if (lanplus_generate_rakp3_authcode(msg + 8, session, &auth_length, intf)) in ipmi_lanplus_rakp3()
3197 if (lanplus_generate_sik(session, intf)) in ipmi_lanplus_rakp3()
3224 rsp = ipmi_lanplus_send_payload(intf, &v2_payload); in ipmi_lanplus_rakp3()
3265 intf)) in ipmi_lanplus_rakp3()
3278 intf->abort = 0; in ipmi_lanplus_rakp3()
3288 ipmi_lanplus_close(struct ipmi_intf * intf) in ipmi_lanplus_close() argument
3290 if (!intf->abort && intf->session) in ipmi_lanplus_close()
3291 ipmi_close_session_cmd(intf); in ipmi_lanplus_close()
3293 if (intf->fd >= 0) { in ipmi_lanplus_close()
3294 close(intf->fd); in ipmi_lanplus_close()
3295 intf->fd = -1; in ipmi_lanplus_close()
3299 ipmi_intf_session_cleanup(intf); in ipmi_lanplus_close()
3300 intf->opened = 0; in ipmi_lanplus_close()
3301 intf->manufacturer_id = IPMI_OEM_UNKNOWN; in ipmi_lanplus_close()
3302 intf = NULL; in ipmi_lanplus_close()
3308 ipmi_set_session_privlvl_cmd(struct ipmi_intf * intf) in ipmi_set_session_privlvl_cmd() argument
3313 uint8_t privlvl = intf->ssn_params.privlvl; in ipmi_set_session_privlvl_cmd()
3328 rsp = intf->sendrecv(intf, &req); in ipmi_set_session_privlvl_cmd()
3358 ipmi_lanplus_open(struct ipmi_intf * intf) in ipmi_lanplus_open() argument
3366 if (!intf) in ipmi_lanplus_open()
3369 if (intf->opened) in ipmi_lanplus_open()
3370 return intf->fd; in ipmi_lanplus_open()
3372 params = &intf->ssn_params; in ipmi_lanplus_open()
3388 if (ipmi_intf_socket_connect(intf) == -1) { in ipmi_lanplus_open()
3399 intf->session = session; in ipmi_lanplus_open()
3409 intf->opened = 1; in ipmi_lanplus_open()
3410 intf->abort = 1; in ipmi_lanplus_open()
3416 if (!ipmi_oem_active(intf, "i82571spt") && in ipmi_lanplus_open()
3417 ipmi_get_auth_capabilities_cmd(intf, &auth_cap)) { in ipmi_lanplus_open()
3423 if (!ipmi_oem_active(intf, "i82571spt") && ! auth_cap.v20_data_available) { in ipmi_lanplus_open()
3438 if ((rc = ipmi_lanplus_open_session(intf)) == 1) { in ipmi_lanplus_open()
3448 if ((rc = ipmi_lanplus_rakp1(intf)) == 1) { in ipmi_lanplus_open()
3458 if ((rc = ipmi_lanplus_rakp3(intf)) == 1) { in ipmi_lanplus_open()
3467 intf->abort = 0; in ipmi_lanplus_open()
3469 if (!ipmi_oem_active(intf, "i82571spt")) { in ipmi_lanplus_open()
3470 rc = ipmi_set_session_privlvl_cmd(intf); in ipmi_lanplus_open()
3475 intf->manufacturer_id = ipmi_get_oem(intf); in ipmi_lanplus_open()
3478 hpm2_detect_max_payload_size(intf); in ipmi_lanplus_open()
3481 return intf->fd; in ipmi_lanplus_open()
3485 intf->close(intf); in ipmi_lanplus_open()
3582 ipmi_lanplus_keepalive(struct ipmi_intf * intf) in ipmi_lanplus_keepalive() argument
3592 if (!intf->opened) in ipmi_lanplus_keepalive()
3595 rsp = intf->sendrecv(intf, &req); in ipmi_lanplus_keepalive()
3599 ack_sol_packet(intf, rsp); in ipmi_lanplus_keepalive()
3600 check_sol_packet_for_new_data(intf, rsp); in ipmi_lanplus_keepalive()
3602 intf->session->sol_data.sol_input_handler(rsp); in ipmi_lanplus_keepalive()
3603 rsp = ipmi_lan_poll_recv(intf); in ipmi_lanplus_keepalive()
3620 static int ipmi_lanplus_setup(struct ipmi_intf * intf) in ipmi_lanplus_setup() argument
3629 intf->max_request_data_size = IPMI_LAN_MAX_REQUEST_SIZE; in ipmi_lanplus_setup()
3630 intf->max_response_data_size = IPMI_LAN_MAX_RESPONSE_SIZE; in ipmi_lanplus_setup()
3635 static void ipmi_lanp_set_max_rq_data_size(struct ipmi_intf * intf, uint16_t size) in ipmi_lanp_set_max_rq_data_size() argument
3637 if (intf->ssn_params.cipher_suite_id == 3) { in ipmi_lanp_set_max_rq_data_size()
3650 intf->max_request_data_size = size; in ipmi_lanp_set_max_rq_data_size()
3653 static void ipmi_lanp_set_max_rp_data_size(struct ipmi_intf * intf, uint16_t size) in ipmi_lanp_set_max_rp_data_size() argument
3655 if (intf->ssn_params.cipher_suite_id == 3) { in ipmi_lanp_set_max_rp_data_size()
3668 intf->max_response_data_size = size; in ipmi_lanp_set_max_rp_data_size()