]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgp: Order neighbor information in show run
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 31 Mar 2016 16:41:58 +0000 (12:41 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 31 Mar 2016 18:01:33 +0000 (14:01 -0400)
When displaying the output of a 'show run',
display the neighbor information in an ordered
manner.

Ticket: CM-10184
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
bgpd/bgpd.c

index a16cf34a6fe364fc514606a37b9dce0265f0d747..499f72bfd1f36b4eef093de8454947482785cc57 100644 (file)
@@ -685,6 +685,26 @@ peer_af_delete (struct peer *peer, afi_t afi, safi_t safi)
 int
 peer_cmp (struct peer *p1, struct peer *p2)
 {
+  if (p1->group && !p2->group)
+    return -1;
+
+  if (!p1->group && p2->group)
+    return 1;
+
+  if (p1->group == p2->group)
+    {
+      if (p1->conf_if && !p2->conf_if)
+        return -1;
+
+      if (!p1->conf_if && p2->conf_if)
+        return 1;
+
+      if (p1->conf_if && p2->conf_if)
+        return if_cmp_name_func (p1->conf_if, p2->conf_if);
+    }
+  else
+    return strcmp (p1->group->name, p2->group->name);
+
   return sockunion_cmp (&p1->su, &p2->su);
 }
 
@@ -2550,7 +2570,11 @@ peer_group_bind (struct bgp *bgp, union sockunion *su, struct peer *peer,
         }
       else
         {
+          struct listnode *pn;
+          pn = listnode_lookup (bgp->peer, peer);
+          list_delete_node (bgp->peer, pn);
           peer->group = group;
+          listnode_add_sort (bgp->peer, peer);
 
           peer = peer_lock (peer); /* group->peer list reference */
           listnode_add (group->peer, peer);