diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index a919b54..f421ca5 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -59,7 +59,7 @@
 /* Extern from bgp_dump.c */
 extern const char *bgp_origin_str[];
 extern const char *bgp_origin_long_str[];
-
+
 static struct bgp_node *
 bgp_afi_node_get (struct bgp_table *table, afi_t afi, safi_t safi, struct prefix *p,
 		  struct prefix_rd *prd)
@@ -89,7 +89,7 @@
 
   return rn;
 }
-
+
 /* Allocate bgp_info_extra */
 static struct bgp_info_extra *
 bgp_info_extra_new (void)
@@ -683,7 +683,7 @@
     }
   return 0;
 }
-
+
 static int
 bgp_input_modifier (struct peer *peer, struct prefix *p, struct attr *attr,
 		    afi_t afi, safi_t safi)
@@ -721,7 +721,7 @@
     }
   return RMAP_PERMIT;
 }
-
+
 static int
 bgp_export_modifier (struct peer *rsclient, struct peer *peer,
         struct prefix *p, struct attr *attr, afi_t afi, safi_t safi)
@@ -793,7 +793,7 @@
     }
   return RMAP_PERMIT;
 }
-
+
 static int
 bgp_announce_check (struct bgp_info *ri, struct peer *peer, struct prefix *p,
 		    struct attr *attr, afi_t afi, safi_t safi)
@@ -2468,7 +2468,7 @@
 
   return 0;
 }
-
+
 void
 bgp_default_originate (struct peer *peer, afi_t afi, safi_t safi, int withdraw)
 {
@@ -2571,7 +2571,7 @@
   bgp_attr_extra_free (&attr);
   aspath_unintern (&aspath);
 }
-
+
 static void
 bgp_announce_table (struct peer *peer, afi_t afi, safi_t safi,
                    struct bgp_table *table, int rsclient)
@@ -2642,7 +2642,7 @@
     for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
       bgp_announce_route (peer, afi, safi);
 }
-
+
 static void
 bgp_soft_reconfig_table_rsclient (struct peer *rsclient, afi_t afi,
         safi_t safi, struct bgp_table *table, struct prefix_rd *prd)
@@ -2686,7 +2686,7 @@
           bgp_soft_reconfig_table_rsclient (rsclient, afi, safi, table, &prd);
         }
 }
-
+
 static void
 bgp_soft_reconfig_table (struct peer *peer, afi_t afi, safi_t safi,
 			 struct bgp_table *table, struct prefix_rd *prd)
@@ -2744,7 +2744,7 @@
           bgp_soft_reconfig_table (peer, afi, safi, table, &prd);
         }
 }
-
+
 
 struct bgp_clear_node_queue
 {
@@ -3038,7 +3038,7 @@
 	  }
     }
 }
-
+
 /* Delete all kernel routes. */
 void
 bgp_cleanup_routes (void)
@@ -3079,7 +3079,7 @@
   access_list_reset ();
   prefix_list_reset ();
 }
-
+
 /* Parse NLRI stream.  Withdraw NLRI is recognized by NULL attr
    value. */
 int
@@ -3242,7 +3242,7 @@
     }
   return 0;
 }
-
+
 static struct bgp_static *
 bgp_static_new (void)
 {
@@ -4009,7 +4009,7 @@
 
   return CMD_SUCCESS;
 }
-
+
 DEFUN (bgp_network,
        bgp_network_cmd,
        "network A.B.C.D/M",
@@ -4467,7 +4467,7 @@
        "AS-Path hopcount limit attribute\n"
        "AS-Pathlimit TTL, in number of AS-Path hops\n")
 #endif /* HAVE_IPV6 */
-
+
 /* Aggreagete address:
 
   advertise-map  Set condition to advertise attribute
@@ -5378,7 +5378,7 @@
        "Aggregate prefix\n"
        "Filter more specific routes from updates\n")
 #endif /* HAVE_IPV6 */
-
+
 /* Redistribute route treatment. */
 void
 bgp_redistribute_add (struct prefix *p, const struct in_addr *nexthop,
@@ -5578,7 +5578,7 @@
 	}
     }
 }
-
+
 /* Static function to display route. */
 static void
 route_vty_out_route (struct prefix *p, struct vty *vty)
@@ -7103,7 +7103,7 @@
   return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_MULTICAST, NULL, 1);
 }
 #endif
-
+
 
 static int
 bgp_show_regexp (struct vty *vty, int argc, const char **argv, afi_t afi,
@@ -7247,7 +7247,7 @@
 			  bgp_show_type_regexp);
 }
 #endif /* HAVE_IPV6 */
-
+
 static int
 bgp_show_prefix_list (struct vty *vty, const char *prefix_list_str, afi_t afi,
 		      safi_t safi, enum bgp_show_type type)
@@ -7362,7 +7362,7 @@
 			       bgp_show_type_prefix_list);
 }
 #endif /* HAVE_IPV6 */
-
+
 static int
 bgp_show_filter_list (struct vty *vty, const char *filter, afi_t afi,
 		      safi_t safi, enum bgp_show_type type)
@@ -7476,7 +7476,7 @@
 			       bgp_show_type_filter_list);
 }
 #endif /* HAVE_IPV6 */
-
+
 static int
 bgp_show_route_map (struct vty *vty, const char *rmap_str, afi_t afi,
 		    safi_t safi, enum bgp_show_type type)
@@ -7561,7 +7561,7 @@
        "Address family\n"
        "Display routes matching the route-map\n"
        "A route-map to match on\n")
-
+
 DEFUN (show_ip_bgp_cidr_only,
        show_ip_bgp_cidr_only_cmd,
        "show ip bgp cidr-only",
@@ -7605,7 +7605,7 @@
   return bgp_show (vty, NULL, AFI_IP, SAFI_UNICAST,
 		     bgp_show_type_cidr_only, NULL);
 }
-
+
 DEFUN (show_ip_bgp_community_all,
        show_ip_bgp_community_all_cmd,
        "show ip bgp community",
@@ -7683,7 +7683,7 @@
 		   bgp_show_type_community_all, NULL);
 }
 #endif /* HAVE_IPV6 */
-
+
 static int
 bgp_show_community (struct vty *vty, const char *view_name, int argc,
 		    const char **argv, int exact, afi_t afi, safi_t safi)
@@ -8875,7 +8875,7 @@
        "Do not export to next AS (well-known community)\n"
        "Exact match of the communities")
 #endif /* HAVE_IPV6 */
-
+
 static int
 bgp_show_community_list (struct vty *vty, const char *com, int exact,
 			 afi_t afi, safi_t safi)
@@ -9062,7 +9062,7 @@
   return bgp_show_community_list (vty, argv[0], 1, AFI_IP6, SAFI_MULTICAST);
 }
 #endif /* HAVE_IPV6 */
-
+
 static int
 bgp_show_prefix_longer (struct vty *vty, const char *prefix, afi_t afi,
 			safi_t safi, enum bgp_show_type type)
@@ -9254,7 +9254,7 @@
   
   return peer;
 }
-
+
 enum bgp_stats
 {
   BGP_STATS_MAXBITLEN = 0,
@@ -9602,7 +9602,7 @@
        "Address family\n"
        "Address Family modifier\n"
        "BGP RIB advertisement statistics\n")
-
+
 enum bgp_pcounts
 {
   PCOUNT_ADJ_IN = 0,
@@ -10142,7 +10142,7 @@
   return peer_adj_routes (vty, peer, AFI_IP6, SAFI_MULTICAST, 0);
 }
 #endif /* HAVE_IPV6 */
-
+
 DEFUN (show_ip_bgp_view_neighbor_received_routes,
        show_ip_bgp_view_neighbor_received_routes_cmd,
        "show ip bgp view WORD neighbors (A.B.C.D|X:X::X:X) received-routes",
@@ -10519,7 +10519,7 @@
        "Display information received from a BGP neighbor\n"
        "Display the prefixlist filter\n")
 #endif /* HAVE_IPV6 */
-
+
 static int
 bgp_show_neighbor_route (struct vty *vty, struct peer *peer, afi_t afi,
 			 safi_t safi, enum bgp_show_type type)
@@ -11671,7 +11671,7 @@
        "IP prefix <network>/<length>, e.g., 3ffe::/16\n")
 
 #endif /* HAVE_IPV6 */
-
+
 struct bgp_table *bgp_distance_table;
 
 struct bgp_distance
@@ -11948,7 +11948,7 @@
   bgp_distance_unset (vty, argv[0], argv[1], argv[2]);
   return CMD_SUCCESS;
 }
-
+
 DEFUN (bgp_damp_set,
        bgp_damp_set_cmd,
        "bgp dampening <1-45> <1-20000> <1-20000> <1-255>",
@@ -12043,7 +12043,7 @@
   return bgp_show (vty, NULL, AFI_IP, SAFI_UNICAST,
                    bgp_show_type_flap_statistics, NULL);
 }
-
+
 /* Display specified route of BGP table. */
 static int
 bgp_clear_damp_route (struct vty *vty, const char *view_name, 
@@ -12207,7 +12207,7 @@
   return bgp_clear_damp_route (vty, NULL, prefix_str, AFI_IP,
 			       SAFI_UNICAST, NULL, 0);
 }
-
+
 static int
 bgp_config_write_network_vpnv4 (struct vty *vty, struct bgp *bgp,
 				afi_t afi, safi_t safi, int *write)
