]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: more cli-ening
authorQuentin Young <qlyoung@cumulusnetworks.com>
Mon, 26 Jun 2017 19:08:31 +0000 (19:08 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Tue, 27 Jun 2017 17:46:42 +0000 (17:46 +0000)
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
bgpd/bgp_vty.c

index b2635c98513290646c41fb2b6306be594525e083..e4d7d152c30351d22911919cac05f9d18451ec72 100644 (file)
@@ -217,13 +217,13 @@ safi_t
 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;
 }
@@ -815,8 +815,8 @@ DEFUN (bgp_config_type,
        "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);
@@ -3708,11 +3708,11 @@ DEFUN (neighbor_capability_orf_prefix,
   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;
@@ -3750,11 +3750,11 @@ DEFUN (no_neighbor_capability_orf_prefix,
   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;
@@ -4202,25 +4202,28 @@ DEFUN (no_neighbor_send_community_type,
        "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 |
@@ -4416,30 +4419,13 @@ DEFUN (no_neighbor_nexthop_local_unchanged,
 
 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;
@@ -4466,58 +4452,24 @@ DEFUN (neighbor_attr_unchanged,
 
 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;
@@ -4544,32 +4496,14 @@ DEFUN (no_neighbor_attr_unchanged,
 
 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
@@ -5336,54 +5270,6 @@ DEFUN (no_neighbor_interface,
   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>",
@@ -5398,9 +5284,22 @@ DEFUN (neighbor_distribute_list,
 {
   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,
@@ -5429,9 +5328,21 @@ DEFUN (no_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,