mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-18 17:18:42 +00:00
Fixed minor bugs in handling some route attributes
This commit is contained in:
parent
dfb61dfcea
commit
0f2f5ac58c
@ -28,6 +28,9 @@ static inline u32 pair_b(u32 p) { return p & 0xFFFF; }
|
|||||||
f_generate_complex(fi_code, sym->attribute, arg); \
|
f_generate_complex(fi_code, sym->attribute, arg); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
#define f_generate_complex_default(fi_code, da, arg, def) \
|
||||||
|
f_new_inst(FI_EA_SET, f_new_inst(fi_code, f_new_inst(FI_DEFAULT, f_new_inst(FI_EA_GET, da), f_new_inst(FI_CONSTANT, (struct f_val) { .type = T_INT, .val.i = def })), arg), da)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets and their items are during parsing handled as lists, linked
|
* Sets and their items are during parsing handled as lists, linked
|
||||||
@ -902,10 +905,10 @@ cmd:
|
|||||||
}
|
}
|
||||||
| attr_bit '=' term ';' {
|
| attr_bit '=' term ';' {
|
||||||
$$ = f_new_inst(FI_CONDITION, $3,
|
$$ = f_new_inst(FI_CONDITION, $3,
|
||||||
f_generate_complex(FI_BITOR, $1.class,
|
f_generate_complex_default(FI_BITOR, $1.class,
|
||||||
f_new_inst(FI_CONSTANT, (struct f_val) { .type = T_INT, .val.i = (1U << $1.bit)})),
|
f_new_inst(FI_CONSTANT, (struct f_val) { .type = T_INT, .val.i = (1U << $1.bit)}), 0),
|
||||||
f_generate_complex(FI_BITAND, $1.class,
|
f_generate_complex_default(FI_BITAND, $1.class,
|
||||||
f_new_inst(FI_CONSTANT, (struct f_val) { .type = T_INT, .val.i = ~(1U << $1.bit)}))
|
f_new_inst(FI_CONSTANT, (struct f_val) { .type = T_INT, .val.i = ~(1U << $1.bit)}), 0)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
| break_command print_list ';' {
|
| break_command print_list ';' {
|
||||||
|
@ -768,6 +768,18 @@
|
|||||||
ea_unset_attr(fs->eattrs, 1, da);
|
ea_unset_attr(fs->eattrs, 1, da);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INST(FI_DEFAULT, 2, 1) {
|
||||||
|
ARG_ANY(1);
|
||||||
|
ARG_ANY(2);
|
||||||
|
|
||||||
|
log(L_INFO "Type of arg 1 is: %d", v1.type);
|
||||||
|
|
||||||
|
if (v1.type == T_VOID)
|
||||||
|
RESULT_VAL(v2);
|
||||||
|
else
|
||||||
|
RESULT_VAL(v1);
|
||||||
|
}
|
||||||
|
|
||||||
INST(FI_LENGTH, 1, 1) { /* Get length of */
|
INST(FI_LENGTH, 1, 1) { /* Get length of */
|
||||||
ARG_ANY(1);
|
ARG_ANY(1);
|
||||||
switch(v1.type) {
|
switch(v1.type) {
|
||||||
|
@ -836,7 +836,7 @@ ea_normalize(ea_list *e, int overlay)
|
|||||||
ea_merge(e, t, overlay);
|
ea_merge(e, t, overlay);
|
||||||
ea_sort(t);
|
ea_sort(t);
|
||||||
|
|
||||||
return t->count ? t : NULL;
|
return t->count ? t : t->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1075,11 +1075,6 @@ ea_show(struct cli *c, const eattr *e)
|
|||||||
struct ea_class *cls = ea_class_global[e->id];
|
struct ea_class *cls = ea_class_global[e->id];
|
||||||
ASSERT_DIE(cls);
|
ASSERT_DIE(cls);
|
||||||
|
|
||||||
pos += bsprintf(pos, "%s", cls->name);
|
|
||||||
|
|
||||||
*pos++ = ':';
|
|
||||||
*pos++ = ' ';
|
|
||||||
|
|
||||||
if (e->undef)
|
if (e->undef)
|
||||||
return;
|
return;
|
||||||
else if (cls->format)
|
else if (cls->format)
|
||||||
@ -1115,7 +1110,7 @@ ea_show(struct cli *c, const eattr *e)
|
|||||||
bsprintf(pos, "<type %02x>", e->type);
|
bsprintf(pos, "<type %02x>", e->type);
|
||||||
}
|
}
|
||||||
|
|
||||||
cli_printf(c, -1012, "\t%s", buf);
|
cli_printf(c, -1012, "\t%s: %s", cls->name, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user