From: Maria Matejka Date: Mon, 30 May 2022 14:52:38 +0000 (+0200) Subject: Merge commit 'cf07d8ad79273a3bbf0617c17e438602e4b64ece' into haugesund X-Git-Tag: v3.0-alpha1~171^2~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b4b7c6eaefff43508179b05acbc061fa6b19291;p=thirdparty%2Fbird.git Merge commit 'cf07d8ad79273a3bbf0617c17e438602e4b64ece' into haugesund --- 8b4b7c6eaefff43508179b05acbc061fa6b19291 diff --cc sysdep/bsd/krt-sock.c index ca7d4c559,844b9f83b..32d386930 --- a/sysdep/bsd/krt-sock.c +++ b/sysdep/bsd/krt-sock.c @@@ -577,23 -579,17 +577,16 @@@ krt_read_route(struct ks_msg *msg, stru } } - done: - e = rte_get_temp(&a); - e->net = net; + done:; + rte e0 = { .attrs = &a, .net = net, }; - ea_list *ea = alloca(sizeof(ea_list) + 1 * sizeof(eattr)); - *ea = (ea_list) { .count = 1, .next = e0.attrs->eattrs }; - e0.attrs->eattrs = ea; - - ea->attrs[0] = (eattr) { - .id = EA_KRT_SOURCE, - .type = T_INT, - .u.data = src2, - }; - ea_set_attr(e->attrs->eattrs, ++ ea_set_attr(e0.attrs->eattrs, + EA_LITERAL_EMBEDDED(EA_KRT_SOURCE, T_INT, 0, src2)); if (scan) - krt_got_route(p, e, src); + krt_got_route(p, &e0, src); else - krt_got_route_async(p, e, new, src); + krt_got_route_async(p, &e0, new, src); } static void diff --cc sysdep/linux/netlink.c index 98ddd8991,81e02b4ca..7702c8155 --- a/sysdep/linux/netlink.c +++ b/sysdep/linux/netlink.c @@@ -1577,30 -1578,29 +1577,31 @@@ nl_mergable_route(struct nl_parse_stat static void nl_announce_route(struct nl_parse_state *s) { - rte *e = rte_get_temp(s->attrs, s->proto->p.main_source); - e->net = s->net; + rte e0 = { + .attrs = s->attrs, + .net = s->net, + }; - ea_list *ea = alloca(sizeof(ea_list) + 2 * sizeof(eattr)); - *ea = (ea_list) { .count = 2, .next = e0.attrs->eattrs }; - e0.attrs->eattrs = ea; - - ea->attrs[0] = (eattr) { - .id = EA_KRT_SOURCE, - .type = T_INT, - .u.data = s->krt_proto, - }; - ea->attrs[1] = (eattr) { - .id = EA_KRT_METRIC, - .type = T_INT, - .u.data = s->krt_metric, + EA_LOCAL_LIST(2) ea0 = { - .l = { .count = 2, .next = e->attrs->eattrs }, ++ .l = { .count = 2, .next = e0.attrs->eattrs }, + .a[0] = (eattr) { + .id = EA_KRT_SOURCE, + .type = T_INT, + .u.data = s->krt_proto, + }, + .a[1] = (eattr) { + .id = EA_KRT_METRIC, + .type = T_INT, + .u.data = s->krt_metric, + }, }; - e->attrs->eattrs = &ea0.l; ++ e0.attrs->eattrs = &ea0.l; + if (s->scan) - krt_got_route(s->proto, e, s->krt_src); + krt_got_route(s->proto, &e0, s->krt_src); else - krt_got_route_async(s->proto, e, s->new, s->krt_src); + krt_got_route_async(s->proto, &e0, s->new, s->krt_src); s->net = NULL; s->attrs = NULL; @@@ -1912,12 -1885,9 +1883,9 @@@ nl_parse_route(struct nl_parse_state *s if (a[RTA_METRICS]) { u32 metrics[KRT_METRICS_MAX]; - ea_list *ea = lp_alloc(s->pool, sizeof(ea_list) + KRT_METRICS_MAX * sizeof(eattr)); - int t, n = 0; - if (nl_parse_metrics(a[RTA_METRICS], metrics, ARRAY_SIZE(metrics)) < 0) { - log(L_ERR "KRT: Received route %N with strange RTA_METRICS attribute", net->n.addr); + log(L_ERR "KRT: Received route %N with strange RTA_METRICS attribute", net); return; }