]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: add match-med nb support in aggregate cmd
authorChirag Shah <chirag@nvidia.com>
Sun, 11 Oct 2020 23:27:42 +0000 (16:27 -0700)
committerChirag Shah <chirag@nvidia.com>
Mon, 26 Oct 2020 15:57:15 +0000 (08:57 -0700)
Signed-off-by: Chirag Shah <chirag@nvidia.com>
bgpd/bgp_nb.c
bgpd/bgp_nb.h
bgpd/bgp_nb_config.c
bgpd/bgp_route.c
yang/frr-bgp-common.yang

index 8095c04405165fe627ff61c92feb39ef3605a95a..d8c795242a862fe864d5a92ac17d0ef96d116245 100644 (file)
@@ -1341,6 +1341,12 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .modify = bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_origin_modify,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-unicast/aggregate-route/match-med",
+                       .cbs = {
+                               .modify = bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_match_med_modify,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-unicast/admin-distance-route",
                        .cbs = {
@@ -1645,6 +1651,12 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .modify = bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_origin_modify,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-unicast/aggregate-route/match-med",
+                       .cbs = {
+                               .modify = bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_match_med_modify,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-unicast/admin-distance-route",
                        .cbs = {
@@ -2078,6 +2090,12 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .modify = bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_origin_modify,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-multicast/aggregate-route/match-med",
+                       .cbs = {
+                               .modify = bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_match_med_modify,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-multicast/admin-distance-route",
                        .cbs = {
@@ -2233,6 +2251,12 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .modify = bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_origin_modify,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-multicast/aggregate-route/match-med",
+                       .cbs = {
+                               .modify = bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_match_med_modify,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-multicast/admin-distance-route",
                        .cbs = {
index f05c22e2e2a0e0bf243c7f4972c2262fef7315ed..3d4dd988a623863cc2903a3d71d83a237ff8b05e 100644 (file)
@@ -570,6 +570,8 @@ int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_rmap_policy_expor
        struct nb_cb_destroy_args *args);
 int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_origin_modify(
        struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_match_med_modify(
+       struct nb_cb_modify_args *args);
 int bgp_global_afi_safis_afi_safi_ipv4_unicast_admin_distance_route_create(
        struct nb_cb_create_args *args);
 int bgp_global_afi_safis_afi_safi_ipv4_unicast_admin_distance_route_destroy(
@@ -704,6 +706,8 @@ int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_rmap_policy_expor
        struct nb_cb_destroy_args *args);
 int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_origin_modify(
        struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_match_med_modify(
+       struct nb_cb_modify_args *args);
 int bgp_global_afi_safis_afi_safi_ipv6_unicast_admin_distance_route_create(
        struct nb_cb_create_args *args);
 int bgp_global_afi_safis_afi_safi_ipv6_unicast_admin_distance_route_destroy(
@@ -892,6 +896,8 @@ int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_rmap_policy_exp
        struct nb_cb_destroy_args *args);
 int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_origin_modify(
        struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_match_med_modify(
+       struct nb_cb_modify_args *args);
 int bgp_global_afi_safis_afi_safi_ipv4_multicast_admin_distance_route_create(
        struct nb_cb_create_args *args);
 int bgp_global_afi_safis_afi_safi_ipv4_multicast_admin_distance_route_destroy(
@@ -958,6 +964,8 @@ int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_rmap_policy_exp
        struct nb_cb_destroy_args *args);
 int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_origin_modify(
        struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_match_med_modify(
+       struct nb_cb_modify_args *args);
 int bgp_global_afi_safis_afi_safi_ipv6_multicast_admin_distance_route_create(
        struct nb_cb_create_args *args);
 int bgp_global_afi_safis_afi_safi_ipv6_multicast_admin_distance_route_destroy(
index 3eb501b55880627df4f33a29769f70e6e21d45e0..dc8d0c8619b20e901563952e011f04c958f58c23 100644 (file)
@@ -5746,6 +5746,7 @@ void bgp_global_afi_safi_aggregate_route_apply_finish(
                                                  "./rmap-policy-export");
 
        origin = yang_dnode_get_enum(args->dnode, "./origin");
+       match_med = yang_dnode_get_bool(args->dnode, "./match-med");
 
        bgp_aggregate_set(bgp, &prefix, afi, safi, rmap_name, summary_only,
                          as_set, origin, match_med, suppress_map, args->errmsg,
@@ -5904,6 +5905,25 @@ int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_origin_modify(
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-unicast/aggregate-route/match-med
+ */
+int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_match_med_modify(
+       struct nb_cb_modify_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
 void bgp_global_afi_safi_admin_distance_route_apply_finish(
        struct nb_cb_apply_finish_args *args)
 {
@@ -7924,6 +7944,25 @@ int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_origin_modify(
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-unicast/aggregate-route/match-med
+ */
+int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_match_med_modify(
+       struct nb_cb_modify_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-unicast/admin-distance-route
@@ -9669,6 +9708,25 @@ int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_origin_modify(
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-multicast/aggregate-route/match-med
+ */
+int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_match_med_modify(
+       struct nb_cb_modify_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-multicast/admin-distance-route
@@ -10441,6 +10499,25 @@ int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_origin_modify(
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-multicast/aggregate-route/match-med
+ */
+int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_match_med_modify(
+       struct nb_cb_modify_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-multicast/admin-distance-route
index 5f6272b16ecb10d1edd1f5078607e906e10a9e83..ffef998a176f430a20a77b5b5f3fcbf2d6046cf4 100644 (file)
@@ -7562,6 +7562,12 @@ DEFPY_YANG(
                nb_cli_enqueue_change(vty, "./summary-only", NB_OP_MODIFY,
                                      "false");
 
+       if (!no && match_med)
+               nb_cli_enqueue_change(vty, "./match-med", NB_OP_MODIFY, "true");
+       else
+               nb_cli_enqueue_change(vty, "./match-med", NB_OP_MODIFY,
+                                     "false");
+
        if (rmap_name)
                nb_cli_enqueue_change(vty, "./rmap-policy-export", NB_OP_MODIFY,
                                      rmap_name);
@@ -7624,6 +7630,12 @@ DEFPY_YANG(aggregate_addressv6, aggregate_addressv6_cmd,
                nb_cli_enqueue_change(vty, "./summary-only", NB_OP_MODIFY,
                                      "false");
 
+       if (!no && match_med)
+               nb_cli_enqueue_change(vty, "./match-med", NB_OP_MODIFY, "true");
+       else
+               nb_cli_enqueue_change(vty, "./match-med", NB_OP_MODIFY,
+                                     "false");
+
        if (rmap_name)
                nb_cli_enqueue_change(vty, "./rmap-policy-export", NB_OP_MODIFY,
                                      rmap_name);
@@ -7664,6 +7676,9 @@ void cli_show_bgp_global_afi_safi_unicast_aggregate_route(
        if (origin != BGP_ORIGIN_UNSPECIFIED)
                vty_out(vty, " origin %s", bgp_origin2str(origin));
 
+       if (yang_dnode_get_bool(dnode, "./match-med"))
+               vty_out(vty, " matching-MED-only");
+
        vty_out(vty, "\n");
 }
 
index 9c412c3d82954ee9b705234382fa9f65dc2d9a3d..8e93ed35ac1230eaf836b9954e6849cf4f3d002a 100644 (file)
@@ -807,6 +807,13 @@ submodule frr-bgp-common {
       description
         "BGP origin type.";
     }
+    leaf match-med {
+      type boolean;
+      default "false";
+      description
+        "When set to 'true' aggregate-route matches only
+         med.";
+    }
   }
 
   grouping admin-distance {