diff --git a/nest/rt-attr.c b/nest/rt-attr.c index 468b279d..1df1f96d 100644 --- a/nest/rt-attr.c +++ b/nest/rt-attr.c @@ -1248,6 +1248,7 @@ ea_list_unref(ea_list *l) void ea_format_bitfield(const struct eattr *a, byte *buf, int bufsize, const char **names, int min, int max) { + byte *start = buf; byte *bound = buf + bufsize - 32; u32 data = a->u.data; int i; @@ -1261,13 +1262,17 @@ ea_format_bitfield(const struct eattr *a, byte *buf, int bufsize, const char **n return; } - buf += bsprintf(buf, " %s", names[i]); + buf += bsprintf(buf, "%s ", names[i]); data &= ~(1u << i); } if (data) - bsprintf(buf, " %08x", data); + bsprintf(buf, "%08x ", data); + if (buf != start) + buf--; + + *buf = 0; return; } diff --git a/sysdep/linux/netlink.Y b/sysdep/linux/netlink.Y index 8e1c1921..bf5f8b3b 100644 --- a/sysdep/linux/netlink.Y +++ b/sysdep/linux/netlink.Y @@ -54,7 +54,7 @@ attr_bit: KRT_FEATURE_ECN { $$ = f_new_dynamic_attr_bit(0, "krt_features"); } ; attr_bit: KRT_FEATURE_ALLFRAG { $$ = f_new_dynamic_attr_bit(3, "krt_features"); } ; /* Using attribute bits in filters (moved here to not confuse Bison on *BSD) */ -lvalue: attr_bit { $$ = (struct f_lval) { .type = F_LVAL_ATTR_BIT, .fab = $1 }; }; +lvalue: attr_bit { $$ = (struct f_lval) { .type = F_LVAL_ATTR_BIT, .fab = $1, .rte = f_new_inst(FI_CURRENT_ROUTE), }; }; CF_CODE