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

📄 filter.c

📁 大名鼎鼎的路由器源码。程序分ZEBRA、OSPFRIP等3个包。程序框架采用一个路由协议一个进程的方式
💻 C
📖 第 1 页 / 共 4 页
字号:
       "Destination address\n"       "Destination Wildcard bits\n"){  return filter_set_cisco (vty, argv[0], argv[1], "0.0.0.0",			   "255.255.255.255", argv[2],			   argv[3], 1, 0);}DEFUN (no_access_list_extended_any_any,       no_access_list_extended_any_any_cmd,       "no access-list (<100-199>|<2000-2699>) (deny|permit) ip any any",       NO_STR       "Add an access list entry\n"       "IP extended access list\n"       "IP extended access list (expanded range)\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Any Internet Protocol\n"       "Any source host\n"       "Any destination host\n"){  return filter_set_cisco (vty, argv[0], argv[1], "0.0.0.0",			   "255.255.255.255", "0.0.0.0",			   "255.255.255.255", 1, 0);}DEFUN (no_access_list_extended_mask_host,       no_access_list_extended_mask_host_cmd,       "no access-list (<100-199>|<2000-2699>) (deny|permit) ip A.B.C.D A.B.C.D host A.B.C.D",       NO_STR       "Add an access list entry\n"       "IP extended access list\n"       "IP extended access list (expanded range)\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Any Internet Protocol\n"       "Source address\n"       "Source wildcard bits\n"       "A single destination host\n"       "Destination address\n"){  return filter_set_cisco (vty, argv[0], argv[1], argv[2],			   argv[3], argv[4],			   "0.0.0.0", 1, 0);}DEFUN (no_access_list_extended_host_mask,       no_access_list_extended_host_mask_cmd,       "no access-list (<100-199>|<2000-2699>) (deny|permit) ip host A.B.C.D A.B.C.D A.B.C.D",       NO_STR       "Add an access list entry\n"       "IP extended access list\n"       "IP extended access list (expanded range)\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Any Internet Protocol\n"       "A single source host\n"       "Source address\n"       "Destination address\n"       "Destination Wildcard bits\n"){  return filter_set_cisco (vty, argv[0], argv[1], argv[2],			   "0.0.0.0", argv[3],			   argv[4], 1, 0);}DEFUN (no_access_list_extended_host_host,       no_access_list_extended_host_host_cmd,       "no access-list (<100-199>|<2000-2699>) (deny|permit) ip host A.B.C.D host A.B.C.D",       NO_STR       "Add an access list entry\n"       "IP extended access list\n"       "IP extended access list (expanded range)\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Any Internet Protocol\n"       "A single source host\n"       "Source address\n"       "A single destination host\n"       "Destination address\n"){  return filter_set_cisco (vty, argv[0], argv[1], argv[2],			   "0.0.0.0", argv[3],			   "0.0.0.0", 1, 0);}DEFUN (no_access_list_extended_any_host,       no_access_list_extended_any_host_cmd,       "no access-list (<100-199>|<2000-2699>) (deny|permit) ip any host A.B.C.D",       NO_STR       "Add an access list entry\n"       "IP extended access list\n"       "IP extended access list (expanded range)\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Any Internet Protocol\n"       "Any source host\n"       "A single destination host\n"       "Destination address\n"){  return filter_set_cisco (vty, argv[0], argv[1], "0.0.0.0",			   "255.255.255.255", argv[2],			   "0.0.0.0", 1, 0);}DEFUN (no_access_list_extended_host_any,       no_access_list_extended_host_any_cmd,       "no access-list (<100-199>|<2000-2699>) (deny|permit) ip host A.B.C.D any",       NO_STR       "Add an access list entry\n"       "IP extended access list\n"       "IP extended access list (expanded range)\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Any Internet Protocol\n"       "A single source host\n"       "Source address\n"       "Any destination host\n"){  return filter_set_cisco (vty, argv[0], argv[1], argv[2],			   "0.0.0.0", "0.0.0.0",			   "255.255.255.255", 1, 0);}intfilter_set_zebra (struct vty *vty, char *name_str, char *type_str,		  afi_t afi, char *prefix_str, int exact, int set){  int ret;  enum filter_type type;  struct filter *mfilter;  struct filter_zebra *filter;  struct access_list *access;  struct prefix p;  /* Check of filter type. */  if (strncmp (type_str, "p", 1) == 0)    type = FILTER_PERMIT;  else if (strncmp (type_str, "d", 1) == 0)    type = FILTER_DENY;  else    {      vty_out (vty, "filter type must be [permit|deny]%s", VTY_NEWLINE);      return CMD_WARNING;    }  /* Check string format of prefix and prefixlen. */  if (afi == AFI_IP)    {      ret = str2prefix_ipv4 (prefix_str, (struct prefix_ipv4 *)&p);      if (ret <= 0)	{	  vty_out (vty, "IP address prefix/prefixlen is malformed%s",		   VTY_NEWLINE);	  return CMD_WARNING;	}    }#ifdef HAVE_IPV6  else if (afi == AFI_IP6)    {      ret = str2prefix_ipv6 (prefix_str, (struct prefix_ipv6 *) &p);      if (ret <= 0)	{	  vty_out (vty, "IPv6 address prefix/prefixlen is malformed%s",		   VTY_NEWLINE);		   return CMD_WARNING;	}    }#endif /* HAVE_IPV6 */  else    return CMD_WARNING;  mfilter = filter_new ();  mfilter->type = type;  filter = &mfilter->u.zfilter;  prefix_copy (&filter->prefix, &p);  /* "exact-match" */  if (exact)    filter->exact = 1;  /* Install new filter to the access_list. */  access = access_list_get (afi, name_str);  if (set)    {      if (filter_lookup_zebra (access, mfilter))	filter_free (mfilter);      else	access_list_filter_add (access, mfilter);    }  else    {      struct filter *delete_filter;      delete_filter = filter_lookup_zebra (access, mfilter);      if (delete_filter)        access_list_filter_delete (access, delete_filter);      filter_free (mfilter);    }  return CMD_SUCCESS;}/* Zebra access-list */DEFUN (access_list,       access_list_cmd,       "access-list WORD (deny|permit) A.B.C.D/M",       "Add an access list entry\n"       "IP zebra access-list name\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 10.0.0.0/8\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP, argv[2], 0, 1);}DEFUN (access_list_exact,       access_list_exact_cmd,       "access-list WORD (deny|permit) A.B.C.D/M exact-match",       "Add an access list entry\n"       "IP zebra access-list name\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 10.0.0.0/8\n"       "Exact match of the prefixes\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP, argv[2], 1, 1);}DEFUN (access_list_any,       access_list_any_cmd,       "access-list WORD (deny|permit) any",       "Add an access list entry\n"       "IP zebra access-list name\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 10.0.0.0/8\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP, "0.0.0.0/0", 0, 1);}DEFUN (no_access_list,       no_access_list_cmd,       "no access-list WORD (deny|permit) A.B.C.D/M",       NO_STR       "Add an access list entry\n"       "IP zebra access-list name\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 10.0.0.0/8\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP, argv[2], 0, 0);}DEFUN (no_access_list_exact,       no_access_list_exact_cmd,       "no access-list WORD (deny|permit) A.B.C.D/M exact-match",       NO_STR       "Add an access list entry\n"       "IP zebra access-list name\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 10.0.0.0/8\n"       "Exact match of the prefixes\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP, argv[2], 1, 0);}DEFUN (no_access_list_any,       no_access_list_any_cmd,       "no access-list WORD (deny|permit) any",       NO_STR       "Add an access list entry\n"       "IP zebra access-list name\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 10.0.0.0/8\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP, "0.0.0.0/0", 0, 0);}DEFUN (no_access_list_all,       no_access_list_all_cmd,       "no access-list (<1-99>|<100-199>|<1300-1999>|<2000-2699>|WORD)",       NO_STR       "Add an access list entry\n"       "IP standard access list\n"       "IP extended access list\n"       "IP standard access list (expanded range)\n"       "IP extended access list (expanded range)\n"       "IP zebra access-list name\n"){  struct access_list *access;  struct access_master *master;  /* Looking up access_list. */  access = access_list_lookup (AFI_IP, argv[0]);  if (access == NULL)    {      vty_out (vty, "%% access-list %s doesn't exist%s", argv[0],	       VTY_NEWLINE);      return CMD_WARNING;    }  master = access->master;  /* Delete all filter from access-list. */  access_list_delete (access);  /* Run hook function. */  if (master->delete_hook)    (*master->delete_hook) (access);   return CMD_SUCCESS;}DEFUN (access_list_remark,       access_list_remark_cmd,       "access-list (<1-99>|<100-199>|<1300-1999>|<2000-2699>|WORD) remark .LINE",       "Add an access list entry\n"       "IP standard access list\n"       "IP extended access list\n"       "IP standard access list (expanded range)\n"       "IP extended access list (expanded range)\n"       "IP zebra access-list\n"       "Access list entry comment\n"       "Comment up to 100 characters\n"){  struct access_list *access;  struct buffer *b;  int i;  access = access_list_get (AFI_IP, argv[0]);  if (access->remark)    {      XFREE (MTYPE_TMP, access->remark);      access->remark = NULL;    }  /* Below is remark get codes. */  b = buffer_new (1024);  for (i = 1; i < argc; i++)    {      buffer_putstr (b, (u_char *)argv[i]);      buffer_putc (b, ' ');    }  buffer_putc (b, '\0');  access->remark = buffer_getstr (b);  buffer_free (b);  return CMD_SUCCESS;}DEFUN (no_access_list_remark,       no_access_list_remark_cmd,       "no access-list (<1-99>|<100-199>|<1300-1999>|<2000-2699>|WORD) remark",       NO_STR       "Add an access list entry\n"       "IP standard access list\n"       "IP extended access list\n"       "IP standard access list (expanded range)\n"       "IP extended access list (expanded range)\n"       "IP zebra access-list\n"       "Access list entry comment\n"){  return vty_access_list_remark_unset (vty, AFI_IP, argv[0]);}	ALIAS (no_access_list_remark,       no_access_list_remark_arg_cmd,       "no access-list (<1-99>|<100-199>|<1300-1999>|<2000-2699>|WORD) remark .LINE",       NO_STR       "Add an access list entry\n"       "IP standard access list\n"       "IP extended access list\n"       "IP standard access list (expanded range)\n"       "IP extended access list (expanded range)\n"       "IP zebra access-list\n"       "Access list entry comment\n"       "Comment up to 100 characters\n");#ifdef HAVE_IPV6DEFUN (ipv6_access_list,       ipv6_access_list_cmd,       "ipv6 access-list WORD (deny|permit) X:X::X:X/M",       IPV6_STR       "Add an access list entry\n"       "IPv6 zebra access-list\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 3ffe:506::/32\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP6, argv[2], 0, 1);}DEFUN (ipv6_access_list_exact,       ipv6_access_list_exact_cmd,       "ipv6 access-list WORD (deny|permit) X:X::X:X/M exact-match",       IPV6_STR       "Add an access list entry\n"       "IPv6 zebra access-list\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 3ffe:506::/32\n"       "Exact match of the prefixes\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP6, argv[2], 1, 1);}DEFUN (ipv6_access_list_any,       ipv6_access_list_any_cmd,       "ipv6 access-list WORD (deny|permit) any",       IPV6_STR       "Add an access list entry\n"       "IPv6 zebra access-list\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Any prefixi to match\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP6, "::/0", 0, 1);}DEFUN (no_ipv6_access_list,       no_ipv6_access_list_cmd,       "no ipv6 access-list WORD (deny|permit) X:X::X:X/M",       NO_STR       IPV6_STR       "Add an access list entry\n"       "IPv6 zebra access-list\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 3ffe:506::/32\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP6, argv[2], 0, 0);}DEFUN (no_ipv6_access_list_exact,       no_ipv6_access_list_exact_cmd,       "no ipv6 access-list WORD (deny|permit) X:X::X:X/M exact-match",       NO_STR       IPV6_STR       "Add an access list entry\n"       "IPv6 zebra access-list\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Prefix to match. e.g. 3ffe:506::/32\n"       "Exact match of the prefixes\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP6, argv[2], 1, 0);}DEFUN (no_ipv6_access_list_any,       no_ipv6_access_list_any_cmd,       "no ipv6 access-list WORD (deny|permit) any",       NO_STR       IPV6_STR       "Add an access list entry\n"       "IPv6 zebra access-list\n"       "Specify packets to reject\n"       "Specify packets to forward\n"       "Any prefixi to match\n"){  return filter_set_zebra (vty, argv[0], argv[1], AFI_IP6, "::/0", 0, 0);}DEFUN (no_ipv6_access_list_all,       no_ipv6_access_list_all_cmd,       "no ipv6 access-list WORD",       NO_STR       IPV6_STR       "Add an access list entry\n"       "IPv6 zebra access-list\n"){  struct access_list *access;  struct access_master *master;  /* Looking up access_list. */  access = access_list_lookup (AFI_IP6, argv[0]);  if (access == NULL)    {      vty_out (vty, "%% access-list %s doesn't exist%s", argv[0],	       VTY_NEWLINE);      return CMD_WARNING;    }  master = access->master;  /* Delete all filter from access-list. */  access_list_delete (access);  /* Run hook function. */  if (master->delete_hook)    (*master->delete_hook) (access);  return CMD_SUCCESS;}DEFUN (ipv6_access_list_remark,       ipv6_access_list_remark_cmd,       "ipv6 access-list WORD remark .LINE",       IPV6_STR       "Add an access list entry\n"       "IPv6 zebra access-list\n"       "Access list entry comment\n"       "Comment up to 100 characters\n"){  struct access_list *access;  struct buffer *b;  int i;

⌨️ 快捷键说明

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