libnl  3.4.0
idiag_meminfo_obj.c
1 /*
2  * lib/idiag/idiagnl_meminfo_obj.c Inet Diag Meminfo 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) 2013 Sassano Systems LLC <joe@sassanosystems.com>
10  */
11 
12 #include <netlink-private/netlink.h>
13 #include <netlink/idiag/meminfo.h>
14 
15 /**
16  * @ingroup idiag
17  * @defgroup idiagnl_meminfo Inet Diag Memory Info
18  *
19  * @details
20  * @idiagnl_doc{idiagnl_meminfo, Inet Diag Memory Info Documentation}
21  * @{
22  */
23 struct idiagnl_meminfo *idiagnl_meminfo_alloc(void)
24 {
25  return (struct idiagnl_meminfo *) nl_object_alloc(&idiagnl_meminfo_obj_ops);
26 }
27 
28 void idiagnl_meminfo_get(struct idiagnl_meminfo *minfo)
29 {
30  nl_object_get((struct nl_object *) minfo);
31 }
32 
33 void idiagnl_meminfo_put(struct idiagnl_meminfo *minfo)
34 {
35  nl_object_put((struct nl_object *) minfo);
36 }
37 
38 /**
39  * @name Attributes
40  * @{
41  */
42 uint32_t idiagnl_meminfo_get_rmem(const struct idiagnl_meminfo *minfo)
43 {
44  return minfo->idiag_rmem;
45 }
46 
47 void idiagnl_meminfo_set_rmem(struct idiagnl_meminfo *minfo, uint32_t rmem)
48 {
49  minfo->idiag_rmem = rmem;
50 }
51 
52 uint32_t idiagnl_meminfo_get_wmem(const struct idiagnl_meminfo *minfo)
53 {
54  return minfo->idiag_wmem;
55 }
56 
57 void idiagnl_meminfo_set_wmem(struct idiagnl_meminfo *minfo, uint32_t wmem)
58 {
59  minfo->idiag_wmem = wmem;
60 }
61 
62 uint32_t idiagnl_meminfo_get_fmem(const struct idiagnl_meminfo *minfo)
63 {
64  return minfo->idiag_fmem;
65 }
66 
67 void idiagnl_meminfo_set_fmem(struct idiagnl_meminfo *minfo, uint32_t fmem)
68 {
69  minfo->idiag_fmem = fmem;
70 }
71 
72 uint32_t idiagnl_meminfo_get_tmem(const struct idiagnl_meminfo *minfo)
73 {
74  return minfo->idiag_tmem;
75 }
76 
77 void idiagnl_meminfo_set_tmem(struct idiagnl_meminfo *minfo, uint32_t tmem)
78 {
79  minfo->idiag_tmem = tmem;
80 }
81 /** @} */
82 
83 /** @cond SKIP */
84 static uint64_t idiagnl_meminfo_compare(struct nl_object *_a, struct nl_object *_b,
85  uint64_t attrs, int flags)
86 {
87  struct idiagnl_meminfo *a = (struct idiagnl_meminfo *) _a;
88  struct idiagnl_meminfo *b = (struct idiagnl_meminfo *) _b;
89 
90  /* meminfo is a very simple object. It has no attribe flags (ce_mask),
91  * hence compare just returns 0 or 1, not a bit mask of attributes. */
92  return a->idiag_rmem != b->idiag_rmem ||
93  a->idiag_wmem != b->idiag_wmem ||
94  a->idiag_fmem != b->idiag_fmem ||
95  a->idiag_tmem != b->idiag_tmem;
96 }
97 
98 struct nl_object_ops idiagnl_meminfo_obj_ops = {
99  .oo_name = "idiag/idiag_meminfo",
100  .oo_size = sizeof(struct idiagnl_meminfo),
101  .oo_compare = idiagnl_meminfo_compare,
102 };
103 /** @endcond */
104 /** @} */
struct nl_object * nl_object_alloc(struct nl_object_ops *ops)
Allocate a new object of kind specified by the operations handle.
Definition: object.c:54
void nl_object_get(struct nl_object *obj)
Acquire a reference on a object.
Definition: object.c:204
void nl_object_put(struct nl_object *obj)
Release a reference from an object.
Definition: object.c:215