diff options
author | whitespace / reindent <invalid@invalid.invalid> | 2017-07-17 14:03:14 +0200 |
---|---|---|
committer | whitespace / reindent <invalid@invalid.invalid> | 2017-07-17 14:04:07 +0200 |
commit | d62a17aedeb0eebdba98238874bb13d62c48dbf9 (patch) | |
tree | 3b319b1d61c8b85b4d1f06adf8b844bb8a9b5107 /zebra/zebra_routemap.c | |
parent | *: add indent control files (diff) | |
download | frr-d62a17aedeb0eebdba98238874bb13d62c48dbf9.tar.xz frr-d62a17aedeb0eebdba98238874bb13d62c48dbf9.zip |
*: reindentreindent-master-after
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.c | 1829 |
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); } |