1 /* SPDX-License-Identifier: LGPL-2.1-only */
2 /*
3 * Copyright (c) 2013 Sassano Systems LLC <[email protected]>
4 */
5
6 #include "nl-default.h"
7
8 #include <netlink/idiag/meminfo.h>
9
10 #include "nl-idiag.h"
11
12 /**
13 * @ingroup idiag
14 * @defgroup idiagnl_meminfo Inet Diag Memory Info
15 *
16 * @details
17 * @idiagnl_doc{idiagnl_meminfo, Inet Diag Memory Info Documentation}
18 * @{
19 */
idiagnl_meminfo_alloc(void)20 struct idiagnl_meminfo *idiagnl_meminfo_alloc(void)
21 {
22 return (struct idiagnl_meminfo *) nl_object_alloc(&idiagnl_meminfo_obj_ops);
23 }
24
idiagnl_meminfo_get(struct idiagnl_meminfo * minfo)25 void idiagnl_meminfo_get(struct idiagnl_meminfo *minfo)
26 {
27 nl_object_get((struct nl_object *) minfo);
28 }
29
idiagnl_meminfo_put(struct idiagnl_meminfo * minfo)30 void idiagnl_meminfo_put(struct idiagnl_meminfo *minfo)
31 {
32 nl_object_put((struct nl_object *) minfo);
33 }
34
35 /**
36 * @name Attributes
37 * @{
38 */
idiagnl_meminfo_get_rmem(const struct idiagnl_meminfo * minfo)39 uint32_t idiagnl_meminfo_get_rmem(const struct idiagnl_meminfo *minfo)
40 {
41 return minfo->idiag_rmem;
42 }
43
idiagnl_meminfo_set_rmem(struct idiagnl_meminfo * minfo,uint32_t rmem)44 void idiagnl_meminfo_set_rmem(struct idiagnl_meminfo *minfo, uint32_t rmem)
45 {
46 minfo->idiag_rmem = rmem;
47 }
48
idiagnl_meminfo_get_wmem(const struct idiagnl_meminfo * minfo)49 uint32_t idiagnl_meminfo_get_wmem(const struct idiagnl_meminfo *minfo)
50 {
51 return minfo->idiag_wmem;
52 }
53
idiagnl_meminfo_set_wmem(struct idiagnl_meminfo * minfo,uint32_t wmem)54 void idiagnl_meminfo_set_wmem(struct idiagnl_meminfo *minfo, uint32_t wmem)
55 {
56 minfo->idiag_wmem = wmem;
57 }
58
idiagnl_meminfo_get_fmem(const struct idiagnl_meminfo * minfo)59 uint32_t idiagnl_meminfo_get_fmem(const struct idiagnl_meminfo *minfo)
60 {
61 return minfo->idiag_fmem;
62 }
63
idiagnl_meminfo_set_fmem(struct idiagnl_meminfo * minfo,uint32_t fmem)64 void idiagnl_meminfo_set_fmem(struct idiagnl_meminfo *minfo, uint32_t fmem)
65 {
66 minfo->idiag_fmem = fmem;
67 }
68
idiagnl_meminfo_get_tmem(const struct idiagnl_meminfo * minfo)69 uint32_t idiagnl_meminfo_get_tmem(const struct idiagnl_meminfo *minfo)
70 {
71 return minfo->idiag_tmem;
72 }
73
idiagnl_meminfo_set_tmem(struct idiagnl_meminfo * minfo,uint32_t tmem)74 void idiagnl_meminfo_set_tmem(struct idiagnl_meminfo *minfo, uint32_t tmem)
75 {
76 minfo->idiag_tmem = tmem;
77 }
78 /** @} */
79
80 /** @cond SKIP */
idiagnl_meminfo_compare(struct nl_object * _a,struct nl_object * _b,uint64_t attrs,int flags)81 static uint64_t idiagnl_meminfo_compare(struct nl_object *_a, struct nl_object *_b,
82 uint64_t attrs, int flags)
83 {
84 struct idiagnl_meminfo *a = (struct idiagnl_meminfo *) _a;
85 struct idiagnl_meminfo *b = (struct idiagnl_meminfo *) _b;
86
87 /* meminfo is a very simple object. It has no attribe flags (ce_mask),
88 * hence compare just returns 0 or 1, not a bit mask of attributes. */
89 return a->idiag_rmem != b->idiag_rmem ||
90 a->idiag_wmem != b->idiag_wmem ||
91 a->idiag_fmem != b->idiag_fmem ||
92 a->idiag_tmem != b->idiag_tmem;
93 }
94
95 struct nl_object_ops idiagnl_meminfo_obj_ops = {
96 .oo_name = "idiag/idiag_meminfo",
97 .oo_size = sizeof(struct idiagnl_meminfo),
98 .oo_compare = idiagnl_meminfo_compare,
99 };
100 /** @endcond */
101 /** @} */
102