⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ospf_routemap.c

📁 router source code for the ospdf.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Route map commands for ip address matching. */struct route_map_rule_cmd route_match_interface_cmd ={  "interface",  route_match_interface,  route_match_interface_compile,  route_match_interface_free};/* `set metric METRIC' *//* Set metric to attribute. */route_map_result_troute_set_metric (void *rule, struct prefix *prefix,                  route_map_object_t type, void *object){  u_int32_t *metric;  struct external_info *ei;  if (type == RMAP_OSPF)    {      /* Fetch routemap's rule information. */      metric = rule;      ei = object;      /* Set metric out value. */      ei->route_map_set.metric = *metric;    }  return RMAP_OKAY;}/* set metric compilation. */void *route_set_metric_compile (char *arg){  u_int32_t *metric;  metric = XCALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));  *metric = atoi (arg);  if (*metric >= 0)    return metric;  XFREE (MTYPE_ROUTE_MAP_COMPILED, metric);  return NULL;}/* 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 metric-type TYPE' *//* Set metric-type to attribute. */route_map_result_troute_set_metric_type (void *rule, struct prefix *prefix,		       route_map_object_t type, void *object){  u_int32_t *metric_type;  struct external_info *ei;  if (type == RMAP_OSPF)    {      /* Fetch routemap's rule information. */      metric_type = rule;      ei = object;      /* Set metric out value. */      ei->route_map_set.metric_type = *metric_type;    }  return RMAP_OKAY;}/* set metric-type compilation. */void *route_set_metric_type_compile (char *arg){  u_int32_t *metric_type;  metric_type = XCALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));  if (strcmp (arg, "type-1") == 0)    *metric_type = EXTERNAL_METRIC_TYPE_1;  else if (strcmp (arg, "type-2") == 0)    *metric_type = EXTERNAL_METRIC_TYPE_2;  if (*metric_type == EXTERNAL_METRIC_TYPE_1 ||      *metric_type == EXTERNAL_METRIC_TYPE_2)    return metric_type;  XFREE (MTYPE_ROUTE_MAP_COMPILED, metric_type);  return NULL;}/* Free route map's compiled `set metric-type' value. */voidroute_set_metric_type_free (void *rule){  XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);}/* Set metric rule structure. */struct route_map_rule_cmd route_set_metric_type_cmd ={  "metric-type",  route_set_metric_type,  route_set_metric_type_compile,  route_set_metric_type_free,};DEFUN (match_ip_nexthop,       match_ip_nexthop_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 ospf_route_match_add (vty, vty->index, "ip next-hop", argv[0]);}DEFUN (no_match_ip_nexthop,       no_match_ip_nexthop_cmd,       "no match ip next-hop",       NO_STR       MATCH_STR       IP_STR       "Match next-hop address of route\n"){  if (argc == 0)    return ospf_route_match_delete (vty, vty->index, "ip next-hop", NULL);  return ospf_route_match_delete (vty, vty->index, "ip next-hop", argv[0]);}ALIAS (no_match_ip_nexthop,       no_match_ip_nexthop_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 ospf_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 ospf_route_match_delete (vty, vty->index, "ip next-hop prefix-list",				    NULL);  return ospf_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 ospf_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 ospf_route_match_delete (vty, vty->index, "ip address", NULL);  return ospf_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 ospf_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 ospf_route_match_delete (vty, vty->index, "ip address prefix-list",				    NULL);  return ospf_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");DEFUN (match_interface,       match_interface_cmd,       "match interface WORD",       MATCH_STR       "Match first hop interface of route\n"       "Interface name\n"){  return ospf_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 ospf_route_match_delete (vty, vty->index, "interface", NULL);  return ospf_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 (set_metric,       set_metric_cmd,       "set metric <0-4294967295>",       SET_STR       "Metric value for destination routing protocol\n"       "Metric value\n"){  return ospf_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 ospf_route_set_delete (vty, vty->index, "metric", NULL);  return ospf_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_metric_type,       set_metric_type_cmd,       "set metric-type (type-1|type-2)",       SET_STR       "Type of metric for destination routing protocol\n"       "OSPF external type 1 metric\n"       "OSPF external type 2 metric\n"){  if (strcmp (argv[0], "1") == 0)    return ospf_route_set_add (vty, vty->index, "metric-type", "type-1");  if (strcmp (argv[0], "2") == 0)    return ospf_route_set_add (vty, vty->index, "metric-type", "type-2");  return ospf_route_set_add (vty, vty->index, "metric-type", argv[0]);}DEFUN (no_set_metric_type,       no_set_metric_type_cmd,       "no set metric-type",       NO_STR       SET_STR       "Type of metric for destination routing protocol\n"){  if (argc == 0)    return ospf_route_set_delete (vty, vty->index, "metric-type", NULL);  return ospf_route_set_delete (vty, vty->index, "metric-type", argv[0]);}ALIAS (no_set_metric_type,       no_set_metric_type_val_cmd,       "no set metric-type (type-1|type-2)",       NO_STR       SET_STR       "Type of metric for destination routing protocol\n"       "OSPF external type 1 metric\n"       "OSPF external type 2 metric\n");/* Route-map init */voidospf_route_map_init (void){  route_map_init ();  route_map_init_vty ();  route_map_add_hook (ospf_route_map_update);  route_map_delete_hook (ospf_route_map_update);  route_map_event_hook (ospf_route_map_event);    route_map_install_match (&route_match_ip_nexthop_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_interface_cmd);  route_map_install_set (&route_set_metric_cmd);  route_map_install_set (&route_set_metric_type_cmd);  install_element (RMAP_NODE, &match_ip_nexthop_cmd);  install_element (RMAP_NODE, &no_match_ip_nexthop_cmd);  install_element (RMAP_NODE, &no_match_ip_nexthop_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, &match_interface_cmd);  install_element (RMAP_NODE, &no_match_interface_cmd);  install_element (RMAP_NODE, &no_match_interface_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_metric_type_cmd);  install_element (RMAP_NODE, &no_set_metric_type_cmd);  install_element (RMAP_NODE, &no_set_metric_type_val_cmd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -