1aa2fbe4d855ea413c228163b72356bc18536679
[project/ubus.git] / ubusmsg.h
1 /*
2  * Copyright (C) 2011 Felix Fietkau <nbd@openwrt.org>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License version 2.1
6  * as published by the Free Software Foundation
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  */
13
14 #ifndef __UBUSMSG_H
15 #define __UBUSMSG_H
16
17 #include <stdint.h>
18 #include <libubox/blob.h>
19
20 #define __packetdata __attribute__((packed)) __attribute__((__aligned__(4)))
21
22 #define UBUS_MAX_MSGLEN 65536
23
24 #define UBUS_SYSTEM_OBJECT_EVENT        1
25 #define UBUS_SYSTEM_OBJECT_MAX          1024
26
27 struct ubus_msghdr {
28         uint8_t version;
29         uint8_t type;
30         uint16_t seq;
31         uint32_t peer;
32         struct blob_attr data[];
33 } __packetdata;
34
35 enum ubus_msg_type {
36         /* initial server message */
37         UBUS_MSG_HELLO,
38
39         /* generic command response */
40         UBUS_MSG_STATUS,
41
42         /* data message response */
43         UBUS_MSG_DATA,
44
45         /* ping request */
46         UBUS_MSG_PING,
47
48         /* look up one or more objects */
49         UBUS_MSG_LOOKUP,
50
51         /* invoke a method on a single object */
52         UBUS_MSG_INVOKE,
53
54         UBUS_MSG_ADD_OBJECT,
55         UBUS_MSG_REMOVE_OBJECT,
56
57         /* must be last */
58         __UBUS_MSG_LAST,
59 };
60
61 enum ubus_msg_attr {
62         UBUS_ATTR_UNSPEC,
63
64         UBUS_ATTR_STATUS,
65
66         UBUS_ATTR_OBJPATH,
67         UBUS_ATTR_OBJID,
68         UBUS_ATTR_METHOD,
69
70         UBUS_ATTR_OBJTYPE,
71         UBUS_ATTR_SIGNATURE,
72
73         UBUS_ATTR_DATA,
74
75         /* must be last */
76         UBUS_ATTR_MAX,
77 };
78
79 enum ubus_msg_status {
80         UBUS_STATUS_OK,
81         UBUS_STATUS_INVALID_COMMAND,
82         UBUS_STATUS_INVALID_ARGUMENT,
83         UBUS_STATUS_METHOD_NOT_FOUND,
84         UBUS_STATUS_NOT_FOUND,
85         UBUS_STATUS_NO_DATA,
86         UBUS_STATUS_PERMISSION_DENIED,
87         UBUS_STATUS_TIMEOUT,
88         __UBUS_STATUS_LAST
89 };
90
91 #endif