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
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22struct nl_cache;
23struct nl_object;
24struct nl_object_ops;
25
26#define OBJ_CAST(ptr)		((struct nl_object *) (ptr))
27
28/* General */
29extern struct nl_object *	nl_object_alloc(struct nl_object_ops *);
30extern int			nl_object_alloc_name(const char *,
31						     struct nl_object **);
32extern void			nl_object_free(struct nl_object *);
33extern struct nl_object *	nl_object_clone(struct nl_object *obj);
34extern void			nl_object_get(struct nl_object *);
35extern void			nl_object_put(struct nl_object *);
36extern int			nl_object_shared(struct nl_object *);
37extern void			nl_object_dump(struct nl_object *,
38					       struct nl_dump_params *);
39extern int			nl_object_identical(struct nl_object *,
40						    struct nl_object *);
41extern uint32_t			nl_object_diff(struct nl_object *,
42					       struct nl_object *);
43extern int			nl_object_match_filter(struct nl_object *,
44						       struct nl_object *);
45extern char *			nl_object_attrs2str(struct nl_object *,
46						    uint32_t attrs, char *buf,
47						    size_t);
48extern char *			nl_object_attr_list(struct nl_object *,
49						    char *, size_t);
50
51/* Marks */
52extern void			nl_object_mark(struct nl_object *);
53extern void			nl_object_unmark(struct nl_object *);
54extern int			nl_object_is_marked(struct nl_object *);
55
56/* Access Functions */
57extern int			nl_object_get_refcnt(struct nl_object *);
58extern struct nl_cache *	nl_object_get_cache(struct nl_object *);
59static inline void *		nl_object_priv(struct nl_object *obj)
60{
61	return obj;
62}
63
64
65#ifdef __cplusplus
66}
67#endif
68
69#endif
70