]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Add zebra_static_route_leak function
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 9 Jan 2018 21:25:45 +0000 (16:25 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 12 Jan 2018 14:22:46 +0000 (09:22 -0500)
Add a function to handle the route leaking of a static
route.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
zebra/zebra_vty.c

index c56df8205364dbe22fe6da3e1f409f5a9ef1d850..45e204dcc9038711f6acd5278564a9498ad4d742 100644 (file)
@@ -78,13 +78,16 @@ static void vty_show_ip_route_summary_prefix(struct vty *vty,
 #define CMD_VNI_RANGE "(1-16777215)"
 
 /* General function for static route. */
-static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
-                             const char *negate, const char *dest_str,
-                             const char *mask_str, const char *src_str,
-                             const char *gate_str, const char *ifname,
-                             const char *flag_str, const char *tag_str,
-                             const char *distance_str, const char *vrf_id_str,
-                             const char *label_str)
+static int zebra_static_route_leak(struct vty *vty,
+                                  struct zebra_vrf *zvrf,
+                                  struct zebra_vrf *nh_zvrf,
+                                  afi_t afi, safi_t safi,
+                                  const char *negate, const char *dest_str,
+                                  const char *mask_str, const char *src_str,
+                                  const char *gate_str, const char *ifname,
+                                  const char *flag_str, const char *tag_str,
+                                  const char *distance_str,
+                                  const char *label_str)
 {
        int ret;
        u_char distance;
@@ -95,7 +98,6 @@ static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
        struct in_addr mask;
        enum static_blackhole_type bh_type = 0;
        route_tag_t tag = 0;
-       struct zebra_vrf *zvrf;
        u_char type;
        struct static_nh_label snh_label;
 
@@ -145,14 +147,6 @@ static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
        if (tag_str)
                tag = strtoul(tag_str, NULL, 10);
 
-       /* VRF id */
-       zvrf = zebra_vrf_lookup_by_name(vrf_id_str);
-
-       if (!zvrf) {
-               vty_out(vty, "%% vrf %s is not defined\n", vrf_id_str);
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-
        /* Labels */
        memset(&snh_label, 0, sizeof(struct static_nh_label));
        if (label_str) {
@@ -247,6 +241,31 @@ static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
        return CMD_SUCCESS;
 }
 
+static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
+                             const char *negate, const char *dest_str,
+                             const char *mask_str, const char *src_str,
+                             const char *gate_str, const char *ifname,
+                             const char *flag_str, const char *tag_str,
+                             const char *distance_str, const char *vrf_id_str,
+                             const char *label_str)
+{
+       struct zebra_vrf *zvrf;
+
+       /* VRF id */
+       zvrf = zebra_vrf_lookup_by_name(vrf_id_str);
+
+       if (!zvrf) {
+               vty_out(vty, "%% vrf %s is not defined\n", vrf_id_str);
+               return CMD_WARNING_CONFIG_FAILED;
+       }
+
+       return zebra_static_route_leak(vty, zvrf, zvrf, afi, safi,
+                                      negate, dest_str, mask_str, src_str,
+                                      gate_str, ifname, flag_str, tag_str,
+                                      distance_str, label_str);
+}
+
+
 /* Static unicast routes for multicast RPF lookup. */
 DEFPY (ip_mroute_dist,
        ip_mroute_dist_cmd,