cli: add monitor support
[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_MSG_CHUNK_SIZE 65536
23
24 #define UBUS_SYSTEM_OBJECT_EVENT 1
25 #define UBUS_SYSTEM_OBJECT_ACL 2
26 #define UBUS_SYSTEM_OBJECT_MONITOR 3
27 #define UBUS_SYSTEM_OBJECT_MAX 1024
28
29 struct ubus_msghdr {
30 uint8_t version;
31 uint8_t type;
32 uint16_t seq;
33 uint32_t peer;
34 } __packetdata;
35
36 enum ubus_msg_type {
37 /* initial server message */
38 UBUS_MSG_HELLO,
39
40 /* generic command response */
41 UBUS_MSG_STATUS,
42
43 /* data message response */
44 UBUS_MSG_DATA,
45
46 /* ping request */
47 UBUS_MSG_PING,
48
49 /* look up one or more objects */
50 UBUS_MSG_LOOKUP,
51
52 /* invoke a method on a single object */
53 UBUS_MSG_INVOKE,
54
55 UBUS_MSG_ADD_OBJECT,
56 UBUS_MSG_REMOVE_OBJECT,
57
58 /*
59 * subscribe/unsubscribe to object notifications
60 * The unsubscribe message is sent from ubusd when
61 * the object disappears
62 */
63 UBUS_MSG_SUBSCRIBE,
64 UBUS_MSG_UNSUBSCRIBE,
65
66 /*
67 * send a notification to all subscribers of an object.
68 * when sent from the server, it indicates a subscription
69 * status change
70 */
71 UBUS_MSG_NOTIFY,
72
73 UBUS_MSG_MONITOR,
74
75 /* must be last */
76 __UBUS_MSG_LAST,
77 };
78
79 enum ubus_msg_attr {
80 UBUS_ATTR_UNSPEC,
81
82 UBUS_ATTR_STATUS,
83
84 UBUS_ATTR_OBJPATH,
85 UBUS_ATTR_OBJID,
86 UBUS_ATTR_METHOD,
87
88 UBUS_ATTR_OBJTYPE,
89 UBUS_ATTR_SIGNATURE,
90
91 UBUS_ATTR_DATA,
92 UBUS_ATTR_TARGET,
93
94 UBUS_ATTR_ACTIVE,
95 UBUS_ATTR_NO_REPLY,
96
97 UBUS_ATTR_SUBSCRIBERS,
98
99 UBUS_ATTR_USER,
100 UBUS_ATTR_GROUP,
101
102 /* must be last */
103 UBUS_ATTR_MAX,
104 };
105
106 enum ubus_monitor_attr {
107 UBUS_MONITOR_CLIENT,
108 UBUS_MONITOR_PEER,
109 UBUS_MONITOR_SEND,
110 UBUS_MONITOR_SEQ,
111 UBUS_MONITOR_TYPE,
112 UBUS_MONITOR_DATA,
113
114 /* must be last */
115 UBUS_MONITOR_MAX,
116 };
117
118 enum ubus_msg_status {
119 UBUS_STATUS_OK,
120 UBUS_STATUS_INVALID_COMMAND,
121 UBUS_STATUS_INVALID_ARGUMENT,
122 UBUS_STATUS_METHOD_NOT_FOUND,
123 UBUS_STATUS_NOT_FOUND,
124 UBUS_STATUS_NO_DATA,
125 UBUS_STATUS_PERMISSION_DENIED,
126 UBUS_STATUS_TIMEOUT,
127 UBUS_STATUS_NOT_SUPPORTED,
128 UBUS_STATUS_UNKNOWN_ERROR,
129 UBUS_STATUS_CONNECTION_FAILED,
130 __UBUS_STATUS_LAST
131 };
132
133 #endif