]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_routemap.c
bgpd: Strip `delete` keyword when looking up for lcommunities
[mirror_frr.git] / bgpd / bgp_routemap.c
index c276f5ef7b87ba4dbbd31f26f712f7193d3fda3b..2e274124905042f1ccbcaf2c47d88453341c08a5 100644 (file)
@@ -2037,12 +2037,19 @@ static route_map_result_t route_set_lcommunity_delete(void *rule,
 static void *route_set_lcommunity_delete_compile(const char *arg)
 {
        struct rmap_community *rcom;
+       char **splits;
+       int num;
 
-       rcom = XCALLOC(MTYPE_ROUTE_MAP_COMPILED, sizeof(struct rmap_community));
+       frrstr_split(arg, " ", &splits, &num);
 
-       rcom->name = XSTRDUP(MTYPE_ROUTE_MAP_COMPILED, arg);
+       rcom = XCALLOC(MTYPE_ROUTE_MAP_COMPILED, sizeof(struct rmap_community));
+       rcom->name = XSTRDUP(MTYPE_ROUTE_MAP_COMPILED, splits[0]);
        rcom->name_hash = bgp_clist_hash_key(rcom->name);
 
+       for (int i = 0; i < num; i++)
+               XFREE(MTYPE_TMP, splits[i]);
+       XFREE(MTYPE_TMP, splits);
+
        return rcom;
 }
 
@@ -2685,11 +2692,11 @@ route_set_ipv6_nexthop_prefer_global(void *rule, const struct prefix *prefix,
                    && peer->su_remote
                    && sockunion_family(peer->su_remote) == AF_INET6) {
                        /* Set next hop preference to global */
-                       path->attr->mp_nexthop_prefer_global = TRUE;
+                       path->attr->mp_nexthop_prefer_global = true;
                        SET_FLAG(path->attr->rmap_change_flags,
                                 BATTR_RMAP_IPV6_PREFER_GLOBAL_CHANGED);
                } else {
-                       path->attr->mp_nexthop_prefer_global = FALSE;
+                       path->attr->mp_nexthop_prefer_global = false;
                        SET_FLAG(path->attr->rmap_change_flags,
                                 BATTR_RMAP_IPV6_PREFER_GLOBAL_CHANGED);
                }
@@ -4320,9 +4327,12 @@ DEFUN (set_community_delete,
        "Delete matching communities\n")
 {
        int idx_comm_list = 2;
+       char *args;
 
+       args = argv_concat(argv, argc, idx_comm_list);
        generic_set_add(vty, VTY_GET_CONTEXT(route_map_index), "comm-list",
-                       argv[idx_comm_list]->arg);
+                       args);
+       XFREE(MTYPE_TMP, args);
 
        return CMD_SUCCESS;
 }
@@ -4412,8 +4422,13 @@ DEFUN (set_lcommunity_delete,
        "Large Community-list name\n"
        "Delete matching large communities\n")
 {
+       int idx_lcomm_list = 2;
+       char *args;
+
+       args = argv_concat(argv, argc, idx_lcomm_list);
        generic_set_add(vty, VTY_GET_CONTEXT(route_map_index),
-                       "large-comm-list", argv[2]->arg);
+                       "large-comm-list", args);
+       XFREE(MTYPE_TMP, args);
 
        return CMD_SUCCESS;
 }