{ L("vsa"), FR_TYPE_VSA },
{ L("vendor"), FR_TYPE_VENDOR },
{ L("group"), FR_TYPE_GROUP },
+ { L("union"), FR_TYPE_UNION },
{ L("attribute"), FR_TYPE_ATTR },
FR_TYPE_VENDOR, //!< Attribute that represents a vendor in the attribute tree.
FR_TYPE_GROUP, //!< A grouping of other attributes
+ FR_TYPE_UNION, //!< A union of limited children
FR_TYPE_VALUE_BOX, //!< A boxed value.
FR_TYPE_ATTR, //!< A contains an attribute reference
_beg(FR_TYPE_GROUP) \
_mid(FR_TYPE_STRUCT) \
_mid(FR_TYPE_TLV) \
+ _mid(FR_TYPE_UNION) \
_end(FR_TYPE_VENDOR)
/** Hack for truthiness check
_beg(FR_TYPE_VSA) \
_mid(FR_TYPE_STRUCT) \
_mid(FR_TYPE_TLV) \
+ _mid(FR_TYPE_UNION) \
_end(FR_TYPE_VENDOR)
/** Match all non value types in case statements
case FR_TYPE_STRUCT:
case FR_TYPE_VSA:
case FR_TYPE_VENDOR:
+ case FR_TYPE_UNION:
case FR_TYPE_INTERNAL:
fr_assert(0);
break;
case FR_TYPE_STRUCT:
case FR_TYPE_VSA:
case FR_TYPE_VENDOR:
+ case FR_TYPE_UNION:
case FR_TYPE_INTERNAL:
fr_assert(0);
return -2;
case FR_TYPE_STRUCT:
case FR_TYPE_VSA:
case FR_TYPE_VENDOR:
+ case FR_TYPE_UNION:
case FR_TYPE_INTERNAL:
case FR_TYPE_NULL:
case FR_TYPE_ATTR:
case FR_TYPE_STRUCT:
case FR_TYPE_VSA:
case FR_TYPE_VENDOR:
+ case FR_TYPE_UNION:
case FR_TYPE_VOID:
case FR_TYPE_VALUE_BOX:
case FR_TYPE_VALUE_BOX_CURSOR:
case FR_TYPE_STRUCT: /* Not a box type */
case FR_TYPE_VSA: /* Not a box type */
case FR_TYPE_VENDOR: /* Not a box type */
+ case FR_TYPE_UNION: /* Not a box type */
case FR_TYPE_VALUE_BOX:
case FR_TYPE_VOID:
case FR_TYPE_MAX: