]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib, sharpd, zebra: Add new enum for lsp type and pass it through.
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 8 Feb 2018 14:50:32 +0000 (09:50 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 9 Feb 2018 01:35:14 +0000 (20:35 -0500)
Add the ability to pass the lsp owner type through the zapi
and in addition add a new label type for the sharp protocol
for testing.

Finally modify zebra_mpls.h to not have defaults specified
for the enum.  That way when we add a new LSP type the
compile fails and the person doing the addition knows
where he has to touch shit.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
lib/mpls.h
lib/zclient.c
lib/zclient.h
sharpd/sharp_zebra.c
zebra/zebra_mpls.h
zebra/zserv.c

index c6c0297ff093b76394581842b6ec010f78134b19..b55d4875ae4d2877c1f1cbfc6431e860092248ae 100644 (file)
@@ -115,7 +115,8 @@ enum lsp_types_t {
        ZEBRA_LSP_STATIC = 1, /* Static LSP. */
        ZEBRA_LSP_LDP = 2,    /* LDP LSP. */
        ZEBRA_LSP_BGP = 3,    /* BGP LSP. */
-       ZEBRA_LSP_SR = 4      /* Segment Routing LSP. */
+       ZEBRA_LSP_SR = 4,     /* Segment Routing LSP. */
+       ZEBRA_LSP_SHARP = 5,  /* Identifier for test protocol */
 };
 
 /* Functions for basic label operations. */
index f8cdc61f7d0a5128c6009ff83b89e74f47de614a..8e8b50b15eaad375920d70b8c82c7f59814c74e0 100644 (file)
@@ -364,7 +364,7 @@ static int zebra_hello_send(struct zclient *zclient)
 }
 
 void zclient_send_vrf_label(struct zclient *zclient, vrf_id_t vrf_id,
-                           mpls_label_t label)
+                           mpls_label_t label, enum lsp_types_t ltype)
 {
        struct stream *s;
 
@@ -373,6 +373,7 @@ void zclient_send_vrf_label(struct zclient *zclient, vrf_id_t vrf_id,
 
        zclient_create_header(s, ZEBRA_VRF_LABEL, vrf_id);
        stream_putl(s, label);
+       stream_putc(s, ltype);
        stream_putw_at(s, 0, stream_get_endp(s));
        zclient_send_message(zclient);
 }
index 23cedf97bd6f57cf5c4f5f87ba01d7b52b1c5140..ff65838b53bcbd9db14a552baeb86af1fc04b7d0 100644 (file)
@@ -392,7 +392,7 @@ extern void redist_del_instance(struct redist_proto *, u_short);
  * operation.
  */
 extern void zclient_send_vrf_label(struct zclient *zclient, vrf_id_t vrf_id,
-                                  mpls_label_t label);
+                                  mpls_label_t label, enum lsp_types_t ltype);
 
 extern void zclient_send_reg_requests(struct zclient *, vrf_id_t);
 extern void zclient_send_dereg_requests(struct zclient *, vrf_id_t);
index 5dffd4ab9b492a8d82f185f5bb57a9348818aacf..f771e53f0c5da148ff2f79f0cb222e2431b5033c 100644 (file)
@@ -154,7 +154,7 @@ static void zebra_connected(struct zclient *zclient)
 
 void vrf_label_add(vrf_id_t vrf_id, mpls_label_t label)
 {
-       zclient_send_vrf_label(zclient, vrf_id, label);
+       zclient_send_vrf_label(zclient, vrf_id, label, ZEBRA_LSP_SHARP);
 }
 
 void route_add(struct prefix *p, struct nexthop *nh)
index 27a49716913b41a0d4b95fce0260a88a27f10748..fd14b29ca9d2afddc6c064c345568ec46a5d8d19 100644 (file)
@@ -428,9 +428,19 @@ static inline u_char lsp_distance(enum lsp_types_t type)
                return (route_distance(ZEBRA_ROUTE_LDP));
        case ZEBRA_LSP_BGP:
                return (route_distance(ZEBRA_ROUTE_BGP));
-       default:
+       case ZEBRA_LSP_NONE:
+       case ZEBRA_LSP_SHARP:
+       case ZEBRA_LSP_SR:
                return 150;
        }
+
+       /*
+        * For some reason certain compilers do not believe
+        * that all the cases have been handled.  And
+        * WTF does this work differently than when I removed
+        * the default case????
+        */
+       return 150;
 }
 
 /*
@@ -444,6 +454,8 @@ static inline enum lsp_types_t lsp_type_from_re_type(int re_type)
                return ZEBRA_LSP_STATIC;
        case ZEBRA_ROUTE_BGP:
                return ZEBRA_LSP_BGP;
+       case ZEBRA_ROUTE_SHARP:
+               return ZEBRA_LSP_SHARP;
        default:
                return ZEBRA_LSP_NONE;
        }
@@ -464,9 +476,18 @@ static inline int re_type_from_lsp_type(enum lsp_types_t lsp_type)
        case ZEBRA_LSP_SR:
                return ZEBRA_ROUTE_OSPF;
        case ZEBRA_LSP_NONE:
-       default:
                return ZEBRA_ROUTE_KERNEL;
+       case ZEBRA_LSP_SHARP:
+               return ZEBRA_ROUTE_SHARP;
        }
+
+       /*
+        * For some reason certain compilers do not believe
+        * that all the cases have been handled.  And
+        * WTF does this work differently than when I removed
+        * the default case????
+        */
+       return ZEBRA_ROUTE_KERNEL;
 }
 
 /* NHLFE type as printable string. */
@@ -481,9 +502,19 @@ static inline const char *nhlfe_type2str(enum lsp_types_t lsp_type)
                return "BGP";
        case ZEBRA_LSP_SR:
                return "SR";
-       default:
+       case ZEBRA_LSP_SHARP:
+               return "SHARP";
+       case ZEBRA_LSP_NONE:
                return "Unknown";
        }
+
+       /*
+        * For some reason certain compilers do not believe
+        * that all the cases have been handled.  And
+        * WTF does this work differently than when I removed
+        * the default case????
+        */
+       return "Unknown";
 }
 
 static inline void mpls_mark_lsps_for_processing(struct zebra_vrf *zvrf)
index bf8f66e20f9d1bab878deb18b801012b7ddff028..3d8be27f3b79d0fc076f86244479ab375f7bb768 100644 (file)
@@ -2493,16 +2493,17 @@ static void zread_vrf_label(struct zserv *client,
        mpls_label_t nlabel;
        struct stream *s;
        struct zebra_vrf *def_zvrf;
+       enum lsp_types_t ltype;
 
        s = client->ibuf;
        STREAM_GETL(s, nlabel);
-
        if (nlabel == zvrf->label) {
                /*
                 * Nothing to do here move along
                 */
                return;
        }
+       STREAM_GETC(s, ltype);
 
        if (zvrf->vrf->vrf_id != VRF_DEFAULT)
                ifp = if_lookup_by_name(zvrf->vrf->name, zvrf->vrf->vrf_id);
@@ -2518,13 +2519,12 @@ static void zread_vrf_label(struct zserv *client,
        def_zvrf = zebra_vrf_lookup_by_id(VRF_DEFAULT);
 
        if (zvrf->label != MPLS_LABEL_IPV4_EXPLICIT_NULL)
-               mpls_lsp_uninstall(def_zvrf, ZEBRA_LSP_STATIC,
-                                  zvrf->label, NEXTHOP_TYPE_IFINDEX,
-                                  NULL, ifp->ifindex);
+               mpls_lsp_uninstall(def_zvrf, ltype, zvrf->label,
+                                  NEXTHOP_TYPE_IFINDEX, NULL, ifp->ifindex);
 
        if (nlabel != MPLS_LABEL_IPV4_EXPLICIT_NULL)
-               mpls_lsp_install(def_zvrf, ZEBRA_LSP_STATIC, nlabel,
-                                MPLS_LABEL_IMPLICIT_NULL, NEXTHOP_TYPE_IFINDEX, NULL, ifp->ifindex);
+               mpls_lsp_install(def_zvrf, ltype, nlabel, MPLS_LABEL_IMPLICIT_NULL,
+                                NEXTHOP_TYPE_IFINDEX, NULL, ifp->ifindex);
 
        zvrf->label = nlabel;
 stream_failure: