]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/routemap.c
Merge pull request #5793 from ton31337/fix/formatting_show_bgp_summary_failed
[mirror_frr.git] / lib / routemap.c
index e07ad0812333b892839d81fd78a12267a399d6e9..a604c5921cd2b5ff454351a0fed75678d4fc0d96 100644 (file)
@@ -308,15 +308,21 @@ int generic_match_add(struct vty *vty, struct route_map_index *index,
        ret = route_map_add_match(index, command, arg, type);
        switch (ret) {
        case RMAP_RULE_MISSING:
-               vty_out(vty, "%% [%s] Can't find rule.\n", frr_protonameinst);
+               if (vty)
+                       vty_out(vty, "%% [%s] Can't find rule.\n",
+                               frr_protonameinst);
+               else
+                       zlog_warn("Can't find rule: %s", command);
                return CMD_WARNING_CONFIG_FAILED;
-               break;
        case RMAP_COMPILE_ERROR:
-               vty_out(vty,
-                       "%% [%s] Argument form is unsupported or malformed.\n",
-                       frr_protonameinst);
+               if (vty)
+                       vty_out(vty,
+                               "%% [%s] Argument form is unsupported or malformed.\n",
+                               frr_protonameinst);
+               else
+                       zlog_warn("Argument form is unsupported or malformed: "
+                                 "%s %s", command, arg);
                return CMD_WARNING_CONFIG_FAILED;
-               break;
        case RMAP_COMPILE_SUCCESS:
                /*
                 * Nothing to do here move along
@@ -353,13 +359,21 @@ int generic_match_delete(struct vty *vty, struct route_map_index *index,
        ret = route_map_delete_match(index, command, dep_name, type);
        switch (ret) {
        case RMAP_RULE_MISSING:
-               vty_out(vty, "%% [%s] Can't find rule.\n", frr_protonameinst);
+               if (vty)
+                       vty_out(vty, "%% [%s] Can't find rule.\n",
+                               frr_protonameinst);
+               else
+                       zlog_warn("Can't find rule: %s", command);
                retval = CMD_WARNING_CONFIG_FAILED;
                break;
        case RMAP_COMPILE_ERROR:
-               vty_out(vty,
-                       "%% [%s] Argument form is unsupported or malformed.\n",
-                       frr_protonameinst);
+               if (vty)
+                       vty_out(vty,
+                               "%% [%s] Argument form is unsupported or malformed.\n",
+                               frr_protonameinst);
+               else
+                       zlog_warn("Argument form is unsupported or malformed: "
+                                 "%s %s", command, arg);
                retval = CMD_WARNING_CONFIG_FAILED;
                break;
        case RMAP_COMPILE_SUCCESS:
@@ -383,15 +397,20 @@ int generic_set_add(struct vty *vty, struct route_map_index *index,
        ret = route_map_add_set(index, command, arg);
        switch (ret) {
        case RMAP_RULE_MISSING:
-               vty_out(vty, "%% [%s] Can't find rule.\n", frr_protonameinst);
+               if (vty)
+                       vty_out(vty, "%% [%s] Can't find rule.\n", frr_protonameinst);
+               else
+                       zlog_warn("Can't find rule: %s", command);
                return CMD_WARNING_CONFIG_FAILED;
-               break;
        case RMAP_COMPILE_ERROR:
-               vty_out(vty,
-                       "%% [%s] Argument form is unsupported or malformed.\n",
-                       frr_protonameinst);
+               if (vty)
+                       vty_out(vty,
+                               "%% [%s] Argument form is unsupported or malformed.\n",
+                               frr_protonameinst);
+               else
+                       zlog_warn("Argument form is unsupported or malformed: "
+                                 "%s %s", command, arg);
                return CMD_WARNING_CONFIG_FAILED;
-               break;
        case RMAP_COMPILE_SUCCESS:
                break;
        }
@@ -407,15 +426,20 @@ int generic_set_delete(struct vty *vty, struct route_map_index *index,
        ret = route_map_delete_set(index, command, arg);
        switch (ret) {
        case RMAP_RULE_MISSING:
-               vty_out(vty, "%% [%s] Can't find rule.\n", frr_protonameinst);
+               if (vty)
+                       vty_out(vty, "%% [%s] Can't find rule.\n", frr_protonameinst);
+               else
+                       zlog_warn("Can't find rule: %s", command);
                return CMD_WARNING_CONFIG_FAILED;
-               break;
        case RMAP_COMPILE_ERROR:
-               vty_out(vty,
-                       "%% [%s] Argument form is unsupported or malformed.\n",
-                       frr_protonameinst);
+               if (vty)
+                       vty_out(vty,
+                               "%% [%s] Argument form is unsupported or malformed.\n",
+                               frr_protonameinst);
+               else
+                       zlog_warn("Argument form is unsupported or malformed: "
+                                 "%s %s", command, arg);
                return CMD_WARNING_CONFIG_FAILED;
-               break;
        case RMAP_COMPILE_SUCCESS:
                break;
        }
@@ -885,6 +909,7 @@ static struct route_map_index *route_map_index_new(void)
 
        new = XCALLOC(MTYPE_ROUTE_MAP_INDEX, sizeof(struct route_map_index));
        new->exitpolicy = RMAP_EXIT; /* Default to Cisco-style */
+       TAILQ_INIT(&new->rhclist);
        QOBJ_REG(new, route_map_index);
        return new;
 }
@@ -900,6 +925,10 @@ void route_map_index_delete(struct route_map_index *index, int notify)
                zlog_debug("Deleting route-map %s sequence %d",
                           index->map->name, index->pref);
 
+       /* Free route map northbound hook contexts. */
+       while (!TAILQ_EMPTY(&index->rhclist))
+               routemap_hook_context_free(TAILQ_FIRST(&index->rhclist));
+
        /* Free route match. */
        while ((rule = index->match_list.head) != NULL)
                route_map_rule_delete(&index->match_list, rule);
@@ -1128,7 +1157,7 @@ const char *route_map_get_match_arg(struct route_map_index *index,
                if (rule->cmd == cmd && rule->rule_str != NULL)
                        return (rule->rule_str);
 
-       return (NULL);
+       return NULL;
 }
 
 static route_map_event_t get_route_map_delete_event(route_map_event_t type)
@@ -1856,7 +1885,6 @@ static int route_map_dep_update(struct hash *dephash, const char *dep_name,
                        hash_free(dep->dep_rmap_hash);
                        XFREE(MTYPE_ROUTE_MAP_NAME, dep->dep_name);
                        XFREE(MTYPE_ROUTE_MAP_DEP, dep);
-                       dep = NULL;
                }
                break;
        case RMAP_EVENT_SET_ADDED: