]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: rename pseudowire destination api
authorMark Stapp <mjs@voltanet.io>
Thu, 28 Feb 2019 21:23:21 +0000 (16:23 -0500)
committerMark Stapp <mjs@voltanet.io>
Thu, 7 Mar 2019 20:06:01 +0000 (15:06 -0500)
In prep for adding nexthop info for pws, rename the accessor
for the pw destination. Add a nexthop-group to the pw
data in the dataplane module.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
zebra/zebra_dplane.c
zebra/zebra_dplane.h
zebra/zebra_mpls_openbsd.c

index 894914e57645defcf1100ea9fe12277348f74a1d..63ac7666f4a44c02aa6ad4ff81c0bf5dcb301f84 100644 (file)
@@ -111,10 +111,13 @@ struct dplane_pw_info {
        int af;
        int status;
        uint32_t flags;
-       union g_addr nexthop;
+       union g_addr dest;
        mpls_label_t local_label;
        mpls_label_t remote_label;
 
+       /* Nexthops */
+       struct nexthop_group nhg;
+
        union pw_protocol_fields fields;
 };
 
@@ -386,6 +389,15 @@ static void dplane_ctx_free(struct zebra_dplane_ctx **pctx)
 
        case DPLANE_OP_PW_INSTALL:
        case DPLANE_OP_PW_UNINSTALL:
+               /* Free allocated nexthops */
+               if ((*pctx)->u.pw.nhg.nexthop) {
+                       /* This deals with recursive nexthops too */
+                       nexthops_free((*pctx)->u.pw.nhg.nexthop);
+
+                       (*pctx)->u.pw.nhg.nexthop = NULL;
+               }
+               break;
+
        case DPLANE_OP_NONE:
                break;
        }
@@ -814,12 +826,12 @@ int dplane_ctx_get_pw_status(const struct zebra_dplane_ctx *ctx)
        return ctx->u.pw.status;
 }
 
-const union g_addr *dplane_ctx_get_pw_nexthop(
+const union g_addr *dplane_ctx_get_pw_dest(
        const struct zebra_dplane_ctx *ctx)
 {
        DPLANE_CTX_VALID(ctx);
 
-       return &(ctx->u.pw.nexthop);
+       return &(ctx->u.pw.dest);
 }
 
 const union pw_protocol_fields *dplane_ctx_get_pw_proto(
@@ -1056,6 +1068,7 @@ static int dplane_ctx_pw_init(struct zebra_dplane_ctx *ctx,
 
        /* This name appears to be c-string, so we use string copy. */
        strlcpy(ctx->u.pw.ifname, pw->ifname, sizeof(ctx->u.pw.ifname));
+
        ctx->zd_vrf_id = pw->vrf_id;
        ctx->u.pw.ifindex = pw->ifindex;
        ctx->u.pw.type = pw->type;
@@ -1064,7 +1077,7 @@ static int dplane_ctx_pw_init(struct zebra_dplane_ctx *ctx,
        ctx->u.pw.remote_label = pw->remote_label;
        ctx->u.pw.flags = pw->flags;
 
-       ctx->u.pw.nexthop = pw->nexthop;
+       ctx->u.pw.dest = pw->nexthop;
 
        ctx->u.pw.fields = pw->data;
 
index 81226961e85d97c6e95157576f409b222c6994df..84da20f2a7dabde1dbe787b0fdd6f297c044efe6 100644 (file)
@@ -215,7 +215,7 @@ int dplane_ctx_get_pw_type(const struct zebra_dplane_ctx *ctx);
 int dplane_ctx_get_pw_af(const struct zebra_dplane_ctx *ctx);
 uint32_t dplane_ctx_get_pw_flags(const struct zebra_dplane_ctx *ctx);
 int dplane_ctx_get_pw_status(const struct zebra_dplane_ctx *ctx);
-const union g_addr *dplane_ctx_get_pw_nexthop(
+const union g_addr *dplane_ctx_get_pw_dest(
        const struct zebra_dplane_ctx *ctx);
 const union pw_protocol_fields *dplane_ctx_get_pw_proto(
        const struct zebra_dplane_ctx *ctx);
index ade36cbce4e1c60fb00db1023df26267ad378e1c..12ec84b92fe2d9997a0a889a2e0300e94087eaa6 100644 (file)
@@ -342,7 +342,7 @@ static enum zebra_dplane_result kmpw_install(struct zebra_dplane_ctx *ctx)
 
        /* pseudowire nexthop */
        memset(&ss, 0, sizeof(ss));
-       gaddr = dplane_ctx_get_pw_nexthop(ctx);
+       gaddr = dplane_ctx_get_pw_dest(ctx);
        switch (dplane_ctx_get_pw_af(ctx)) {
        case AF_INET:
                sa_in->sin_family = AF_INET;