1*c18ec02fSPetter Reinholdtsen /* 2*c18ec02fSPetter Reinholdtsen * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. 3*c18ec02fSPetter Reinholdtsen * 4*c18ec02fSPetter Reinholdtsen * Redistribution and use in source and binary forms, with or without 5*c18ec02fSPetter Reinholdtsen * modification, are permitted provided that the following conditions 6*c18ec02fSPetter Reinholdtsen * are met: 7*c18ec02fSPetter Reinholdtsen * 8*c18ec02fSPetter Reinholdtsen * Redistribution of source code must retain the above copyright 9*c18ec02fSPetter Reinholdtsen * notice, this list of conditions and the following disclaimer. 10*c18ec02fSPetter Reinholdtsen * 11*c18ec02fSPetter Reinholdtsen * Redistribution in binary form must reproduce the above copyright 12*c18ec02fSPetter Reinholdtsen * notice, this list of conditions and the following disclaimer in the 13*c18ec02fSPetter Reinholdtsen * documentation and/or other materials provided with the distribution. 14*c18ec02fSPetter Reinholdtsen * 15*c18ec02fSPetter Reinholdtsen * Neither the name of Sun Microsystems, Inc. or the names of 16*c18ec02fSPetter Reinholdtsen * contributors may be used to endorse or promote products derived 17*c18ec02fSPetter Reinholdtsen * from this software without specific prior written permission. 18*c18ec02fSPetter Reinholdtsen * 19*c18ec02fSPetter Reinholdtsen * This software is provided "AS IS," without a warranty of any kind. 20*c18ec02fSPetter Reinholdtsen * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 21*c18ec02fSPetter Reinholdtsen * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 22*c18ec02fSPetter Reinholdtsen * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. 23*c18ec02fSPetter Reinholdtsen * SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE 24*c18ec02fSPetter Reinholdtsen * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING 25*c18ec02fSPetter Reinholdtsen * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL 26*c18ec02fSPetter Reinholdtsen * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, 27*c18ec02fSPetter Reinholdtsen * OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR 28*c18ec02fSPetter Reinholdtsen * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF 29*c18ec02fSPetter Reinholdtsen * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, 30*c18ec02fSPetter Reinholdtsen * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 31*c18ec02fSPetter Reinholdtsen */ 32*c18ec02fSPetter Reinholdtsen 33*c18ec02fSPetter Reinholdtsen #ifndef IPMI_RMCP_H 34*c18ec02fSPetter Reinholdtsen #define IPMI_RMCP_H 35*c18ec02fSPetter Reinholdtsen 36*c18ec02fSPetter Reinholdtsen #include <ipmitool/helper.h> 37*c18ec02fSPetter Reinholdtsen #include "lan.h" 38*c18ec02fSPetter Reinholdtsen #include "asf.h" 39*c18ec02fSPetter Reinholdtsen 40*c18ec02fSPetter Reinholdtsen #define RMCP_VERSION_1 0x06 41*c18ec02fSPetter Reinholdtsen 42*c18ec02fSPetter Reinholdtsen #define RMCP_UDP_PORT 0x26f /* port 623 */ 43*c18ec02fSPetter Reinholdtsen #define RMCP_UDP_SECURE_PORT 0x298 /* port 664 */ 44*c18ec02fSPetter Reinholdtsen 45*c18ec02fSPetter Reinholdtsen #define RMCP_TYPE_MASK 0x80 46*c18ec02fSPetter Reinholdtsen #define RMCP_TYPE_NORM 0x00 47*c18ec02fSPetter Reinholdtsen #define RMCP_TYPE_ACK 0x01 48*c18ec02fSPetter Reinholdtsen 49*c18ec02fSPetter Reinholdtsen static const struct valstr rmcp_type_vals[] __attribute__((unused)) = { 50*c18ec02fSPetter Reinholdtsen { RMCP_TYPE_NORM, "Normal RMCP" }, 51*c18ec02fSPetter Reinholdtsen { RMCP_TYPE_ACK, "RMCP ACK" }, 52*c18ec02fSPetter Reinholdtsen { 0, NULL } 53*c18ec02fSPetter Reinholdtsen }; 54*c18ec02fSPetter Reinholdtsen 55*c18ec02fSPetter Reinholdtsen #define RMCP_CLASS_MASK 0x1f 56*c18ec02fSPetter Reinholdtsen #define RMCP_CLASS_ASF 0x06 57*c18ec02fSPetter Reinholdtsen #define RMCP_CLASS_IPMI 0x07 58*c18ec02fSPetter Reinholdtsen #define RMCP_CLASS_OEM 0x08 59*c18ec02fSPetter Reinholdtsen 60*c18ec02fSPetter Reinholdtsen static const struct valstr rmcp_class_vals[] __attribute__((unused)) = { 61*c18ec02fSPetter Reinholdtsen { RMCP_CLASS_ASF, "ASF" }, 62*c18ec02fSPetter Reinholdtsen { RMCP_CLASS_IPMI, "IPMI" }, 63*c18ec02fSPetter Reinholdtsen { RMCP_CLASS_OEM, "OEM" }, 64*c18ec02fSPetter Reinholdtsen { 0, NULL } 65*c18ec02fSPetter Reinholdtsen }; 66*c18ec02fSPetter Reinholdtsen 67*c18ec02fSPetter Reinholdtsen #ifdef HAVE_PRAGMA_PACK 68*c18ec02fSPetter Reinholdtsen #pragma pack(1) 69*c18ec02fSPetter Reinholdtsen #endif 70*c18ec02fSPetter Reinholdtsen /* RMCP message header */ 71*c18ec02fSPetter Reinholdtsen struct rmcp_hdr { 72*c18ec02fSPetter Reinholdtsen uint8_t ver; 73*c18ec02fSPetter Reinholdtsen uint8_t __reserved; 74*c18ec02fSPetter Reinholdtsen uint8_t seq; 75*c18ec02fSPetter Reinholdtsen uint8_t class; 76*c18ec02fSPetter Reinholdtsen } ATTRIBUTE_PACKING; 77*c18ec02fSPetter Reinholdtsen #ifdef HAVE_PRAGMA_PACK 78*c18ec02fSPetter Reinholdtsen #pragma pack(0) 79*c18ec02fSPetter Reinholdtsen #endif 80*c18ec02fSPetter Reinholdtsen 81*c18ec02fSPetter Reinholdtsen #ifdef HAVE_PRAGMA_PACK 82*c18ec02fSPetter Reinholdtsen #pragma pack(1) 83*c18ec02fSPetter Reinholdtsen #endif 84*c18ec02fSPetter Reinholdtsen struct rmcp_pong { 85*c18ec02fSPetter Reinholdtsen struct rmcp_hdr rmcp; 86*c18ec02fSPetter Reinholdtsen struct asf_hdr asf; 87*c18ec02fSPetter Reinholdtsen uint32_t iana; 88*c18ec02fSPetter Reinholdtsen uint32_t oem; 89*c18ec02fSPetter Reinholdtsen uint8_t sup_entities; 90*c18ec02fSPetter Reinholdtsen uint8_t sup_interact; 91*c18ec02fSPetter Reinholdtsen uint8_t reserved[6]; 92*c18ec02fSPetter Reinholdtsen } ATTRIBUTE_PACKING; 93*c18ec02fSPetter Reinholdtsen #ifdef HAVE_PRAGMA_PACK 94*c18ec02fSPetter Reinholdtsen #pragma pack(0) 95*c18ec02fSPetter Reinholdtsen #endif 96*c18ec02fSPetter Reinholdtsen 97*c18ec02fSPetter Reinholdtsen int handle_rmcp(struct ipmi_intf * intf, uint8_t * data, int data_len); 98*c18ec02fSPetter Reinholdtsen 99*c18ec02fSPetter Reinholdtsen #endif /* IPMI_RMCP_H */ 100