📄 rip_routemap.c
字号:
/* Fetch routemap's rule information. */ metric = rule; rinfo = object; /* Set metric out value. */ rinfo->metric_out = *metric; rinfo->metric_set = 1; } return RMAP_OKAY;}/* set metric compilation. */void *route_set_metric_compile (char *arg){ u_int32_t *metric; metric = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t)); *metric = atoi (arg); return metric;#if 0 /* To make it consistent to other daemon, metric check is commented out.*/ if (*metric >= 0 && *metric <= 16) return metric; XFREE (MTYPE_ROUTE_MAP_COMPILED, metric); return NULL;#endif /* 0 */}/* Free route map's compiled `set metric' value. */voidroute_set_metric_free (void *rule){ XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);}/* Set metric rule structure. */struct route_map_rule_cmd route_set_metric_cmd = { "metric", route_set_metric, route_set_metric_compile, route_set_metric_free,};/* `set ip next-hop IP_ADDRESS' *//* Set nexthop to object. ojbect must be pointer to struct attr. */route_map_result_troute_set_ip_nexthop (void *rule, struct prefix *prefix, route_map_object_t type, void *object){ struct in_addr *address; struct rip_info *rinfo; if(type == RMAP_RIP) { /* Fetch routemap's rule information. */ address = rule; rinfo = object; /* Set next hop value. */ rinfo->nexthop_out = *address; } return RMAP_OKAY;}/* Route map `ip nexthop' compile function. Given string is converted to struct in_addr structure. */void *route_set_ip_nexthop_compile (char *arg){ int ret; struct in_addr *address; address = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (struct in_addr)); ret = inet_aton (arg, address); if (ret == 0) { XFREE (MTYPE_ROUTE_MAP_COMPILED, address); return NULL; } return address;}/* Free route map's compiled `ip nexthop' value. */voidroute_set_ip_nexthop_free (void *rule){ XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);}/* Route map commands for ip nexthop set. */struct route_map_rule_cmd route_set_ip_nexthop_cmd ={ "ip next-hop", route_set_ip_nexthop, route_set_ip_nexthop_compile, route_set_ip_nexthop_free};#define MATCH_STR "Match values from routing table\n"#define SET_STR "Set values in destination routing protocol\n"DEFUN (match_metric, match_metric_cmd, "match metric <0-4294967295>", MATCH_STR "Match metric of route\n" "Metric value\n"){ return rip_route_match_add (vty, vty->index, "metric", argv[0]);}DEFUN (no_match_metric, no_match_metric_cmd, "no match metric", NO_STR MATCH_STR "Match metric of route\n"){ if (argc == 0) return rip_route_match_delete (vty, vty->index, "metric", NULL); return rip_route_match_delete (vty, vty->index, "metric", argv[0]);}ALIAS (no_match_metric, no_match_metric_val_cmd, "no match metric <0-4294967295>", NO_STR MATCH_STR "Match metric of route\n" "Metric value\n");DEFUN (match_interface, match_interface_cmd, "match interface WORD", MATCH_STR "Match first hop interface of route\n" "Interface name\n"){ return rip_route_match_add (vty, vty->index, "interface", argv[0]);}DEFUN (no_match_interface, no_match_interface_cmd, "no match interface", NO_STR MATCH_STR "Match first hop interface of route\n"){ if (argc == 0) return rip_route_match_delete (vty, vty->index, "interface", NULL); return rip_route_match_delete (vty, vty->index, "interface", argv[0]);}ALIAS (no_match_interface, no_match_interface_val_cmd, "no match interface WORD", NO_STR MATCH_STR "Match first hop interface of route\n" "Interface name\n");DEFUN (match_ip_next_hop, match_ip_next_hop_cmd, "match ip next-hop (<1-199>|<1300-2699>|WORD)", MATCH_STR IP_STR "Match next-hop address of route\n" "IP access-list number\n" "IP access-list number (expanded range)\n" "IP Access-list name\n"){ return rip_route_match_add (vty, vty->index, "ip next-hop", argv[0]);}DEFUN (no_match_ip_next_hop, no_match_ip_next_hop_cmd, "no match ip next-hop", NO_STR MATCH_STR IP_STR "Match next-hop address of route\n"){ if (argc == 0) return rip_route_match_delete (vty, vty->index, "ip next-hop", NULL); return rip_route_match_delete (vty, vty->index, "ip next-hop", argv[0]);}ALIAS (no_match_ip_next_hop, no_match_ip_next_hop_val_cmd, "no match ip next-hop (<1-199>|<1300-2699>|WORD)", NO_STR MATCH_STR IP_STR "Match next-hop address of route\n" "IP access-list number\n" "IP access-list number (expanded range)\n" "IP Access-list name\n");DEFUN (match_ip_next_hop_prefix_list, match_ip_next_hop_prefix_list_cmd, "match ip next-hop prefix-list WORD", MATCH_STR IP_STR "Match next-hop address of route\n" "Match entries of prefix-lists\n" "IP prefix-list name\n"){ return rip_route_match_add (vty, vty->index, "ip next-hop prefix-list", argv[0]);}DEFUN (no_match_ip_next_hop_prefix_list, no_match_ip_next_hop_prefix_list_cmd, "no match ip next-hop prefix-list", NO_STR MATCH_STR IP_STR "Match next-hop address of route\n" "Match entries of prefix-lists\n"){ if (argc == 0) return rip_route_match_delete (vty, vty->index, "ip next-hop prefix-list", NULL); return rip_route_match_delete (vty, vty->index, "ip next-hop prefix-list", argv[0]);}ALIAS (no_match_ip_next_hop_prefix_list, no_match_ip_next_hop_prefix_list_val_cmd, "no match ip next-hop prefix-list WORD", NO_STR MATCH_STR IP_STR "Match next-hop address of route\n" "Match entries of prefix-lists\n" "IP prefix-list name\n");DEFUN (match_ip_address, match_ip_address_cmd, "match ip address (<1-199>|<1300-2699>|WORD)", MATCH_STR IP_STR "Match address of route\n" "IP access-list number\n" "IP access-list number (expanded range)\n" "IP Access-list name\n"){ return rip_route_match_add (vty, vty->index, "ip address", argv[0]);}DEFUN (no_match_ip_address, no_match_ip_address_cmd, "no match ip address", NO_STR MATCH_STR IP_STR "Match address of route\n"){ if (argc == 0) return rip_route_match_delete (vty, vty->index, "ip address", NULL); return rip_route_match_delete (vty, vty->index, "ip address", argv[0]);}ALIAS (no_match_ip_address, no_match_ip_address_val_cmd, "no match ip address (<1-199>|<1300-2699>|WORD)", NO_STR MATCH_STR IP_STR "Match address of route\n" "IP access-list number\n" "IP access-list number (expanded range)\n" "IP Access-list name\n");DEFUN (match_ip_address_prefix_list, match_ip_address_prefix_list_cmd, "match ip address prefix-list WORD", MATCH_STR IP_STR "Match address of route\n" "Match entries of prefix-lists\n" "IP prefix-list name\n"){ return rip_route_match_add (vty, vty->index, "ip address prefix-list", argv[0]);}DEFUN (no_match_ip_address_prefix_list, no_match_ip_address_prefix_list_cmd, "no match ip address prefix-list", NO_STR MATCH_STR IP_STR "Match address of route\n" "Match entries of prefix-lists\n"){ if (argc == 0) return rip_route_match_delete (vty, vty->index, "ip address prefix-list", NULL); return rip_route_match_delete (vty, vty->index, "ip address prefix-list", argv[0]);}ALIAS (no_match_ip_address_prefix_list, no_match_ip_address_prefix_list_val_cmd, "no match ip address prefix-list WORD", NO_STR MATCH_STR IP_STR "Match address of route\n" "Match entries of prefix-lists\n" "IP prefix-list name\n");/* set functions */DEFUN (set_metric, set_metric_cmd, "set metric <0-4294967295>", SET_STR "Metric value for destination routing protocol\n" "Metric value\n"){ return rip_route_set_add (vty, vty->index, "metric", argv[0]);}DEFUN (no_set_metric, no_set_metric_cmd, "no set metric", NO_STR SET_STR "Metric value for destination routing protocol\n"){ if (argc == 0) return rip_route_set_delete (vty, vty->index, "metric", NULL); return rip_route_set_delete (vty, vty->index, "metric", argv[0]);}ALIAS (no_set_metric, no_set_metric_val_cmd, "no set metric <0-4294967295>", NO_STR SET_STR "Metric value for destination routing protocol\n" "Metric value\n");DEFUN (set_ip_nexthop, set_ip_nexthop_cmd, "set ip next-hop A.B.C.D", SET_STR IP_STR "Next hop address\n" "IP address of next hop\n"){ union sockunion su; int ret; ret = str2sockunion (argv[0], &su); if (ret < 0) { vty_out (vty, "%% Malformed next-hop address%s", VTY_NEWLINE); return CMD_WARNING; } return rip_route_set_add (vty, vty->index, "ip next-hop", argv[0]);}DEFUN (no_set_ip_nexthop, no_set_ip_nexthop_cmd, "no set ip next-hop", NO_STR SET_STR IP_STR "Next hop address\n"){ if (argc == 0) return rip_route_set_delete (vty, vty->index, "ip next-hop", NULL); return rip_route_set_delete (vty, vty->index, "ip next-hop", argv[0]);}ALIAS (no_set_ip_nexthop, no_set_ip_nexthop_val_cmd, "no set ip next-hop A.B.C.D", NO_STR SET_STR IP_STR "Next hop address\n" "IP address of next hop\n");voidrip_route_map_reset (){ ;}/* Route-map init */voidrip_route_map_init (){ route_map_init (); route_map_init_vty (); route_map_add_hook (rip_route_map_update); route_map_delete_hook (rip_route_map_update); route_map_install_match (&route_match_metric_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_set (&route_set_metric_cmd); route_map_install_set (&route_set_ip_nexthop_cmd); install_element (RMAP_NODE, &match_metric_cmd); install_element (RMAP_NODE, &no_match_metric_cmd); install_element (RMAP_NODE, &no_match_metric_val_cmd); install_element (RMAP_NODE, &match_interface_cmd); install_element (RMAP_NODE, &no_match_interface_cmd); install_element (RMAP_NODE, &no_match_interface_val_cmd); install_element (RMAP_NODE, &match_ip_next_hop_cmd); install_element (RMAP_NODE, &no_match_ip_next_hop_cmd); install_element (RMAP_NODE, &no_match_ip_next_hop_val_cmd); install_element (RMAP_NODE, &match_ip_next_hop_prefix_list_cmd); install_element (RMAP_NODE, &no_match_ip_next_hop_prefix_list_cmd); install_element (RMAP_NODE, &no_match_ip_next_hop_prefix_list_val_cmd); install_element (RMAP_NODE, &match_ip_address_cmd); install_element (RMAP_NODE, &no_match_ip_address_cmd); install_element (RMAP_NODE, &no_match_ip_address_val_cmd); install_element (RMAP_NODE, &match_ip_address_prefix_list_cmd); install_element (RMAP_NODE, &no_match_ip_address_prefix_list_cmd); install_element (RMAP_NODE, &no_match_ip_address_prefix_list_val_cmd); install_element (RMAP_NODE, &set_metric_cmd); install_element (RMAP_NODE, &no_set_metric_cmd); install_element (RMAP_NODE, &no_set_metric_val_cmd); install_element (RMAP_NODE, &set_ip_nexthop_cmd); install_element (RMAP_NODE, &no_set_ip_nexthop_cmd); install_element (RMAP_NODE, &no_set_ip_nexthop_val_cmd);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -