diff --git a/ospfd/ospf_abr.c b/ospfd/ospf_abr.c
index 4770275..4bb70b6 100644
--- a/ospfd/ospf_abr.c
+++ b/ospfd/ospf_abr.c
@@ -50,7 +50,7 @@
 #include "ospfd/ospf_ase.h"
 #include "ospfd/ospf_zebra.h"
 #include "ospfd/ospf_dump.h"
-
+
 static struct ospf_area_range *
 ospf_area_range_new (struct prefix_ipv4 *p)
 {
diff --git a/ospfd/ospf_asbr.c b/ospfd/ospf_asbr.c
index 7e7c84f..7e9412c 100644
--- a/ospfd/ospf_asbr.c
+++ b/ospfd/ospf_asbr.c
@@ -44,7 +44,7 @@
 #include "ospfd/ospf_zebra.h"
 #include "ospfd/ospf_dump.h"
 
-
+
 /* Remove external route. */
 void
 ospf_external_route_remove (struct ospf *ospf, struct prefix_ipv4 *p)
@@ -96,7 +96,7 @@
   return NULL;
 }
 
-
+
 /* Add an External info for AS-external-LSA. */
 struct external_info *
 ospf_external_info_new (u_char type)
@@ -234,7 +234,7 @@
   return lsa;
 }
 
-
+
 /* Update ASBR status. */
 void
 ospf_asbr_status_update (struct ospf *ospf, u_char status)
diff --git a/ospfd/ospf_dump.c b/ospfd/ospf_dump.c
index 7e11e25..ef02336 100644
--- a/ospfd/ospf_dump.c
+++ b/ospfd/ospf_dump.c
@@ -143,7 +143,7 @@
 unsigned long term_debug_ospf_zebra = 0;
 unsigned long term_debug_ospf_nssa = 0;
 
-
+
 
 const char *
 ospf_redist_string(u_int route_type)
@@ -218,7 +218,7 @@
   return buf;
 }
 
-
+
 void
 ospf_nbr_state_message (struct ospf_neighbor *nbr, char *buf, size_t size)
 {
@@ -746,7 +746,7 @@
   stream_set_getp (s, gp);
 }
 
-
+
 /*
    [no] debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all)
                           [send|recv [detail]]
@@ -956,7 +956,7 @@
        "Packet received\n"
        "Detail Information\n")
 
-
+
 DEFUN (debug_ospf_ism,
        debug_ospf_ism_cmd,
        "debug ospf ism",
@@ -1058,7 +1058,7 @@
        "ISM Event Information\n"
        "ISM Timer Information\n")
 
-
+
 DEFUN (debug_ospf_nsm,
        debug_ospf_nsm_cmd,
        "debug ospf nsm",
@@ -1161,7 +1161,7 @@
        "NSM Event Information\n"
        "NSM Timer Information\n")
 
-
+
 DEFUN (debug_ospf_lsa,
        debug_ospf_lsa_cmd,
        "debug ospf lsa",
@@ -1274,7 +1274,7 @@
        "LSA Install/Delete\n"
        "LSA Refres\n")
 
-
+
 DEFUN (debug_ospf_zebra,
        debug_ospf_zebra_cmd,
        "debug ospf zebra",
@@ -1366,7 +1366,7 @@
        "OSPF Zebra information\n"
        "Zebra interface\n"
        "Zebra redistribute\n")
-
+
 DEFUN (debug_ospf_event,
        debug_ospf_event_cmd,
        "debug ospf event",
@@ -1421,7 +1421,7 @@
   return CMD_SUCCESS;
 }
 
-
+
 DEFUN (show_debugging_ospf,
        show_debugging_ospf_cmd,
        "show debugging ospf",
diff --git a/ospfd/ospf_flood.c b/ospfd/ospf_flood.c
index 2ebae89..2c33b00 100644
--- a/ospfd/ospf_flood.c
+++ b/ospfd/ospf_flood.c
@@ -49,7 +49,7 @@
 #include "ospfd/ospf_dump.h"
 
 extern struct zclient *zclient;
-
+
 /* Do the LSA acking specified in table 19, Section 13.5, row 2
  * This get called from ospf_flood_out_interface. Declared inline 
  * for speed. */
@@ -757,7 +757,7 @@
   return (lsa_ack_flag);
 }
 
-
+
 
 /* Management functions for neighbor's Link State Request list. */
 void
@@ -835,7 +835,7 @@
   return new;
 }
 
-
+
 /* Management functions for neighbor's ls-retransmit list. */
 unsigned long
 ospf_ls_retransmit_count (struct ospf_neighbor *nbr)
@@ -973,7 +973,7 @@
     ospf_ls_retransmit_delete_nbr_if (oi, lsa);
 }
 
-
+
 /* Sets ls_age to MaxAge and floods throu the area. 
    When we implement ASE routing, there will be anothe function
    flushing an LSA from the whole domain. */
diff --git a/ospfd/ospf_ia.c b/ospfd/ospf_ia.c
index 6a8c3c6..b2d0fae 100644
--- a/ospfd/ospf_ia.c
+++ b/ospfd/ospf_ia.c
@@ -193,7 +193,7 @@
   listnode_add (rn->info, new_or);
 }
 
-
+
 static int
 process_summary_lsa (struct ospf_area *area, struct route_table *rt,
 		     struct route_table *rtrs, struct ospf_lsa *lsa)
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index a37dde1..0f02cc8 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -49,7 +49,7 @@
 #include "ospfd/ospf_snmp.h"
 #endif /* HAVE_SNMP */
 
-
+
 int
 ospf_if_get_output_cost (struct ospf_interface *oi)
 {
@@ -334,7 +334,7 @@
   XFREE (MTYPE_OSPF_IF, oi);
 }
 
-
+
 /*
 *  check if interface with given address is configured and
 *  return it if yes.  special treatment for PtP networks.
@@ -489,7 +489,7 @@
 
   return match;
 }
-
+
 void
 ospf_if_stream_set (struct ospf_interface *oi)
 {
@@ -518,7 +518,7 @@
     }
 }
 
-
+
 static struct ospf_if_params *
 ospf_new_if_params (void)
 {
@@ -825,7 +825,7 @@
   return 1;
 }
 
-
+
 /* Virtual Link related functions. */
 
 struct ospf_vl_data *
@@ -1194,7 +1194,7 @@
   return c;
 }
 
-
+
 struct crypt_key *
 ospf_crypt_key_new ()
 {
diff --git a/ospfd/ospf_ism.c b/ospfd/ospf_ism.c
index fa7d97f..9649df8 100644
--- a/ospfd/ospf_ism.c
+++ b/ospfd/ospf_ism.c
@@ -44,7 +44,7 @@
 #include "ospfd/ospf_flood.h"
 #include "ospfd/ospf_abr.h"
 #include "ospfd/ospf_snmp.h"
-
+
 /* elect DR and BDR. Refer to RFC2319 section 9.4 */
 static struct ospf_neighbor *
 ospf_dr_election_sub (struct list *routers)
@@ -245,7 +245,7 @@
   return new_state;
 }
 
-
+
 int
 ospf_hello_timer (struct thread *thread)
 {
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index 967cdb5..fef6b16 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -50,7 +50,7 @@
 #include "ospfd/ospf_ase.h"
 #include "ospfd/ospf_zebra.h"
 
-
+
 u_int32_t
 get_metric (u_char *metric)
 {
@@ -61,7 +61,7 @@
   return m;
 }
 
-
+
 struct timeval
 tv_adjust (struct timeval a)
 {
@@ -159,7 +159,7 @@
   return delay;
 }
 
-
+
 int
 get_age (struct ospf_lsa *lsa)
 {
@@ -171,7 +171,7 @@
   return age;
 }
 
-
+
 /* Fletcher Checksum -- Refer to RFC1008. */
 
 /* All the offsets are zero-based. The offsets in the RFC1008 are 
@@ -205,7 +205,7 @@
 }
 
 
-
+
 /* Create OSPF LSA. */
 struct ospf_lsa *
 ospf_lsa_new ()
@@ -341,7 +341,7 @@
   XFREE (MTYPE_OSPF_LSA_DATA, lsah);
 }
 
-
+
 /* LSA general functions. */
 
 const char *
@@ -393,7 +393,7 @@
 
   stream_forward_endp (s, OSPF_LSA_HEADER_SIZE);
 }
-
+
 
 /* router-LSA related functions. */
 /* Get router-LSA flags. */
@@ -746,7 +746,7 @@
   /* Set # of links here. */
   stream_putw_at (s, putp, cnt);
 }
-
+
 static int
 ospf_stub_router_timer (struct thread *t)
 {
@@ -803,7 +803,7 @@
   OSPF_AREA_TIMER_ON (area->t_stub_router, ospf_stub_router_timer,
                       area->ospf->stub_router_startup_time);
 }
- 
+ 
 /* Create new router-LSA. */
 static struct ospf_lsa *
 ospf_router_lsa_new (struct ospf_area *area)
@@ -1005,7 +1005,7 @@
   return 0;
 }
 
-
+
 /* network-LSA related functions. */
 /* Originate Network-LSA. */
 static void
@@ -1184,7 +1184,7 @@
 
   return new;
 }
-
+
 static void
 stream_put_ospf_metric (struct stream *s, u_int32_t metric_value)
 {
@@ -1343,7 +1343,7 @@
   return new;
 }
 
-
+
 /* summary-ASBR-LSA related functions. */
 static void
 ospf_summary_asbr_lsa_body_set (struct stream *s, struct prefix *p,
@@ -2377,7 +2377,7 @@
   return new;
 }
 
-
+
 /* LSA installation functions. */
 
 /* Install router-LSA to an area. */
@@ -2802,7 +2802,7 @@
   return new;
 }
 
-
+
 int
 ospf_check_nbr_status (struct ospf *ospf)
 {
@@ -2827,7 +2827,7 @@
   return 1;
 }
 
-
+
 
 static int
 ospf_maxage_lsa_remover (struct thread *thread)
@@ -3539,7 +3539,7 @@
   return id;
 }
 
-
+
 #define LSA_ACTION_FLOOD_AREA 1
 #define LSA_ACTION_FLUSH_AREA 2
 
@@ -3602,7 +3602,7 @@
   thread_add_event (master, ospf_lsa_action, data, 0);
 }
 
-
+
 /* LSA Refreshment functions. */
 struct ospf_lsa *
 ospf_lsa_refresh (struct ospf *ospf, struct ospf_lsa *lsa)
diff --git a/ospfd/ospf_lsdb.c b/ospfd/ospf_lsdb.c
index aad979a..f7cf60f 100644
--- a/ospfd/ospf_lsdb.c
+++ b/ospfd/ospf_lsdb.c
@@ -31,7 +31,7 @@
 #include "ospfd/ospf_asbr.h"
 #include "ospfd/ospf_lsa.h"
 #include "ospfd/ospf_lsdb.h"
-
+
 struct ospf_lsdb *
 ospf_lsdb_new ()
 {
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index c68aa4d..82735b7 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -132,7 +132,7 @@
     }
   exit (status);
 }
-
+
 /* SIGHUP handler. */
 static void 
 sighup (void)
@@ -174,7 +174,7 @@
     .handler = &sigint,
   },
 };
-
+
 /* OSPFd main routine. */
 int
 main (int argc, char **argv)
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index bcabd5f..0e6814e 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -50,7 +50,7 @@
 #include "ospfd/ospf_snmp.h"
 
 static void nsm_clear_adj (struct ospf_neighbor *);
-
+
 /* OSPF NSM Timer functions. */
 static int
 ospf_inactivity_timer (struct thread *thread)
@@ -156,7 +156,7 @@
 
   return 0;
 }
-
+
 /* OSPF NSM functions. */
 static int
 nsm_packet_received (struct ospf_neighbor *nbr)
@@ -258,7 +258,7 @@
     }
 }
 
-
+
 
 /* The area link state database consists of the router-LSAs,
    network-LSAs and summary-LSAs contained in the area structure,
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index cce56fc..efdf826 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -323,7 +323,7 @@
   return max;
 }
 
-
+
 static int
 ospf_check_md5_digest (struct ospf_interface *oi, struct ospf_header *ospfh)
 {
@@ -438,7 +438,7 @@
   return OSPF_AUTH_MD5_SIZE;
 }
 
-
+
 static int
 ospf_ls_req_timer (struct thread *thread)
 {
@@ -2136,7 +2136,7 @@
 
   return;
 }
-
+
 static struct stream *
 ospf_recv_packet (int fd, struct interface **ifp, struct stream *ibuf)
 {
diff --git a/ospfd/ospf_snmp.c b/ospfd/ospf_snmp.c
index 1daf0d6..7f7b157 100644
--- a/ospfd/ospf_snmp.c
+++ b/ospfd/ospf_snmp.c
@@ -48,7 +48,7 @@
 #include "ospfd/ospf_ism.h"
 #include "ospfd/ospf_dump.h"
 #include "ospfd/ospf_snmp.h"
-
+
 /* OSPF2-MIB. */
 #define OSPF2MIB 1,3,6,1,2,1,14
 
@@ -204,7 +204,7 @@
 #define TIMETICKS   ASN_TIMETICKS
 #define IPADDRESS   ASN_IPADDRESS
 #define STRING      ASN_OCTET_STR
-
+
 /* Declare static local variables for convenience. */
 SNMP_LOCAL_VARIABLES
 
@@ -501,7 +501,7 @@
   {OSPFAREAAGGREGATEEFFECT,   INTEGER, RWRITE, ospfAreaAggregateEntry,
    3, {14, 1, 6}}
 };
-
+
 /* The administrative status of OSPF.  When OSPF is enbled on at least
    one interface return 1. */
 static int
@@ -1407,7 +1407,7 @@
     }
   return NULL;
 }
-
+
 struct list *ospf_snmp_iflist;
 
 struct ospf_snmp_if
@@ -1911,7 +1911,7 @@
     }
   return NULL;
 }
-
+
 struct route_table *ospf_snmp_vl_table;
 
 void
@@ -2127,7 +2127,7 @@
     }
   return NULL;
 }
-
+
 static struct ospf_neighbor *
 ospf_snmp_nbr_lookup (struct ospf *ospf, struct in_addr *nbr_addr,
 		      unsigned int *ifindex)
@@ -2360,7 +2360,7 @@
     }
   return NULL;
 }
-
+
 static u_char *
 ospfVirtNbrEntry (struct variable *v, oid *name, size_t *length, int exact,
 		  size_t *var_len, WriteMethod **write_method)
@@ -2419,7 +2419,7 @@
     }
   return NULL;
 }
-
+
 static struct ospf_lsa *
 ospfExtLsdbLookup (struct variable *v, oid *name, size_t *length, u_char *type,
 		   struct in_addr *ls_id, struct in_addr *router_id, int exact)
@@ -2572,7 +2572,7 @@
     }
   return NULL;
 }
-
+
 static u_char *
 ospfAreaAggregateEntry (struct variable *v, oid *name, size_t *length,
 			int exact, size_t *var_len, WriteMethod **write_method)
@@ -2608,7 +2608,7 @@
     }
   return NULL;
 }
-
+
 /* OSPF Traps. */
 #define IFSTATECHANGE      16
 #define VIRTIFSTATECHANGE   1
diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c
index bd9564d..c40fc33 100644
--- a/ospfd/ospf_spf.c
+++ b/ospfd/ospf_spf.c
@@ -52,7 +52,7 @@
  * dynamically allocated at begin of ospf_spf_calculate
  */
 static struct list vertex_list = { .del = ospf_vertex_free };
-
+
 /* Heap related functions, for the managment of the candidates, to
  * be used with pqueue. */
 static int
@@ -90,7 +90,7 @@
   /* Set the status of the vertex, when its position changes. */
   *(v->stat) = position;
 }
-
+
 static struct vertex_nexthop *
 vertex_nexthop_new (void)
 {
@@ -134,7 +134,7 @@
           vertex_nexthop_free (vp->nexthop);
     }
 }      
-
+
 /* TODO: Parent list should be excised, in favour of maintaining only
  * vertex_nexthop, with refcounts.
  */
@@ -159,7 +159,7 @@
 {
   XFREE (MTYPE_OSPF_VERTEX_PARENT, p);
 }
-
+
 static struct vertex *
 ospf_vertex_new (struct ospf_lsa *lsa)
 {
@@ -276,7 +276,7 @@
         listnode_add (vp->parent->children, v);
     }
 }
-
+
 static void
 ospf_spf_init (struct ospf_area *area)
 {
@@ -1254,7 +1254,7 @@
     zlog_debug ("ospf_spf_calculate: Stop. %ld vertices",
                 mtype_stats_alloc(MTYPE_OSPF_VERTEX));
 }
-
+
 /* Timer for SPF calculation. */
 static int
 ospf_spf_calculate_timer (struct thread *thread)
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index ee8c901..8bfcaa8 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -49,7 +49,7 @@
 #include "ospfd/ospf_vty.h"
 #include "ospfd/ospf_dump.h"
 
-
+
 static const char *ospf_network_type_str[] =
 {
   "Null",
@@ -61,7 +61,7 @@
   "LOOPBACK"
 };
 
-
+
 /* Utility functions. */
 static int
 ospf_str2area_id (const char *str, struct in_addr *area_id, int *format)
@@ -94,7 +94,7 @@
   return 0;
 }
 
-
+
 static int
 str2metric (const char *str, int *metric)
 {
@@ -142,7 +142,7 @@
   return i;
 }
 
-
+
 DEFUN (router_ospf,
        router_ospf_cmd,
        "router ospf",
@@ -490,7 +490,7 @@
   return CMD_SUCCESS;
 }
 
-
+
 DEFUN (ospf_area_range,
        ospf_area_range_cmd,
        "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M",
@@ -634,7 +634,7 @@
        "Advertise this range (default)\n"
        "User specified metric for this range\n"
        "Advertised metric for this range\n")
-
+
 DEFUN (ospf_area_range_substitute,
        ospf_area_range_substitute_cmd,
        "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M",
@@ -686,7 +686,7 @@
   return CMD_SUCCESS;
 }
 
-
+
 /* Command Handler Logic in VLink stuff is delicate!!
 
 	ALTER AT YOUR OWN RISK!!!!
@@ -1382,7 +1382,7 @@
        VLINK_HELPSTR_AUTHTYPE_SIMPLE
        VLINK_HELPSTR_AUTH_MD5)
 
-
+
 DEFUN (ospf_area_shortcut,
        ospf_area_shortcut_cmd,
        "area (A.B.C.D|<0-4294967295>) shortcut (default|enable|disable)",
@@ -1450,7 +1450,7 @@
   return CMD_SUCCESS;
 }
 
-
+
 DEFUN (ospf_area_stub,
        ospf_area_stub_cmd,
        "area (A.B.C.D|<0-4294967295>) stub",
@@ -1971,7 +1971,7 @@
   return CMD_SUCCESS;
 }
 
-
+
 DEFUN (ospf_area_authentication_message_digest,
        ospf_area_authentication_message_digest_cmd,
        "area (A.B.C.D|<0-4294967295>) authentication message-digest",
@@ -2042,7 +2042,7 @@
   return CMD_SUCCESS;
 }
 
-
+
 DEFUN (ospf_abr_type,
        ospf_abr_type_cmd,
        "ospf abr-type (cisco|ibm|shortcut|standard)",
@@ -2206,7 +2206,7 @@
        NO_STR
        "OSPF specific commands\n"
        "Disable the RFC1583Compatibility flag\n")
-
+
 static int
 ospf_timers_spf_set (struct vty *vty, unsigned int delay,
                      unsigned int hold,
@@ -2297,7 +2297,7 @@
                   NO_STR
                   "Adjust routing timers\n"
                   "OSPF SPF timers\n")
-
+
 DEFUN (ospf_neighbor,
        ospf_neighbor_cmd,
        "neighbor A.B.C.D",
@@ -2430,7 +2430,7 @@
        "Dead Neighbor Polling interval\n"
        "Seconds\n")
 
-
+
 DEFUN (ospf_refresh_timer, ospf_refresh_timer_cmd,
        "refresh timer <10-1800>",
        "Adjust refresh parameters\n"
@@ -2548,7 +2548,7 @@
 };
 
 
-
+
 static void
 show_ip_ospf_area (struct vty *vty, struct ospf_area *area)
 {
@@ -2800,7 +2800,7 @@
   return CMD_SUCCESS;
 }
 
-
+
 static void
 show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf,
 			    struct interface *ifp)
@@ -3429,7 +3429,7 @@
   return CMD_SUCCESS;
 }
 
-
+
 /* Show functions */
 static int
 show_lsa_summary (struct vty *vty, struct ospf_lsa *lsa, int self)
@@ -4302,7 +4302,7 @@
        OSPF_LSA_TYPES_DESC
        "Self-originated link states\n")
 
-
+
 DEFUN (ip_ospf_authentication_args,
        ip_ospf_authentication_args_addr_cmd,
        "ip ospf authentication (null|message-digest) A.B.C.D",
@@ -6262,7 +6262,7 @@
       "IP Information\n"
       "OSPF interface commands\n"
       "Disable mtu mismatch detection\n")
-
+
 DEFUN (ospf_max_metric_router_lsa_admin,
        ospf_max_metric_router_lsa_admin_cmd,
        "max-metric router-lsa administrative",
@@ -6431,7 +6431,7 @@
     }
   return;
 }
-
+
 static void
 show_ip_ospf_route_network (struct vty *vty, struct route_table *rt)
 {
@@ -6650,7 +6650,7 @@
   return CMD_SUCCESS;
 }
 
-
+
 const char *ospf_abr_type_str[] = 
 {
   "unknown",
@@ -6679,7 +6679,7 @@
     sprintf (buf, "%lu", (unsigned long) ntohl (area->area_id.s_addr));
 }
 
-
+
 const char *ospf_int_type_str[] = 
 {
   "unknown",		/* should never be used. */
@@ -7113,7 +7113,7 @@
   return 0;
 }
 
-
+
 static int
 config_write_ospf_redistribute (struct vty *vty, struct ospf *ospf)
 {
@@ -7406,7 +7406,7 @@
   install_element (ENABLE_NODE, &show_ip_ospf_border_routers_cmd);
 }
 
-
+
 /* ospfd's interface node. */
 static struct cmd_node interface_node =
 {
@@ -7558,7 +7558,7 @@
   1
 };
 
-
+
 /* Install OSPF related vty commands. */
 void
 ospf_vty_init (void)
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index b5268a3..b6d3260 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -918,7 +918,7 @@
 
   return 0;
 }
-
+
 
 int
 ospf_distribute_list_out_set (struct ospf *ospf, int type, const char *name)
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 538bc09..dd57f64 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -53,7 +53,7 @@
 #include "ospfd/ospf_route.h"
 #include "ospfd/ospf_ase.h"
 
-
+
 
 /* OSPF process wide configuration. */
 static struct ospf_master ospf_master;
@@ -64,7 +64,7 @@
 extern struct zclient *zclient;
 extern struct in_addr router_id_zebra;
 
-
+
 static void ospf_remove_vls_through_area (struct ospf *, struct ospf_area *);
 static void ospf_network_free (struct ospf *, struct ospf_network *);
 static void ospf_area_free (struct ospf_area *);
@@ -76,7 +76,7 @@
 static void ospf_finish_final (struct ospf *);
 
 #define OSPF_EXTERNAL_LSA_ORIGINATE_DELAY 1
-
+
 void
 ospf_router_id_update (struct ospf *ospf)
 {
@@ -139,7 +139,7 @@
         ospf_if_update (ospf, ifp);
     }
 }
-
+
 /* For OSPF area sort by area id. */
 static int
 ospf_area_id_cmp (struct ospf_area *a1, struct ospf_area *a2)
@@ -279,7 +279,7 @@
 
   return ospf;
 }
-
+
 /* Handle the second half of deferred shutdown. This is called either
  * from the deferred-shutdown timer thread, or directly through
  * ospf_deferred_shutdown_check.
@@ -354,7 +354,7 @@
                  timeout);
   return;
 }
-
+
 /* Shut down the entire process */
 void
 ospf_terminate (void)
@@ -563,7 +563,7 @@
   XFREE (MTYPE_OSPF_TOP, ospf);
 }
 
-
+
 /* allocate new OSPF Area object */
 static struct ospf_area *
 ospf_area_new (struct ospf *ospf, struct in_addr area_id)
@@ -719,7 +719,7 @@
   listnode_delete (area->oiflist, oi);
 }
 
-
+
 /* Config network statement related functions. */
 static struct ospf_network *
 ospf_network_new (struct in_addr area_id, int format)
@@ -987,7 +987,7 @@
       ospf_vl_delete (ospf, vl_data);
 }
 
-
+
 static const struct message ospf_area_type_msg[] =
 {
   { OSPF_AREA_DEFAULT,	"Default" },
@@ -1350,7 +1350,7 @@
   return 1;
 }
 
-
+
 static struct ospf_nbr_nbma *
 ospf_nbr_nbma_new (void)
 {
