Home | History | Annotate | Download | only in netlink
      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-2012 Thomas Graf <tgraf (at) 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
     19 extern "C" {
     20 #endif
     21 
     22 struct nl_cache;
     23 struct nl_object;
     24 struct nl_object_ops;
     25 
     26 #define OBJ_CAST(ptr)		((struct nl_object *) (ptr))
     27 
     28 /* General */
     29 extern struct nl_object *	nl_object_alloc(struct nl_object_ops *);
     30 extern int			nl_object_alloc_name(const char *,
     31 						     struct nl_object **);
     32 extern void			nl_object_free(struct nl_object *);
     33 extern struct nl_object *	nl_object_clone(struct nl_object *obj);
     34 extern int			nl_object_update(struct nl_object *dst,
     35 						 struct nl_object *src);
     36 extern void			nl_object_get(struct nl_object *);
     37 extern void			nl_object_put(struct nl_object *);
     38 extern int			nl_object_shared(struct nl_object *);
     39 extern void			nl_object_dump(struct nl_object *,
     40 					       struct nl_dump_params *);
     41 extern void			nl_object_dump_buf(struct nl_object *, char *, size_t);
     42 extern int			nl_object_identical(struct nl_object *,
     43 						    struct nl_object *);
     44 extern uint32_t			nl_object_diff(struct nl_object *,
     45 					       struct nl_object *);
     46 extern int			nl_object_match_filter(struct nl_object *,
     47 						       struct nl_object *);
     48 extern char *			nl_object_attrs2str(struct nl_object *,
     49 						    uint32_t attrs, char *buf,
     50 						    size_t);
     51 extern char *			nl_object_attr_list(struct nl_object *,
     52 						    char *, size_t);
     53 extern void			nl_object_keygen(struct nl_object *,
     54 						 uint32_t *, uint32_t);
     55 
     56 /* Marks */
     57 extern void			nl_object_mark(struct nl_object *);
     58 extern void			nl_object_unmark(struct nl_object *);
     59 extern int			nl_object_is_marked(struct nl_object *);
     60 
     61 /* Access Functions */
     62 extern int			nl_object_get_refcnt(struct nl_object *);
     63 extern struct nl_cache *	nl_object_get_cache(struct nl_object *);
     64 extern const char *		nl_object_get_type(const struct nl_object *);
     65 extern int			nl_object_get_msgtype(const struct nl_object *);
     66 struct nl_object_ops *		nl_object_get_ops(const struct nl_object *);
     67 uint32_t			nl_object_get_id_attrs(struct nl_object *obj);
     68 
     69 
     70 static inline void *		nl_object_priv(struct nl_object *obj)
     71 {
     72 	return obj;
     73 }
     74 
     75 
     76 #ifdef __cplusplus
     77 }
     78 #endif
     79 
     80 #endif
     81