]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Fix crashes with '[no] neighbor ... shutdown ..' command
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 3 May 2017 13:13:12 +0000 (09:13 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 3 May 2017 13:13:12 +0000 (09:13 -0400)
This fixes two crashes:

1) When we enter a 'neighbor shutdown..' command for a peer
group or interface based peer we were not properly looking
up the peer.

2) When we we enter 'no neighbor shutdown..' command for
a peer group or interface based peer we were not properly
lookup up the peer.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
bgpd/bgp_vty.c

index 6197b6107af8b50b932812f05b8a5d6f6652d9e7..db7e62639c94622554a2d682336b04cd49cc8bbe 100644 (file)
@@ -3372,6 +3372,9 @@ peer_flag_modify_vty (struct vty *vty, const char *ip_str,
     return CMD_WARNING;
   }
 
+  if (!set && flag == PEER_FLAG_SHUTDOWN)
+    peer_tx_shutdown_message_unset (peer);
+
   if (set)
     ret = peer_flag_set (peer, flag);
   else
@@ -3430,9 +3433,11 @@ DEFUN (neighbor_shutdown_msg,
 
   if (argc >= 5)
     {
-      struct peer *peer = peer_lookup_vty (vty, argv[idx_peer]->arg);
+      struct peer *peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
       char *message;
 
+      if (!peer)
+        return CMD_WARNING;
       message = argv_concat (argv, argc, 4);
       peer_tx_shutdown_message_set (peer, message);
       XFREE (MTYPE_TMP, message);
@@ -3460,9 +3465,6 @@ DEFUN (no_neighbor_shutdown_msg,
 {
   int idx_peer = 2;
 
-  struct peer *peer = peer_lookup_vty (vty, argv[idx_peer]->arg);
-  peer_tx_shutdown_message_unset (peer);
-
   return peer_flag_unset_vty (vty, argv[idx_peer]->arg, PEER_FLAG_SHUTDOWN);
 }