case T_IP:
a = ea_set_attr(&fs->rte->attrs,
- EA_LITERAL_STORE_ADATA(da, 0, &v1.val.ip, sizeof(ip_addr)));
+ EA_LITERAL_STORE_ADATA(da, da->flags, &v1.val.ip, sizeof(ip_addr)));
break;
case T_STRING:
a = ea_set_attr(&fs->rte->attrs,
- EA_LITERAL_STORE_ADATA(da, 0, v1.val.s, strlen(v1.val.s) + 1));
+ EA_LITERAL_STORE_ADATA(da, da->flags, v1.val.s, strlen(v1.val.s) + 1));
break;
default:
a = ea_set_attr(&fs->rte->attrs,
- EA_LITERAL_GENERIC(da->id, da->type, 0, .u = v1.val.bval));
+ EA_LITERAL_GENERIC(da->id, da->type, da->flags, .u = v1.val.bval));
break;
}
uint id; /* Autoassigned attribute ID */ \
uint uc; /* Reference count */ \
btype type; /* Data type ID */ \
+ u16 flags; /* Protocol-dependent flags */ \
uint readonly:1; /* This attribute can't be changed by filters */ \
uint conf:1; /* Requested by config */ \
uint hidden:1; /* Technical attribute, do not show, do not expose to filters */ \
struct ea_class class;
struct {
EA_CLASS_INSIDE;
- uint flags;
void (*export)(struct bgp_export_state *s, eattr *a);
int (*encode)(struct bgp_write_state *s, eattr *a, byte *buf, uint size);
void (*decode)(struct bgp_parse_state *s, uint code, uint flags, byte *data, uint len, ea_list **to);