]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib, bgpd: fix miscellaneous route-map commands 137/head
authorQuentin Young <qlyoung@cumulusnetworks.com>
Mon, 30 Jan 2017 19:49:24 +0000 (19:49 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Tue, 31 Jan 2017 02:25:08 +0000 (02:25 +0000)
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
bgpd/bgp_routemap.c
lib/routemap.c

index 6bfb180229b92d5707dc0b84740467aaebf82fad..c7bcfe25f92b22701298a4b63a1d40a7c14ccf27 100644 (file)
@@ -3403,21 +3403,7 @@ DEFUN (no_match_local_pref,
 
 DEFUN (match_community,
        match_community_cmd,
-       "match community <(1-99)|(100-500)|WORD>",
-       MATCH_STR
-       "Match BGP community list\n"
-       "Community-list number (standard)\n"
-       "Community-list number (expanded)\n"
-       "Community-list name\n")
-{
-  int idx_comm_list = 2;
-  return bgp_route_match_add (vty, "community", argv[idx_comm_list]->arg,
-                             RMAP_EVENT_CLIST_ADDED);
-}
-
-DEFUN (match_community_exact,
-       match_community_exact_cmd,
-       "match community <(1-99)|(100-500)|WORD> exact-match",
+       "match community <(1-99)|(100-500)|WORD> [exact-match]",
        MATCH_STR
        "Match BGP community list\n"
        "Community-list number (standard)\n"
@@ -3429,15 +3415,22 @@ DEFUN (match_community_exact,
   int ret;
   char *argstr;
 
-  argstr = XMALLOC (MTYPE_ROUTE_MAP_COMPILED,
-                   strlen (argv[idx_comm_list]->arg) + strlen ("exact-match") + 2);
+  if (argc == 4)
+    {
+      argstr = XMALLOC (MTYPE_ROUTE_MAP_COMPILED,
+                        strlen (argv[idx_comm_list]->arg) +
+                        strlen ("exact-match") + 2);
 
-  sprintf (argstr, "%s exact-match", argv[idx_comm_list]->arg);
+      sprintf (argstr, "%s exact-match", argv[idx_comm_list]->arg);
+    }
+  else
+    argstr = argv[idx_comm_list]->arg;
 
   ret = bgp_route_match_add (vty, "community", argstr,
                             RMAP_EVENT_CLIST_ADDED);
 
-  XFREE (MTYPE_ROUTE_MAP_COMPILED, argstr);
+  if (argstr != argv[idx_comm_list]->arg)
+    XFREE (MTYPE_ROUTE_MAP_COMPILED, argstr);
 
   return ret;
 }
@@ -3459,7 +3452,7 @@ DEFUN (no_match_community,
 
 DEFUN (match_lcommunity,
        match_lcommunity_cmd,
-       "match large-community [<(1-99)|(100-500)|WORD>]",
+       "match large-community <(1-99)|(100-500)|WORD>",
        MATCH_STR
        "Match BGP large community list\n"
        "Large Community-list number (standard)\n"
@@ -3685,7 +3678,7 @@ DEFUN (set_aspath_prepend_asn,
 
 DEFUN (set_aspath_prepend_lastas,
        set_aspath_prepend_lastas_cmd,
-       "set as-path prepend last-as (1-10)",
+       "set as-path prepend last-as (1-9)",
        SET_STR
        "Transform BGP AS_PATH attribute\n"
        "Prepend to the as-path\n"
@@ -4399,7 +4392,7 @@ DEFUN (no_set_vpn_nexthop,
 
 DEFUN (set_ipx_vpn_nexthop,
        set_ipx_vpn_nexthop_cmd,
-       "set <ipv4|ipv6> vpn next-hop [<A.B.C.D|X:X::X:X>]",
+       "set <ipv4|ipv6> vpn next-hop <A.B.C.D|X:X::X:X>",
        SET_STR
        "IPv4 information\n"
        "IPv6 information\n"
@@ -4478,12 +4471,11 @@ DEFUN (no_set_originator_id,
        "BGP originator ID attribute\n"
        "IP address of originator\n")
 {
-  int idx_id = 3;
-  if (argc < idx_id)
-    return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
-                               "originator-id", NULL);
+  int idx = 0;
+  char *arg = argv_find (argv, argc, "A.B.C.D", &idx) ? argv[idx]->arg : NULL;
+
   return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
-                             "originator-id", argv[idx_id]->arg);
+                             "originator-id", arg);
 }
 
 
@@ -4588,7 +4580,6 @@ bgp_route_map_init (void)
   install_element (RMAP_NODE, &match_local_pref_cmd);
   install_element (RMAP_NODE, &no_match_local_pref_cmd);
   install_element (RMAP_NODE, &match_community_cmd);
-  install_element (RMAP_NODE, &match_community_exact_cmd);
   install_element (RMAP_NODE, &no_match_community_cmd);
   install_element (RMAP_NODE, &match_lcommunity_cmd);
   install_element (RMAP_NODE, &no_match_lcommunity_cmd);
index 70f3069a3630e56e4da163b720df8b94d9877571..7be24dfda4cf2af3c332f90fa5d395998883f67e 100644 (file)
@@ -2338,8 +2338,12 @@ DEFUN (no_match_tag,
 {
   VTY_DECLVAR_CONTEXT (route_map_index, index);
 
+  int idx = 0;
+  char *arg = argv_find (argv, argc, "(1-4294967295)", &idx) ?
+              argv[idx]->arg : NULL;
+
   if (rmap_match_set_hook.no_match_tag)
-    return rmap_match_set_hook.no_match_tag (vty, index, "tag", argv[3]->arg,
+    return rmap_match_set_hook.no_match_tag (vty, index, "tag", arg,
                                              RMAP_EVENT_MATCH_DELETED);
   return CMD_SUCCESS;
 }
@@ -2677,10 +2681,8 @@ DEFUN (rmap_onmatch_goto,
        "Goto Clause number\n"
        "Number\n")
 {
-  int idx_number = 2;
-  char *num = NULL;
-  num = argv[idx_number]->arg;
-  
+  int idx = 0;
+  char *num = argv_find (argv, argc, "(1-65535)", &idx) ? argv[idx]->arg : NULL;
   
   struct route_map_index *index = VTY_GET_CONTEXT (route_map_index);
   int d = 0;