~ubuntu-branches/ubuntu/quantal/lxc/quantal-201208301614

« back to all changes in this revision

Viewing changes to src/lxc/genl.h

  • Committer: Bazaar Package Importer
  • Author(s): Guido Trotter
  • Date: 2009-04-29 17:49:13 UTC
  • Revision ID: james.westby@ubuntu.com-20090429174913-jvahs1ykizqtodje
Tags: upstream-0.6.2
ImportĀ upstreamĀ versionĀ 0.6.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * lxc: linux Container library
 
3
 *
 
4
 * (C) Copyright IBM Corp. 2007, 2008
 
5
 *
 
6
 * Authors:
 
7
 * Daniel Lezcano <dlezcano at fr.ibm.com>
 
8
 *
 
9
 * This library is free software; you can redistribute it and/or
 
10
 * modify it under the terms of the GNU Lesser General Public
 
11
 * License as published by the Free Software Foundation; either
 
12
 * version 2.1 of the License, or (at your option) any later version.
 
13
 *
 
14
 * This library is distributed in the hope that it will be useful,
 
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
17
 * Lesser General Public License for more details.
 
18
 *
 
19
 * You should have received a copy of the GNU Lesser General Public
 
20
 * License along with this library; if not, write to the Free Software
 
21
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
22
 */
 
23
#ifndef __genl_h
 
24
#define __genl_h
 
25
 
 
26
/*
 
27
 * Use this as a good size to allocate generic netlink messages
 
28
 */
 
29
#define GENLMSG_GOOD_SIZE NLMSG_GOOD_SIZE
 
30
#define GENLMSG_DATA(glh) ((void *)(NLMSG_DATA(glh) + GENL_HDRLEN))
 
31
 
 
32
/*
 
33
 * struct genl_handler : the structure which store the netlink handler 
 
34
 *  and the family number resulting of the auto-generating id family
 
35
 *  for the generic netlink protocol
 
36
 *
 
37
 * @nlh: the netlink socket handler
 
38
 * @family: the generic netlink family assigned number
 
39
 */
 
40
struct genl_handler
 
41
{
 
42
        struct nl_handler nlh;
 
43
        int family;
 
44
};
 
45
 
 
46
/*
 
47
 * struct genlmsg : the struct containing the generic netlink message
 
48
 *  format
 
49
 *
 
50
 * @nlmsghdr: a netlink message header
 
51
 * @genlmsghdr: a generic netlink message header pointer
 
52
 *
 
53
 */
 
54
/* __attribute__ ((aligned(4))); */
 
55
struct genlmsg {
 
56
        struct nlmsghdr nlmsghdr;
 
57
        struct genlmsghdr genlmsghdr;
 
58
};
 
59
 
 
60
static inline int genetlink_len(const struct genlmsg *genlmsg)
 
61
{
 
62
        return ((genlmsg->nlmsghdr.nlmsg_len) - GENL_HDRLEN - NLMSG_HDRLEN);
 
63
}
 
64
 
 
65
/*
 
66
 * genetlink_open : resolve family number id and open a generic netlink socket
 
67
 *
 
68
 * @handler: a struct genl_handler pointer
 
69
 * @family: the family name of the generic netlink protocol
 
70
 *
 
71
 * Returns 0 on success, < 0 otherwise
 
72
 */
 
73
int genetlink_open(struct genl_handler *handler, const char *family);
 
74
 
 
75
/*
 
76
 * genetlink_close : close a generic netlink socket
 
77
 *
 
78
 * @handler: the handler of the socket to be closed
 
79
 *
 
80
 * Returns 0 on success, < 0 otherwise
 
81
 */
 
82
int genetlink_close(struct genl_handler *handler);
 
83
 
 
84
/*
 
85
 * genetlink_rcv : receive a generic netlink socket, it is up
 
86
 *  to the caller to manage the allocation of the generic netlink message
 
87
 *
 
88
 * @handler: the handler of the generic netlink socket
 
89
 * @genlmsg: the pointer to a generic netlink message pre-allocated
 
90
 *
 
91
 * Returns 0 on success, < 0 otherwise
 
92
 */
 
93
int genetlink_rcv(struct genl_handler *handler, struct genlmsg *genlmsg);
 
94
 
 
95
/*
 
96
 * genetlink_send : send a generic netlink socket, it is up
 
97
 *  to the caller to manage the allocation of the generic netlink message
 
98
 *
 
99
 * @handler: the handler of the generic netlink socket
 
100
 * @genlmsg: the pointer to a generic netlink message pre-allocated
 
101
 *
 
102
 * Returns 0 on success, < 0 otherwise
 
103
 */
 
104
int genetlink_send(struct genl_handler *handler, struct genlmsg *genlmsg);
 
105
 
 
106
struct genlmsg *genlmsg_alloc(size_t size);
 
107
 
 
108
void genlmsg_free(struct genlmsg *genlmsg);
 
109
 
 
110
/*
 
111
 * genetlink_transaction : send and receive a generic netlink message in one shot
 
112
 *
 
113
 * @handler: the handler of the generic netlink socket
 
114
 * @request: a generic netlink message containing the request to be sent
 
115
 * @answer: a pre-allocated generic netlink message to receive the response
 
116
 *
 
117
 * Returns 0 on success, < 0 otherwise
 
118
 */
 
119
int genetlink_transaction(struct genl_handler *handler, 
 
120
                          struct genlmsg *request, struct genlmsg *answer);
 
121
#endif