1 /* 2 * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * Redistribution of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * Redistribution in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * Neither the name of Sun Microsystems, Inc. or the names of 16 * contributors may be used to endorse or promote products derived 17 * from this software without specific prior written permission. 18 * 19 * This software is provided "AS IS," without a warranty of any kind. 20 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 21 * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 22 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. 23 * SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE 24 * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING 25 * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL 26 * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, 27 * OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR 28 * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF 29 * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, 30 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 31 */ 32 33 #ifndef IPMI_LANPLUS_H 34 #define IPMI_LANPLUS_H 35 36 #include <ipmitool/ipmi.h> 37 38 #define IPMI_LANPLUS_PORT 0x26f 39 40 /* 41 * RAKP return codes. These values come from table 13-15 of the IPMI v2 42 * specification. 43 */ 44 #define IPMI_RAKP_STATUS_NO_ERRORS 0x00 45 #define IPMI_RAKP_STATUS_INSUFFICIENT_RESOURCES_FOR_SESSION 0x01 46 #define IPMI_RAKP_STATUS_INVALID_SESSION_ID 0x02 47 #define IPMI_RAKP_STATUS_INVALID_PAYLOAD_TYPE 0x03 48 #define IPMI_RAKP_STATUS_INVALID_AUTHENTICATION_ALGORITHM 0x04 49 #define IPMI_RAKP_STATUS_INVALID_INTEGRITTY_ALGORITHM 0x05 50 #define IPMI_RAKP_STATUS_NO_MATCHING_AUTHENTICATION_PAYLOAD 0x06 51 #define IPMI_RAKP_STATUS_NO_MATCHING_INTEGRITY_PAYLOAD 0x07 52 #define IPMI_RAKP_STATUS_INACTIVE_SESSION_ID 0x08 53 #define IPMI_RAKP_STATUS_INVALID_ROLE 0x09 54 #define IPMI_RAKP_STATUS_UNAUTHORIZED_ROLE_REQUESTED 0x0A 55 #define IPMI_RAKP_STATUS_INSUFFICIENT_RESOURCES_FOR_ROLE 0x0B 56 #define IPMI_RAKP_STATUS_INVALID_NAME_LENGTH 0x0C 57 #define IPMI_RAKP_STATUS_UNAUTHORIZED_NAME 0x0D 58 #define IPMI_RAKP_STATUS_UNAUTHORIZED_GUID 0x0E 59 #define IPMI_RAKP_STATUS_INVALID_INTEGRITY_CHECK_VALUE 0x0F 60 #define IPMI_RAKP_STATUS_INVALID_CONFIDENTIALITY_ALGORITHM 0x10 61 #define IPMI_RAKP_STATUS_NO_CIPHER_SUITE_MATCH 0x11 62 #define IPMI_RAKP_STATUS_ILLEGAL_PARAMTER 0x12 63 64 65 #define IPMI_LAN_CHANNEL_1 0x07 66 #define IPMI_LAN_CHANNEL_2 0x06 67 #define IPMI_LAN_CHANNEL_E 0x0e 68 69 #define IPMI_LAN_TIMEOUT 1 70 #define IPMI_LAN_RETRY 4 71 72 #define IPMI_PRIV_CALLBACK 1 73 #define IPMI_PRIV_USER 2 74 #define IPMI_PRIV_OPERATOR 3 75 #define IPMI_PRIV_ADMIN 4 76 #define IPMI_PRIV_OEM 5 77 78 79 #define IPMI_CRYPT_AES_CBC_128_BLOCK_SIZE 0x10 80 81 82 /* Session message offsets, from table 13-8 of the v2 specification */ 83 #define IPMI_LANPLUS_OFFSET_AUTHTYPE 0x04 84 #define IPMI_LANPLUS_OFFSET_PAYLOAD_TYPE 0x05 85 #define IPMI_LANPLUS_OFFSET_SESSION_ID 0x06 86 #define IPMI_LANPLUS_OFFSET_SEQUENCE_NUM 0x0A 87 #define IPMI_LANPLUS_OFFSET_PAYLOAD_SIZE 0x0E 88 #define IPMI_LANPLUS_OFFSET_PAYLOAD 0x10 89 90 91 #define IPMI_GET_CHANNEL_AUTH_CAP 0x38 92 93 /* 94 * TODO: these are wild guesses and should be checked 95 */ 96 #define IPMI_MAX_CONF_HEADER_SIZE 0x20 97 #define IPMI_MAX_PAYLOAD_SIZE 0xFFFF /* Includes confidentiality header/trailer */ 98 #define IPMI_MAX_CONF_TRAILER_SIZE 0x20 99 #define IPMI_MAX_INTEGRITY_PAD_SIZE 0x20 100 #define IPMI_MAX_AUTH_CODE_SIZE 0x20 101 102 #define IPMI_REQUEST_MESSAGE_SIZE 0x07 103 #define IPMI_MAX_MAC_SIZE 0x14 /* The largest mac we ever expect to generate */ 104 #define IPMI_SHA1_AUTHCODE_SIZE 0x0C 105 106 /* 107 *This is accurate, as long as we're only passing 1 auth algorithm, 108 * one integrity algorithm, and 1 encyrption alogrithm 109 */ 110 #define IPMI_OPEN_SESSION_REQUEST_SIZE 32 111 #define IPMI_RAKP1_MESSAGE_SIZE 44 112 #define IPMI_RAKP3_MESSAGE_MAX_SIZE 28 113 114 #define IPMI_MAX_USER_NAME_LENGTH 16 115 116 extern const struct valstr ipmi_privlvl_vals[]; 117 extern const struct valstr ipmi_authtype_vals[]; 118 119 extern struct ipmi_intf ipmi_lanplus_intf; 120 121 struct ipmi_rs * ipmi_lan_send_cmd(struct ipmi_intf * intf, struct ipmi_rq * req); 122 int ipmi_lanplus_open(struct ipmi_intf * intf); 123 void ipmi_lanplus_close(struct ipmi_intf * intf); 124 int ipmiv2_lan_ping(struct ipmi_intf * intf); 125 126 #endif /*IPMI_LAN_H*/ 127