DECLARE_MTYPE(ROUTE_MAP_RULE)
DECLARE_MTYPE(ROUTE_MAP_COMPILED)
+/* Route map's type. */
+enum route_map_type { RMAP_PERMIT, RMAP_DENY, RMAP_ANY };
+
+typedef enum {
+ RMAP_DENYMATCH,
+ RMAP_PERMITMATCH
+} route_map_result_t;
+
/*
* Route-map match or set result "Eg: match evpn vni xx"
* route-map match cmd always returns match/nomatch/noop
* match--> found a match
* nomatch--> didnt find a match
- * noop--> invalid
+ * noop--> not applicable
* route-map set retuns okay/error
* okay --> set was successful
* error --> set was not successful
*/
-enum route_map_match_result_t {
+enum route_map_cmd_result_t {
/*
* route-map match cmd results
*/
RMAP_ERROR
};
-/* Route map's type. */
-enum route_map_type { RMAP_PERMIT, RMAP_DENY, RMAP_ANY };
-
-typedef enum {
- RMAP_DENYMATCH,
- RMAP_PERMITMATCH
-} route_map_result_t;
typedef enum {
RMAP_RIP,
const char *str;
/* Function for value set or match. */
- enum route_map_match_result_t (*func_apply)(void *rule,
- const struct prefix *prefix,
- route_map_object_t type,
- void *object);
+ enum route_map_cmd_result_t (*func_apply)(void *rule,
+ const struct prefix *prefix,
+ route_map_object_t type,
+ void *object);
/* Compile argument and return result as void *. */
void *(*func_compile)(const char *);
/* Free allocated value by func_compile (). */
void (*func_free)(void *);
+
+ /** To get the rule key after Compilation **/
+ void *(*func_get_rmap_rule_key)(void *val);
};
/* Route map apply error. */
-enum {
+enum rmap_compile_rets {
RMAP_COMPILE_SUCCESS,
/* Route map rule is missing. */
/* Route map rule can't compile */
RMAP_COMPILE_ERROR,
- /* Route map rule is duplicate */
- RMAP_DUPLICATE_RULE
};
/* Route map rule list. */
/* Keep track how many times we've try to apply */
uint64_t applied;
+ uint64_t applied_clear;
QOBJ_FIELDS
};
/* How many times have we applied this route-map */
uint64_t applied;
+ uint64_t applied_clear;
/* Counter to track active usage of this route-map */
uint16_t use_count;
extern void route_map_finish(void);
/* Add match statement to route map. */
-extern int route_map_add_match(struct route_map_index *index,
- const char *match_name, const char *match_arg,
- route_map_event_t type);
+extern enum rmap_compile_rets route_map_add_match(struct route_map_index *index,
+ const char *match_name,
+ const char *match_arg,
+ route_map_event_t type);
/* Delete specified route match rule. */
-extern int route_map_delete_match(struct route_map_index *index,
- const char *match_name,
- const char *match_arg);
+extern enum rmap_compile_rets
+route_map_delete_match(struct route_map_index *index,
+ const char *match_name, const char *match_arg,
+ route_map_event_t type);
extern const char *route_map_get_match_arg(struct route_map_index *index,
const char *match_name);
/* Add route-map set statement to the route map. */
-extern int route_map_add_set(struct route_map_index *index,
- const char *set_name, const char *set_arg);
+extern enum rmap_compile_rets route_map_add_set(struct route_map_index *index,
+ const char *set_name,
+ const char *set_arg);
/* Delete route map set rule. */
-extern int route_map_delete_set(struct route_map_index *index,
- const char *set_name, const char *set_arg);
+extern enum rmap_compile_rets
+route_map_delete_set(struct route_map_index *index,
+ const char *set_name, const char *set_arg);
/* Install rule command to the match list. */
-extern void route_map_install_match(struct route_map_rule_cmd *cmd);
+extern void route_map_install_match(const struct route_map_rule_cmd *cmd);
/*
* Install rule command to the set list.
* in the apply command). See 'set metric' command
* as it is handled in ripd/ripngd and ospfd.
*/
-extern void route_map_install_set(struct route_map_rule_cmd *cmd);
+extern void route_map_install_set(const struct route_map_rule_cmd *cmd);
/* Lookup route map by name. */
extern struct route_map *route_map_lookup_by_name(const char *name);