diff options
author | Jan Maria Matejka <mq@ucw.cz> | 2018-05-29 12:08:12 +0200 |
---|---|---|
committer | Jan Maria Matejka <mq@ucw.cz> | 2018-05-30 17:08:49 +0200 |
commit | 13c0be19d3d2acc9c1636bbab9222aabdf27d7ac (patch) | |
tree | 8df5514a7d995becaa85ab8a9de700cfa93cb302 /sysdep/linux | |
parent | ee7e2ffd265fd76dbc8c94d9c2d48da54c27ff76 (diff) |
Nest: Removing separate tmpa from route propagation
This is a fundamental change of an original (1999) concept of route
processing inside BIRD. During import/export, there was a temporary
ea_list created which was to be used instead of the another one inside
the route itself.
This led to some confusion, quirks, and strange filter code that handled
extended route attributes. Dropping it now.
The protocol interface has changed in an uniform way -- the
`struct ea_list *attrs` argument has been removed from store_tmp_attrs(),
import_control(), rt_notify() and get_route_info().
Diffstat (limited to 'sysdep/linux')
-rw-r--r-- | sysdep/linux/netlink.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c index f5db1575..73f77147 100644 --- a/sysdep/linux/netlink.c +++ b/sysdep/linux/netlink.c @@ -1177,11 +1177,12 @@ nh_bufsize(struct nexthop *nh) } static int -nl_send_route(struct krt_proto *p, rte *e, struct ea_list *eattrs, int op, int dest, struct nexthop *nh) +nl_send_route(struct krt_proto *p, rte *e, int op, int dest, struct nexthop *nh) { eattr *ea; net *net = e->net; rta *a = e->attrs; + ea_list *eattrs = a->eattrs; int bufsize = 128 + KRT_METRICS_MAX*8 + nh_bufsize(&(a->nh)); u32 priority = 0; @@ -1328,7 +1329,7 @@ dest: } static inline int -nl_add_rte(struct krt_proto *p, rte *e, struct ea_list *eattrs) +nl_add_rte(struct krt_proto *p, rte *e) { rta *a = e->attrs; int err = 0; @@ -1337,34 +1338,34 @@ nl_add_rte(struct krt_proto *p, rte *e, struct ea_list *eattrs) { struct nexthop *nh = &(a->nh); - err = nl_send_route(p, e, eattrs, NL_OP_ADD, RTD_UNICAST, nh); + err = nl_send_route(p, e, NL_OP_ADD, RTD_UNICAST, nh); if (err < 0) return err; for (nh = nh->next; nh; nh = nh->next) - err += nl_send_route(p, e, eattrs, NL_OP_APPEND, RTD_UNICAST, nh); + err += nl_send_route(p, e, NL_OP_APPEND, RTD_UNICAST, nh); return err; } - return nl_send_route(p, e, eattrs, NL_OP_ADD, a->dest, &(a->nh)); + return nl_send_route(p, e, NL_OP_ADD, a->dest, &(a->nh)); } static inline int -nl_delete_rte(struct krt_proto *p, rte *e, struct ea_list *eattrs) +nl_delete_rte(struct krt_proto *p, rte *e) { int err = 0; /* For IPv6, we just repeatedly request DELETE until we get error */ do - err = nl_send_route(p, e, eattrs, NL_OP_DELETE, RTD_NONE, NULL); + err = nl_send_route(p, e, NL_OP_DELETE, RTD_NONE, NULL); while (krt_ecmp6(p) && !err); return err; } void -krt_replace_rte(struct krt_proto *p, net *n, rte *new, rte *old, struct ea_list *eattrs) +krt_replace_rte(struct krt_proto *p, net *n, rte *new, rte *old) { int err = 0; @@ -1380,10 +1381,10 @@ krt_replace_rte(struct krt_proto *p, net *n, rte *new, rte *old, struct ea_list */ if (old) - nl_delete_rte(p, old, eattrs); + nl_delete_rte(p, old); if (new) - err = nl_add_rte(p, new, eattrs); + err = nl_add_rte(p, new); if (err < 0) n->n.flags |= KRF_SYNC_ERROR; |