~ubuntu-branches/ubuntu/intrepid/openipmi/intrepid

« back to all changes in this revision

Viewing changes to include/OpenIPMI/ipmi_pet.h

  • Committer: Bazaar Package Importer
  • Author(s): Noèl Köthe
  • Date: 2005-07-04 21:29:17 UTC
  • Revision ID: james.westby@ubuntu.com-20050704212917-igddk5jawjmhrlay
Tags: upstream-2.0.1
Import upstream version 2.0.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * ipmi_pet.h
 
3
 *
 
4
 * MontaVista IPMI interface for setting up and handling platform event
 
5
 * traps.
 
6
 *
 
7
 * Author: MontaVista Software, Inc.
 
8
 *         Corey Minyard <minyard@mvista.com>
 
9
 *         source@mvista.com
 
10
 *
 
11
 * Copyright 2004 MontaVista Software Inc.
 
12
 *
 
13
 *  This program is free software; you can redistribute it and/or
 
14
 *  modify it under the terms of the GNU Lesser General Public License
 
15
 *  as published by the Free Software Foundation; either version 2 of
 
16
 *  the License, or (at your option) any later version.
 
17
 *
 
18
 *
 
19
 *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 
20
 *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 
21
 *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 
22
 *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 
23
 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 
24
 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 
25
 *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 
26
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 
27
 *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 
28
 *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
29
 *
 
30
 *  You should have received a copy of the GNU Lesser General Public
 
31
 *  License along with this program; if not, write to the Free
 
32
 *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
33
 */
 
34
 
 
35
#ifndef _IPMI_PET_H
 
36
#define _IPMI_PET_H
 
37
 
 
38
#include <OpenIPMI/ipmi_types.h>
 
39
 
 
40
#ifdef __cplusplus
 
41
extern "C" {
 
42
#endif
 
43
 
 
44
typedef struct ipmi_pet_s ipmi_pet_t;
 
45
 
 
46
typedef void (*ipmi_pet_done_cb)(ipmi_pet_t *pet, int err, void *cb_data);
 
47
 
 
48
/* Create and configure a Platform Event Trap handler for the given
 
49
 * channel in the given domain.  Parameters are: 
 
50
 *
 
51
 *  channel - The specific channel to configure.  There is not real
 
52
 *      way to know all the channels and what IP addresses should
 
53
 *      be used for each.
 
54
 *  ip_addr - The IP address to tell the PET to send messages to, if
 
55
 *      applicable for this domain.
 
56
 *  mac_addr - The MAC address to tell the PET to send messages to,
 
57
 *      if applicable for this domain.
 
58
 *  eft_sel - the Event Filter selector to use for this PET destination.
 
59
 *      Note that this does *not* need to be unique for different OpenIPMI
 
60
 *      instances that are using the same channel, since the configuration
 
61
 *      will be exactly the same for all EFT entries using the same
 
62
 *      channel, assuming they share the same policy number.
 
63
 *  policy_num - The policy number to use for the alert policy.  This
 
64
 *      should be the same for all users of a domain.
 
65
 *  apt_sel - The Alert Policy selector to use for this PET destination.
 
66
 *      Note that as eft_sel, this needs to be unique for each different
 
67
 *      OpenIPMI instance on the same channel, as it specifies the
 
68
 *      destination to use.
 
69
 *  lan_dest_sel - The LAN configuration destination selector for this PET
 
70
 *      destination.  Unlike eft_sel and apt_sel, this *must* be unique
 
71
 *      for each OpenIPMI instance on the same channel.
 
72
 *
 
73
 * Creating one of these in a domain will cause event traps to be received
 
74
 * and handled as standard events in OpenIPMI.
 
75
 *
 
76
 * Note that this uses the standard SNMP trap port (162), so you
 
77
 * cannot run SNMP software that receives traps and an IPMI PET at
 
78
 * the same time on the same machine.
 
79
 */
 
80
int ipmi_pet_create(ipmi_domain_t    *domain,
 
81
                    unsigned int     connection,
 
82
                    unsigned int     channel,
 
83
                    struct in_addr   ip_addr,
 
84
                    unsigned char    mac_addr[6],
 
85
                    unsigned int     eft_sel,
 
86
                    unsigned int     policy_num,
 
87
                    unsigned int     apt_sel,
 
88
                    unsigned int     lan_dest_sel,
 
89
                    ipmi_pet_done_cb done,
 
90
                    void             *cb_data,
 
91
                    ipmi_pet_t       **pet);
 
92
 
 
93
/*
 
94
 * Like the previous call, but takes an MC instead of a domain and
 
95
 * channel.
 
96
 */
 
97
int ipmi_pet_create_mc(ipmi_mc_t        *mc,
 
98
                       unsigned int     channel,
 
99
                       struct in_addr   ip_addr,
 
100
                       unsigned char    mac_addr[6],
 
101
                       unsigned int     eft_sel,
 
102
                       unsigned int     policy_num,
 
103
                       unsigned int     apt_sel,
 
104
                       unsigned int     lan_dest_sel,
 
105
                       ipmi_pet_done_cb done,
 
106
                       void             *cb_data,
 
107
                       ipmi_pet_t       **ret_pet);
 
108
 
 
109
/* Destroy a PET.  Note that if you destroy all PETs, this will result
 
110
   in the SNMP trap UDP port being closed. */
 
111
int ipmi_pet_destroy(ipmi_pet_t       *pet,
 
112
                     ipmi_pet_done_cb done,
 
113
                     void             *cb_data);
 
114
 
 
115
/* Used to track references to a pet.  You can use this instead of
 
116
   ipmi_pet_destroy, but use of the destroy function is
 
117
   recommended.  This is primarily here to help reference-tracking
 
118
   garbage collection systems like what is in Perl to be able to
 
119
   automatically destroy pets when they are done. */
 
120
void ipmi_pet_ref(ipmi_pet_t *pet);
 
121
void ipmi_pet_deref(ipmi_pet_t *pet);
 
122
 
 
123
/* Get the "name" for the PET.  Returns the length of the string
 
124
   (minus the closing \0).  PET names are auto-assigned. */
 
125
#define IPMI_PET_NAME_LEN 64
 
126
int ipmi_pet_get_name(ipmi_pet_t *pet, char *name, int len);
 
127
 
 
128
/* Iterate through all the PETs. */
 
129
typedef void (*ipmi_pet_ptr_cb)(ipmi_pet_t *pet, void *cb_data);
 
130
void ipmi_pet_iterate_pets(ipmi_domain_t   *domain,
 
131
                           ipmi_pet_ptr_cb handler,
 
132
                           void            *cb_data);
 
133
 
 
134
ipmi_mcid_t ipmi_pet_get_mc_id(ipmi_pet_t *pet);
 
135
unsigned int ipmi_pet_get_channel(ipmi_pet_t *pet);
 
136
struct in_addr *ipmi_pet_get_ip_addr(ipmi_pet_t *pet, struct in_addr *ip_addr);
 
137
unsigned char *ipmi_pet_get_mac_addr(ipmi_pet_t    *pet,
 
138
                                     unsigned char mac_addr[6]);
 
139
unsigned int ipmi_pet_get_eft_sel(ipmi_pet_t *pet);
 
140
unsigned int ipmi_pet_get_policy_num(ipmi_pet_t *pet);
 
141
unsigned int ipmi_pet_get_apt_sel(ipmi_pet_t *pet);
 
142
unsigned int ipmi_pet_get_lan_dest_sel(ipmi_pet_t *pet);
 
143
 
 
144
#ifdef __cplusplus
 
145
}
 
146
#endif
 
147
 
 
148
#endif /* _IPMI_PET_H */