};
FR_DICT_ATTR_FLAG_FUNC(fr_dns_attr_flags_t, dns_label)
-FR_DICT_ATTR_FLAG_FUNC(fr_dns_attr_flags_t, uncompressed)
+FR_DICT_ATTR_FLAG_FUNC(fr_dns_attr_flags_t, dns_label_uncompressed)
static fr_dict_flag_parser_t const dns_flags[] = {
- { L("dns_label"), { .func = dict_flag_dns_label } },
- { L("uncompressed"), { .func = dict_flag_uncompressed } }
+ { L("dns_label"), { .func = dict_flag_dns_label } },
+ { L("dns_label_uncompressed"), { .func = dict_flag_dns_label_uncompressed } }
};
#define DECODE_FAIL(_reason) if (reason) *reason = FR_DNS_DECODE_FAIL_ ## _reason
da->flags.is_known_width = true;
}
- if (fr_dns_flag_dns_label(da) || fr_dns_flag_uncompressed(da)) {
+ if (fr_dns_flag_dns_label_any(da)) {
if (da->type != FR_TYPE_STRING) {
fr_strerror_const("The 'dns_label' flag can only be used with attributes of type 'string'");
return false;
fr_dict_attr_t const *parent,
uint8_t const *data, size_t const data_len, void *decode_ctx)
{
- if ((parent->type == FR_TYPE_STRING) && !parent->flags.extra && parent->flags.subtype) {
+ if ((parent->type == FR_TYPE_STRING) && fr_dns_flag_dns_label(parent)) {
fr_dns_ctx_t *packet_ctx = decode_ctx;
return fr_pair_dns_labels_from_network(ctx, out, parent, packet_ctx->packet, data, data_len, packet_ctx->lb, false);
}
FR_PROTO_TRACE("decode context changed %s -> %s",da->parent->name, da->name);
- if ((da->type == FR_TYPE_STRING) && !da->flags.extra && da->flags.subtype) {
+ if ((da->type == FR_TYPE_STRING) && fr_dns_flag_dns_label(da)) {
slen = fr_pair_dns_labels_from_network(ctx, out, da, packet_ctx->packet, data + 4, len, packet_ctx->lb, true);
} else if (da->flags.array) {
typedef struct {
bool dns_label;
- bool uncompressed;
+ bool dns_label_uncompressed;
} fr_dns_attr_flags_t;
static inline fr_dns_attr_flags_t const *fr_dns_attr_flags(fr_dict_attr_t const *da)
return fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC);
}
+static inline bool fr_dns_flag_dns_label_any(fr_dict_attr_t const *da)
+{
+ fr_dns_attr_flags_t const *flags = fr_dns_attr_flags(da);
+
+ return flags->dns_label || flags->dns_label_uncompressed;
+}
+
#define fr_dns_flag_dns_label(_da) (fr_dns_attr_flags(_da)->dns_label)
-#define fr_dns_flag_uncompressed(_da) (fr_dns_attr_flags(_da)->uncompressed)
+#define fr_dns_flag_dns_label_uncompressed(_da) (fr_dns_attr_flags(_da)->dns_label_uncompressed)
extern fr_table_num_ordered_t fr_dns_reason_fail_table[];
extern char const *fr_dns_packet_names[FR_DNS_CODE_MAX];
/*
* DNS labels get a special encoder.
*/
- if (!da->flags.extra) {
+ if (fr_dns_flag_dns_label_any(da)) {
fr_dbuff_marker_t last_byte, src;
- fr_assert(fr_dns_flag_dns_label(da) ||
- fr_dns_flag_uncompressed(da));
-
fr_dbuff_marker(&last_byte, &work_dbuff);
fr_dbuff_marker(&src, &work_dbuff);
FR_PROTO_TRACE("encode DNS label %s", vp->vp_strvalue);