add libnl-tiny as a small replacement for libnl with only genl support included
[openwrt.git] / package / libnl-tiny / src / include / netlink / object.h
1 /*
2  * netlink/object.c     Generic Cacheable Object
3  *
4  *      This library is free software; you can redistribute it and/or
5  *      modify it under the terms of the GNU Lesser General Public
6  *      License as published by the Free Software Foundation version 2.1
7  *      of the License.
8  *
9  * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
10  */
11
12 #ifndef NETLINK_OBJECT_H_
13 #define NETLINK_OBJECT_H_
14
15 #include <netlink/netlink.h>
16 #include <netlink/utils.h>
17 #include <netlink/object-api.h>
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 #define NL_OBJ_MARK             1
24
25 struct nl_cache;
26 struct nl_object;
27 struct nl_object_ops;
28
29 struct nl_object
30 {
31         NLHDR_COMMON
32 };
33
34 #define OBJ_CAST(ptr)           ((struct nl_object *) (ptr))
35
36 /* General */
37 extern struct nl_object *       nl_object_alloc(struct nl_object_ops *);
38 extern int                      nl_object_alloc_name(const char *,
39                                                      struct nl_object **);
40 extern void                     nl_object_free(struct nl_object *);
41 extern struct nl_object *       nl_object_clone(struct nl_object *obj);
42 extern void                     nl_object_get(struct nl_object *);
43 extern void                     nl_object_put(struct nl_object *);
44 extern void                     nl_object_dump(struct nl_object *,
45                                                struct nl_dump_params *);
46 extern int                      nl_object_identical(struct nl_object *,
47                                                     struct nl_object *);
48 extern uint32_t                 nl_object_diff(struct nl_object *,
49                                                struct nl_object *);
50 extern int                      nl_object_match_filter(struct nl_object *,
51                                                        struct nl_object *);
52 extern char *                   nl_object_attrs2str(struct nl_object *,
53                                                     uint32_t attrs, char *buf,
54                                                     size_t);
55 /**
56  * Check whether this object is used by multiple users
57  * @arg obj             object to check
58  * @return true or false
59  */
60 static inline int nl_object_shared(struct nl_object *obj)
61 {
62         return obj->ce_refcnt > 1;
63 }
64
65
66
67 /**
68  * @name Marks
69  * @{
70  */
71
72 /**
73  * Add mark to object
74  * @arg obj             Object to mark
75  */
76 static inline void nl_object_mark(struct nl_object *obj)
77 {
78         obj->ce_flags |= NL_OBJ_MARK;
79 }
80
81 /**
82  * Remove mark from object
83  * @arg obj             Object to unmark
84  */
85 static inline void nl_object_unmark(struct nl_object *obj)
86 {
87         obj->ce_flags &= ~NL_OBJ_MARK;
88 }
89
90 /**
91  * Return true if object is marked
92  * @arg obj             Object to check
93  * @return true if object is marked, otherwise false
94  */
95 static inline int nl_object_is_marked(struct nl_object *obj)
96 {
97         return (obj->ce_flags & NL_OBJ_MARK);
98 }
99
100 /** @} */
101
102 /**
103  * Return list of attributes present in an object
104  * @arg obj             an object
105  * @arg buf             destination buffer
106  * @arg len             length of destination buffer
107  *
108  * @return destination buffer.
109  */
110 static inline char *nl_object_attr_list(struct nl_object *obj, char *buf, size_t len)
111 {
112         return nl_object_attrs2str(obj, obj->ce_mask, buf, len);
113 }
114
115
116 /**
117  * @name Attributes
118  * @{
119  */
120
121 static inline int nl_object_get_refcnt(struct nl_object *obj)
122 {
123         return obj->ce_refcnt;
124 }
125
126 static inline struct nl_cache *nl_object_get_cache(struct nl_object *obj)
127 {
128         return obj->ce_cache;
129 }
130
131 static inline void *            nl_object_priv(struct nl_object *obj)
132 {
133         return obj;
134 }
135
136
137 /** @} */
138
139
140 #ifdef __cplusplus
141 }
142 #endif
143
144 #endif