summaryrefslogtreecommitdiff
path: root/proto
diff options
context:
space:
mode:
Diffstat (limited to 'proto')
-rw-r--r--proto/ospf/rt.c1
-rw-r--r--proto/pipe/pipe.c17
-rw-r--r--proto/static/static.c1
3 files changed, 12 insertions, 7 deletions
diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c
index d28d463b..74f47810 100644
--- a/proto/ospf/rt.c
+++ b/proto/ospf/rt.c
@@ -37,6 +37,7 @@ static inline struct nexthop *
new_nexthop(struct ospf_proto *p, ip_addr gw, struct iface *iface, byte weight)
{
struct nexthop *nh = lp_alloc(p->nhpool, sizeof(struct nexthop));
+ nh->labels = 0;
nh->gw = gw;
nh->iface = iface;
nh->next = NULL;
diff --git a/proto/pipe/pipe.c b/proto/pipe/pipe.c
index 8924c200..a4d371fe 100644
--- a/proto/pipe/pipe.c
+++ b/proto/pipe/pipe.c
@@ -43,6 +43,8 @@
#include "pipe.h"
+#include <alloca.h>
+
static void
pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *old, ea_list *attrs)
{
@@ -51,7 +53,7 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *o
struct rte_src *src;
rte *e;
- rta a;
+ rta *a;
if (!new && !old)
return;
@@ -65,12 +67,13 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *o
if (new)
{
- memcpy(&a, new->attrs, sizeof(rta));
+ a = alloca(rta_size(new->attrs));
+ memcpy(a, new->attrs, rta_size(new->attrs));
- a.aflags = 0;
- a.eattrs = attrs;
- a.hostentry = NULL;
- e = rte_get_temp(&a);
+ a->aflags = 0;
+ a->eattrs = attrs;
+ a->hostentry = NULL;
+ e = rte_get_temp(a);
e->pflags = 0;
/* Copy protocol specific embedded attributes. */
@@ -78,7 +81,7 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *o
e->pref = new->pref;
e->pflags = new->pflags;
- src = a.src;
+ src = a->src;
}
else
{
diff --git a/proto/static/static.c b/proto/static/static.c
index a63d4d29..9ecf6df8 100644
--- a/proto/static/static.c
+++ b/proto/static/static.c
@@ -88,6 +88,7 @@ static_install(struct proto *p, struct static_route *r)
nh->gw = r2->via;
nh->iface = r2->neigh->iface;
nh->weight = r2->weight;
+ nh->labels = 0;
if (a.nh.next)
nexthop_insert(&(a.nh), nh);
r2->state |= STS_INSTALLED;