2 * Route map function of ospfd.
3 * Copyright (C) 2000 IP Infusion Inc.
5 * Written by Toshiaki Takada.
7 * This file is part of GNU Zebra.
9 * GNU Zebra is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the
11 * Free Software Foundation; either version 2, or (at your option) any
14 * GNU Zebra is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with GNU Zebra; see the file COPYING. If not, write to the Free
21 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
35 #include "ospfd/ospfd.h"
36 #include "ospfd/ospf_asbr.h"
37 #include "ospfd/ospf_interface.h"
38 #include "ospfd/ospf_lsa.h"
39 #include "ospfd/ospf_route.h"
40 #include "ospfd/ospf_zebra.h"
42 /* Hook function for updating route_map assignment. */
44 ospf_route_map_update (const char *name
)
49 /* If OSPF instatnce does not exist, return right now. */
50 ospf
= ospf_lookup ();
54 /* Update route-map */
55 for (type
= 0; type
<= ZEBRA_ROUTE_MAX
; type
++)
57 struct list
*red_list
;
58 struct listnode
*node
;
59 struct ospf_redist
*red
;
61 red_list
= ospf
->redist
[type
];
65 for (ALL_LIST_ELEMENTS_RO(red_list
, node
, red
))
67 if (ROUTEMAP_NAME (red
)
68 && strcmp (ROUTEMAP_NAME (red
), name
) == 0)
70 /* Keep old route-map. */
71 struct route_map
*old
= ROUTEMAP (red
);
73 /* Update route-map. */
75 route_map_lookup_by_name (ROUTEMAP_NAME (red
));
77 /* No update for this distribute type. */
78 if (old
== NULL
&& ROUTEMAP (red
) == NULL
)
81 ospf_distribute_list_update (ospf
, type
, red
->instance
);
88 ospf_route_map_event (route_map_event_t event
, const char *name
)
93 /* If OSPF instatnce does not exist, return right now. */
94 ospf
= ospf_lookup ();
98 for (type
= 0; type
<= ZEBRA_ROUTE_MAX
; type
++)
100 struct list
*red_list
;
101 struct listnode
*node
;
102 struct ospf_redist
*red
;
104 red_list
= ospf
->redist
[type
];
108 for (ALL_LIST_ELEMENTS_RO(red_list
, node
, red
))
110 if (ROUTEMAP_NAME (red
) && ROUTEMAP (red
)
111 && !strcmp (ROUTEMAP_NAME (red
), name
))
113 ospf_distribute_list_update (ospf
, type
, red
->instance
);
119 /* Delete rip route map rule. */
121 ospf_route_match_delete (struct vty
*vty
, struct route_map_index
*index
,
122 const char *command
, const char *arg
)
126 ret
= route_map_delete_match (index
, command
, arg
);
131 case RMAP_RULE_MISSING
:
132 vty_out (vty
, "%% OSPF Can't find rule.%s", VTY_NEWLINE
);
134 case RMAP_COMPILE_ERROR
:
135 vty_out (vty
, "%% OSPF Argument is malformed.%s", VTY_NEWLINE
);
144 ospf_route_match_add (struct vty
*vty
, struct route_map_index
*index
,
145 const char *command
, const char *arg
)
149 ret
= route_map_add_match (index
, command
, arg
);
154 case RMAP_RULE_MISSING
:
155 vty_out (vty
, "%% OSPF Can't find rule.%s", VTY_NEWLINE
);
157 case RMAP_COMPILE_ERROR
:
158 vty_out (vty
, "%% OSPF Argument is malformed.%s", VTY_NEWLINE
);
167 ospf_route_set_add (struct vty
*vty
, struct route_map_index
*index
,
168 const char *command
, const char *arg
)
172 ret
= route_map_add_set (index
, command
, arg
);
177 case RMAP_RULE_MISSING
:
178 vty_out (vty
, "%% OSPF Can't find rule.%s", VTY_NEWLINE
);
180 case RMAP_COMPILE_ERROR
:
181 vty_out (vty
, "%% OSPF Argument is malformed.%s", VTY_NEWLINE
);
189 /* Delete rip route map rule. */
191 ospf_route_set_delete (struct vty
*vty
, struct route_map_index
*index
,
192 const char *command
, const char *arg
)
196 ret
= route_map_delete_set (index
, command
, arg
);
201 case RMAP_RULE_MISSING
:
202 vty_out (vty
, "%% OSPF Can't find rule.%s", VTY_NEWLINE
);
204 case RMAP_COMPILE_ERROR
:
205 vty_out (vty
, "%% OSPF Argument is malformed.%s", VTY_NEWLINE
);
213 /* `match ip netxthop ' */
214 /* Match function return 1 if match is success else return zero. */
215 static route_map_result_t
216 route_match_ip_nexthop (void *rule
, struct prefix
*prefix
,
217 route_map_object_t type
, void *object
)
219 struct access_list
*alist
;
220 struct external_info
*ei
= object
;
221 struct prefix_ipv4 p
;
223 if (type
== RMAP_OSPF
)
226 p
.prefix
= ei
->nexthop
;
227 p
.prefixlen
= IPV4_MAX_BITLEN
;
229 alist
= access_list_lookup (AFI_IP
, (char *) rule
);
233 return (access_list_apply (alist
, &p
) == FILTER_DENY
?
234 RMAP_NOMATCH
: RMAP_MATCH
);
239 /* Route map `ip next-hop' match statement. `arg' should be
242 route_match_ip_nexthop_compile (const char *arg
)
244 return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED
, arg
);
247 /* Free route map's compiled `ip address' value. */
249 route_match_ip_nexthop_free (void *rule
)
251 XFREE (MTYPE_ROUTE_MAP_COMPILED
, rule
);
254 /* Route map commands for metric matching. */
255 struct route_map_rule_cmd route_match_ip_nexthop_cmd
=
258 route_match_ip_nexthop
,
259 route_match_ip_nexthop_compile
,
260 route_match_ip_nexthop_free
263 /* `match ip next-hop prefix-list PREFIX_LIST' */
265 static route_map_result_t
266 route_match_ip_next_hop_prefix_list (void *rule
, struct prefix
*prefix
,
267 route_map_object_t type
, void *object
)
269 struct prefix_list
*plist
;
270 struct external_info
*ei
= object
;
271 struct prefix_ipv4 p
;
273 if (type
== RMAP_OSPF
)
276 p
.prefix
= ei
->nexthop
;
277 p
.prefixlen
= IPV4_MAX_BITLEN
;
279 plist
= prefix_list_lookup (AFI_IP
, (char *) rule
);
283 return (prefix_list_apply (plist
, &p
) == PREFIX_DENY
?
284 RMAP_NOMATCH
: RMAP_MATCH
);
290 route_match_ip_next_hop_prefix_list_compile (const char *arg
)
292 return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED
, arg
);
296 route_match_ip_next_hop_prefix_list_free (void *rule
)
298 XFREE (MTYPE_ROUTE_MAP_COMPILED
, rule
);
301 struct route_map_rule_cmd route_match_ip_next_hop_prefix_list_cmd
=
303 "ip next-hop prefix-list",
304 route_match_ip_next_hop_prefix_list
,
305 route_match_ip_next_hop_prefix_list_compile
,
306 route_match_ip_next_hop_prefix_list_free
309 /* `match ip address IP_ACCESS_LIST' */
310 /* Match function should return 1 if match is success else return
312 static route_map_result_t
313 route_match_ip_address (void *rule
, struct prefix
*prefix
,
314 route_map_object_t type
, void *object
)
316 struct access_list
*alist
;
317 /* struct prefix_ipv4 match; */
319 if (type
== RMAP_OSPF
)
321 alist
= access_list_lookup (AFI_IP
, (char *) rule
);
325 return (access_list_apply (alist
, prefix
) == FILTER_DENY
?
326 RMAP_NOMATCH
: RMAP_MATCH
);
331 /* Route map `ip address' match statement. `arg' should be
334 route_match_ip_address_compile (const char *arg
)
336 return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED
, arg
);
339 /* Free route map's compiled `ip address' value. */
341 route_match_ip_address_free (void *rule
)
343 XFREE (MTYPE_ROUTE_MAP_COMPILED
, rule
);
346 /* Route map commands for ip address matching. */
347 struct route_map_rule_cmd route_match_ip_address_cmd
=
350 route_match_ip_address
,
351 route_match_ip_address_compile
,
352 route_match_ip_address_free
355 /* `match ip address prefix-list PREFIX_LIST' */
356 static route_map_result_t
357 route_match_ip_address_prefix_list (void *rule
, struct prefix
*prefix
,
358 route_map_object_t type
, void *object
)
360 struct prefix_list
*plist
;
362 if (type
== RMAP_OSPF
)
364 plist
= prefix_list_lookup (AFI_IP
, (char *) rule
);
368 return (prefix_list_apply (plist
, prefix
) == PREFIX_DENY
?
369 RMAP_NOMATCH
: RMAP_MATCH
);
375 route_match_ip_address_prefix_list_compile (const char *arg
)
377 return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED
, arg
);
381 route_match_ip_address_prefix_list_free (void *rule
)
383 XFREE (MTYPE_ROUTE_MAP_COMPILED
, rule
);
386 struct route_map_rule_cmd route_match_ip_address_prefix_list_cmd
=
388 "ip address prefix-list",
389 route_match_ip_address_prefix_list
,
390 route_match_ip_address_prefix_list_compile
,
391 route_match_ip_address_prefix_list_free
394 /* `match interface IFNAME' */
395 /* Match function should return 1 if match is success else return
397 static route_map_result_t
398 route_match_interface (void *rule
, struct prefix
*prefix
,
399 route_map_object_t type
, void *object
)
401 struct interface
*ifp
;
402 struct external_info
*ei
;
404 if (type
== RMAP_OSPF
)
407 ifp
= if_lookup_by_name ((char *)rule
);
409 if (ifp
== NULL
|| ifp
->ifindex
!= ei
->ifindex
)
417 /* Route map `interface' match statement. `arg' should be
420 route_match_interface_compile (const char *arg
)
422 return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED
, arg
);
425 /* Free route map's compiled `interface' value. */
427 route_match_interface_free (void *rule
)
429 XFREE (MTYPE_ROUTE_MAP_COMPILED
, rule
);
432 /* Route map commands for ip address matching. */
433 struct route_map_rule_cmd route_match_interface_cmd
=
436 route_match_interface
,
437 route_match_interface_compile
,
438 route_match_interface_free
441 /* Match function return 1 if match is success else return zero. */
442 static route_map_result_t
443 route_match_tag (void *rule
, struct prefix
*prefix
,
444 route_map_object_t type
, void *object
)
447 struct external_info
*ei
;
449 if (type
== RMAP_OSPF
)
454 return ((ei
->tag
== *tag
)? RMAP_MATCH
: RMAP_NOMATCH
);
460 /* Route map `match tag' match statement. `arg' is TAG value */
462 route_match_tag_compile (const char *arg
)
467 /* tag value shoud be integer. */
468 if (! all_digit (arg
))
475 tag
= XMALLOC (MTYPE_ROUTE_MAP_COMPILED
, sizeof (u_short
));
485 /* Free route map's compiled 'match tag' value. */
487 route_match_tag_free (void *rule
)
489 XFREE (MTYPE_ROUTE_MAP_COMPILED
, rule
);
492 /* Route map commands for tag matching. */
493 struct route_map_rule_cmd route_match_tag_cmd
=
497 route_match_tag_compile
,
498 route_match_tag_free
,
502 /* `set metric METRIC' */
503 /* Set metric to attribute. */
504 static route_map_result_t
505 route_set_metric (void *rule
, struct prefix
*prefix
,
506 route_map_object_t type
, void *object
)
509 struct external_info
*ei
;
511 if (type
== RMAP_OSPF
)
513 /* Fetch routemap's rule information. */
517 /* Set metric out value. */
518 ei
->route_map_set
.metric
= *metric
;
523 /* set metric compilation. */
525 route_set_metric_compile (const char *arg
)
530 /* OSPF doesn't support the +/- in
531 set metric <+/-metric> check
532 Ignore the +/- component */
533 if (! all_digit (arg
))
535 if ((strncmp (arg
, "+", 1) == 0 || strncmp (arg
, "-", 1) == 0) &&
538 zlog_warn ("OSPF does not support 'set metric +/-'");
546 metric
= XCALLOC (MTYPE_ROUTE_MAP_COMPILED
, sizeof (u_int32_t
));
551 *metric
= (u_int32_t
)ret
;
555 XFREE (MTYPE_ROUTE_MAP_COMPILED
, metric
);
559 /* Free route map's compiled `set metric' value. */
561 route_set_metric_free (void *rule
)
563 XFREE (MTYPE_ROUTE_MAP_COMPILED
, rule
);
566 /* Set metric rule structure. */
567 struct route_map_rule_cmd route_set_metric_cmd
=
571 route_set_metric_compile
,
572 route_set_metric_free
,
575 /* `set metric-type TYPE' */
576 /* Set metric-type to attribute. */
577 static route_map_result_t
578 route_set_metric_type (void *rule
, struct prefix
*prefix
,
579 route_map_object_t type
, void *object
)
581 u_int32_t
*metric_type
;
582 struct external_info
*ei
;
584 if (type
== RMAP_OSPF
)
586 /* Fetch routemap's rule information. */
590 /* Set metric out value. */
591 ei
->route_map_set
.metric_type
= *metric_type
;
596 /* set metric-type compilation. */
598 route_set_metric_type_compile (const char *arg
)
600 u_int32_t
*metric_type
;
602 metric_type
= XCALLOC (MTYPE_ROUTE_MAP_COMPILED
, sizeof (u_int32_t
));
603 if (strcmp (arg
, "type-1") == 0)
604 *metric_type
= EXTERNAL_METRIC_TYPE_1
;
605 else if (strcmp (arg
, "type-2") == 0)
606 *metric_type
= EXTERNAL_METRIC_TYPE_2
;
608 if (*metric_type
== EXTERNAL_METRIC_TYPE_1
||
609 *metric_type
== EXTERNAL_METRIC_TYPE_2
)
612 XFREE (MTYPE_ROUTE_MAP_COMPILED
, metric_type
);
616 /* Free route map's compiled `set metric-type' value. */
618 route_set_metric_type_free (void *rule
)
620 XFREE (MTYPE_ROUTE_MAP_COMPILED
, rule
);
623 /* Set metric rule structure. */
624 struct route_map_rule_cmd route_set_metric_type_cmd
=
627 route_set_metric_type
,
628 route_set_metric_type_compile
,
629 route_set_metric_type_free
,
632 static route_map_result_t
633 route_set_tag (void *rule
, struct prefix
*prefix
,
634 route_map_object_t type
, void *object
)
637 struct external_info
*ei
;
639 if (type
== RMAP_OSPF
)
651 /* Route map `tag' compile function. Given string is converted to u_short. */
653 route_set_tag_compile (const char *arg
)
658 /* tag value shoud be integer. */
659 if (! all_digit (arg
))
667 tag
= XMALLOC (MTYPE_ROUTE_MAP_COMPILED
, sizeof (u_short
));
677 /* Free route map's tag value. */
679 route_set_tag_free (void *rule
)
681 XFREE (MTYPE_ROUTE_MAP_COMPILED
, rule
);
684 /* Route map commands for tag set. */
685 struct route_map_rule_cmd route_set_tag_cmd
=
689 route_set_tag_compile
,
693 DEFUN (match_ip_nexthop
,
694 match_ip_nexthop_cmd
,
695 "match ip next-hop (<1-199>|<1300-2699>|WORD)",
698 "Match next-hop address of route\n"
699 "IP access-list number\n"
700 "IP access-list number (expanded range)\n"
701 "IP access-list name\n")
703 return ospf_route_match_add (vty
, vty
->index
, "ip next-hop", argv
[0]);
706 DEFUN (no_match_ip_nexthop
,
707 no_match_ip_nexthop_cmd
,
708 "no match ip next-hop",
712 "Match next-hop address of route\n")
715 return ospf_route_match_delete (vty
, vty
->index
, "ip next-hop", NULL
);
717 return ospf_route_match_delete (vty
, vty
->index
, "ip next-hop", argv
[0]);
720 ALIAS (no_match_ip_nexthop
,
721 no_match_ip_nexthop_val_cmd
,
722 "no match ip next-hop (<1-199>|<1300-2699>|WORD)",
726 "Match next-hop address of route\n"
727 "IP access-list number\n"
728 "IP access-list number (expanded range)\n"
729 "IP access-list name\n")
731 DEFUN (match_ip_next_hop_prefix_list
,
732 match_ip_next_hop_prefix_list_cmd
,
733 "match ip next-hop prefix-list WORD",
736 "Match next-hop address of route\n"
737 "Match entries of prefix-lists\n"
738 "IP prefix-list name\n")
740 return ospf_route_match_add (vty
, vty
->index
, "ip next-hop prefix-list",
744 DEFUN (no_match_ip_next_hop_prefix_list
,
745 no_match_ip_next_hop_prefix_list_cmd
,
746 "no match ip next-hop prefix-list",
750 "Match next-hop address of route\n"
751 "Match entries of prefix-lists\n")
754 return ospf_route_match_delete (vty
, vty
->index
, "ip next-hop prefix-list",
756 return ospf_route_match_delete (vty
, vty
->index
, "ip next-hop prefix-list",
760 ALIAS (no_match_ip_next_hop_prefix_list
,
761 no_match_ip_next_hop_prefix_list_val_cmd
,
762 "no match ip next-hop prefix-list WORD",
766 "Match next-hop address of route\n"
767 "Match entries of prefix-lists\n"
768 "IP prefix-list name\n")
770 DEFUN (match_ip_address
,
771 match_ip_address_cmd
,
772 "match ip address (<1-199>|<1300-2699>|WORD)",
775 "Match address of route\n"
776 "IP access-list number\n"
777 "IP access-list number (expanded range)\n"
778 "IP access-list name\n")
780 return ospf_route_match_add (vty
, vty
->index
, "ip address", argv
[0]);
783 DEFUN (no_match_ip_address
,
784 no_match_ip_address_cmd
,
785 "no match ip address",
789 "Match address of route\n")
792 return ospf_route_match_delete (vty
, vty
->index
, "ip address", NULL
);
794 return ospf_route_match_delete (vty
, vty
->index
, "ip address", argv
[0]);
797 ALIAS (no_match_ip_address
,
798 no_match_ip_address_val_cmd
,
799 "no match ip address (<1-199>|<1300-2699>|WORD)",
803 "Match address of route\n"
804 "IP access-list number\n"
805 "IP access-list number (expanded range)\n"
806 "IP access-list name\n")
808 DEFUN (match_ip_address_prefix_list
,
809 match_ip_address_prefix_list_cmd
,
810 "match ip address prefix-list WORD",
813 "Match address of route\n"
814 "Match entries of prefix-lists\n"
815 "IP prefix-list name\n")
817 return ospf_route_match_add (vty
, vty
->index
, "ip address prefix-list",
821 DEFUN (no_match_ip_address_prefix_list
,
822 no_match_ip_address_prefix_list_cmd
,
823 "no match ip address prefix-list",
827 "Match address of route\n"
828 "Match entries of prefix-lists\n")
831 return ospf_route_match_delete (vty
, vty
->index
, "ip address prefix-list",
833 return ospf_route_match_delete (vty
, vty
->index
, "ip address prefix-list",
837 ALIAS (no_match_ip_address_prefix_list
,
838 no_match_ip_address_prefix_list_val_cmd
,
839 "no match ip address prefix-list WORD",
843 "Match address of route\n"
844 "Match entries of prefix-lists\n"
845 "IP prefix-list name\n")
847 DEFUN (match_interface
,
849 "match interface WORD",
851 "Match first hop interface of route\n"
854 return ospf_route_match_add (vty
, vty
->index
, "interface", argv
[0]);
857 DEFUN (no_match_interface
,
858 no_match_interface_cmd
,
859 "no match interface",
862 "Match first hop interface of route\n")
865 return ospf_route_match_delete (vty
, vty
->index
, "interface", NULL
);
867 return ospf_route_match_delete (vty
, vty
->index
, "interface", argv
[0]);
870 ALIAS (no_match_interface
,
871 no_match_interface_val_cmd
,
872 "no match interface WORD",
875 "Match first hop interface of route\n"
880 "match tag <1-65535>",
882 "Match tag of route\n"
885 return ospf_route_match_add (vty
, vty
->index
, "tag", argv
[0]);
893 "Match tag of route\n")
896 return ospf_route_match_delete (vty
, vty
->index
, "tag", NULL
);
898 return ospf_route_match_delete (vty
, vty
->index
, "tag", argv
[0]);
902 no_match_tag_val_cmd
,
903 "no match tag <1-65535>",
906 "Match tag of route\n"
911 "set metric <0-4294967295>",
913 "Metric value for destination routing protocol\n"
916 return ospf_route_set_add (vty
, vty
->index
, "metric", argv
[0]);
919 DEFUN (no_set_metric
,
924 "Metric value for destination routing protocol\n")
927 return ospf_route_set_delete (vty
, vty
->index
, "metric", NULL
);
929 return ospf_route_set_delete (vty
, vty
->index
, "metric", argv
[0]);
932 ALIAS (no_set_metric
,
933 no_set_metric_val_cmd
,
934 "no set metric <0-4294967295>",
937 "Metric value for destination routing protocol\n"
940 DEFUN (set_metric_type
,
942 "set metric-type (type-1|type-2)",
944 "Type of metric for destination routing protocol\n"
945 "OSPF[6] external type 1 metric\n"
946 "OSPF[6] external type 2 metric\n")
948 if (strcmp (argv
[0], "1") == 0)
949 return ospf_route_set_add (vty
, vty
->index
, "metric-type", "type-1");
950 if (strcmp (argv
[0], "2") == 0)
951 return ospf_route_set_add (vty
, vty
->index
, "metric-type", "type-2");
953 return ospf_route_set_add (vty
, vty
->index
, "metric-type", argv
[0]);
956 DEFUN (no_set_metric_type
,
957 no_set_metric_type_cmd
,
958 "no set metric-type",
961 "Type of metric for destination routing protocol\n")
964 return ospf_route_set_delete (vty
, vty
->index
, "metric-type", NULL
);
966 return ospf_route_set_delete (vty
, vty
->index
, "metric-type", argv
[0]);
969 ALIAS (no_set_metric_type
,
970 no_set_metric_type_val_cmd
,
971 "no set metric-type (type-1|type-2)",
974 "Type of metric for destination routing protocol\n"
975 "OSPF[6] external type 1 metric\n"
976 "OSPF[6] external type 2 metric\n")
982 "Tag value for routing protocol\n"
985 return ospf_route_set_add (vty
, vty
->index
, "tag", argv
[0]);
993 "Tag value for routing protocol\n")
996 ospf_route_set_delete(vty
, vty
->index
, "tag", NULL
);
998 return ospf_route_set_delete (vty
, vty
->index
, "tag", argv
[0]);
1003 "no set tag <1-65535>",
1006 "Tag value for routing protocol\n"
1009 /* Route-map init */
1011 ospf_route_map_init (void)
1014 route_map_init_vty ();
1016 route_map_add_hook (ospf_route_map_update
);
1017 route_map_delete_hook (ospf_route_map_update
);
1018 route_map_event_hook (ospf_route_map_event
);
1020 route_map_install_match (&route_match_ip_nexthop_cmd
);
1021 route_map_install_match (&route_match_ip_next_hop_prefix_list_cmd
);
1022 route_map_install_match (&route_match_ip_address_cmd
);
1023 route_map_install_match (&route_match_ip_address_prefix_list_cmd
);
1024 route_map_install_match (&route_match_interface_cmd
);
1025 route_map_install_match (&route_match_tag_cmd
);
1027 route_map_install_set (&route_set_metric_cmd
);
1028 route_map_install_set (&route_set_metric_type_cmd
);
1029 route_map_install_set (&route_set_tag_cmd
);
1031 install_element (RMAP_NODE
, &match_ip_nexthop_cmd
);
1032 install_element (RMAP_NODE
, &no_match_ip_nexthop_cmd
);
1033 install_element (RMAP_NODE
, &no_match_ip_nexthop_val_cmd
);
1034 install_element (RMAP_NODE
, &match_ip_next_hop_prefix_list_cmd
);
1035 install_element (RMAP_NODE
, &no_match_ip_next_hop_prefix_list_cmd
);
1036 install_element (RMAP_NODE
, &no_match_ip_next_hop_prefix_list_val_cmd
);
1037 install_element (RMAP_NODE
, &match_ip_address_cmd
);
1038 install_element (RMAP_NODE
, &no_match_ip_address_cmd
);
1039 install_element (RMAP_NODE
, &no_match_ip_address_val_cmd
);
1040 install_element (RMAP_NODE
, &match_ip_address_prefix_list_cmd
);
1041 install_element (RMAP_NODE
, &no_match_ip_address_prefix_list_cmd
);
1042 install_element (RMAP_NODE
, &no_match_ip_address_prefix_list_val_cmd
);
1043 install_element (RMAP_NODE
, &match_interface_cmd
);
1044 install_element (RMAP_NODE
, &no_match_interface_cmd
);
1045 install_element (RMAP_NODE
, &no_match_interface_val_cmd
);
1046 install_element (RMAP_NODE
, &match_tag_cmd
);
1047 install_element (RMAP_NODE
, &no_match_tag_cmd
);
1048 install_element (RMAP_NODE
, &no_match_tag_val_cmd
);
1050 install_element (RMAP_NODE
, &set_metric_cmd
);
1051 install_element (RMAP_NODE
, &no_set_metric_cmd
);
1052 install_element (RMAP_NODE
, &no_set_metric_val_cmd
);
1053 install_element (RMAP_NODE
, &set_metric_type_cmd
);
1054 install_element (RMAP_NODE
, &no_set_metric_type_cmd
);
1055 install_element (RMAP_NODE
, &no_set_metric_type_val_cmd
);
1056 install_element (RMAP_NODE
, &set_tag_cmd
);
1057 install_element (RMAP_NODE
, &no_set_tag_cmd
);
1058 install_element (RMAP_NODE
, &no_set_tag_val_cmd
);