lin
2025-07-30 fcd736bf35fd93b563e9bbf594f2aa7b62028cc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
 * netlink/object.c    Generic Cacheable Object
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation version 2.1
 *    of the License.
 *
 * Copyright (c) 2003-2012 Thomas Graf <tgraf@suug.ch>
 */
 
#ifndef NETLINK_OBJECT_H_
#define NETLINK_OBJECT_H_
 
#include <netlink/netlink.h>
#include <netlink/utils.h>
 
#ifdef __cplusplus
extern "C" {
#endif
 
struct nl_cache;
struct nl_object;
struct nl_object_ops;
 
#define OBJ_CAST(ptr)        ((struct nl_object *) (ptr))
 
/* General */
extern struct nl_object *    nl_object_alloc(struct nl_object_ops *);
extern int            nl_object_alloc_name(const char *,
                            struct nl_object **);
extern void            nl_object_free(struct nl_object *);
extern struct nl_object *    nl_object_clone(struct nl_object *obj);
extern int            nl_object_update(struct nl_object *dst,
                        struct nl_object *src);
extern void            nl_object_get(struct nl_object *);
extern void            nl_object_put(struct nl_object *);
extern int            nl_object_shared(struct nl_object *);
extern void            nl_object_dump(struct nl_object *,
                          struct nl_dump_params *);
extern void            nl_object_dump_buf(struct nl_object *, char *, size_t);
extern int            nl_object_identical(struct nl_object *,
                           struct nl_object *);
extern uint32_t            nl_object_diff(struct nl_object *,
                          struct nl_object *);
extern int            nl_object_match_filter(struct nl_object *,
                              struct nl_object *);
extern char *            nl_object_attrs2str(struct nl_object *,
                           uint32_t attrs, char *buf,
                           size_t);
extern char *            nl_object_attr_list(struct nl_object *,
                           char *, size_t);
extern void            nl_object_keygen(struct nl_object *,
                        uint32_t *, uint32_t);
 
/* Marks */
extern void            nl_object_mark(struct nl_object *);
extern void            nl_object_unmark(struct nl_object *);
extern int            nl_object_is_marked(struct nl_object *);
 
/* Access Functions */
extern int            nl_object_get_refcnt(struct nl_object *);
extern struct nl_cache *    nl_object_get_cache(struct nl_object *);
extern const char *        nl_object_get_type(const struct nl_object *);
extern int            nl_object_get_msgtype(const struct nl_object *);
struct nl_object_ops *        nl_object_get_ops(const struct nl_object *);
uint32_t            nl_object_get_id_attrs(struct nl_object *obj);
 
 
static inline void *        nl_object_priv(struct nl_object *obj)
{
   return obj;
}
 
 
#ifdef __cplusplus
}
#endif
 
#endif