Coverage Report

Created: 2024-08-28 06:17

/src/freeradius-server/src/freeradius-devel/util/dict_ext.h
Line
Count
Source (jump to first uncovered line)
1
#pragma once
2
/*
3
 *  This program is free software; you can redistribute it and/or modify
4
 *  it under the terms of the GNU General Public License as published by
5
 *  the Free Software Foundation; either version 2 of the License, or
6
 *  (at your option) any later version.
7
 *
8
 *  This program is distributed in the hope that it will be useful,
9
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 *  GNU General Public License for more details.
12
 *
13
 *  You should have received a copy of the GNU General Public License
14
 *  along with this program; if not, write to the Free Software
15
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
16
 */
17
18
/** Multi-protocol AVP dictionary API
19
 *
20
 * @file src/lib/util/dict_ext.h
21
 *
22
 * @copyright 2020 The FreeRADIUS server project
23
 * @copyright 2020 Arran Cudbard-Bell <a.cudbardb@freeradius.org>
24
 */
25
RCSIDH(dict_ext_h, "$Id: 7ab2e4e7e3bc8020de1e9603b7d265d563b639cf $")
26
27
#include <freeradius-devel/util/dict.h>
28
#include <freeradius-devel/util/ext.h>
29
#include <freeradius-devel/util/hash.h>
30
31
#include <limits.h>
32
33
#ifdef __cplusplus
34
extern "C" {
35
#endif
36
37
extern fr_ext_t const fr_dict_attr_ext_def;
38
extern fr_ext_t const fr_dict_enum_ext_def;
39
40
/** Attribute extension - Holds children for an attribute
41
 *
42
 * Children are possible for:
43
 *
44
 * #FR_TYPE_TLV, #FR_TYPE_VENDOR, #FR_TYPE_VSA, #FR_TYPE_STRUCT
45
 *
46
 * *or* where the parent->parent->type is
47
 * #FR_TYPE_STRUCT, and "parent" is a "key"
48
 * field.  Note that these attributes therefore
49
 * cannot have VALUEs, as the child defines their
50
 * VALUE.  See dict_attr_can_have_children() for details.
51
 */
52
typedef struct {
53
  fr_hash_table_t   *child_by_name;     //!< Namespace at this level in the hierarchy.
54
  fr_dict_attr_t const  **children;     //!< Children of this attribute.
55
} fr_dict_attr_ext_children_t;
56
57
/** Attribute extension - Holds a reference to an attribute in another dictionary
58
 *
59
 */
60
typedef struct {
61
  fr_dict_attr_t const  *ref;       //!< reference, only for #FR_TYPE_GROUP
62
} fr_dict_attr_ext_ref_t;
63
64
/** Attribute extension - Cached vendor pointer
65
 *
66
 */
67
typedef struct {
68
  fr_dict_attr_t const  *vendor;      //!< ancestor which has type #FR_TYPE_VENDOR
69
} fr_dict_attr_ext_vendor_t;
70
71
/** Attribute extension - Stack of dictionary attributes that describe the path back to the root of the dictionary
72
 *
73
 */
74
typedef struct {
75
  bool      unused;       //!< Zero length arrays are apparently GNU extensions
76
                ///< and we're not allowed to have structs with a
77
                ///< single variable array as its member.
78
                ///< We'll likely want to store something else here
79
                ///< at some point, so we just have a dummy field to
80
                ///< avoid changing all the code.
81
  fr_dict_attr_t const  *da_stack[];      //!< Stack of dictionary attributes
82
} fr_dict_attr_ext_da_stack_t;
83
84
/** Attribute extension - Holds enumeration values
85
 *
86
 */
87
typedef struct {
88
  size_t      max_name_len;     //!< maximum length of a name
89
  fr_hash_table_t   *value_by_name;     //!< Lookup an enumeration value by name
90
  fr_hash_table_t   *name_by_value;     //!< Lookup a name by value
91
} fr_dict_attr_ext_enumv_t;
92
93
/** Attribute extension - Holds a hash table with the names of all children of this attribute
94
 *
95
 */
96
typedef struct {
97
  fr_hash_table_t   *namespace;     //!< Lookup a child by name
98
} fr_dict_attr_ext_namespace_t;
99
100
/** Enum extension - Sub-struct or union pointer
101
 *
102
 */
103
typedef struct {
104
  fr_dict_attr_t const  *union_ref;     //!< The union da this value points into.
105
} fr_dict_enum_ext_union_ref_t;
106
107
/** @name Add extension structures to attributes
108
 *
109
 * @{
110
 */
111
112
/* Retrieve an extension structure for a dictionary attribute
113
 *
114
 * @param[in] da  to retrieve structure from.
115
 * @param[in] ext to retrieve.
116
 * @return
117
 *  - NULL if the extension wasn't found.
118
 *  - A pointer to the start of the extension.
119
 */
120
static inline void *fr_dict_attr_ext(fr_dict_attr_t const *da, fr_dict_attr_ext_t ext)
121
16.9M
{
122
16.9M
  if (!da->ext[ext]) return NULL;
123
124
7.31M
  return fr_ext_ptr(da, da->ext[ext], fr_dict_attr_ext_def.info[ext].has_hdr);
125
16.9M
}
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_ext
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_ext
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_ext
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_ext
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_ext
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_ext
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_ext
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_ext
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_ext
Unexecuted instantiation: base32.c:fr_dict_attr_ext
Unexecuted instantiation: base64.c:fr_dict_attr_ext
Unexecuted instantiation: calc.c:fr_dict_attr_ext
dict_ext.c:fr_dict_attr_ext
Line
Count
Source
121
62.7k
{
122
62.7k
  if (!da->ext[ext]) return NULL;
123
124
72
  return fr_ext_ptr(da, da->ext[ext], fr_dict_attr_ext_def.info[ext].has_hdr);
125
62.7k
}
dict_fixup.c:fr_dict_attr_ext
Line
Count
Source
121
252
{
122
252
  if (!da->ext[ext]) return NULL;
123
124
152
  return fr_ext_ptr(da, da->ext[ext], fr_dict_attr_ext_def.info[ext].has_hdr);
125
252
}
Unexecuted instantiation: dict_print.c:fr_dict_attr_ext
Unexecuted instantiation: dict_test.c:fr_dict_attr_ext
dict_tokenize.c:fr_dict_attr_ext
Line
Count
Source
121
2.58k
{
122
2.58k
  if (!da->ext[ext]) return NULL;
123
124
1.87k
  return fr_ext_ptr(da, da->ext[ext], fr_dict_attr_ext_def.info[ext].has_hdr);
125
2.58k
}
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_ext
dict_util.c:fr_dict_attr_ext
Line
Count
Source
121
16.8M
{
122
16.8M
  if (!da->ext[ext]) return NULL;
123
124
7.29M
  return fr_ext_ptr(da, da->ext[ext], fr_dict_attr_ext_def.info[ext].has_hdr);
125
16.8M
}
Unexecuted instantiation: dict_validate.c:fr_dict_attr_ext
Unexecuted instantiation: dl.c:fr_dict_attr_ext
Unexecuted instantiation: dns.c:fr_dict_attr_ext
Unexecuted instantiation: edit.c:fr_dict_attr_ext
Unexecuted instantiation: encode.c:fr_dict_attr_ext
Unexecuted instantiation: file.c:fr_dict_attr_ext
Unexecuted instantiation: inet.c:fr_dict_attr_ext
Unexecuted instantiation: log.c:fr_dict_attr_ext
Unexecuted instantiation: packet.c:fr_dict_attr_ext
Unexecuted instantiation: pair.c:fr_dict_attr_ext
Unexecuted instantiation: pair_inline.c:fr_dict_attr_ext
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_ext
Unexecuted instantiation: pair_print.c:fr_dict_attr_ext
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_ext
Unexecuted instantiation: print.c:fr_dict_attr_ext
proto.c:fr_dict_attr_ext
Line
Count
Source
121
2.78k
{
122
2.78k
  if (!da->ext[ext]) return NULL;
123
124
0
  return fr_ext_ptr(da, da->ext[ext], fr_dict_attr_ext_def.info[ext].has_hdr);
125
2.78k
}
Unexecuted instantiation: regex.c:fr_dict_attr_ext
Unexecuted instantiation: socket.c:fr_dict_attr_ext
Unexecuted instantiation: stats.c:fr_dict_attr_ext
Unexecuted instantiation: struct.c:fr_dict_attr_ext
Unexecuted instantiation: trie.c:fr_dict_attr_ext
Unexecuted instantiation: types.c:fr_dict_attr_ext
Unexecuted instantiation: uri.c:fr_dict_attr_ext
Unexecuted instantiation: value.c:fr_dict_attr_ext
Unexecuted instantiation: fuzzer.c:fr_dict_attr_ext
Unexecuted instantiation: base.c:fr_dict_attr_ext
Unexecuted instantiation: vmps.c:fr_dict_attr_ext
decode.c:fr_dict_attr_ext
Line
Count
Source
121
11.2k
{
122
11.2k
  if (!da->ext[ext]) return NULL;
123
124
11.2k
  return fr_ext_ptr(da, da->ext[ext], fr_dict_attr_ext_def.info[ext].has_hdr);
125
11.2k
}
Unexecuted instantiation: list.c:fr_dict_attr_ext
Unexecuted instantiation: tcp.c:fr_dict_attr_ext
Unexecuted instantiation: abinary.c:fr_dict_attr_ext
Unexecuted instantiation: raw.c:fr_dict_attr_ext
Unexecuted instantiation: udp.c:fr_dict_attr_ext
126
127
/** Return whether a da has a given extension or not
128
 *
129
 * @param[in] da  to check for extensions.
130
 * @param[in] ext to check.
131
 * @return
132
 *      - true if the da has the specified extension.
133
 *  - false if the da does not have the specified extension
134
 */
135
static inline bool fr_dict_attr_has_ext(fr_dict_attr_t const *da, fr_dict_attr_ext_t ext)
136
5.50M
{
137
5.50M
  return (da->ext[ext] > 0);
138
5.50M
}
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_has_ext
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_has_ext
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_has_ext
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_has_ext
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_has_ext
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_has_ext
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_has_ext
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_has_ext
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_has_ext
Unexecuted instantiation: base32.c:fr_dict_attr_has_ext
Unexecuted instantiation: base64.c:fr_dict_attr_has_ext
Unexecuted instantiation: calc.c:fr_dict_attr_has_ext
Unexecuted instantiation: decode.c:fr_dict_attr_has_ext
Unexecuted instantiation: dict_ext.c:fr_dict_attr_has_ext
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_has_ext
Unexecuted instantiation: dict_print.c:fr_dict_attr_has_ext
Unexecuted instantiation: dict_test.c:fr_dict_attr_has_ext
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_has_ext
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_has_ext
dict_util.c:fr_dict_attr_has_ext
Line
Count
Source
136
5.50M
{
137
5.50M
  return (da->ext[ext] > 0);
138
5.50M
}
Unexecuted instantiation: dict_validate.c:fr_dict_attr_has_ext
Unexecuted instantiation: dl.c:fr_dict_attr_has_ext
Unexecuted instantiation: dns.c:fr_dict_attr_has_ext
Unexecuted instantiation: edit.c:fr_dict_attr_has_ext
Unexecuted instantiation: encode.c:fr_dict_attr_has_ext
Unexecuted instantiation: file.c:fr_dict_attr_has_ext
Unexecuted instantiation: inet.c:fr_dict_attr_has_ext
Unexecuted instantiation: log.c:fr_dict_attr_has_ext
Unexecuted instantiation: packet.c:fr_dict_attr_has_ext
Unexecuted instantiation: pair.c:fr_dict_attr_has_ext
Unexecuted instantiation: pair_inline.c:fr_dict_attr_has_ext
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_has_ext
Unexecuted instantiation: pair_print.c:fr_dict_attr_has_ext
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_has_ext
Unexecuted instantiation: print.c:fr_dict_attr_has_ext
Unexecuted instantiation: proto.c:fr_dict_attr_has_ext
Unexecuted instantiation: regex.c:fr_dict_attr_has_ext
Unexecuted instantiation: socket.c:fr_dict_attr_has_ext
Unexecuted instantiation: stats.c:fr_dict_attr_has_ext
Unexecuted instantiation: struct.c:fr_dict_attr_has_ext
Unexecuted instantiation: trie.c:fr_dict_attr_has_ext
Unexecuted instantiation: types.c:fr_dict_attr_has_ext
Unexecuted instantiation: uri.c:fr_dict_attr_has_ext
Unexecuted instantiation: value.c:fr_dict_attr_has_ext
Unexecuted instantiation: fuzzer.c:fr_dict_attr_has_ext
Unexecuted instantiation: base.c:fr_dict_attr_has_ext
Unexecuted instantiation: vmps.c:fr_dict_attr_has_ext
Unexecuted instantiation: list.c:fr_dict_attr_has_ext
Unexecuted instantiation: tcp.c:fr_dict_attr_has_ext
Unexecuted instantiation: abinary.c:fr_dict_attr_has_ext
Unexecuted instantiation: raw.c:fr_dict_attr_has_ext
Unexecuted instantiation: udp.c:fr_dict_attr_has_ext
139
140
/** Return the cached da stack (if any) associated with an attribute
141
 *
142
 * @param[in] da  to return cached da stack for.
143
 * @return
144
 *  - NULL if no da stack available.
145
 *  - The cached da stack on success.
146
 */
147
static inline fr_dict_attr_t const **fr_dict_attr_da_stack(fr_dict_attr_t const *da)
148
65.4k
{
149
65.4k
  fr_dict_attr_ext_da_stack_t *ext;
150
151
65.4k
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_DA_STACK);
152
65.4k
  if (!ext) return NULL;
153
154
0
  return ext->da_stack;
155
65.4k
}
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_da_stack
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_da_stack
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_da_stack
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_da_stack
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_da_stack
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_da_stack
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_da_stack
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_da_stack
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_da_stack
Unexecuted instantiation: base32.c:fr_dict_attr_da_stack
Unexecuted instantiation: base64.c:fr_dict_attr_da_stack
Unexecuted instantiation: calc.c:fr_dict_attr_da_stack
Unexecuted instantiation: decode.c:fr_dict_attr_da_stack
dict_ext.c:fr_dict_attr_da_stack
Line
Count
Source
148
62.7k
{
149
62.7k
  fr_dict_attr_ext_da_stack_t *ext;
150
151
62.7k
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_DA_STACK);
152
62.7k
  if (!ext) return NULL;
153
154
0
  return ext->da_stack;
155
62.7k
}
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_da_stack
Unexecuted instantiation: dict_print.c:fr_dict_attr_da_stack
Unexecuted instantiation: dict_test.c:fr_dict_attr_da_stack
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_da_stack
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_da_stack
Unexecuted instantiation: dict_util.c:fr_dict_attr_da_stack
Unexecuted instantiation: dict_validate.c:fr_dict_attr_da_stack
Unexecuted instantiation: dl.c:fr_dict_attr_da_stack
Unexecuted instantiation: dns.c:fr_dict_attr_da_stack
Unexecuted instantiation: edit.c:fr_dict_attr_da_stack
Unexecuted instantiation: encode.c:fr_dict_attr_da_stack
Unexecuted instantiation: file.c:fr_dict_attr_da_stack
Unexecuted instantiation: inet.c:fr_dict_attr_da_stack
Unexecuted instantiation: log.c:fr_dict_attr_da_stack
Unexecuted instantiation: packet.c:fr_dict_attr_da_stack
Unexecuted instantiation: pair.c:fr_dict_attr_da_stack
Unexecuted instantiation: pair_inline.c:fr_dict_attr_da_stack
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_da_stack
Unexecuted instantiation: pair_print.c:fr_dict_attr_da_stack
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_da_stack
Unexecuted instantiation: print.c:fr_dict_attr_da_stack
proto.c:fr_dict_attr_da_stack
Line
Count
Source
148
2.78k
{
149
2.78k
  fr_dict_attr_ext_da_stack_t *ext;
150
151
2.78k
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_DA_STACK);
152
2.78k
  if (!ext) return NULL;
153
154
0
  return ext->da_stack;
155
2.78k
}
Unexecuted instantiation: regex.c:fr_dict_attr_da_stack
Unexecuted instantiation: socket.c:fr_dict_attr_da_stack
Unexecuted instantiation: stats.c:fr_dict_attr_da_stack
Unexecuted instantiation: struct.c:fr_dict_attr_da_stack
Unexecuted instantiation: trie.c:fr_dict_attr_da_stack
Unexecuted instantiation: types.c:fr_dict_attr_da_stack
Unexecuted instantiation: uri.c:fr_dict_attr_da_stack
Unexecuted instantiation: value.c:fr_dict_attr_da_stack
Unexecuted instantiation: fuzzer.c:fr_dict_attr_da_stack
Unexecuted instantiation: base.c:fr_dict_attr_da_stack
Unexecuted instantiation: vmps.c:fr_dict_attr_da_stack
Unexecuted instantiation: list.c:fr_dict_attr_da_stack
Unexecuted instantiation: tcp.c:fr_dict_attr_da_stack
Unexecuted instantiation: abinary.c:fr_dict_attr_da_stack
Unexecuted instantiation: raw.c:fr_dict_attr_da_stack
Unexecuted instantiation: udp.c:fr_dict_attr_da_stack
156
157
/** Return the reference associated with a group type attribute
158
 *
159
 * @param[in] da  to return the reference for.
160
 * @return
161
 *  - NULL if no reference available.
162
 *  - A pointer to the attribute being referenced.
163
 */
164
static inline fr_dict_attr_t const *fr_dict_attr_ref(fr_dict_attr_t const *da)
165
5.40M
{
166
5.40M
  fr_dict_attr_ext_ref_t *ext;
167
168
5.40M
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_REF);
169
5.40M
  if (!ext) return NULL;
170
171
36.0k
  return ext->ref;
172
5.40M
}
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_ref
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_ref
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_ref
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_ref
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_ref
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_ref
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_ref
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_ref
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_ref
Unexecuted instantiation: base32.c:fr_dict_attr_ref
Unexecuted instantiation: base64.c:fr_dict_attr_ref
Unexecuted instantiation: calc.c:fr_dict_attr_ref
Unexecuted instantiation: dict_ext.c:fr_dict_attr_ref
dict_fixup.c:fr_dict_attr_ref
Line
Count
Source
165
98
{
166
98
  fr_dict_attr_ext_ref_t *ext;
167
168
98
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_REF);
169
98
  if (!ext) return NULL;
170
171
0
  return ext->ref;
172
98
}
Unexecuted instantiation: dict_print.c:fr_dict_attr_ref
Unexecuted instantiation: dict_test.c:fr_dict_attr_ref
dict_tokenize.c:fr_dict_attr_ref
Line
Count
Source
165
1.42k
{
166
1.42k
  fr_dict_attr_ext_ref_t *ext;
167
168
1.42k
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_REF);
169
1.42k
  if (!ext) return NULL;
170
171
712
  return ext->ref;
172
1.42k
}
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_ref
dict_util.c:fr_dict_attr_ref
Line
Count
Source
165
5.39M
{
166
5.39M
  fr_dict_attr_ext_ref_t *ext;
167
168
5.39M
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_REF);
169
5.39M
  if (!ext) return NULL;
170
171
24.0k
  return ext->ref;
172
5.39M
}
Unexecuted instantiation: dict_validate.c:fr_dict_attr_ref
Unexecuted instantiation: dl.c:fr_dict_attr_ref
Unexecuted instantiation: dns.c:fr_dict_attr_ref
Unexecuted instantiation: edit.c:fr_dict_attr_ref
Unexecuted instantiation: encode.c:fr_dict_attr_ref
Unexecuted instantiation: file.c:fr_dict_attr_ref
Unexecuted instantiation: inet.c:fr_dict_attr_ref
Unexecuted instantiation: log.c:fr_dict_attr_ref
Unexecuted instantiation: packet.c:fr_dict_attr_ref
Unexecuted instantiation: pair.c:fr_dict_attr_ref
Unexecuted instantiation: pair_inline.c:fr_dict_attr_ref
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_ref
Unexecuted instantiation: pair_print.c:fr_dict_attr_ref
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_ref
Unexecuted instantiation: print.c:fr_dict_attr_ref
Unexecuted instantiation: proto.c:fr_dict_attr_ref
Unexecuted instantiation: regex.c:fr_dict_attr_ref
Unexecuted instantiation: socket.c:fr_dict_attr_ref
Unexecuted instantiation: stats.c:fr_dict_attr_ref
Unexecuted instantiation: struct.c:fr_dict_attr_ref
Unexecuted instantiation: trie.c:fr_dict_attr_ref
Unexecuted instantiation: types.c:fr_dict_attr_ref
Unexecuted instantiation: uri.c:fr_dict_attr_ref
Unexecuted instantiation: value.c:fr_dict_attr_ref
Unexecuted instantiation: fuzzer.c:fr_dict_attr_ref
Unexecuted instantiation: base.c:fr_dict_attr_ref
Unexecuted instantiation: vmps.c:fr_dict_attr_ref
decode.c:fr_dict_attr_ref
Line
Count
Source
165
11.2k
{
166
11.2k
  fr_dict_attr_ext_ref_t *ext;
167
168
11.2k
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_REF);
169
11.2k
  if (!ext) return NULL;
170
171
11.2k
  return ext->ref;
172
11.2k
}
Unexecuted instantiation: list.c:fr_dict_attr_ref
Unexecuted instantiation: tcp.c:fr_dict_attr_ref
Unexecuted instantiation: abinary.c:fr_dict_attr_ref
Unexecuted instantiation: raw.c:fr_dict_attr_ref
Unexecuted instantiation: udp.c:fr_dict_attr_ref
173
174
/** Return the vendor number for an attribute
175
 *
176
 * @param[in] da    The dictionary attribute to find the
177
 *        vendor for.
178
 * @return
179
 *  - 0 this isn't a vendor specific attribute.
180
 *  - The vendor PEN.
181
 */
182
static inline uint32_t fr_dict_vendor_num_by_da(fr_dict_attr_t const *da)
183
59.0k
{
184
59.0k
  fr_dict_attr_ext_vendor_t *ext;
185
186
59.0k
  if (da->type == FR_TYPE_VENDOR) return da->attr;
187
188
50.4k
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_VENDOR);
189
50.4k
  if (!ext || !ext->vendor) return 0;
190
191
32.5k
  return ext->vendor->attr;
192
50.4k
}
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: fuzzer_dns.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: fuzzer_radius.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: fuzzer_util.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: base32.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: base64.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: calc.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: decode.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: dict_ext.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: dict_fixup.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: dict_print.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: dict_test.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: dict_tokenize.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: dict_unknown.c:fr_dict_vendor_num_by_da
dict_util.c:fr_dict_vendor_num_by_da
Line
Count
Source
183
59.0k
{
184
59.0k
  fr_dict_attr_ext_vendor_t *ext;
185
186
59.0k
  if (da->type == FR_TYPE_VENDOR) return da->attr;
187
188
50.4k
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_VENDOR);
189
50.4k
  if (!ext || !ext->vendor) return 0;
190
191
32.5k
  return ext->vendor->attr;
192
50.4k
}
Unexecuted instantiation: dict_validate.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: dl.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: dns.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: edit.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: encode.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: file.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: inet.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: log.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: packet.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: pair.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: pair_inline.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: pair_legacy.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: pair_print.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: pair_tokenize.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: print.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: proto.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: regex.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: socket.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: stats.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: struct.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: trie.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: types.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: uri.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: value.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: fuzzer.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: base.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: vmps.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: list.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: tcp.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: abinary.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: raw.c:fr_dict_vendor_num_by_da
Unexecuted instantiation: udp.c:fr_dict_vendor_num_by_da
193
194
/** Return the vendor da for an attribute
195
 *
196
 * @param[in] da    The dictionary attribute to find the
197
 *        vendor for.
198
 * @return
199
 *  - 0 this isn't a vendor specific attribute.
200
 *  - The vendor PEN.
201
 */
202
static inline fr_dict_attr_t const *fr_dict_vendor_da_by_da(fr_dict_attr_t const *da)
203
0
{
204
0
  fr_dict_attr_ext_vendor_t *ext;
205
0
206
0
  if (da->type == FR_TYPE_VENDOR) return da;
207
0
208
0
  ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_VENDOR);
209
0
  if (!ext) return NULL;
210
0
211
0
  return ext->vendor;
212
0
}
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: fuzzer_dns.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: fuzzer_radius.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: fuzzer_util.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: base32.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: base64.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: calc.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: decode.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dict_ext.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dict_fixup.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dict_print.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dict_test.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dict_tokenize.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dict_unknown.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dict_util.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dict_validate.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dl.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: dns.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: edit.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: encode.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: file.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: inet.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: log.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: packet.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: pair.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: pair_inline.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: pair_legacy.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: pair_print.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: pair_tokenize.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: print.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: proto.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: regex.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: socket.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: stats.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: struct.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: trie.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: types.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: uri.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: value.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: fuzzer.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: base.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: vmps.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: list.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: tcp.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: abinary.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: raw.c:fr_dict_vendor_da_by_da
Unexecuted instantiation: udp.c:fr_dict_vendor_da_by_da
213
214
/** @} */
215
216
void fr_dict_attr_ext_debug(fr_dict_attr_t const *da);
217
218
#ifdef __cplusplus
219
}
220
#endif