summaryrefslogtreecommitdiffstats
path: root/zebra/zebra_routemap.c
diff options
context:
space:
mode:
authorwhitespace / reindent <invalid@invalid.invalid>2017-07-17 14:03:14 +0200
committerwhitespace / reindent <invalid@invalid.invalid>2017-07-17 14:04:07 +0200
commitd62a17aedeb0eebdba98238874bb13d62c48dbf9 (patch)
tree3b319b1d61c8b85b4d1f06adf8b844bb8a9b5107 /zebra/zebra_routemap.c
parent*: add indent control files (diff)
downloadfrr-d62a17aedeb0eebdba98238874bb13d62c48dbf9.tar.xz
frr-d62a17aedeb0eebdba98238874bb13d62c48dbf9.zip
indent.py `git ls-files | pcregrep '\.[ch]$' | pcregrep -v '^(ldpd|babeld|nhrpd)/'` Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'zebra/zebra_routemap.c')
-rw-r--r--zebra/zebra_routemap.c1829
1 files changed, 869 insertions, 960 deletions
diff --git a/zebra/zebra_routemap.c b/zebra/zebra_routemap.c
index a7b47165d..0176b3684 100644
--- a/zebra/zebra_routemap.c
+++ b/zebra/zebra_routemap.c
@@ -40,185 +40,161 @@
static u_int32_t zebra_rmap_update_timer = ZEBRA_RMAP_DEFAULT_UPDATE_TIMER;
static struct thread *zebra_t_rmap_update = NULL;
-char *proto_rm[AFI_MAX][ZEBRA_ROUTE_MAX+1]; /* "any" == ZEBRA_ROUTE_MAX */
+char *proto_rm[AFI_MAX][ZEBRA_ROUTE_MAX + 1]; /* "any" == ZEBRA_ROUTE_MAX */
/* NH Tracking route map */
-char *nht_rm[AFI_MAX][ZEBRA_ROUTE_MAX+1]; /* "any" == ZEBRA_ROUTE_MAX */
+char *nht_rm[AFI_MAX][ZEBRA_ROUTE_MAX + 1]; /* "any" == ZEBRA_ROUTE_MAX */
char *zebra_import_table_routemap[AFI_MAX][ZEBRA_KERNEL_TABLE_MAX];
-struct nh_rmap_obj
-{
- struct nexthop *nexthop;
- vrf_id_t vrf_id;
- u_int32_t source_protocol;
- int metric;
- route_tag_t tag;
+struct nh_rmap_obj {
+ struct nexthop *nexthop;
+ vrf_id_t vrf_id;
+ u_int32_t source_protocol;
+ int metric;
+ route_tag_t tag;
};
static void zebra_route_map_set_delay_timer(u_int32_t value);
-
/* Add zebra route map rule */
-static int
-zebra_route_match_add(struct vty *vty,
- const char *command, const char *arg,
- route_map_event_t type)
-{
- VTY_DECLVAR_CONTEXT (route_map_index, index);
- int ret;
-
- ret = route_map_add_match (index, command, arg);
- if (ret)
- {
- switch (ret)
- {
- case RMAP_RULE_MISSING:
- vty_out (vty, "%% Zebra Can't find rule.\n");
- return CMD_WARNING_CONFIG_FAILED;
- case RMAP_COMPILE_ERROR:
- vty_out (vty, "%% Zebra Argument is malformed.\n");
- return CMD_WARNING_CONFIG_FAILED;
+static int zebra_route_match_add(struct vty *vty, const char *command,
+ const char *arg, route_map_event_t type)
+{
+ VTY_DECLVAR_CONTEXT(route_map_index, index);
+ int ret;
+
+ ret = route_map_add_match(index, command, arg);
+ if (ret) {
+ switch (ret) {
+ case RMAP_RULE_MISSING:
+ vty_out(vty, "%% Zebra Can't find rule.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ case RMAP_COMPILE_ERROR:
+ vty_out(vty, "%% Zebra Argument is malformed.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
}
- }
- if (type != RMAP_EVENT_MATCH_ADDED)
- {
- route_map_upd8_dependency (type, arg, index->map->name);
- }
- return CMD_SUCCESS;
+ if (type != RMAP_EVENT_MATCH_ADDED) {
+ route_map_upd8_dependency(type, arg, index->map->name);
+ }
+ return CMD_SUCCESS;
}
/* Delete zebra route map rule. */
-static int
-zebra_route_match_delete (struct vty *vty,
- const char *command, const char *arg,
- route_map_event_t type)
-{
- VTY_DECLVAR_CONTEXT (route_map_index, index);
- int ret;
- char *dep_name = NULL;
- const char *tmpstr;
- char *rmap_name = NULL;
-
- if (type != RMAP_EVENT_MATCH_DELETED)
- {
- /* ignore the mundane, the types without any dependency */
- if (arg == NULL)
- {
- if ((tmpstr = route_map_get_match_arg(index, command)) != NULL)
- dep_name = XSTRDUP(MTYPE_ROUTE_MAP_RULE, tmpstr);
- }
- else
- {
- dep_name = XSTRDUP(MTYPE_ROUTE_MAP_RULE, arg);
+static int zebra_route_match_delete(struct vty *vty, const char *command,
+ const char *arg, route_map_event_t type)
+{
+ VTY_DECLVAR_CONTEXT(route_map_index, index);
+ int ret;
+ char *dep_name = NULL;
+ const char *tmpstr;
+ char *rmap_name = NULL;
+
+ if (type != RMAP_EVENT_MATCH_DELETED) {
+ /* ignore the mundane, the types without any dependency */
+ if (arg == NULL) {
+ if ((tmpstr = route_map_get_match_arg(index, command))
+ != NULL)
+ dep_name =
+ XSTRDUP(MTYPE_ROUTE_MAP_RULE, tmpstr);
+ } else {
+ dep_name = XSTRDUP(MTYPE_ROUTE_MAP_RULE, arg);
+ }
+ rmap_name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, index->map->name);
}
- rmap_name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, index->map->name);
- }
- ret = route_map_delete_match (index, command, arg);
- if (ret)
- {
- switch (ret)
- {
- case RMAP_RULE_MISSING:
- vty_out (vty, "%% Zebra Can't find rule.\n");
- return CMD_WARNING_CONFIG_FAILED;
- case RMAP_COMPILE_ERROR:
- vty_out (vty, "%% Zebra Argument is malformed.\n");
- return CMD_WARNING_CONFIG_FAILED;
+ ret = route_map_delete_match(index, command, arg);
+ if (ret) {
+ switch (ret) {
+ case RMAP_RULE_MISSING:
+ vty_out(vty, "%% Zebra Can't find rule.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ case RMAP_COMPILE_ERROR:
+ vty_out(vty, "%% Zebra Argument is malformed.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
}
- }
- if (type != RMAP_EVENT_MATCH_DELETED && dep_name)
- route_map_upd8_dependency(type, dep_name, rmap_name);
+ if (type != RMAP_EVENT_MATCH_DELETED && dep_name)
+ route_map_upd8_dependency(type, dep_name, rmap_name);
- if (dep_name)
- XFREE(MTYPE_ROUTE_MAP_RULE, dep_name);
- if (rmap_name)
- XFREE(MTYPE_ROUTE_MAP_NAME, rmap_name);
+ if (dep_name)
+ XFREE(MTYPE_ROUTE_MAP_RULE, dep_name);
+ if (rmap_name)
+ XFREE(MTYPE_ROUTE_MAP_NAME, rmap_name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* 'match tag TAG'
* Match function return 1 if match is success else return 0
*/
-static route_map_result_t
-route_match_tag (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
+static route_map_result_t route_match_tag(void *rule, struct prefix *prefix,
+ route_map_object_t type, void *object)
{
- route_tag_t *tag;
- struct nh_rmap_obj *nh_data;
+ route_tag_t *tag;
+ struct nh_rmap_obj *nh_data;
- if (type == RMAP_ZEBRA)
- {
- tag = rule;
- nh_data = object;
+ if (type == RMAP_ZEBRA) {
+ tag = rule;
+ nh_data = object;
- if (nh_data->tag == *tag)
- return RMAP_MATCH;
- }
- return RMAP_NOMATCH;
+ if (nh_data->tag == *tag)
+ return RMAP_MATCH;
+ }
+ return RMAP_NOMATCH;
}
/* Route map commands for tag matching */
-static struct route_map_rule_cmd route_match_tag_cmd =
-{
- "tag",
- route_match_tag,
- route_map_rule_tag_compile,
- route_map_rule_tag_free,
+static struct route_map_rule_cmd route_match_tag_cmd = {
+ "tag", route_match_tag, route_map_rule_tag_compile,
+ route_map_rule_tag_free,
};
/* `match interface IFNAME' */
/* Match function return 1 if match is success else return zero. */
-static route_map_result_t
-route_match_interface (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
-{
- struct nh_rmap_obj *nh_data;
- char *ifname = rule;
- ifindex_t ifindex;
-
- if (type == RMAP_ZEBRA)
- {
- if (strcasecmp(ifname, "any") == 0)
- return RMAP_MATCH;
- nh_data = object;
- if (!nh_data || !nh_data->nexthop)
- return RMAP_NOMATCH;
- ifindex = ifname2ifindex (ifname, nh_data->vrf_id);
- if (ifindex == 0)
+static route_map_result_t route_match_interface(void *rule,
+ struct prefix *prefix,
+ route_map_object_t type,
+ void *object)
+{
+ struct nh_rmap_obj *nh_data;
+ char *ifname = rule;
+ ifindex_t ifindex;
+
+ if (type == RMAP_ZEBRA) {
+ if (strcasecmp(ifname, "any") == 0)
+ return RMAP_MATCH;
+ nh_data = object;
+ if (!nh_data || !nh_data->nexthop)
+ return RMAP_NOMATCH;
+ ifindex = ifname2ifindex(ifname, nh_data->vrf_id);
+ if (ifindex == 0)
+ return RMAP_NOMATCH;
+ if (nh_data->nexthop->ifindex == ifindex)
+ return RMAP_MATCH;
+ }
return RMAP_NOMATCH;
- if (nh_data->nexthop->ifindex == ifindex)
- return RMAP_MATCH;
- }
- return RMAP_NOMATCH;
}
/* Route map `match interface' match statement. `arg' is IFNAME value */
-static void *
-route_match_interface_compile (const char *arg)
+static void *route_match_interface_compile(const char *arg)
{
- return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
+ return XSTRDUP(MTYPE_ROUTE_MAP_COMPILED, arg);
}
/* Free route map's compiled `match interface' value. */
-static void
-route_match_interface_free (void *rule)
+static void route_match_interface_free(void *rule)
{
- XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
+ XFREE(MTYPE_ROUTE_MAP_COMPILED, rule);
}
/* Route map commands for interface matching */
-struct route_map_rule_cmd route_match_interface_cmd =
-{
- "interface",
- route_match_interface,
- route_match_interface_compile,
- route_match_interface_free
-};
+struct route_map_rule_cmd route_match_interface_cmd = {
+ "interface", route_match_interface, route_match_interface_compile,
+ route_match_interface_free};
DEFUN (match_ip_address_prefix_len,
match_ip_address_prefix_len_cmd,
@@ -229,8 +205,8 @@ DEFUN (match_ip_address_prefix_len,
"Match prefix length of ip address\n"
"Prefix length\n")
{
- return zebra_route_match_add (vty, "ip address prefix-len",
- argv[4]->arg, RMAP_EVENT_MATCH_ADDED);
+ return zebra_route_match_add(vty, "ip address prefix-len", argv[4]->arg,
+ RMAP_EVENT_MATCH_ADDED);
}
DEFUN (no_match_ip_address_prefix_len,
@@ -243,10 +219,9 @@ DEFUN (no_match_ip_address_prefix_len,
"Match prefix length of ip address\n"
"Prefix length\n")
{
- char *plen = (argc == 6) ? argv[5]->arg : NULL;
- return zebra_route_match_delete (vty,
- "ip address prefix-len", plen,
- RMAP_EVENT_MATCH_DELETED);
+ char *plen = (argc == 6) ? argv[5]->arg : NULL;
+ return zebra_route_match_delete(vty, "ip address prefix-len", plen,
+ RMAP_EVENT_MATCH_DELETED);
}
@@ -259,8 +234,8 @@ DEFUN (match_ip_nexthop_prefix_len,
"Match prefixlen of given nexthop\n"
"Prefix length\n")
{
- return zebra_route_match_add (vty, "ip next-hop prefix-len",
- argv[4]->arg, RMAP_EVENT_MATCH_ADDED);
+ return zebra_route_match_add(vty, "ip next-hop prefix-len",
+ argv[4]->arg, RMAP_EVENT_MATCH_ADDED);
}
DEFUN (no_match_ip_nexthop_prefix_len,
@@ -273,10 +248,9 @@ DEFUN (no_match_ip_nexthop_prefix_len,
"Match prefix length of nexthop\n"
"Prefix length\n")
{
- char *plen = (argc == 6) ? argv[5]->arg : NULL;
- return zebra_route_match_delete (vty,
- "ip next-hop prefix-len", plen,
- RMAP_EVENT_MATCH_DELETED);
+ char *plen = (argc == 6) ? argv[5]->arg : NULL;
+ return zebra_route_match_delete(vty, "ip next-hop prefix-len", plen,
+ RMAP_EVENT_MATCH_DELETED);
}
@@ -296,16 +270,16 @@ DEFUN (match_source_protocol,
"Routes from kernel\n"
"Statically configured routes\n")
{
- char *proto = argv[2]->text;
- int i;
+ char *proto = argv[2]->text;
+ int i;
- i = proto_name2num(proto);
- if (i < 0)
- {
- vty_out (vty, "invalid protocol name \"%s\"\n", proto);
- return CMD_WARNING_CONFIG_FAILED;
- }
- return zebra_route_match_add (vty, "source-protocol", proto, RMAP_EVENT_MATCH_ADDED);
+ i = proto_name2num(proto);
+ if (i < 0) {
+ vty_out(vty, "invalid protocol name \"%s\"\n", proto);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ return zebra_route_match_add(vty, "source-protocol", proto,
+ RMAP_EVENT_MATCH_ADDED);
}
DEFUN (no_match_source_protocol,
@@ -325,8 +299,9 @@ DEFUN (no_match_source_protocol,
"Routes from kernel\n"
"Statically configured routes\n")
{
- char *proto = (argc == 4) ? argv[3]->text : NULL;
- return zebra_route_match_delete (vty, "source-protocol", proto, RMAP_EVENT_MATCH_DELETED);
+ char *proto = (argc == 4) ? argv[3]->text : NULL;
+ return zebra_route_match_delete(vty, "source-protocol", proto,
+ RMAP_EVENT_MATCH_DELETED);
}
/* set functions */
@@ -339,59 +314,53 @@ DEFUN (set_src,
"IPv4 src address\n"
"IPv6 src address\n")
{
- int idx_ip = 2;
- union g_addr src;
- struct interface *pif = NULL;
- int family;
- struct prefix p;
- struct vrf *vrf;
+ int idx_ip = 2;
+ union g_addr src;
+ struct interface *pif = NULL;
+ int family;
+ struct prefix p;
+ struct vrf *vrf;
+
+ if (inet_pton(AF_INET, argv[idx_ip]->arg, &src.ipv4) != 1) {
+ if (inet_pton(AF_INET6, argv[idx_ip]->arg, &src.ipv6) != 1) {
+ vty_out(vty, "%% not a valid IPv4/v6 address\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ p.family = family = AF_INET6;
+ p.u.prefix6 = src.ipv6;
+ p.prefixlen = IPV6_MAX_BITLEN;
+ } else {
+ p.family = family = AF_INET;
+ p.u.prefix4 = src.ipv4;
+ p.prefixlen = IPV4_MAX_BITLEN;
+ }
+
+ if (!zebra_check_addr(&p)) {
+ vty_out(vty, "%% not a valid source IPv4/v6 address\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (inet_pton(AF_INET, argv[idx_ip]->arg, &src.ipv4) != 1)
- {
- if (inet_pton(AF_INET6, argv[idx_ip]->arg, &src.ipv6) != 1)
+ RB_FOREACH(vrf, vrf_id_head, &vrfs_by_id)
{
- vty_out (vty, "%% not a valid IPv4/v6 address\n");
- return CMD_WARNING_CONFIG_FAILED;
+ if (family == AF_INET)
+ pif = if_lookup_exact_address((void *)&src.ipv4,
+ AF_INET, vrf->vrf_id);
+ else if (family == AF_INET6)
+ pif = if_lookup_exact_address((void *)&src.ipv6,
+ AF_INET6, vrf->vrf_id);
+
+ if (pif != NULL)
+ break;
}
- p.family = family = AF_INET6;
- p.u.prefix6 = src.ipv6;
- p.prefixlen = IPV6_MAX_BITLEN;
- }
- else
- {
- p.family = family = AF_INET;
- p.u.prefix4 = src.ipv4;
- p.prefixlen = IPV4_MAX_BITLEN;
- }
-
- if (!zebra_check_addr(&p))
- {
- vty_out (vty, "%% not a valid source IPv4/v6 address\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id)
- {
- if (family == AF_INET)
- pif = if_lookup_exact_address ((void *)&src.ipv4, AF_INET,
- vrf->vrf_id);
- else if (family == AF_INET6)
- pif = if_lookup_exact_address ((void *)&src.ipv6, AF_INET6,
- vrf->vrf_id);
-
- if (pif != NULL)
- break;
- }
-
- if (!pif)
- {
- vty_out (vty, "%% not a local address\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- VTY_DECLVAR_CONTEXT (route_map_index, index);
- return generic_set_add (vty, index, "src", argv[idx_ip]->arg);
+ if (!pif) {
+ vty_out(vty, "%% not a local address\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ VTY_DECLVAR_CONTEXT(route_map_index, index);
+ return generic_set_add(vty, index, "src", argv[idx_ip]->arg);
}
DEFUN (no_set_src,
@@ -403,9 +372,9 @@ DEFUN (no_set_src,
"IPv4 address\n"
"IPv6 address\n")
{
- char *ip = (argc == 4) ? argv[3]->arg : NULL;
- VTY_DECLVAR_CONTEXT (route_map_index, index);
- return generic_set_delete (vty, index, "src", ip);
+ char *ip = (argc == 4) ? argv[3]->arg : NULL;
+ VTY_DECLVAR_CONTEXT(route_map_index, index);
+ return generic_set_delete(vty, index, "src", ip);
}
DEFUN (zebra_route_map_timer,
@@ -416,13 +385,13 @@ DEFUN (zebra_route_map_timer,
"Time to wait before route-map updates are processed\n"
"0 means event-driven updates are disabled\n")
{
- int idx_number = 3;
- u_int32_t rmap_delay_timer;
+ int idx_number = 3;
+ u_int32_t rmap_delay_timer;
- rmap_delay_timer = strtoul(argv[idx_number]->arg, NULL, 10);
- zebra_route_map_set_delay_timer(rmap_delay_timer);
+ rmap_delay_timer = strtoul(argv[idx_number]->arg, NULL, 10);
+ zebra_route_map_set_delay_timer(rmap_delay_timer);
- return (CMD_SUCCESS);
+ return (CMD_SUCCESS);
}
DEFUN (no_zebra_route_map_timer,
@@ -434,9 +403,9 @@ DEFUN (no_zebra_route_map_timer,
"Reset delay-timer to default value, 30 secs\n"
"0 means event-driven updates are disabled\n")
{
- zebra_route_map_set_delay_timer(ZEBRA_RMAP_DEFAULT_UPDATE_TIMER);
+ zebra_route_map_set_delay_timer(ZEBRA_RMAP_DEFAULT_UPDATE_TIMER);
- return (CMD_SUCCESS);
+ return (CMD_SUCCESS);
}
@@ -449,34 +418,33 @@ DEFUN (ip_protocol,
"Specify route-map\n"
"Route map name\n")
{
- char *proto = argv[2]->text;
- char *rmap = argv[4]->arg;
- int i;
-
- if (strcasecmp(proto, "any") == 0)
- i = ZEBRA_ROUTE_MAX;
- else
- i = proto_name2num(proto);
- if (i < 0)
- {
- vty_out (vty, "invalid protocol name \"%s\"\n", proto);
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (proto_rm[AFI_IP][i])
- {
- if (strcmp(proto_rm[AFI_IP][i], rmap) == 0)
- return CMD_SUCCESS;
+ char *proto = argv[2]->text;
+ char *rmap = argv[4]->arg;
+ int i;
+
+ if (strcasecmp(proto, "any") == 0)
+ i = ZEBRA_ROUTE_MAX;
+ else
+ i = proto_name2num(proto);
+ if (i < 0) {
+ vty_out(vty, "invalid protocol name \"%s\"\n", proto);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (proto_rm[AFI_IP][i]) {
+ if (strcmp(proto_rm[AFI_IP][i], rmap) == 0)
+ return CMD_SUCCESS;
- XFREE (MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP][i]);
- }
- proto_rm[AFI_IP][i] = XSTRDUP (MTYPE_ROUTE_MAP_NAME, rmap);
+ XFREE(MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP][i]);
+ }
+ proto_rm[AFI_IP][i] = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
- if (IS_ZEBRA_DEBUG_RIB_DETAILED)
- zlog_debug ("%u: IPv4 Routemap config for protocol %s, scheduling RIB processing",
- VRF_DEFAULT, proto);
+ if (IS_ZEBRA_DEBUG_RIB_DETAILED)
+ zlog_debug(
+ "%u: IPv4 Routemap config for protocol %s, scheduling RIB processing",
+ VRF_DEFAULT, proto);
- rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
- return CMD_SUCCESS;
+ rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
+ return CMD_SUCCESS;
}
DEFUN (no_ip_protocol,
@@ -489,35 +457,34 @@ DEFUN (no_ip_protocol,
"Specify route map\n"
"Route map name\n")
{
- char *proto = argv[3]->text;
- char *rmap = (argc == 6) ? argv[5]->arg : NULL;
- int i;
+ char *proto = argv[3]->text;
+ char *rmap = (argc == 6) ? argv[5]->arg : NULL;
+ int i;
- if (strcasecmp(proto, "any") == 0)
- i = ZEBRA_ROUTE_MAX;
- else
- i = proto_name2num(proto);
+ if (strcasecmp(proto, "any") == 0)
+ i = ZEBRA_ROUTE_MAX;
+ else
+ i = proto_name2num(proto);
- if (i < 0)
- {
- vty_out (vty, "invalid protocol name \"%s\"\n", proto);
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (i < 0) {
+ vty_out(vty, "invalid protocol name \"%s\"\n", proto);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (!proto_rm[AFI_IP][i])
- return CMD_SUCCESS;
+ if (!proto_rm[AFI_IP][i])
+ return CMD_SUCCESS;
- if (!rmap || strcmp (rmap, proto_rm[AFI_IP][i]) == 0)
- {
- XFREE (MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP][i]);
- proto_rm[AFI_IP][i] = NULL;
+ if (!rmap || strcmp(rmap, proto_rm[AFI_IP][i]) == 0) {
+ XFREE(MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP][i]);
+ proto_rm[AFI_IP][i] = NULL;
- if (IS_ZEBRA_DEBUG_RIB_DETAILED)
- zlog_debug ("%u: IPv4 Routemap unconfig for protocol %s, scheduling RIB processing",
- VRF_DEFAULT, proto);
- rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
- }
- return CMD_SUCCESS;
+ if (IS_ZEBRA_DEBUG_RIB_DETAILED)
+ zlog_debug(
+ "%u: IPv4 Routemap unconfig for protocol %s, scheduling RIB processing",
+ VRF_DEFAULT, proto);
+ rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_protocol,
@@ -527,24 +494,23 @@ DEFUN (show_ip_protocol,
IP_STR
"IP protocol filtering status\n")
{
- int i;
+ int i;
- vty_out (vty, "Protocol : route-map \n");
- vty_out (vty, "------------------------\n");
- for (i=0;i<ZEBRA_ROUTE_MAX;i++)
- {
- if (proto_rm[AFI_IP][i])
- vty_out (vty, "%-10s : %-10s\n", zebra_route_string(i),
- proto_rm[AFI_IP][i]);
- else
- vty_out (vty, "%-10s : none\n", zebra_route_string(i));
- }
- if (proto_rm[AFI_IP][i])
- vty_out (vty, "%-10s : %-10s\n", "any",proto_rm[AFI_IP][i]);
- else
- vty_out (vty, "%-10s : none\n", "any");
+ vty_out(vty, "Protocol : route-map \n");
+ vty_out(vty, "------------------------\n");
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+ if (proto_rm[AFI_IP][i])
+ vty_out(vty, "%-10s : %-10s\n", zebra_route_string(i),
+ proto_rm[AFI_IP][i]);
+ else
+ vty_out(vty, "%-10s : none\n", zebra_route_string(i));
+ }
+ if (proto_rm[AFI_IP][i])
+ vty_out(vty, "%-10s : %-10s\n", "any", proto_rm[AFI_IP][i]);
+ else
+ vty_out(vty, "%-10s : none\n", "any");
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ipv6_protocol,
@@ -556,34 +522,33 @@ DEFUN (ipv6_protocol,
"Specify route map\n"
"Route map name\n")
{
- char *proto = argv[2]->text;
- char *rmap = argv[4]->arg;
- int i;
-
- if (strcasecmp(proto, "any") == 0)
- i = ZEBRA_ROUTE_MAX;
- else
- i = proto_name2num(proto);
- if (i < 0)
- {
- vty_out (vty, "invalid protocol name \"%s\"\n", proto);
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (proto_rm[AFI_IP6][i])
- {
- if (strcmp(proto_rm[AFI_IP6][i], rmap) == 0)
- return CMD_SUCCESS;
+ char *proto = argv[2]->text;
+ char *rmap = argv[4]->arg;
+ int i;
+
+ if (strcasecmp(proto, "any") == 0)
+ i = ZEBRA_ROUTE_MAX;
+ else
+ i = proto_name2num(proto);
+ if (i < 0) {
+ vty_out(vty, "invalid protocol name \"%s\"\n", proto);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (proto_rm[AFI_IP6][i]) {
+ if (strcmp(proto_rm[AFI_IP6][i], rmap) == 0)
+ return CMD_SUCCESS;
- XFREE (MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP6][i]);
- }
- proto_rm[AFI_IP6][i] = XSTRDUP (MTYPE_ROUTE_MAP_NAME, rmap);
+ XFREE(MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP6][i]);
+ }
+ proto_rm[AFI_IP6][i] = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
- if (IS_ZEBRA_DEBUG_RIB_DETAILED)
- zlog_debug ("%u: IPv6 Routemap config for protocol %s, scheduling RIB processing",
- VRF_DEFAULT, proto);
+ if (IS_ZEBRA_DEBUG_RIB_DETAILED)
+ zlog_debug(
+ "%u: IPv6 Routemap config for protocol %s, scheduling RIB processing",
+ VRF_DEFAULT, proto);
- rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
- return CMD_SUCCESS;
+ rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
+ return CMD_SUCCESS;
}
DEFUN (no_ipv6_protocol,
@@ -596,34 +561,33 @@ DEFUN (no_ipv6_protocol,
"Specify route map\n"
"Route map name\n")
{
- const char *proto = argv[3]->text;
- const char *rmap = (argc == 6) ? argv[5]->arg : NULL;
- int i;
-
- if (strcasecmp(proto, "any") == 0)
- i = ZEBRA_ROUTE_MAX;
- else
- i = proto_name2num(proto);
- if (i < 0)
- {
- vty_out (vty, "invalid protocol name \"%s\"\n", proto);
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (!proto_rm[AFI_IP6][i])
- return CMD_SUCCESS;
+ const char *proto = argv[3]->text;
+ const char *rmap = (argc == 6) ? argv[5]->arg : NULL;
+ int i;
+
+ if (strcasecmp(proto, "any") == 0)
+ i = ZEBRA_ROUTE_MAX;
+ else
+ i = proto_name2num(proto);
+ if (i < 0) {
+ vty_out(vty, "invalid protocol name \"%s\"\n", proto);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (!proto_rm[AFI_IP6][i])
+ return CMD_SUCCESS;
- if (!rmap || strcmp(rmap, proto_rm[AFI_IP6][i]) == 0)
- {
- XFREE (MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP6][i]);
- proto_rm[AFI_IP6][i] = NULL;
+ if (!rmap || strcmp(rmap, proto_rm[AFI_IP6][i]) == 0) {
+ XFREE(MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP6][i]);
+ proto_rm[AFI_IP6][i] = NULL;
- if (IS_ZEBRA_DEBUG_RIB_DETAILED)
- zlog_debug ("%u: IPv6 Routemap unconfig for protocol %s, scheduling RIB processing",
- VRF_DEFAULT, proto);
+ if (IS_ZEBRA_DEBUG_RIB_DETAILED)
+ zlog_debug(
+ "%u: IPv6 Routemap unconfig for protocol %s, scheduling RIB processing",
+ VRF_DEFAULT, proto);
- rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
- }
- return CMD_SUCCESS;
+ rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_protocol,
@@ -633,24 +597,23 @@ DEFUN (show_ipv6_protocol,
IP6_STR
"IPv6 protocol filtering status\n")
{
- int i;
+ int i;
- vty_out (vty, "Protocol : route-map \n");
- vty_out (vty, "------------------------\n");
- for (i=0;i<ZEBRA_ROUTE_MAX;i++)
- {
- if (proto_rm[AFI_IP6][i])
- vty_out (vty, "%-10s : %-10s\n", zebra_route_string(i),
- proto_rm[AFI_IP6][i]);
- else
- vty_out (vty, "%-10s : none\n", zebra_route_string(i));
- }
- if (proto_rm[AFI_IP6][i])
- vty_out (vty, "%-10s : %-10s\n", "any",proto_rm[AFI_IP6][i]);
- else
- vty_out (vty, "%-10s : none\n", "any");
+ vty_out(vty, "Protocol : route-map \n");
+ vty_out(vty, "------------------------\n");
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+ if (proto_rm[AFI_IP6][i])
+ vty_out(vty, "%-10s : %-10s\n", zebra_route_string(i),
+ proto_rm[AFI_IP6][i]);
+ else
+ vty_out(vty, "%-10s : none\n", zebra_route_string(i));
+ }
+ if (proto_rm[AFI_IP6][i])
+ vty_out(vty, "%-10s : %-10s\n", "any", proto_rm[AFI_IP6][i]);
+ else
+ vty_out(vty, "%-10s : none\n", "any");
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ip_protocol_nht_rmap,
@@ -662,31 +625,29 @@ DEFUN (ip_protocol_nht_rmap,
"Specify route map\n"
"Route map name\n")
{
- char *proto = argv[2]->text;
- char *rmap = argv[4]->arg;
- int i;
-
- if (strcasecmp(proto, "any") == 0)
- i = ZEBRA_ROUTE_MAX;
- else
- i = proto_name2num(proto);
- if (i < 0)
- {
- vty_out (vty, "invalid protocol name \"%s\"\n", proto);
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (nht_rm[AFI_IP][i])
- {
- if (strcmp(nht_rm[AFI_IP][i], rmap) == 0)
- return CMD_SUCCESS;
+ char *proto = argv[2]->text;
+ char *rmap = argv[4]->arg;
+ int i;
+
+ if (strcasecmp(proto, "any") == 0)
+ i = ZEBRA_ROUTE_MAX;
+ else
+ i = proto_name2num(proto);
+ if (i < 0) {
+ vty_out(vty, "invalid protocol name \"%s\"\n", proto);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (nht_rm[AFI_IP][i]) {
+ if (strcmp(nht_rm[AFI_IP][i], rmap) == 0)
+ return CMD_SUCCESS;
- XFREE (MTYPE_ROUTE_MAP_NAME, nht_rm[AFI_IP][i]);
- }
+ XFREE(MTYPE_ROUTE_MAP_NAME, nht_rm[AFI_IP][i]);
+ }
- nht_rm[AFI_IP][i] = XSTRDUP (MTYPE_ROUTE_MAP_NAME, rmap);
- zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
+ nht_rm[AFI_IP][i] = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
+ zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ip_protocol_nht_rmap,
@@ -699,28 +660,28 @@ DEFUN (no_ip_protocol_nht_rmap,
"Specify route map\n"
"Route map name\n")
{
- int idx = 0;
- char *proto = argv[3]->text;
- char *rmap = argv_find (argv, argc, "ROUTE-MAP", &idx) ? argv[idx]->arg : NULL;
+ int idx = 0;
+ char *proto = argv[3]->text;
+ char *rmap = argv_find(argv, argc, "ROUTE-MAP", &idx) ? argv[idx]->arg
+ : NULL;
- int i = strmatch(proto, "any") ? ZEBRA_ROUTE_MAX : proto_name2num(proto);
+ int i = strmatch(proto, "any") ? ZEBRA_ROUTE_MAX
+ : proto_name2num(proto);
- if (i < 0)
- {
- vty_out (vty, "invalid protocol name \"%s\"\n", proto);
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (i < 0) {
+ vty_out(vty, "invalid protocol name \"%s\"\n", proto);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (!nht_rm[AFI_IP][i])
- return CMD_SUCCESS;
+ if (!nht_rm[AFI_IP][i])
+ return CMD_SUCCESS;
- if (!rmap || strcmp(rmap, nht_rm[AFI_IP][i]) == 0)
- {
- XFREE (MTYPE_ROUTE_MAP_NAME, nht_rm[AFI_IP][i]);
- nht_rm[AFI_IP][i] = NULL;
- zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
- }
- return CMD_SUCCESS;
+ if (!rmap || strcmp(rmap, nht_rm[AFI_IP][i]) == 0) {
+ XFREE(MTYPE_ROUTE_MAP_NAME, nht_rm[AFI_IP][i]);
+ nht_rm[AFI_IP][i] = NULL;
+ zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_protocol_nht,
@@ -731,24 +692,23 @@ DEFUN (show_ip_protocol_nht,
"IP nexthop tracking table\n"
"IP Next Hop tracking filtering status\n")
{
- int i;
+ int i;
- vty_out (vty, "Protocol : route-map \n");
- vty_out (vty, "------------------------\n");
- for (i=0;i<ZEBRA_ROUTE_MAX;i++)
- {
- if (nht_rm[AFI_IP][i])
- vty_out (vty, "%-10s : %-10s\n", zebra_route_string(i),
- nht_rm[AFI_IP][i]);
- else
- vty_out (vty, "%-10s : none\n", zebra_route_string(i));
- }
- if (nht_rm[AFI_IP][i])
- vty_out (vty, "%-10s : %-10s\n", "any",nht_rm[AFI_IP][i]);
- else
- vty_out (vty, "%-10s : none\n", "any");
+ vty_out(vty, "Protocol : route-map \n");
+ vty_out(vty, "------------------------\n");
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+ if (nht_rm[AFI_IP][i])
+ vty_out(vty, "%-10s : %-10s\n", zebra_route_string(i),
+ nht_rm[AFI_IP][i]);
+ else
+ vty_out(vty, "%-10s : none\n", zebra_route_string(i));
+ }
+ if (nht_rm[AFI_IP][i])
+ vty_out(vty, "%-10s : %-10s\n", "any", nht_rm[AFI_IP][i]);
+ else
+ vty_out(vty, "%-10s : none\n", "any");
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ipv6_protocol_nht_rmap,
@@ -760,25 +720,24 @@ DEFUN (ipv6_protocol_nht_rmap,
"Specify route map\n"
"Route map name\n")
{
- char *proto = argv[2]->text;
- char *rmap = argv[4]->arg;
- int i;
-
- if (strcasecmp(proto, "any") == 0)
- i = ZEBRA_ROUTE_MAX;
- else
- i = proto_name2num(proto);
- if (i < 0)
- {
- vty_out (vty, "invalid protocol name \"%s\"\n", proto);
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (nht_rm[AFI_IP6][i])
- XFREE (MTYPE_ROUTE_MAP_NAME, nht_rm[AFI_IP6][i]);
- nht_rm[AFI_IP6][i] = XSTRDUP (MTYPE_ROUTE_MAP_NAME, rmap);
- zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
+ char *proto = argv[2]->text;
+ char *rmap = argv[4]->arg;
+ int i;
+
+ if (strcasecmp(proto, "any") == 0)
+ i = ZEBRA_ROUTE_MAX;
+ else
+ i = proto_name2num(proto);
+ if (i < 0) {
+ vty_out(vty, "invalid protocol name \"%s\"\n", proto);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (nht_rm[AFI_IP6][i])
+ XFREE(MTYPE_ROUTE_MAP_NAME, nht_rm[AFI_IP6][i]);
+ nht_rm[AFI_IP6][i] = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
+ zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ipv6_protocol_nht_rmap,
@@ -791,35 +750,32 @@ DEFUN (no_ipv6_protocol_nht_rmap,
"Specify route map\n"
"Route map name\n")
{
- char *proto = argv[3]->text;
- char *rmap = (argc == 6) ? argv[5]->arg : NULL;
- int i;
-
- if (strcasecmp(proto, "any") == 0)
- i = ZEBRA_ROUTE_MAX;
- else
- i = proto_name2num(proto);
- if (i < 0)
- {
- vty_out (vty, "invalid protocol name \"%s\"\n", proto);
- return CMD_WARNING_CONFIG_FAILED;
- }
+ char *proto = argv[3]->text;
+ char *rmap = (argc == 6) ? argv[5]->arg : NULL;
+ int i;
+
+ if (strcasecmp(proto, "any") == 0)
+ i = ZEBRA_ROUTE_MAX;
+ else
+ i = proto_name2num(proto);
+ if (i < 0) {
+ vty_out(vty, "invalid protocol name \"%s\"\n", proto);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (nht_rm[AFI_IP6][i] && rmap && strcmp(rmap, nht_rm[AFI_IP6][i]))
- {
- vty_out (vty, "invalid route-map \"%s\"\n", rmap);
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (nht_rm[AFI_IP6][i] && rmap && strcmp(rmap, nht_rm[AFI_IP6][i])) {
+ vty_out(vty, "invalid route-map \"%s\"\n", rmap);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (nht_rm[AFI_IP6][i])
- {
- XFREE (MTYPE_ROUTE_MAP_NAME, nht_rm[AFI_IP6][i]);
- nht_rm[AFI_IP6][i] = NULL;
- }
+ if (nht_rm[AFI_IP6][i]) {
+ XFREE(MTYPE_ROUTE_MAP_NAME, nht_rm[AFI_IP6][i]);
+ nht_rm[AFI_IP6][i] = NULL;
+ }
- zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
+ zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_protocol_nht,
@@ -830,24 +786,23 @@ DEFUN (show_ipv6_protocol_nht,
"Next Hop filtering status\n"
"Route-map\n")
{
- int i;
+ int i;
- vty_out (vty, "Protocol : route-map \n");
- vty_out (vty, "------------------------\n");
- for (i=0;i<ZEBRA_ROUTE_MAX;i++)
- {
- if (nht_rm[AFI_IP6][i])
- vty_out (vty, "%-10s : %-10s\n", zebra_route_string(i),
- nht_rm[AFI_IP6][i]);
- else
- vty_out (vty, "%-10s : none\n", zebra_route_string(i));
- }
- if (nht_rm[AFI_IP][i])
- vty_out (vty, "%-10s : %-10s\n", "any",nht_rm[AFI_IP6][i]);
- else
- vty_out (vty, "%-10s : none\n", "any");
+ vty_out(vty, "Protocol : route-map \n");
+ vty_out(vty, "------------------------\n");
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+ if (nht_rm[AFI_IP6][i])
+ vty_out(vty, "%-10s : %-10s\n", zebra_route_string(i),
+ nht_rm[AFI_IP6][i]);
+ else
+ vty_out(vty, "%-10s : none\n", zebra_route_string(i));
+ }
+ if (nht_rm[AFI_IP][i])
+ vty_out(vty, "%-10s : %-10s\n", "any", nht_rm[AFI_IP6][i]);
+ else
+ vty_out(vty, "%-10s : none\n", "any");
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
@@ -855,680 +810,634 @@ DEFUN (show_ipv6_protocol_nht,
/* `match ip next-hop IP_ACCESS_LIST' */
/* Match function return 1 if match is success else return zero. */
-static route_map_result_t
-route_match_ip_next_hop (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
-{
- struct access_list *alist;
- struct nh_rmap_obj *nh_data;
- struct prefix_ipv4 p;
-
- if (type == RMAP_ZEBRA)
- {
- nh_data = object;
- if (!nh_data)
- return RMAP_DENYMATCH;
-
- switch (nh_data->nexthop->type) {
- case NEXTHOP_TYPE_IFINDEX:
- /* Interface routes can't match ip next-hop */
- return RMAP_NOMATCH;
- case NEXTHOP_TYPE_IPV4_IFINDEX:
- case NEXTHOP_TYPE_IPV4:
- p.family = AF_INET;
- p.prefix = nh_data->nexthop->gate.ipv4;
- p.prefixlen = IPV4_MAX_BITLEN;
- break;
- default:
- return RMAP_NOMATCH;
- }
- alist = access_list_lookup (AFI_IP, (char *) rule);
- if (alist == NULL)
+static route_map_result_t route_match_ip_next_hop(void *rule,
+ struct prefix *prefix,
+ route_map_object_t type,
+ void *object)
+{
+ struct access_list *alist;
+ struct nh_rmap_obj *nh_data;
+ struct prefix_ipv4 p;
+
+ if (type == RMAP_ZEBRA) {
+ nh_data = object;
+ if (!nh_data)
+ return RMAP_DENYMATCH;
+
+ switch (nh_data->nexthop->type) {
+ case NEXTHOP_TYPE_IFINDEX:
+ /* Interface routes can't match ip next-hop */
+ return RMAP_NOMATCH;
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ case NEXTHOP_TYPE_IPV4:
+ p.family = AF_INET;
+ p.prefix = nh_data->nexthop->gate.ipv4;
+ p.prefixlen = IPV4_MAX_BITLEN;
+ break;
+ default:
+ return RMAP_NOMATCH;
+ }
+ alist = access_list_lookup(AFI_IP, (char *)rule);
+ if (alist == NULL)
+ return RMAP_NOMATCH;
+
+ return (access_list_apply(alist, &p) == FILTER_DENY
+ ? RMAP_NOMATCH
+ : RMAP_MATCH);
+ }
return RMAP_NOMATCH;
-
- return (access_list_apply (alist, &p) == FILTER_DENY ?
- RMAP_NOMATCH : RMAP_MATCH);
- }
- return RMAP_NOMATCH;
}
/* Route map `ip next-hop' match statement. `arg' should be
access-list name. */
-static void *
-route_match_ip_next_hop_compile (const char *arg)
+static void *route_match_ip_next_hop_compile(const char *arg)
{
- return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
+ return XSTRDUP(MTYPE_ROUTE_MAP_COMPILED, arg);
}
/* Free route map's compiled `. */
-static void
-route_match_ip_next_hop_free (void *rule)
+static void route_match_ip_next_hop_free(void *rule)
{
- XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
+ XFREE(MTYPE_ROUTE_MAP_COMPILED, rule);
}
/* Route map commands for ip next-hop matching. */
-static struct route_map_rule_cmd route_match_ip_next_hop_cmd =
-{
- "ip next-hop",
- route_match_ip_next_hop,
- route_match_ip_next_hop_compile,
- route_match_ip_next_hop_free
-};
+static struct route_map_rule_cmd route_match_ip_next_hop_cmd = {
+ "ip next-hop", route_match_ip_next_hop, route_match_ip_next_hop_compile,
+ route_match_ip_next_hop_free};
/* `match ip next-hop prefix-list PREFIX_LIST' */
static route_map_result_t
-route_match_ip_next_hop_prefix_list (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
+route_match_ip_next_hop_prefix_list(void *rule, struct prefix *prefix,
+ route_map_object_t type, void *object)
{
- struct prefix_list *plist;
- struct nh_rmap_obj *nh_data;
- struct prefix_ipv4 p;
-
- if (type == RMAP_ZEBRA)
- {
- nh_data = (struct nh_rmap_obj *)object;
- if (!nh_data)
- return RMAP_DENYMATCH;
-
- switch (nh_data->nexthop->type) {
- case NEXTHOP_TYPE_IFINDEX:
- /* Interface routes can't match ip next-hop */
- return RMAP_NOMATCH;
- case NEXTHOP_TYPE_IPV4_IFINDEX:
- case NEXTHOP_TYPE_IPV4:
- p.family = AF_INET;
- p.prefix = nh_data->nexthop->gate.ipv4;
- p.prefixlen = IPV4_MAX_BITLEN;
- break;
- default:
- return RMAP_NOMATCH;
- }
- plist = prefix_list_lookup (AFI_IP, (char *) rule);
- if (plist == NULL)
- return RMAP_NOMATCH;
-
- return (prefix_list_apply (plist, &p) == PREFIX_DENY ?
- RMAP_NOMATCH : RMAP_MATCH);
- }
- return RMAP_NOMATCH;
+ struct prefix_list *plist;
+ struct nh_rmap_obj *nh_data;
+ struct prefix_ipv4 p;
+
+ if (type == RMAP_ZEBRA) {
+ nh_data = (struct nh_rmap_obj *)object;
+ if (!nh_data)
+ return RMAP_DENYMATCH;
+
+ switch (nh_data->nexthop->type) {
+ case NEXTHOP_TYPE_IFINDEX:
+ /* Interface routes can't match ip next-hop */
+ return RMAP_NOMATCH;
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ case NEXTHOP_TYPE_IPV4:
+ p.family = AF_INET;
+ p.prefix = nh_data->nexthop->gate.ipv4;
+ p.prefixlen = IPV4_MAX_BITLEN;
+ break;
+ default:
+ return RMAP_NOMATCH;
+ }
+ plist = prefix_list_lookup(AFI_IP, (char *)rule);
+ if (plist == NULL)
+ return RMAP_NOMATCH;
+
+ return (prefix_list_apply(plist, &p) == PREFIX_DENY
+ ? RMAP_NOMATCH
+ : RMAP_MATCH);
+ }
+ return RMAP_NOMATCH;
}
-static void *
-route_match_ip_next_hop_prefix_list_compile (const char *arg)
+static void *route_match_ip_next_hop_prefix_list_compile(const char *arg)
{
- return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
+ return XSTRDUP(MTYPE_ROUTE_MAP_COMPILED, arg);
}
-static void
-route_match_ip_next_hop_prefix_list_free (void *rule)
+static void route_match_ip_next_hop_prefix_list_free(void *rule)
{
- XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
+ XFREE(MTYPE_ROUTE_MAP_COMPILED, rule);
}
-static struct route_map_rule_cmd route_match_ip_next_hop_prefix_list_cmd =
-{
- "ip next-hop prefix-list",
- route_match_ip_next_hop_prefix_list,
- route_match_ip_next_hop_prefix_list_compile,
- route_match_ip_next_hop_prefix_list_free
-};
+static struct route_map_rule_cmd route_match_ip_next_hop_prefix_list_cmd = {
+ "ip next-hop prefix-list", route_match_ip_next_hop_prefix_list,
+ route_match_ip_next_hop_prefix_list_compile,
+ route_match_ip_next_hop_prefix_list_free};
/* `match ip address IP_ACCESS_LIST' */
/* Match function should return 1 if match is success else return
zero. */
-static route_map_result_t
-route_match_ip_address (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
+static route_map_result_t route_match_ip_address(void *rule,
+ struct prefix *prefix,
+ route_map_object_t type,
+ void *object)
{
- struct access_list *alist;
+ struct access_list *alist;
+
+ if (type == RMAP_ZEBRA) {
+ alist = access_list_lookup(AFI_IP, (char *)rule);
+ if (alist == NULL)
+ return RMAP_NOMATCH;
- if (type == RMAP_ZEBRA)
- {
- alist = access_list_lookup (AFI_IP, (char *) rule);
- if (alist == NULL)
+ return (access_list_apply(alist, prefix) == FILTER_DENY
+ ? RMAP_NOMATCH
+ : RMAP_MATCH);
+ }
return RMAP_NOMATCH;
-
- return (access_list_apply (alist, prefix) == FILTER_DENY ?
- RMAP_NOMATCH : RMAP_MATCH);
- }
- return RMAP_NOMATCH;
}
/* Route map `ip address' match statement. `arg' should be
access-list name. */
-static void *
-route_match_ip_address_compile (const char *arg)
+static void *route_match_ip_address_compile(const char *arg)
{
- return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
+ return XSTRDUP(MTYPE_ROUTE_MAP_COMPILED, arg);
}
/* Free route map's compiled `ip address' value. */
-static void
-route_match_ip_address_free (void *rule)
+static void route_match_ip_address_free(void *rule)
{
- XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
+ XFREE(MTYPE_ROUTE_MAP_COMPILED, rule);
}
/* Route map commands for ip address matching. */
-static struct route_map_rule_cmd route_match_ip_address_cmd =
-{
- "ip address",
- route_match_ip_address,
- route_match_ip_address_compile,
- route_match_ip_address_free
-};
+static struct route_map_rule_cmd route_match_ip_address_cmd = {
+ "ip address", route_match_ip_address, route_match_ip_address_compile,
+ route_match_ip_address_free};
/* `match ip address prefix-list PREFIX_LIST' */
static route_map_result_t
-route_match_ip_address_prefix_list (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
+route_match_ip_address_prefix_list(void *rule, struct prefix *prefix,
+ route_map_object_t type, void *object)
{
- struct prefix_list *plist;
+ struct prefix_list *plist;
+
+ if (type == RMAP_ZEBRA) {
+ plist = prefix_list_lookup(AFI_IP, (char *)rule);
+ if (plist == NULL)
+ return RMAP_NOMATCH;
- if (type == RMAP_ZEBRA)
- {
- plist = prefix_list_lookup (AFI_IP, (char *) rule);
- if (plist == NULL)
+ return (prefix_list_apply(plist, prefix) == PREFIX_DENY
+ ? RMAP_NOMATCH
+ : RMAP_MATCH);
+ }
return RMAP_NOMATCH;
-
- return (prefix_list_apply (plist, prefix) == PREFIX_DENY ?
- RMAP_NOMATCH : RMAP_MATCH);
- }
- return RMAP_NOMATCH;
}
-static void *
-route_match_ip_address_prefix_list_compile (const char *arg)
+static void *route_match_ip_address_prefix_list_compile(const char *arg)
{
- return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
+ return XSTRDUP(MTYPE_ROUTE_MAP_COMPILED, arg);
}
-static void
-route_match_ip_address_prefix_list_free (void *rule)
+static void route_match_ip_address_prefix_list_free(void *rule)
{
- XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
+ XFREE(MTYPE_ROUTE_MAP_COMPILED, rule);
}
-static struct route_map_rule_cmd route_match_ip_address_prefix_list_cmd =
-{
- "ip address prefix-list",
- route_match_ip_address_prefix_list,
- route_match_ip_address_prefix_list_compile,
- route_match_ip_address_prefix_list_free
-};
+static struct route_map_rule_cmd route_match_ip_address_prefix_list_cmd = {
+ "ip address prefix-list", route_match_ip_address_prefix_list,
+ route_match_ip_address_prefix_list_compile,
+ route_match_ip_address_prefix_list_free};
/* `match ip address prefix-len PREFIXLEN' */
static route_map_result_t
-route_match_ip_address_prefix_len (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
+route_match_ip_address_prefix_len(void *rule, struct prefix *prefix,
+ route_map_object_t type, void *object)
{
- u_int32_t *prefixlen = (u_int32_t *)rule;
+ u_int32_t *prefixlen = (u_int32_t *)rule;
- if (type == RMAP_ZEBRA)
- {
- return ((prefix->prefixlen == *prefixlen) ? RMAP_MATCH : RMAP_NOMATCH);
- }
- return RMAP_NOMATCH;
+ if (type == RMAP_ZEBRA) {
+ return ((prefix->prefixlen == *prefixlen) ? RMAP_MATCH
+ : RMAP_NOMATCH);
+ }
+ return RMAP_NOMATCH;
}
-static void *
-route_match_ip_address_prefix_len_compile (const char *arg)
+static void *route_match_ip_address_prefix_len_compile(const char *arg)
{
- u_int32_t *prefix_len;
- char *endptr = NULL;
- unsigned long tmpval;
+ u_int32_t *prefix_len;
+ char *endptr = NULL;
+ unsigned long tmpval;
- /* prefix len value shoud be integer. */
- if (! all_digit (arg))
- return NULL;
+ /* prefix len value shoud be integer. */
+ if (!all_digit(arg))
+ return NULL;
- errno = 0;
- tmpval = strtoul (arg, &endptr, 10);
- if (*endptr != '\0' || errno || tmpval > UINT32_MAX)
- return NULL;
+ errno = 0;
+ tmpval = strtoul(arg, &endptr, 10);
+ if (*endptr != '\0' || errno || tmpval > UINT32_MAX)
+ return NULL;
- prefix_len = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));
+ prefix_len = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, sizeof(u_int32_t));
- if (!prefix_len)
- return prefix_len;
+ if (!prefix_len)
+ return prefix_len;
- *prefix_len = tmpval;
- return prefix_len;
+ *prefix_len = tmpval;
+ return prefix_len;
}
-static void
-route_match_ip_address_prefix_len_free (void *rule)
+static void route_match_ip_address_prefix_len_free(void *rule)
{
- XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
+ XFREE(MTYPE_ROUTE_MAP_COMPILED, rule);
}
-static struct route_map_rule_cmd route_match_ip_address_prefix_len_cmd =
-{
- "ip address prefix-len",
- route_match_ip_address_prefix_len,
- route_match_ip_address_prefix_len_compile,
- route_match_ip_address_prefix_len_free
-};
+static struct route_map_rule_cmd route_match_ip_address_prefix_len_cmd = {
+ "ip address prefix-len", route_match_ip_address_prefix_len,
+ route_match_ip_address_prefix_len_compile,
+ route_match_ip_address_prefix_len_free};
/* `match ip nexthop prefix-len PREFIXLEN' */
static route_map_result_t
-route_match_ip_nexthop_prefix_len (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
-{
- u_int32_t *prefixlen = (u_int32_t *)rule;
- struct nh_rmap_obj *nh_data;
- struct prefix_ipv4 p;
-
- if (type == RMAP_ZEBRA)
- {
- nh_data = (struct nh_rmap_obj *)object;
- if (!nh_data || !nh_data->nexthop)
- return RMAP_DENYMATCH;
-
- switch (nh_data->nexthop->type) {
- case NEXTHOP_TYPE_IFINDEX:
- /* Interface routes can't match ip next-hop */
- return RMAP_NOMATCH;
- case NEXTHOP_TYPE_IPV4_IFINDEX:
- case NEXTHOP_TYPE_IPV4:
- p.family = AF_INET;
- p.prefix = nh_data->nexthop->gate.ipv4;
- p.prefixlen = IPV4_MAX_BITLEN;
- break;
- default:
- return RMAP_NOMATCH;
- }
- return ((p.prefixlen == *prefixlen) ? RMAP_MATCH : RMAP_NOMATCH);
- }
- return RMAP_NOMATCH;
-}
-
-static struct route_map_rule_cmd route_match_ip_nexthop_prefix_len_cmd =
-{
- "ip next-hop prefix-len",
- route_match_ip_nexthop_prefix_len,
- route_match_ip_address_prefix_len_compile, /* reuse */
- route_match_ip_address_prefix_len_free /* reuse */
+route_match_ip_nexthop_prefix_len(void *rule, struct prefix *prefix,
+ route_map_object_t type, void *object)
+{
+ u_int32_t *prefixlen = (u_int32_t *)rule;
+ struct nh_rmap_obj *nh_data;
+ struct prefix_ipv4 p;
+
+ if (type == RMAP_ZEBRA) {
+ nh_data = (struct nh_rmap_obj *)object;
+ if (!nh_data || !nh_data->nexthop)
+ return RMAP_DENYMATCH;
+
+ switch (nh_data->nexthop->type) {
+ case NEXTHOP_TYPE_IFINDEX:
+ /* Interface routes can't match ip next-hop */
+ return RMAP_NOMATCH;
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ case NEXTHOP_TYPE_IPV4:
+ p.family = AF_INET;
+ p.prefix = nh_data->nexthop->gate.ipv4;
+ p.prefixlen = IPV4_MAX_BITLEN;
+ break;
+ default:
+ return RMAP_NOMATCH;
+ }
+ return ((p.prefixlen == *prefixlen) ? RMAP_MATCH
+ : RMAP_NOMATCH);
+ }
+ return RMAP_NOMATCH;
+}
+
+static struct route_map_rule_cmd route_match_ip_nexthop_prefix_len_cmd = {
+ "ip next-hop prefix-len", route_match_ip_nexthop_prefix_len,
+ route_match_ip_address_prefix_len_compile, /* reuse */
+ route_match_ip_address_prefix_len_free /* reuse */
};
/* `match source-protocol PROTOCOL' */
-static route_map_result_t
-route_match_source_protocol (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
+static route_map_result_t route_match_source_protocol(void *rule,
+ struct prefix *prefix,
+ route_map_object_t type,
+ void *object)
{
- u_int32_t *rib_type = (u_int32_t *)rule;
- struct nh_rmap_obj *nh_data;
+ u_int32_t *rib_type = (u_int32_t *)rule;
+ struct nh_rmap_obj *nh_data;
- if (type == RMAP_ZEBRA)
- {
- nh_data = (struct nh_rmap_obj *)object;
- if (!nh_data)
- return RMAP_DENYMATCH;
+ if (type == RMAP_ZEBRA) {
+ nh_data = (struct nh_rmap_obj *)object;
+ if (!nh_data)
+ return RMAP_DENYMATCH;
- return ((nh_data->source_protocol == *rib_type)
- ? RMAP_MATCH : RMAP_NOMATCH);
- }
- return RMAP_NOMATCH;
+ return ((nh_data->source_protocol == *rib_type) ? RMAP_MATCH
+ : RMAP_NOMATCH);
+ }
+ return RMAP_NOMATCH;
}
-static void *
-route_match_source_protocol_compile (const char *arg)
+static void *route_match_source_protocol_compile(const char *arg)
{
- u_int32_t *rib_type;
- int i;
+ u_int32_t *rib_type;
+ int i;
- i = proto_name2num(arg);
- rib_type = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));
+ i = proto_name2num(arg);
+ rib_type = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, sizeof(u_int32_t));
- *rib_type = i;
+ *rib_type = i;
- return rib_type;
+ return rib_type;
}
-static void
-route_match_source_protocol_free (void *rule)
+static void route_match_source_protocol_free(void *rule)
{
- XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
+ XFREE(MTYPE_ROUTE_MAP_COMPILED, rule);
}
-static struct route_map_rule_cmd route_match_source_protocol_cmd =
-{
- "source-protocol",
- route_match_source_protocol,
- route_match_source_protocol_compile,
- route_match_source_protocol_free
-};
+static struct route_map_rule_cmd route_match_source_protocol_cmd = {
+ "source-protocol", route_match_source_protocol,
+ route_match_source_protocol_compile, route_match_source_protocol_free};
/* `set src A.B.C.D' */
/* Set src. */
-static route_map_result_t
-route_set_src (void *rule, struct prefix *prefix,
- route_map_object_t type, void *object)
+static route_map_result_t route_set_src(void *rule, struct prefix *prefix,
+ route_map_object_t type, void *object)
{
- struct nh_rmap_obj *nh_data;
+ struct nh_rmap_obj *nh_data;
- if (type == RMAP_ZEBRA)
- {
- nh_data = (struct nh_rmap_obj *)object;
- nh_data->nexthop->rmap_src = *(union g_addr *)rule;
- }
- return RMAP_OKAY;
+ if (type == RMAP_ZEBRA) {
+ nh_data = (struct nh_rmap_obj *)object;
+ nh_data->nexthop->rmap_src = *(union g_addr *)rule;
+ }
+ return RMAP_OKAY;
}
/* set src compilation. */
-static void *
-route_set_src_compile (const char *arg)
+static void *route_set_src_compile(const char *arg)
{
- union g_addr src, *psrc;
+ union g_addr src, *psrc;
- if ((inet_pton(AF_INET6, arg, &src.ipv6) == 1) ||
- (src.ipv4.s_addr && (inet_pton(AF_INET, arg, &src.ipv4) == 1)))
- {
- psrc = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (union g_addr));
- *psrc = src;
- return psrc;
- }
- return NULL;
+ if ((inet_pton(AF_INET6, arg, &src.ipv6) == 1)
+ || (src.ipv4.s_addr && (inet_pton(AF_INET, arg, &src.ipv4) == 1))) {
+ psrc = XMALLOC(MTYPE_ROUTE_MAP_COMPILED, sizeof(union g_addr));
+ *psrc = src;
+ return psrc;
+ }
+ return NULL;
}
/* Free route map's compiled `set src' value. */
-static void
-route_set_src_free (void *rule)
+static void route_set_src_free(void *rule)
{
- XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
+ XFREE(MTYPE_ROUTE_MAP_COMPILED, rule);
}
/* Set src rule structure. */
-static struct route_map_rule_cmd route_set_src_cmd =
-{
- "src",
- route_set_src,
- route_set_src_compile,
- route_set_src_free,
+static struct route_map_rule_cmd route_set_src_cmd = {
+ "src", route_set_src, route_set_src_compile, route_set_src_free,
};
-static int
-zebra_route_map_update_timer (struct thread *thread)
+static int zebra_route_map_update_timer(struct thread *thread)
{
- zebra_t_rmap_update = NULL;
+ zebra_t_rmap_update = NULL;
- if (IS_ZEBRA_DEBUG_EVENT)
- zlog_debug("Event driven route-map update triggered");
+ if (IS_ZEBRA_DEBUG_EVENT)
+ zlog_debug("Event driven route-map update triggered");
- if (IS_ZEBRA_DEBUG_RIB_DETAILED)
- zlog_debug ("%u: Routemap update-timer fired, scheduling RIB processing",
- VRF_DEFAULT);
+ if (IS_ZEBRA_DEBUG_RIB_DETAILED)
+ zlog_debug(
+ "%u: Routemap update-timer fired, scheduling RIB processing",
+ VRF_DEFAULT);
- zebra_import_table_rm_update ();
- rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
- zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
- zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
+ zebra_import_table_rm_update();
+ rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
+ zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
+ zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
- return (0);
+ return (0);
}
-static void
-zebra_route_map_set_delay_timer(u_int32_t value)
+static void zebra_route_map_set_delay_timer(u_int32_t value)
{
- zebra_rmap_update_timer = value;
- if (!value && zebra_t_rmap_update)
- {
- /* Event driven route map updates is being disabled */
- /* But there's a pending timer. Fire it off now */
- thread_cancel(zebra_t_rmap_update);
- zebra_route_map_update_timer(zebra_t_rmap_update);
- }
+ zebra_rmap_update_timer = value;
+ if (!value && zebra_t_rmap_update) {
+ /* Event driven route map updates is being disabled */
+ /* But there's a pending timer. Fire it off now */
+ thread_cancel(zebra_t_rmap_update);
+ zebra_route_map_update_timer(zebra_t_rmap_update);
+ }
}
-void
-zebra_route_map_write_delay_timer (struct vty *vty)
+void zebra_route_map_write_delay_timer(struct vty *vty)
{
- if (vty && (zebra_rmap_update_timer != ZEBRA_RMAP_DEFAULT_UPDATE_TIMER))
- vty_out (vty, "zebra route-map delay-timer %d\n",
- zebra_rmap_update_timer);
- return;
+ if (vty && (zebra_rmap_update_timer != ZEBRA_RMAP_DEFAULT_UPDATE_TIMER))
+ vty_out(vty, "zebra route-map delay-timer %d\n",
+ zebra_rmap_update_timer);
+ return;
}
-route_map_result_t
-zebra_route_map_check (int family, int rib_type, struct prefix *p,
- struct nexthop *nexthop, vrf_id_t vrf_id, route_tag_t tag)
+route_map_result_t zebra_route_map_check(int family, int rib_type,
+ struct prefix *p,
+ struct nexthop *nexthop,
+ vrf_id_t vrf_id, route_tag_t tag)
{
- struct route_map *rmap = NULL;
- route_map_result_t ret = RMAP_MATCH;
- struct nh_rmap_obj nh_obj;
+ struct route_map *rmap = NULL;
+ route_map_result_t ret = RMAP_MATCH;
+ struct nh_rmap_obj nh_obj;
- nh_obj.nexthop = nexthop;
- nh_obj.vrf_id = vrf_id;
- nh_obj.source_protocol = rib_type;
- nh_obj.metric = 0;
- nh_obj.tag = tag;
+ nh_obj.nexthop = nexthop;
+ nh_obj.vrf_id = vrf_id;
+ nh_obj.source_protocol = rib_type;
+ nh_obj.metric = 0;
+ nh_obj.tag = tag;
- if (rib_type >= 0 && rib_type < ZEBRA_ROUTE_MAX)
- rmap = route_map_lookup_by_name (proto_rm[family][rib_type]);
- if (!rmap && proto_rm[family][ZEBRA_ROUTE_MAX])
- rmap = route_map_lookup_by_name (proto_rm[family][ZEBRA_ROUTE_MAX]);
- if (rmap) {
- ret = route_map_apply(rmap, p, RMAP_ZEBRA, &nh_obj);
- }
+ if (rib_type >= 0 && rib_type < ZEBRA_ROUTE_MAX)
+ rmap = route_map_lookup_by_name(proto_rm[family][rib_type]);
+ if (!rmap && proto_rm[family][ZEBRA_ROUTE_MAX])
+ rmap = route_map_lookup_by_name(
+ proto_rm[family][ZEBRA_ROUTE_MAX]);
+ if (rmap) {
+ ret = route_map_apply(rmap, p, RMAP_ZEBRA, &nh_obj);
+ }
- return (ret);
+ return (ret);
}
-char *
-zebra_get_import_table_route_map (afi_t afi, uint32_t table)
+char *zebra_get_import_table_route_map(afi_t afi, uint32_t table)
{
- return zebra_import_table_routemap[afi][table];
+ return zebra_import_table_routemap[afi][table];
}
-void
-zebra_add_import_table_route_map (afi_t afi, const char *rmap_name, uint32_t table)
+void zebra_add_import_table_route_map(afi_t afi, const char *rmap_name,
+ uint32_t table)
{
- zebra_import_table_routemap[afi][table] = XSTRDUP (MTYPE_ROUTE_MAP_NAME, rmap_name);
+ zebra_import_table_routemap[afi][table] =
+ XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap_name);
}
-void
-zebra_del_import_table_route_map (afi_t afi, uint32_t table)
+void zebra_del_import_table_route_map(afi_t afi, uint32_t table)
{
- XFREE (MTYPE_ROUTE_MAP_NAME, zebra_import_table_routemap[afi][table]);
+ XFREE(MTYPE_ROUTE_MAP_NAME, zebra_import_table_routemap[afi][table]);
}
route_map_result_t
-zebra_import_table_route_map_check (int family, int re_type, struct prefix *p,
- struct nexthop *nexthop, vrf_id_t vrf_id, route_tag_t tag, const char *rmap_name)
-{
- struct route_map *rmap = NULL;
- route_map_result_t ret = RMAP_DENYMATCH;
- struct nh_rmap_obj nh_obj;
-
- nh_obj.nexthop = nexthop;
- nh_obj.vrf_id = vrf_id;
- nh_obj.source_protocol = re_type;
- nh_obj.metric = 0;
- nh_obj.tag = tag;
-
- if (re_type >= 0 && re_type < ZEBRA_ROUTE_MAX)
- rmap = route_map_lookup_by_name (rmap_name);
- if (rmap) {
- ret = route_map_apply(rmap, p, RMAP_ZEBRA, &nh_obj);
- }
+zebra_import_table_route_map_check(int family, int re_type, struct prefix *p,
+ struct nexthop *nexthop, vrf_id_t vrf_id,
+ route_tag_t tag, const char *rmap_name)
+{
+ struct route_map *rmap = NULL;
+ route_map_result_t ret = RMAP_DENYMATCH;
+ struct nh_rmap_obj nh_obj;
+
+ nh_obj.nexthop = nexthop;
+ nh_obj.vrf_id = vrf_id;
+ nh_obj.source_protocol = re_type;
+ nh_obj.metric = 0;
+ nh_obj.tag = tag;
+
+ if (re_type >= 0 && re_type < ZEBRA_ROUTE_MAX)
+ rmap = route_map_lookup_by_name(rmap_name);
+ if (rmap) {
+ ret = route_map_apply(rmap, p, RMAP_ZEBRA, &nh_obj);
+ }
- return (ret);
+ return (ret);
}
-route_map_result_t
-zebra_nht_route_map_check (int family, int client_proto, struct prefix *p,
- struct route_entry * re, struct nexthop *nexthop)
+route_map_result_t zebra_nht_route_map_check(int family, int client_proto,
+ struct prefix *p,
+ struct route_entry *re,
+ struct nexthop *nexthop)
{
- struct route_map *rmap = NULL;
- route_map_result_t ret = RMAP_MATCH;
- struct nh_rmap_obj nh_obj;
+ struct route_map *rmap = NULL;
+ route_map_result_t ret = RMAP_MATCH;
+ struct nh_rmap_obj nh_obj;
- nh_obj.nexthop = nexthop;
- nh_obj.vrf_id = re->vrf_id;
- nh_obj.source_protocol = re->type;
- nh_obj.metric = re->metric;
- nh_obj.tag = re->tag;
+ nh_obj.nexthop = nexthop;
+ nh_obj.vrf_id = re->vrf_id;
+ nh_obj.source_protocol = re->type;
+ nh_obj.metric = re->metric;
+ nh_obj.tag = re->tag;
- if (client_proto >= 0 && client_proto < ZEBRA_ROUTE_MAX)
- rmap = route_map_lookup_by_name (nht_rm[family][client_proto]);
- if (!rmap && nht_rm[family][ZEBRA_ROUTE_MAX])
- rmap = route_map_lookup_by_name (nht_rm[family][ZEBRA_ROUTE_MAX]);
- if (rmap) {
- ret = route_map_apply(rmap, p, RMAP_ZEBRA, &nh_obj);
- }
+ if (client_proto >= 0 && client_proto < ZEBRA_ROUTE_MAX)
+ rmap = route_map_lookup_by_name(nht_rm[family][client_proto]);
+ if (!rmap && nht_rm[family][ZEBRA_ROUTE_MAX])
+ rmap = route_map_lookup_by_name(
+ nht_rm[family][ZEBRA_ROUTE_MAX]);
+ if (rmap) {
+ ret = route_map_apply(rmap, p, RMAP_ZEBRA, &nh_obj);
+ }
- return (ret);
+ return (ret);
}
-static void
-zebra_route_map_mark_update (const char *rmap_name)
+static void zebra_route_map_mark_update(const char *rmap_name)
{
- /* rmap_update_timer of 0 means don't do route updates */
- if (zebra_rmap_update_timer && !zebra_t_rmap_update) {
- zebra_t_rmap_update = NULL;
- thread_add_timer(zebrad.master, zebra_route_map_update_timer, NULL, zebra_rmap_update_timer,
- &zebra_t_rmap_update);
- }
+ /* rmap_update_timer of 0 means don't do route updates */
+ if (zebra_rmap_update_timer && !zebra_t_rmap_update) {
+ zebra_t_rmap_update = NULL;
+ thread_add_timer(zebrad.master, zebra_route_map_update_timer,
+ NULL, zebra_rmap_update_timer,
+ &zebra_t_rmap_update);
+ }
}
-static void
-zebra_route_map_add (const char *rmap_name)
+static void zebra_route_map_add(const char *rmap_name)
{
- zebra_route_map_mark_update(rmap_name);
- route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_ADDED);
+ zebra_route_map_mark_update(rmap_name);
+ route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_ADDED);
}
-static void
-zebra_route_map_delete (const char *rmap_name)
+static void zebra_route_map_delete(const char *rmap_name)
{
- zebra_route_map_mark_update(rmap_name);
- route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_DELETED);
+ zebra_route_map_mark_update(rmap_name);
+ route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_DELETED);
}
-static void
-zebra_route_map_event (route_map_event_t event, const char *rmap_name)
+static void zebra_route_map_event(route_map_event_t event,
+ const char *rmap_name)
{
- zebra_route_map_mark_update(rmap_name);
- route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_ADDED);
+ zebra_route_map_mark_update(rmap_name);
+ route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_ADDED);
}
/* ip protocol configuration write function */
-void
-zebra_routemap_config_write_protocol (struct vty *vty)
-{
- int i;
-
- for (i=0;i<ZEBRA_ROUTE_MAX;i++)
- {
- if (proto_rm[AFI_IP][i])
- vty_out (vty, "ip protocol %s route-map %s\n", zebra_route_string(i),
- proto_rm[AFI_IP][i]);
-
- if (proto_rm[AFI_IP6][i])
- vty_out (vty, "ipv6 protocol %s route-map %s\n", zebra_route_string(i),
- proto_rm[AFI_IP6][i]);
-
- if (nht_rm[AFI_IP][i])
- vty_out (vty, "ip nht %s route-map %s\n", zebra_route_string(i),
- nht_rm[AFI_IP][i]);
-
- if (nht_rm[AFI_IP6][i])
- vty_out (vty, "ipv6 nht %s route-map %s\n", zebra_route_string(i),
- nht_rm[AFI_IP6][i]);
- }
-
- if (proto_rm[AFI_IP][ZEBRA_ROUTE_MAX])
- vty_out (vty, "ip protocol %s route-map %s\n", "any",
- proto_rm[AFI_IP][ZEBRA_ROUTE_MAX]);
-
- if (proto_rm[AFI_IP6][ZEBRA_ROUTE_MAX])
- vty_out (vty, "ipv6 protocol %s route-map %s\n", "any",
- proto_rm[AFI_IP6][ZEBRA_ROUTE_MAX]);
-
- if (nht_rm[AFI_IP][ZEBRA_ROUTE_MAX])
- vty_out (vty, "ip nht %s route-map %s\n", "any",
- nht_rm[AFI_IP][ZEBRA_ROUTE_MAX]);
-
- if (nht_rm[AFI_IP6][ZEBRA_ROUTE_MAX])
- vty_out (vty, "ipv6 nht %s route-map %s\n", "any",
- nht_rm[AFI_IP6][ZEBRA_ROUTE_MAX]);
-
- if (zebra_rmap_update_timer != ZEBRA_RMAP_DEFAULT_UPDATE_TIMER)
- vty_out (vty, "zebra route-map delay-timer %d\n",
- zebra_rmap_update_timer);
-}
-
-void
-zebra_route_map_init ()
-{
- install_element (CONFIG_NODE, &ip_protocol_cmd);
- install_element (CONFIG_NODE, &no_ip_protocol_cmd);
- install_element (VIEW_NODE, &show_ip_protocol_cmd);
- install_element (CONFIG_NODE, &ipv6_protocol_cmd);
- install_element (CONFIG_NODE, &no_ipv6_protocol_cmd);
- install_element (VIEW_NODE, &show_ipv6_protocol_cmd);
- install_element (CONFIG_NODE, &ip_protocol_nht_rmap_cmd);
- install_element (CONFIG_NODE, &no_ip_protocol_nht_rmap_cmd);
- install_element (VIEW_NODE, &show_ip_protocol_nht_cmd);
- install_element (CONFIG_NODE, &ipv6_protocol_nht_rmap_cmd);
- install_element (CONFIG_NODE, &no_ipv6_protocol_nht_rmap_cmd);
- install_element (VIEW_NODE, &show_ipv6_protocol_nht_cmd);
- install_element (CONFIG_NODE, &zebra_route_map_timer_cmd);
- install_element (CONFIG_NODE, &no_zebra_route_map_timer_cmd);
-
- route_map_init ();
-
- route_map_add_hook (zebra_route_map_add);
- route_map_delete_hook (zebra_route_map_delete);
- route_map_event_hook (zebra_route_map_event);
-
- route_map_match_interface_hook (generic_match_add);
- route_map_no_match_interface_hook (generic_match_delete);
-
- route_map_match_ip_address_hook (generic_match_add);
- route_map_no_match_ip_address_hook (generic_match_delete);
-
- route_map_match_ip_address_prefix_list_hook (generic_match_add);
- route_map_no_match_ip_address_prefix_list_hook (generic_match_delete);
-
- route_map_match_ip_next_hop_hook (generic_match_add);
- route_map_no_match_ip_next_hop_hook (generic_match_delete);
-
- route_map_match_ip_next_hop_prefix_list_hook (generic_match_add);
- route_map_no_match_ip_next_hop_prefix_list_hook (generic_match_delete);
-
- route_map_match_tag_hook (generic_match_add);
- route_map_no_match_tag_hook (generic_match_delete);
-
- route_map_install_match (&route_match_tag_cmd);
- route_map_install_match (&route_match_interface_cmd);
- route_map_install_match (&route_match_ip_next_hop_cmd);
- route_map_install_match (&route_match_ip_next_hop_prefix_list_cmd);
- route_map_install_match (&route_match_ip_address_cmd);
- route_map_install_match (&route_match_ip_address_prefix_list_cmd);
- route_map_install_match (&route_match_ip_address_prefix_len_cmd);
- route_map_install_match (&route_match_ip_nexthop_prefix_len_cmd);
- route_map_install_match (&route_match_source_protocol_cmd);
-/* */
- route_map_install_set (&route_set_src_cmd);
-/* */
- install_element (RMAP_NODE, &match_ip_nexthop_prefix_len_cmd);
- install_element (RMAP_NODE, &no_match_ip_nexthop_prefix_len_cmd);
- install_element (RMAP_NODE, &match_ip_address_prefix_len_cmd);
- install_element (RMAP_NODE, &no_match_ip_address_prefix_len_cmd);
- install_element (RMAP_NODE, &match_source_protocol_cmd);
- install_element (RMAP_NODE, &no_match_source_protocol_cmd);
- /* */
- install_element (RMAP_NODE, &set_src_cmd);
- install_element (RMAP_NODE, &no_set_src_cmd);
+void zebra_routemap_config_write_protocol(struct vty *vty)
+{
+ int i;
+
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+ if (proto_rm[AFI_IP][i])
+ vty_out(vty, "ip protocol %s route-map %s\n",
+ zebra_route_string(i), proto_rm[AFI_IP][i]);
+
+ if (proto_rm[AFI_IP6][i])
+ vty_out(vty, "ipv6 protocol %s route-map %s\n",
+ zebra_route_string(i), proto_rm[AFI_IP6][i]);
+
+ if (nht_rm[AFI_IP][i])
+ vty_out(vty, "ip nht %s route-map %s\n",
+ zebra_route_string(i), nht_rm[AFI_IP][i]);
+
+ if (nht_rm[AFI_IP6][i])
+ vty_out(vty, "ipv6 nht %s route-map %s\n",
+ zebra_route_string(i), nht_rm[AFI_IP6][i]);
+ }
+
+ if (proto_rm[AFI_IP][ZEBRA_ROUTE_MAX])
+ vty_out(vty, "ip protocol %s route-map %s\n", "any",
+ proto_rm[AFI_IP][ZEBRA_ROUTE_MAX]);
+
+ if (proto_rm[AFI_IP6][ZEBRA_ROUTE_MAX])
+ vty_out(vty, "ipv6 protocol %s route-map %s\n", "any",
+ proto_rm[AFI_IP6][ZEBRA_ROUTE_MAX]);
+
+ if (nht_rm[AFI_IP][ZEBRA_ROUTE_MAX])
+ vty_out(vty, "ip nht %s route-map %s\n", "any",
+ nht_rm[AFI_IP][ZEBRA_ROUTE_MAX]);
+
+ if (nht_rm[AFI_IP6][ZEBRA_ROUTE_MAX])
+ vty_out(vty, "ipv6 nht %s route-map %s\n", "any",
+ nht_rm[AFI_IP6][ZEBRA_ROUTE_MAX]);
+
+ if (zebra_rmap_update_timer != ZEBRA_RMAP_DEFAULT_UPDATE_TIMER)
+ vty_out(vty, "zebra route-map delay-timer %d\n",
+ zebra_rmap_update_timer);
+}
+
+void zebra_route_map_init()
+{
+ install_element(CONFIG_NODE, &ip_protocol_cmd);
+ install_element(CONFIG_NODE, &no_ip_protocol_cmd);
+ install_element(VIEW_NODE, &show_ip_protocol_cmd);
+ install_element(CONFIG_NODE, &ipv6_protocol_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_protocol_cmd);
+ install_element(VIEW_NODE, &show_ipv6_protocol_cmd);
+ install_element(CONFIG_NODE, &ip_protocol_nht_rmap_cmd);
+ install_element(CONFIG_NODE, &no_ip_protocol_nht_rmap_cmd);
+ install_element(VIEW_NODE, &show_ip_protocol_nht_cmd);
+ install_element(CONFIG_NODE, &ipv6_protocol_nht_rmap_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_protocol_nht_rmap_cmd);
+ install_element(VIEW_NODE, &show_ipv6_protocol_nht_cmd);
+ install_element(CONFIG_NODE, &zebra_route_map_timer_cmd);
+ install_element(CONFIG_NODE, &no_zebra_route_map_timer_cmd);
+
+ route_map_init();
+
+ route_map_add_hook(zebra_route_map_add);
+ route_map_delete_hook(zebra_route_map_delete);
+ route_map_event_hook(zebra_route_map_event);
+
+ route_map_match_interface_hook(generic_match_add);
+ route_map_no_match_interface_hook(generic_match_delete);
+
+ route_map_match_ip_address_hook(generic_match_add);
+ route_map_no_match_ip_address_hook(generic_match_delete);
+
+ route_map_match_ip_address_prefix_list_hook(generic_match_add);
+ route_map_no_match_ip_address_prefix_list_hook(generic_match_delete);
+
+ route_map_match_ip_next_hop_hook(generic_match_add);
+ route_map_no_match_ip_next_hop_hook(generic_match_delete);
+
+ route_map_match_ip_next_hop_prefix_list_hook(generic_match_add);
+ route_map_no_match_ip_next_hop_prefix_list_hook(generic_match_delete);
+
+ route_map_match_tag_hook(generic_match_add);
+ route_map_no_match_tag_hook(generic_match_delete);
+
+ route_map_install_match(&route_match_tag_cmd);
+ route_map_install_match(&route_match_interface_cmd);
+ route_map_install_match(&route_match_ip_next_hop_cmd);
+ route_map_install_match(&route_match_ip_next_hop_prefix_list_cmd);
+ route_map_install_match(&route_match_ip_address_cmd);
+ route_map_install_match(&route_match_ip_address_prefix_list_cmd);
+ route_map_install_match(&route_match_ip_address_prefix_len_cmd);
+ route_map_install_match(&route_match_ip_nexthop_prefix_len_cmd);
+ route_map_install_match(&route_match_source_protocol_cmd);
+ /* */
+ route_map_install_set(&route_set_src_cmd);
+ /* */
+ install_element(RMAP_NODE, &match_ip_nexthop_prefix_len_cmd);
+ install_element(RMAP_NODE, &no_match_ip_nexthop_prefix_len_cmd);
+ install_element(RMAP_NODE, &match_ip_address_prefix_len_cmd);
+ install_element(RMAP_NODE, &no_match_ip_address_prefix_len_cmd);
+ install_element(RMAP_NODE, &match_source_protocol_cmd);
+ install_element(RMAP_NODE, &no_match_source_protocol_cmd);
+ /* */
+ install_element(RMAP_NODE, &set_src_cmd);
+ install_element(RMAP_NODE, &no_set_src_cmd);
}