we rely on the rest of the code to do type / whatever sanity checks
there's no need to duplicate them.
|=====
| Name | Description
| `array` | For fixed-size types, declare that the contents of the packet can have an array of this value.
-| `clone=...` | For `tlv` types, clone (or copy) child definitions from another `tlv` type
+| `enum=...` | For "leaf" types, copy xref:dictionary/value.adoc[VALUE]s from an `xref:dictionary/enum.adoc[ENUM].
+| `clone=...` | For `tlv` or 'struct' types, clone (or copy) child definitions from another attribute of the same type
| `key` | This member is a "key" type. The struct can have different xref:dictionary/struct.adoc[STRUCT] children depending on the value of the key.
|=====
if (argc >= 3) {
if (dict_process_flag_field(ctx, argv[2], type, &flags, &ref) < 0) return -1;
- if (ref && (type != FR_TYPE_TLV) && !(flags.extra && (flags.subtype == FLAG_KEY_FIELD))) {
- fr_strerror_const("Only MEMBERs of type 'tlv' or with 'key' flags can have references");\
- return -1;
- }
-
} else {
if (!dict_attr_flags_valid(ctx->dict, ctx->stack[ctx->stack_depth].da, argv[2], NULL, type, &flags)) return -1;
}