diff --git a/lib/nexthop.c b/lib/nexthop.c index 405db6a5cb..0984c1a168 100644 --- a/lib/nexthop.c +++ b/lib/nexthop.c @@ -442,6 +442,15 @@ void nexthop_copy(struct nexthop *copy, const struct nexthop *nexthop, &nexthop->nh_label->label[0]); } +struct nexthop *nexthop_dup(const struct nexthop *nexthop, + struct nexthop *rparent) +{ + struct nexthop *new = nexthop_new(); + + nexthop_copy(new, nexthop, rparent); + return new; +} + /* * nexthop printing variants: * %pNHvv diff --git a/lib/nexthop.h b/lib/nexthop.h index ada7317a58..20401cd581 100644 --- a/lib/nexthop.h +++ b/lib/nexthop.h @@ -152,8 +152,12 @@ extern const char *nexthop2str(const struct nexthop *nexthop, char *str, int size); extern struct nexthop *nexthop_next(struct nexthop *nexthop); extern unsigned int nexthop_level(struct nexthop *nexthop); +/* Copies to an already allocated nexthop struct */ extern void nexthop_copy(struct nexthop *copy, const struct nexthop *nexthop, struct nexthop *rparent); +/* Duplicates a nexthop and returns the newly allocated nexthop */ +extern struct nexthop *nexthop_dup(const struct nexthop *nexthop, + struct nexthop *rparent); #ifdef __cplusplus } diff --git a/lib/nexthop_group.c b/lib/nexthop_group.c index 4575ad6f70..7b3fb15625 100644 --- a/lib/nexthop_group.c +++ b/lib/nexthop_group.c @@ -185,9 +185,7 @@ void copy_nexthops(struct nexthop **tnh, const struct nexthop *nh, const struct nexthop *nh1; for (nh1 = nh; nh1; nh1 = nh1->next) { - nexthop = nexthop_new(); - nexthop_copy(nexthop, nh1, rparent); - + nexthop = nexthop_dup(nh1, rparent); nexthop_add(tnh, nexthop); if (CHECK_FLAG(nh1->flags, NEXTHOP_FLAG_RECURSIVE))