struct as_filter *tail;
};
-/* ip as-path access-list 10 permit AS1. */
+/* as-path access-list 10 permit AS1. */
static struct as_list_master as_list_master = {{NULL, NULL},
{NULL, NULL},
return 0;
}
-DEFUN (ip_as_path,
- ip_as_path_cmd,
- "ip as-path access-list WORD <deny|permit> LINE...",
- IP_STR
- "BGP autonomous system path filter\n"
- "Specify an access list name\n"
- "Regular expression access list name\n"
- "Specify packets to reject\n"
- "Specify packets to forward\n"
- "A regular-expression to match the BGP AS paths\n")
+static int config_bgp_aspath_validate(const char *regstr)
+{
+ char valid_chars[] = "1234567890_^|[,{}() ]$*+.?-";
+
+ if (strspn(regstr, valid_chars) == strlen(regstr))
+ return 1;
+
+ return 0;
+}
+
+DEFUN(as_path, bgp_as_path_cmd,
+ "bgp as-path access-list WORD <deny|permit> LINE...",
+ BGP_STR
+ "BGP autonomous system path filter\n"
+ "Specify an access list name\n"
+ "Regular expression access list name\n"
+ "Specify packets to reject\n"
+ "Specify packets to forward\n"
+ "A regular-expression (1234567890_(^|[,{}() ]|$)) to match the BGP AS paths\n")
{
int idx = 0;
enum as_filter_type type;
regex_t *regex;
char *regstr;
+ if (argv_find(argv, argc, "ip", &idx)) {
+ vty_out(vty, "This config option is deprecated and is scheduled for removal.\n");
+ vty_out(vty, "if you are using this please migrate to the below command\n");
+ vty_out(vty, "'bgp as-path access-list WORD <deny|permit> LINE'\n");
+ zlog_warn("Deprecated option: 'ip as-path access-list WORD <deny|permit> LINE' being used");
+ }
+
/* Retrieve access list name */
- char *alname =
- argv_find(argv, argc, "WORD", &idx) ? argv[idx]->arg : NULL;
+ argv_find(argv, argc, "WORD", &idx);
+ char *alname = argv[idx]->arg;
/* Check the filter type. */
type = argv_find(argv, argc, "deny", &idx) ? AS_FILTER_DENY
return CMD_WARNING_CONFIG_FAILED;
}
+ if (!config_bgp_aspath_validate(regstr)) {
+ vty_out(vty, "Invalid character in as-path access-list %s\n",
+ regstr);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
asfilter = as_filter_make(regex, regstr, type);
XFREE(MTYPE_TMP, regstr);
return CMD_SUCCESS;
}
-DEFUN (no_ip_as_path,
- no_ip_as_path_cmd,
- "no ip as-path access-list WORD <deny|permit> LINE...",
- NO_STR
- IP_STR
- "BGP autonomous system path filter\n"
- "Specify an access list name\n"
- "Regular expression access list name\n"
- "Specify packets to reject\n"
- "Specify packets to forward\n"
- "A regular-expression to match the BGP AS paths\n")
+#if CONFDATE > 20191005
+CPP_NOTICE("bgpd: remove deprecated 'ip as-path access-list WORD <deny|permit> LINE' command")
+#endif
+ALIAS(as_path, ip_as_path_cmd,
+ "ip as-path access-list WORD <deny|permit> LINE...",
+ IP_STR
+ "BGP autonomous system path filter\n"
+ "Specify an access list name\n"
+ "Regular expression access list name\n"
+ "Specify packets to reject\n"
+ "Specify packets to forward\n"
+ "A regular-expression (1234567890_(^|[,{}() ]|$)) to match the BGP AS paths\n")
+
+DEFUN(no_as_path, no_bgp_as_path_cmd,
+ "no bgp as-path access-list WORD <deny|permit> LINE...",
+ NO_STR
+ BGP_STR
+ "BGP autonomous system path filter\n"
+ "Specify an access list name\n"
+ "Regular expression access list name\n"
+ "Specify packets to reject\n"
+ "Specify packets to forward\n"
+ "A regular-expression (1234567890_(^|[,{}() ]|$)) to match the BGP AS paths\n")
{
int idx = 0;
enum as_filter_type type;
char *regstr;
regex_t *regex;
+ if (argv_find(argv, argc, "ip", &idx)) {
+ vty_out(vty, "This config option is deprecated, and is scheduled for removal.\n");
+ vty_out(vty, "if you are using this please migrate to the below command\n");
+ vty_out(vty, "'no bgp as-path access-list WORD <deny|permit> LINE'\n");
+ zlog_warn("Deprecated option: 'no ip as-path access-list WORD <deny|permit> LINE' being used");
+ }
char *aslistname =
argv_find(argv, argc, "WORD", &idx) ? argv[idx]->arg : NULL;
/* Lookup AS list from AS path list. */
aslist = as_list_lookup(aslistname);
if (aslist == NULL) {
- vty_out(vty, "ip as-path access-list %s doesn't exist\n",
+ vty_out(vty, "bgp as-path access-list %s doesn't exist\n",
aslistname);
return CMD_WARNING_CONFIG_FAILED;
}
argv_find(argv, argc, "LINE", &idx);
regstr = argv_concat(argv, argc, idx);
+ if (!config_bgp_aspath_validate(regstr)) {
+ vty_out(vty, "Invalid character in as-path access-list %s\n",
+ regstr);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
regex = bgp_regcomp(regstr);
if (!regex) {
vty_out(vty, "can't compile regexp %s\n", regstr);
return CMD_SUCCESS;
}
-DEFUN (no_ip_as_path_all,
- no_ip_as_path_all_cmd,
- "no ip as-path access-list WORD",
+ALIAS(no_as_path, no_ip_as_path_cmd,
+ "no ip as-path access-list WORD <deny|permit> LINE...",
+ NO_STR IP_STR
+ "BGP autonomous system path filter\n"
+ "Specify an access list name\n"
+ "Regular expression access list name\n"
+ "Specify packets to reject\n"
+ "Specify packets to forward\n"
+ "A regular-expression (1234567890_(^|[,{}() ]|$)) to match the BGP AS paths\n")
+
+DEFUN (no_as_path_all,
+ no_bgp_as_path_all_cmd,
+ "no bgp as-path access-list WORD",
NO_STR
- IP_STR
+ BGP_STR
"BGP autonomous system path filter\n"
"Specify an access list name\n"
"Regular expression access list name\n")
{
int idx_word = 4;
struct as_list *aslist;
+ int idx = 0;
+
+ if (argv_find(argv, argc, "ip", &idx)) {
+ vty_out(vty, "This config option is deprecated, and is scheduled for removal.\n");
+ vty_out(vty, "if you are using this please migrate to the below command\n");
+ vty_out(vty, "'no bgp as-path access-list WORD'\n");
+ zlog_warn("Deprecated option: `no ip as-path access-list WORD` being used");
+ }
aslist = as_list_lookup(argv[idx_word]->arg);
if (aslist == NULL) {
- vty_out(vty, "ip as-path access-list %s doesn't exist\n",
+ vty_out(vty, "bgp as-path access-list %s doesn't exist\n",
argv[idx_word]->arg);
return CMD_WARNING_CONFIG_FAILED;
}
return CMD_SUCCESS;
}
+ALIAS (no_as_path_all,
+ no_ip_as_path_all_cmd,
+ "no ip as-path access-list WORD",
+ NO_STR
+ IP_STR
+ "BGP autonomous system path filter\n"
+ "Specify an access list name\n"
+ "Regular expression access list name\n")
+
static void as_list_show(struct vty *vty, struct as_list *aslist)
{
struct as_filter *asfilter;
}
}
-DEFUN (show_ip_as_path_access_list,
- show_ip_as_path_access_list_cmd,
- "show ip as-path-access-list WORD",
+DEFUN (show_as_path_access_list,
+ show_bgp_as_path_access_list_cmd,
+ "show bgp as-path-access-list WORD",
SHOW_STR
- IP_STR
+ BGP_STR
"List AS path access lists\n"
"AS path access list name\n")
{
int idx_word = 3;
struct as_list *aslist;
+ int idx = 0;
+ if (argv_find(argv, argc, "ip", &idx)) {
+ vty_out(vty, "This config option is deprecated, and is scheduled for removal.\n");
+ vty_out(vty, "if you are using this please migrate to the below command\n");
+ vty_out(vty, "'show bgp as-path-access-list WORD'\n");
+ zlog_warn("Deprecated option: 'show ip as-path-access-list WORD' being used");
+ }
aslist = as_list_lookup(argv[idx_word]->arg);
if (aslist)
as_list_show(vty, aslist);
return CMD_SUCCESS;
}
-DEFUN (show_ip_as_path_access_list_all,
- show_ip_as_path_access_list_all_cmd,
- "show ip as-path-access-list",
+ALIAS (show_as_path_access_list,
+ show_ip_as_path_access_list_cmd,
+ "show ip as-path-access-list WORD",
SHOW_STR
IP_STR
+ "List AS path access lists\n"
+ "AS path access list name\n")
+
+DEFUN (show_as_path_access_list_all,
+ show_bgp_as_path_access_list_all_cmd,
+ "show bgp as-path-access-list",
+ SHOW_STR
+ BGP_STR
"List AS path access lists\n")
{
+ int idx = 0;
+
+ if (argv_find(argv, argc, "ip", &idx)) {
+ vty_out(vty, "This config option is deprecated, and is scheduled for removal.\n");
+ vty_out(vty, "if you are using this please migrate to the below command\n");
+ vty_out(vty, "'show bgp as-path-access-list'\n");
+ zlog_warn("Deprecated option: 'show ip as-path-access-list' being used");
+ }
as_list_show_all(vty);
return CMD_SUCCESS;
}
+ALIAS (show_as_path_access_list_all,
+ show_ip_as_path_access_list_all_cmd,
+ "show ip as-path-access-list",
+ SHOW_STR
+ IP_STR
+ "List AS path access lists\n")
+
static int config_write_as_list(struct vty *vty)
{
struct as_list *aslist;
for (aslist = as_list_master.num.head; aslist; aslist = aslist->next)
for (asfilter = aslist->head; asfilter;
asfilter = asfilter->next) {
- vty_out(vty, "ip as-path access-list %s %s %s\n",
+ vty_out(vty, "bgp as-path access-list %s %s %s\n",
aslist->name, filter_type_str(asfilter->type),
asfilter->reg_str);
write++;
for (aslist = as_list_master.str.head; aslist; aslist = aslist->next)
for (asfilter = aslist->head; asfilter;
asfilter = asfilter->next) {
- vty_out(vty, "ip as-path access-list %s %s %s\n",
+ vty_out(vty, "bgp as-path access-list %s %s %s\n",
aslist->name, filter_type_str(asfilter->type),
asfilter->reg_str);
write++;
{
install_node(&as_list_node, config_write_as_list);
+ install_element(CONFIG_NODE, &bgp_as_path_cmd);
install_element(CONFIG_NODE, &ip_as_path_cmd);
+ install_element(CONFIG_NODE, &no_bgp_as_path_cmd);
install_element(CONFIG_NODE, &no_ip_as_path_cmd);
+ install_element(CONFIG_NODE, &no_bgp_as_path_all_cmd);
install_element(CONFIG_NODE, &no_ip_as_path_all_cmd);
+ install_element(VIEW_NODE, &show_bgp_as_path_access_list_cmd);
install_element(VIEW_NODE, &show_ip_as_path_access_list_cmd);
+ install_element(VIEW_NODE, &show_bgp_as_path_access_list_all_cmd);
install_element(VIEW_NODE, &show_ip_as_path_access_list_all_cmd);
}