bgp_vty_safi_from_arg(const char *safi_str)
{
safi_t safi = SAFI_MAX; /* unknown */
- if (strncmp (safi_str, "m", 1) == 0)
+ if (strmatch (safi_str, "multicast"))
safi = SAFI_MULTICAST;
- else if (strncmp (safi_str, "u", 1) == 0)
+ else if (strmatch (safi_str, "unicast"))
safi = SAFI_UNICAST;
- else if (strncmp (safi_str, "v", 1) == 0)
+ else if (strmatch (safi_str, "vpn"))
safi = SAFI_MPLS_VPN;
- else if (strncmp (safi_str, "l", 1) == 0)
+ else if (strmatch (safi_str, "labeled-unicast"))
safi = SAFI_LABELED_UNICAST;
return safi;
}
"cisco\n"
"zebra\n")
{
- int idx_vendor = 2;
- if (strncmp (argv[idx_vendor]->arg, "c", 1) == 0)
+ int idx = 0;
+ if (argv_find (argv, argc, "cisco", &idx))
bgp_option_set (BGP_OPT_CONFIG_CISCO);
else
bgp_option_unset (BGP_OPT_CONFIG_CISCO);
int idx_send_recv = 5;
u_int16_t flag = 0;
- if (strncmp (argv[idx_send_recv]->arg, "s", 1) == 0)
+ if (strmatch (argv[idx_send_recv]->text, "send"))
flag = PEER_FLAG_ORF_PREFIX_SM;
- else if (strncmp (argv[idx_send_recv]->arg, "r", 1) == 0)
+ else if (strmatch (argv[idx_send_recv]->text, "receive"))
flag = PEER_FLAG_ORF_PREFIX_RM;
- else if (strncmp (argv[idx_send_recv]->arg, "b", 1) == 0)
+ else if (strmatch (argv[idx_send_recv]->text, "both"))
flag = PEER_FLAG_ORF_PREFIX_SM|PEER_FLAG_ORF_PREFIX_RM;
else
return CMD_WARNING;
int idx_send_recv = 6;
u_int16_t flag = 0;
- if (strncmp (argv[idx_send_recv]->arg, "s", 1) == 0)
+ if (strmatch (argv[idx_send_recv]->text, "send"))
flag = PEER_FLAG_ORF_PREFIX_SM;
- else if (strncmp (argv[idx_send_recv]->arg, "r", 1) == 0)
+ else if (strmatch (argv[idx_send_recv]->text, "receive"))
flag = PEER_FLAG_ORF_PREFIX_RM;
- else if (strncmp (argv[idx_send_recv]->arg, "b", 1) == 0)
+ else if (strmatch (argv[idx_send_recv]->text, "both"))
flag = PEER_FLAG_ORF_PREFIX_SM|PEER_FLAG_ORF_PREFIX_RM;
else
return CMD_WARNING;
"Send Large Community attributes\n")
{
int idx_peer = 2;
- int idx_type = 4;
- if (strncmp (argv[idx_type]->arg, "s", 1) == 0)
+
+ const char *type = argv[argc - 1]->text;
+
+ if (strmatch (type, "standard"))
return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
bgp_node_safi (vty),
PEER_FLAG_SEND_COMMUNITY);
- if (strncmp (argv[idx_type]->arg, "e", 1) == 0)
+ if (strmatch (type, "extended"))
return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
bgp_node_safi (vty),
PEER_FLAG_SEND_EXT_COMMUNITY);
- if (strncmp (argv[idx_type]->arg, "l", 1) == 0)
+ if (strmatch (type, "large"))
return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
bgp_node_safi (vty),
PEER_FLAG_SEND_LARGE_COMMUNITY);
- if (strncmp (argv[idx_type]->arg, "b", 1) == 0)
+ if (strmatch (type, "both"))
return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
bgp_node_safi (vty),
PEER_FLAG_SEND_COMMUNITY |
PEER_FLAG_SEND_EXT_COMMUNITY);
+ /* if (strmatch (type, "all")) */
return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
bgp_node_safi (vty),
(PEER_FLAG_SEND_COMMUNITY |
DEFUN (neighbor_attr_unchanged,
neighbor_attr_unchanged_cmd,
- "neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged\
- [<\
- as-path [<next-hop [med]|med [next-hop]>]|\
- next-hop [<as-path [med]|med [as-path]>]|\
- med [<as-path [next-hop]|next-hop [as-path]>]\
- >]",
+ "neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged [{as-path|next-hop|med}]",
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
"BGP attribute is propagated unchanged to this neighbor\n"
"As-path attribute\n"
"Nexthop attribute\n"
- "Med attribute\n"
- "Med attribute\n"
- "Nexthop attribute\n"
- "Nexthop attribute\n"
- "As-path attribute\n"
- "Med attribute\n"
- "Med attribute\n"
- "As-path attribute\n"
- "Med attribute\n"
- "As-path attribute\n"
- "Nexthop attribute\n"
- "Nexthop attribute\n"
- "As-path attribute\n")
+ "Med attribute\n")
{
int idx = 0;
char *peer = argv[1]->arg;
ALIAS_HIDDEN (neighbor_attr_unchanged,
neighbor_attr_unchanged_hidden_cmd,
- "neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged\
- [<\
- as-path [<next-hop [med]|med [next-hop]>]|\
- next-hop [<as-path [med]|med [as-path]>]|\
- med [<as-path [next-hop]|next-hop [as-path]>]\
- >]",
+ "neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged [{as-path|next-hop|med}]",
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
"BGP attribute is propagated unchanged to this neighbor\n"
"As-path attribute\n"
"Nexthop attribute\n"
- "Med attribute\n"
- "Med attribute\n"
- "Nexthop attribute\n"
- "Nexthop attribute\n"
- "As-path attribute\n"
- "Med attribute\n"
- "Med attribute\n"
- "As-path attribute\n"
- "Med attribute\n"
- "As-path attribute\n"
- "Nexthop attribute\n"
- "Nexthop attribute\n"
- "As-path attribute\n")
+ "Med attribute\n")
DEFUN (no_neighbor_attr_unchanged,
no_neighbor_attr_unchanged_cmd,
- "no neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged\
- [<\
- as-path [<next-hop [med]|med [next-hop]>]|\
- next-hop [<as-path [med]|med [as-path]>]|\
- med [<as-path [next-hop]|next-hop [as-path]>]\
- >]",
+ "no neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged [{as-path|next-hop|med}]",
NO_STR
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
"BGP attribute is propagated unchanged to this neighbor\n"
"As-path attribute\n"
"Nexthop attribute\n"
- "Med attribute\n"
- "Med attribute\n"
- "Nexthop attribute\n"
- "Nexthop attribute\n"
- "As-path attribute\n"
- "Med attribute\n"
- "Med attribute\n"
- "As-path attribute\n"
- "Med attribute\n"
- "As-path attribute\n"
- "Nexthop attribute\n"
- "Nexthop attribute\n"
- "As-path attribute\n")
+ "Med attribute\n")
{
int idx = 0;
char *peer = argv[2]->arg;
ALIAS_HIDDEN (no_neighbor_attr_unchanged,
no_neighbor_attr_unchanged_hidden_cmd,
- "no neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged\
- [<\
- as-path [<next-hop [med]|med [next-hop]>]|\
- next-hop [<as-path [med]|med [as-path]>]|\
- med [<as-path [next-hop]|next-hop [as-path]>]\
- >]",
+ "no neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged [{as-path|next-hop|med}]",
NO_STR
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
"BGP attribute is propagated unchanged to this neighbor\n"
"As-path attribute\n"
"Nexthop attribute\n"
- "Med attribute\n"
- "Med attribute\n"
- "Nexthop attribute\n"
- "Nexthop attribute\n"
- "As-path attribute\n"
- "Med attribute\n"
- "Med attribute\n"
- "As-path attribute\n"
- "Med attribute\n"
- "As-path attribute\n"
- "Nexthop attribute\n"
- "Nexthop attribute\n"
- "As-path attribute\n")
-
+ "Med attribute\n")
/* EBGP multihop configuration. */
static int
return peer_interface_vty (vty, argv[idx_peer]->arg, NULL);
}
-/* Set distribute list to the peer. */
-static int
-peer_distribute_set_vty (struct vty *vty, const char *ip_str,
- afi_t afi, safi_t safi,
- const char *name_str, const char *direct_str)
-{
- int ret;
- struct peer *peer;
- int direct = FILTER_IN;
-
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
-
- /* Check filter direction. */
- if (strncmp (direct_str, "i", 1) == 0)
- direct = FILTER_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = FILTER_OUT;
-
- ret = peer_distribute_set (peer, afi, safi, direct, name_str);
-
- return bgp_vty_return (vty, ret);
-}
-
-static int
-peer_distribute_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
- safi_t safi, const char *direct_str)
-{
- int ret;
- struct peer *peer;
- int direct = FILTER_IN;
-
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
-
- /* Check filter direction. */
- if (strncmp (direct_str, "i", 1) == 0)
- direct = FILTER_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = FILTER_OUT;
-
- ret = peer_distribute_unset (peer, afi, safi, direct);
-
- return bgp_vty_return (vty, ret);
-}
-
DEFUN (neighbor_distribute_list,
neighbor_distribute_list_cmd,
"neighbor <A.B.C.D|X:X::X:X|WORD> distribute-list <(1-199)|(1300-2699)|WORD> <in|out>",
{
int idx_peer = 1;
int idx_acl = 3;
- int idx_in_out = 4;
- return peer_distribute_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_acl]->arg, argv[idx_in_out]->arg);
+ int direct, ret;
+ struct peer *peer;
+
+ const char *pstr = argv[idx_peer]->arg;
+ const char *acl = argv[idx_acl]->arg;
+ const char *inout = argv[argc-1]->text;
+
+ peer = peer_and_group_lookup_vty (vty, pstr);
+ if (! peer)
+ return CMD_WARNING;
+
+ /* Check filter direction. */
+ direct = strmatch (inout, "in") ? FILTER_IN : FILTER_OUT;
+ ret = peer_distribute_set (peer, bgp_node_afi (vty), bgp_node_safi (vty), direct, acl);
+
+ return bgp_vty_return (vty, ret);
}
ALIAS_HIDDEN (neighbor_distribute_list,
"Filter outgoing updates\n")
{
int idx_peer = 2;
- int idx_in_out = 5;
- return peer_distribute_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_in_out]->arg);
+ int direct, ret;
+ struct peer *peer;
+
+ const char *pstr = argv[idx_peer]->arg;
+ const char *inout = argv[argc-1]->text;
+
+ peer = peer_and_group_lookup_vty (vty, pstr);
+ if (! peer)
+ return CMD_WARNING;
+
+ /* Check filter direction. */
+ direct = strmatch (inout, "in") ? FILTER_IN : FILTER_OUT;
+ ret = peer_distribute_unset (peer, bgp_node_afi (vty), bgp_node_safi (vty), direct);
+
+ return bgp_vty_return (vty, ret);
}
ALIAS_HIDDEN (no_neighbor_distribute_list,