Root/package/libnl-tiny/src/include/netlink/genl/family.h

1/*
2 * netlink/genl/family.h Generic Netlink Family
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-2006 Thomas Graf <tgraf@suug.ch>
10 */
11
12#ifndef NETLINK_GENL_FAMILY_H_
13#define NETLINK_GENL_FAMILY_H_
14
15#include <netlink/netlink.h>
16#include <netlink/cache.h>
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22/** @cond SKIP */
23#define FAMILY_ATTR_ID 0x01
24#define FAMILY_ATTR_NAME 0x02
25#define FAMILY_ATTR_VERSION 0x04
26#define FAMILY_ATTR_HDRSIZE 0x08
27#define FAMILY_ATTR_MAXATTR 0x10
28#define FAMILY_ATTR_OPS 0x20
29
30
31struct genl_family
32{
33    NLHDR_COMMON
34
35    uint16_t gf_id;
36    char gf_name[GENL_NAMSIZ];
37    uint32_t gf_version;
38    uint32_t gf_hdrsize;
39    uint32_t gf_maxattr;
40
41    struct nl_list_head gf_ops;
42};
43
44
45extern struct genl_family * genl_family_alloc(void);
46extern void genl_family_put(struct genl_family *);
47
48extern int genl_family_add_op(struct genl_family *,
49                           int, int);
50
51/**
52 * @name Attributes
53 * @{
54 */
55
56static inline unsigned int genl_family_get_id(struct genl_family *family)
57{
58    if (family->ce_mask & FAMILY_ATTR_ID)
59        return family->gf_id;
60    else
61        return GENL_ID_GENERATE;
62}
63
64static inline void genl_family_set_id(struct genl_family *family, unsigned int id)
65{
66    family->gf_id = id;
67    family->ce_mask |= FAMILY_ATTR_ID;
68}
69
70static inline char *genl_family_get_name(struct genl_family *family)
71{
72    if (family->ce_mask & FAMILY_ATTR_NAME)
73        return family->gf_name;
74    else
75        return NULL;
76}
77
78static inline void genl_family_set_name(struct genl_family *family, const char *name)
79{
80    strncpy(family->gf_name, name, GENL_NAMSIZ-1);
81    family->ce_mask |= FAMILY_ATTR_NAME;
82}
83
84static inline uint8_t genl_family_get_version(struct genl_family *family)
85{
86    if (family->ce_mask & FAMILY_ATTR_VERSION)
87        return family->gf_version;
88    else
89        return 0;
90}
91
92static inline void genl_family_set_version(struct genl_family *family, uint8_t version)
93{
94    family->gf_version = version;
95    family->ce_mask |= FAMILY_ATTR_VERSION;
96}
97
98static inline uint32_t genl_family_get_hdrsize(struct genl_family *family)
99{
100    if (family->ce_mask & FAMILY_ATTR_HDRSIZE)
101        return family->gf_hdrsize;
102    else
103        return 0;
104}
105
106static inline void genl_family_set_hdrsize(struct genl_family *family, uint32_t hdrsize)
107{
108    family->gf_hdrsize = hdrsize;
109    family->ce_mask |= FAMILY_ATTR_HDRSIZE;
110}
111
112static inline uint32_t genl_family_get_maxattr(struct genl_family *family)
113{
114    if (family->ce_mask & FAMILY_ATTR_MAXATTR)
115        return family->gf_maxattr;
116    else
117        return family->gf_maxattr;
118}
119
120static inline void genl_family_set_maxattr(struct genl_family *family, uint32_t maxattr)
121{
122    family->gf_maxattr = maxattr;
123    family->ce_mask |= FAMILY_ATTR_MAXATTR;
124}
125
126#ifdef __cplusplus
127}
128#endif
129
130#endif
131

Archive Download this file



interactive