]> git.puffer.fish Git - mirror/frr.git/commitdiff
zserv: identify label type based on the client protocol
authorRenato Westphal <renato@opensourcerouting.org>
Sat, 19 Aug 2017 23:00:25 +0000 (20:00 -0300)
committerRenato Westphal <renato@opensourcerouting.org>
Wed, 23 Aug 2017 20:45:17 +0000 (17:45 -0300)
This fixes a problem where the type of the BGP-LU labels was not
being set.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
zebra/zserv.c

index a196eb5945d3049bcbe2d21566eeb076f1a9796e..e00e1d7c20a17b903c9c47c888675d3452cb8585 100644 (file)
@@ -1176,6 +1176,7 @@ static int zread_ipv4_add(struct zserv *client, u_short length,
        ifindex_t ifindex;
        safi_t safi;
        int ret;
+       enum lsp_types_t label_type;
        mpls_label_t label;
        struct nexthop *nexthop;
 
@@ -1208,6 +1209,9 @@ static int zread_ipv4_add(struct zserv *client, u_short length,
                zserv_nexthop_num_warn(__func__, (const struct prefix *)&p,
                                       nexthop_num);
 
+               if (CHECK_FLAG(message, ZAPI_MESSAGE_LABEL))
+                       label_type = lsp_type_from_re_type(client->proto);
+
                for (i = 0; i < nexthop_num; i++) {
                        nexthop_type = stream_getc(s);
 
@@ -1224,9 +1228,8 @@ static int zread_ipv4_add(struct zserv *client, u_short length,
                                 * by label. */
                                if (CHECK_FLAG(message, ZAPI_MESSAGE_LABEL)) {
                                        label = (mpls_label_t)stream_getl(s);
-                                       nexthop_add_labels(
-                                               nexthop, nexthop->nh_label_type,
-                                               1, &label);
+                                       nexthop_add_labels(nexthop, label_type,
+                                                          1, &label);
                                }
                                break;
                        case NEXTHOP_TYPE_IPV4_IFINDEX:
@@ -1339,6 +1342,7 @@ static int zread_ipv4_route_ipv6_nexthop_add(struct zserv *client,
        static unsigned int ifindices[MULTIPATH_NUM];
        int ret;
        static mpls_label_t labels[MULTIPATH_NUM];
+       enum lsp_types_t label_type;
        mpls_label_t label;
        struct nexthop *nexthop;
 
@@ -1379,6 +1383,10 @@ static int zread_ipv4_route_ipv6_nexthop_add(struct zserv *client,
                nexthop_num = stream_getc(s);
                zserv_nexthop_num_warn(__func__, (const struct prefix *)&p,
                                       nexthop_num);
+
+               if (CHECK_FLAG(message, ZAPI_MESSAGE_LABEL))
+                       label_type = lsp_type_from_re_type(client->proto);
+
                for (i = 0; i < nexthop_num; i++) {
                        nexthop_type = stream_getc(s);
 
@@ -1423,9 +1431,8 @@ static int zread_ipv4_route_ipv6_nexthop_add(struct zserv *client,
                                                re, &nexthops[i]);
 
                                if (CHECK_FLAG(message, ZAPI_MESSAGE_LABEL))
-                                       nexthop_add_labels(
-                                               nexthop, nexthop->nh_label_type,
-                                               1, &labels[i]);
+                                       nexthop_add_labels(nexthop, label_type,
+                                                          1, &labels[i]);
                        } else {
                                if ((i < if_count) && ifindices[i])
                                        route_entry_nexthop_ifindex_add(
@@ -1484,6 +1491,7 @@ static int zread_ipv6_add(struct zserv *client, u_short length,
        static unsigned int ifindices[MULTIPATH_NUM];
        int ret;
        static mpls_label_t labels[MULTIPATH_NUM];
+       enum lsp_types_t label_type;
        mpls_label_t label;
        struct nexthop *nexthop;
 
@@ -1530,6 +1538,10 @@ static int zread_ipv6_add(struct zserv *client, u_short length,
                nexthop_num = stream_getc(s);
                zserv_nexthop_num_warn(__func__, (const struct prefix *)&p,
                                       nexthop_num);
+
+               if (CHECK_FLAG(message, ZAPI_MESSAGE_LABEL))
+                       label_type = lsp_type_from_re_type(client->proto);
+
                for (i = 0; i < nexthop_num; i++) {
                        nexthop_type = stream_getc(s);
 
@@ -1578,9 +1590,8 @@ static int zread_ipv6_add(struct zserv *client, u_short length,
                                        nexthop = route_entry_nexthop_ipv6_add(
                                                re, &nexthops[i]);
                                if (CHECK_FLAG(message, ZAPI_MESSAGE_LABEL))
-                                       nexthop_add_labels(
-                                               nexthop, nexthop->nh_label_type,
-                                               1, &labels[i]);
+                                       nexthop_add_labels(nexthop, label_type,
+                                                          1, &labels[i]);
                        } else {
                                if ((i < if_count) && ifindices[i])
                                        route_entry_nexthop_ifindex_add(