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

📄 rip_routemap.c

📁 zebra测试源代码用于 SOCKET 通信
💻 C
📖 第 1 页 / 共 2 页
字号:
      /* 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 + -