]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_flowspec_vty.c
bgpd isisd lib: fix return on void functions
[mirror_frr.git] / bgpd / bgp_flowspec_vty.c
index 3f450fc4ed65031938e15bfea5591691c14a7bab..4fb055bcc3cbe97ee4aea4fc0351e22ed72072c8 100644 (file)
@@ -253,8 +253,8 @@ void bgp_fs_nlri_get_string(unsigned char *nlri_content, size_t len,
 }
 
 void route_vty_out_flowspec(struct vty *vty, struct prefix *p,
-                           struct bgp_info *binfo,
-                           int display, json_object *json_paths)
+                           struct bgp_path_info *path, int display,
+                           json_object *json_paths)
 {
        struct attr *attr;
        char return_string[BGP_FLOWSPEC_STRING_DISPLAY_MAX];
@@ -274,9 +274,9 @@ void route_vty_out_flowspec(struct vty *vty, struct prefix *p,
                        else
                                json_nlri_path = json_paths;
                }
-               if (display == NLRI_STRING_FORMAT_LARGE && binfo)
+               if (display == NLRI_STRING_FORMAT_LARGE && path)
                        vty_out(vty, "BGP flowspec entry: (flags 0x%x)\n",
-                               binfo->flags);
+                               path->flags);
                bgp_fs_nlri_get_string((unsigned char *)
                                       p->u.prefix_flowspec.ptr,
                                       p->u.prefix_flowspec.prefixlen,
@@ -292,11 +292,11 @@ void route_vty_out_flowspec(struct vty *vty, struct prefix *p,
                else if (json_paths && display == NLRI_STRING_FORMAT_JSON)
                        json_object_array_add(json_paths, json_nlri_path);
        }
-       if (!binfo)
+       if (!path)
                return;
-       if (binfo->attr && binfo->attr->ecommunity) {
+       if (path->attr && path->attr->ecommunity) {
                /* Print attribute */
-               attr = binfo->attr;
+               attr = path->attr;
                s = ecommunity_ecom2str(attr->ecommunity,
                                        ECOMMUNITY_FORMAT_ROUTE_MAP, 0);
                if (!s)
@@ -318,7 +318,7 @@ void route_vty_out_flowspec(struct vty *vty, struct prefix *p,
                        vty_out(vty, "\tNH %-16s\n", inet_ntoa(attr->nexthop));
                XFREE(MTYPE_ECOMMUNITY_STR, s);
        }
-       peer_uptime(binfo->uptime, timebuf, BGP_UPTIME_LEN, 0, NULL);
+       peer_uptime(path->uptime, timebuf, BGP_UPTIME_LEN, 0, NULL);
        if (display == NLRI_STRING_FORMAT_LARGE) {
                vty_out(vty, "\treceived for %8s\n", timebuf);
        } else if (json_paths) {
@@ -329,13 +329,14 @@ void route_vty_out_flowspec(struct vty *vty, struct prefix *p,
                        json_object_array_add(json_paths, json_time_path);
        }
        if (display == NLRI_STRING_FORMAT_LARGE) {
-               struct bgp_info_extra *extra = bgp_info_extra_get(binfo);
+               struct bgp_path_info_extra *extra =
+                       bgp_path_info_extra_get(path);
 
                if (extra->bgp_fs_pbr) {
                        struct listnode *node;
                        struct bgp_pbr_match_entry *bpme;
                        struct bgp_pbr_match *bpm;
-                       int unit = 0;
+                       bool list_began = false;
                        struct list *list_bpm;
 
                        list_bpm = list_new();
@@ -347,17 +348,17 @@ void route_vty_out_flowspec(struct vty *vty, struct prefix *p,
                                if (listnode_lookup(list_bpm, bpm))
                                        continue;
                                listnode_add(list_bpm, bpm);
-                               if (unit == 0)
+                               if (!list_began) {
                                        vty_out(vty, " (");
-                               else
+                                       list_began = true;
+                               } else
                                        vty_out(vty, ", ");
                                vty_out(vty, "%s", bpm->ipset_name);
-                               unit++;
                        }
-                       if (unit)
+                       if (list_began)
                                vty_out(vty, ")");
                        vty_out(vty, "\n");
-                       list_delete_all_node(list_bpm);
+                       list_delete(&list_bpm);
                } else
                        vty_out(vty, "\tnot installed in PBR\n");
        }
@@ -365,11 +366,10 @@ void route_vty_out_flowspec(struct vty *vty, struct prefix *p,
 
 int bgp_show_table_flowspec(struct vty *vty, struct bgp *bgp, afi_t afi,
                            struct bgp_table *table, enum bgp_show_type type,
-                           void *output_arg, uint8_t use_json,
-                           int is_last, unsigned long *output_cum,
-                           unsigned long *total_cum)
+                           void *output_arg, bool use_json, int is_last,
+                           unsigned long *output_cum, unsigned long *total_cum)
 {
-       struct bgp_info *ri;
+       struct bgp_path_info *pi;
        struct bgp_node *rn;
        unsigned long total_count = 0;
        json_object *json_paths = NULL;
@@ -385,12 +385,10 @@ int bgp_show_table_flowspec(struct vty *vty, struct bgp *bgp, afi_t afi,
                        json_paths = json_object_new_array();
                        display = NLRI_STRING_FORMAT_JSON;
                }
-               for (ri = rn->info; ri; ri = ri->next) {
+               for (pi = rn->info; pi; pi = pi->next) {
                        total_count++;
-                       route_vty_out_flowspec(vty, &rn->p,
-                                              ri, display,
+                       route_vty_out_flowspec(vty, &rn->p, pi, display,
                                               json_paths);
-
                }
                if (use_json) {
                        vty_out(vty, "%s\n",
@@ -460,8 +458,6 @@ int bgp_fs_config_write_pbr(struct vty *vty, struct bgp *bgp,
        RB_FOREACH (pbr_if, bgp_pbr_interface_head, head) {
                vty_out(vty, "  local-install %s\n", pbr_if->name);
        }
-       if (!bgp_pbr_interface_any)
-               vty_out(vty, "  no local-install any\n");
        return declare_node ? 1 : 0;
 }
 
@@ -522,24 +518,39 @@ DEFUN (bgp_fs_local_install_ifname,
 {
        struct bgp *bgp = VTY_GET_CONTEXT(bgp);
        int idx = 0;
-       const char *no = strmatch(argv[0]->text, (char *)"no") ? "no" : NULL;
+       const char *no = strmatch(argv[0]->text, "no") ? "no" : NULL;
        char *ifname = argv_find(argv, argc, "INTERFACE", &idx) ?
                argv[idx]->arg : NULL;
 
        return bgp_fs_local_install_interface(bgp, no, ifname);
 }
 
-DEFUN (bgp_fs_local_install_any,
-       bgp_fs_local_install_any_cmd,
-       "[no] local-install any",
-       NO_STR
-       "Apply local policy routing\n"
-       "Any Interface\n")
+extern int bgp_flowspec_display_match_per_ip(afi_t afi, struct bgp_table *rib,
+                                            struct prefix *match,
+                                            int prefix_check, struct vty *vty,
+                                            bool use_json,
+                                            json_object *json_paths)
 {
-       struct bgp *bgp = VTY_GET_CONTEXT(bgp);
-       const char *no = strmatch(argv[0]->text, (char *)"no") ? "no" : NULL;
+       struct bgp_node *rn;
+       struct prefix *prefix;
+       int display = 0;
+
+       for (rn = bgp_table_top(rib); rn; rn = bgp_route_next(rn)) {
+               prefix = &rn->p;
 
-       return bgp_fs_local_install_interface(bgp, no, NULL);
+               if (prefix->family != AF_FLOWSPEC)
+                       continue;
+
+               if (bgp_flowspec_contains_prefix(prefix, match, prefix_check)) {
+                       route_vty_out_flowspec(vty, &rn->p,
+                                              rn->info, use_json ?
+                                              NLRI_STRING_FORMAT_JSON :
+                                              NLRI_STRING_FORMAT_LARGE,
+                                              json_paths);
+                       display++;
+               }
+       }
+       return display;
 }
 
 void bgp_flowspec_vty_init(void)
@@ -548,6 +559,5 @@ void bgp_flowspec_vty_init(void)
        install_element(CONFIG_NODE, &debug_bgp_flowspec_cmd);
        install_element(ENABLE_NODE, &no_debug_bgp_flowspec_cmd);
        install_element(CONFIG_NODE, &no_debug_bgp_flowspec_cmd);
-       install_element(BGP_FLOWSPECV4_NODE, &bgp_fs_local_install_any_cmd);
        install_element(BGP_FLOWSPECV4_NODE, &bgp_fs_local_install_ifname_cmd);
 }