@cindex OSPFv2
@node OSPFv2
@chapter OSPFv2

@acronym{OSPF,Open Shortest Path First} version 2 is a routing protocol
which is described in @cite{RFC2328, OSPF Version 2}.  OSPF is an
@acronym{IGP,Interior Gateway Protocol}.  Compared with @acronym{RIP},
@acronym{OSPF} can provide scalable network support and faster
convergence times.  OSPF is widely used in large networks such as
@acronym{ISP,Internet Service Provider} backbone and enterprise
networks.

@menu
* Configuring ospfd::           
* OSPF router::                 
* OSPF area::                   
* OSPF interface::              
* Redistribute routes to OSPF::  
* Showing OSPF information::    
* Debugging OSPF::              
* OSPF Configuration Examples::
@end menu

@node Configuring ospfd
@section Configuring ospfd

There are no @command{ospfd} specific options.  Common options can be
specified (@pxref{Common Invocation Options}) to @command{ospfd}.
@command{ospfd} needs to acquire interface information from
@command{zebra} in order to function. Therefore @command{zebra} must be
running before invoking @command{ospfd}. Also, if @command{zebra} is
restarted then @command{ospfd} must be too.

Like other daemons, @command{ospfd} configuration is done in @acronym{OSPF}
specific configuration file @file{ospfd.conf}.

@node OSPF router
@section OSPF router

To start OSPF process you have to specify the OSPF router.  As of this
writing, @command{ospfd} does not support multiple OSPF processes.

@deffn Command {router ospf} {}
@deffnx Command {no router ospf} {}
Enable or disable the OSPF process.  @command{ospfd} does not yet
support multiple OSPF processes.  So you can not specify an OSPF process
number.
@end deffn

@deffn {OSPF Command} {ospf router-id @var{a.b.c.d}} {}
@deffnx {OSPF Command} {no ospf router-id} {}
@anchor{ospf router-id}This sets the router-ID of the OSPF process. The
router-ID may be an IP address of the router, but need not be - it can
be any arbitrary 32bit number. However it MUST be unique within the
entire OSPF domain to the OSPF speaker - bad things will happen if
multiple OSPF speakers are configured with the same router-ID! If one
is not specified then @command{ospfd} will obtain a router-ID
automatically from @command{zebra}.
@end deffn

@deffn {OSPF Command} {ospf abr-type @var{type}} {}
@deffnx {OSPF Command} {no ospf abr-type @var{type}} {}
@var{type} can be cisco|ibm|shortcut|standard. The "Cisco" and "IBM" types
are equivalent.

The OSPF standard for ABR behaviour does not allow an ABR to consider
routes through non-backbone areas when its links to the backbone are
down, even when there are other ABRs in attached non-backbone areas
which still can reach the backbone - this restriction exists primarily
to ensure routing-loops are avoided.

With the "Cisco" or "IBM" ABR type, the default in this release of
Quagga, this restriction is lifted, allowing an ABR to consider
summaries learnt from other ABRs through non-backbone areas, and hence
route via non-backbone areas as a last resort when, and only when,
backbone links are down.

Note that areas with fully-adjacent virtual-links are considered to be
"transit capable" and can always be used to route backbone traffic, and
hence are unaffected by this setting (@pxref{OSPF virtual-link}).

More information regarding the behaviour controlled by this command can
be found in @cite{RFC 3509, Alternative Implementations of OSPF Area
Border Routers}, and @cite{draft-ietf-ospf-shortcut-abr-02.txt}.

Quote: "Though the definition of the @acronym{ABR,Area Border Router}
in the OSPF specification does not require a router with multiple
attached areas to have a backbone connection, it is actually
necessary to provide successful routing to the inter-area and
external destinations. If this requirement is not met, all traffic
destined for the areas not connected to such an ABR or out of the
OSPF domain, is dropped.  This document describes alternative ABR
behaviors implemented in Cisco and IBM routers."
@end deffn

@deffn {OSPF Command} {ospf rfc1583compatibility} {}
@deffnx {OSPF Command} {no ospf rfc1583compatibility} {}
@cite{RFC2328}, the sucessor to @cite{RFC1583}, suggests according
to section G.2 (changes) in section 16.4 a change to the path
preference algorithm that prevents possible routing loops that were
possible in the old version of OSPFv2. More specifically it demands
that inter-area paths and intra-area backbone path are now of equal preference
but still both preferred to external paths.

This command should NOT be set normally.
@end deffn

@deffn {OSPF Command} {log-adjacency-changes [detail]} {}
@deffnx {OSPF Command} {no log-adjacency-changes [detail]} {}
Configures ospfd to log changes in adjacency.  With the optional
detail argument, all changes in adjacency status are shown.  Without detail,
only changes to full or regressions are shown.
@end deffn

@deffn {OSPF Command} {passive-interface @var{interface}} {}
@deffnx {OSPF Command} {no passive-interface @var{interface}} {}
@anchor{OSPF passive-interface} Do not speak OSPF interface on the
given interface, but do advertise the interface as a stub link in the
router-@acronym{LSA,Link State Advertisement} for this router. This
allows one to advertise addresses on such connected interfaces without
having to originate AS-External/Type-5 LSAs (which have global flooding
scope) - as would occur if connected addresses were redistributed into
OSPF (@pxref{Redistribute routes to OSPF})@. This is the only way to
advertise non-OSPF links into stub areas.
@end deffn

@deffn {OSPF Command} {timers throttle spf @var{delay} @var{initial-holdtime} @var{max-holdtime}} {}
@deffnx {OSPF Command} {no timers throttle spf} {}
This command sets the initial @var{delay}, the @var{initial-holdtime}
and the @var{maximum-holdtime} between when SPF is calculated and the
event which triggered the calculation. The times are specified in
milliseconds and must be in the range of 0 to 600000 milliseconds.

The @var{delay} specifies the minimum amount of time to delay SPF
calculation (hence it affects how long SPF calculation is delayed after
an event which occurs outside of the holdtime of any previous SPF
calculation, and also serves as a minimum holdtime).

Consecutive SPF calculations will always be seperated by at least
'hold-time' milliseconds. The hold-time is adaptive and initially is
set to the @var{initial-holdtime} configured with the above command.
Events which occur within the holdtime of the previous SPF calculation
will cause the holdtime to be increased by @var{initial-holdtime}, bounded
by the @var{maximum-holdtime} configured with this command. If the adaptive
hold-time elapses without any SPF-triggering event occuring then 
the current holdtime is reset to the @var{initial-holdtime}. The current
holdtime can be viewed with @ref{show ip ospf}, where it is expressed as 
a multiplier of the @var{initial-holdtime}.

@example
@group
router ospf
 timers throttle spf 200 400 10000
@end group
@end example

In this example, the @var{delay} is set to 200ms, the @var{initial
holdtime} is set to 400ms and the @var{maximum holdtime} to 10s. Hence
there will always be at least 200ms between an event which requires SPF
calculation and the actual SPF calculation. Further consecutive SPF
calculations will always be seperated by between 400ms to 10s, the
hold-time increasing by 400ms each time an SPF-triggering event occurs
within the hold-time of the previous SPF calculation.

This command supercedes the @command{timers spf} command in previous Quagga
releases.
@end deffn

@deffn {OSPF Command} {max-metric router-lsa [on-startup|on-shutdown] <5-86400>} {}
@deffnx {OSPF Command} {max-metric router-lsa administrative} {}
@deffnx {OSPF Command} {no max-metric router-lsa [on-startup|on-shutdown|administrative]} {}
This enables @cite{RFC3137, OSPF Stub Router Advertisement} support,
where the OSPF process describes its transit links in its router-LSA as
having infinite distance so that other routers will avoid calculating
transit paths through the router while still being able to reach
networks through the router.

This support may be enabled administratively (and indefinitely) or
conditionally. Conditional enabling of max-metric router-lsas can be
for a period of seconds after startup and/or for a period of seconds
prior to shutdown. 

Enabling this for a period after startup allows OSPF to converge fully
first without affecting any existing routes used by other routers,
while still allowing any connected stub links and/or redistributed
routes to be reachable. Enabling this for a period of time in advance
of shutdown allows the router to gracefully excuse itself from the OSPF
domain. 

Enabling this feature administratively allows for administrative
intervention for whatever reason, for an indefinite period of time.
Note that if the configuration is written to file, this administrative
form of the stub-router command will also be written to file. If
@command{ospfd} is restarted later, the command will then take effect
until manually deconfigured.

Configured state of this feature as well as current status, such as the
number of second remaining till on-startup or on-shutdown ends, can be
viewed with the @ref{show ip ospf} command.
@end deffn

@deffn {OSPF Command} {auto-cost reference-bandwidth <1-4294967>} {}
@deffnx {OSPF Command} {no auto-cost reference-bandwidth} {}
@anchor{OSPF auto-cost reference-bandwidth}This sets the reference
bandwidth for cost calculations, where this bandwidth is considered
equivalent to an OSPF cost of 1, specified in Mbits/s. The default is
100Mbit/s (i.e. a link of bandwidth 100Mbit/s or higher will have a
cost of 1. Cost of lower bandwidth links will be scaled with reference
to this cost).

This configuration setting MUST be consistent across all routers within the
OSPF domain.
@end deffn

@deffn {OSPF Command} {network @var{a.b.c.d/m} area @var{a.b.c.d}} {}
@deffnx {OSPF Command} {network @var{a.b.c.d/m} area @var{<0-4294967295>}} {}
@deffnx {OSPF Command} {no network @var{a.b.c.d/m} area @var{a.b.c.d}} {}
@deffnx {OSPF Command} {no network @var{a.b.c.d/m} area @var{<0-4294967295>}} {}
This command specifies the OSPF enabled interface(s).  If the interface has
an address from range 192.168.1.0/24 then the command below enables ospf
on this interface so router can provide network information to the other
ospf routers via this interface.

@example
@group
router ospf
 network 192.168.1.0/24 area 0.0.0.0
@end group
@end example

Prefix length in interface must be equal or bigger (ie. smaller network) than
prefix length in network statement. For example statement above doesn't enable
ospf on interface with address 192.168.1.1/23, but it does on interface with
address 192.168.1.129/25.

Note that the behavior when there is a peer address
defined on an interface changed after release 0.99.7.
Currently, if a peer prefix has been configured,
then we test whether the prefix in the network command contains
the destination prefix.  Otherwise, we test whether the network command prefix
contains the local address prefix of the interface. 
@end deffn

@node OSPF area
@section OSPF area

@deffn {OSPF Command} {area @var{a.b.c.d} range @var{a.b.c.d/m}} {}
@deffnx {OSPF Command} {area <0-4294967295> range @var{a.b.c.d/m}} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} range @var{a.b.c.d/m}} {}
@deffnx {OSPF Command} {no area <0-4294967295> range @var{a.b.c.d/m}} {}
Summarize intra area paths from specified area into one Type-3 summary-LSA
announced to other areas. This command can be used only in ABR and ONLY
router-LSAs (Type-1) and network-LSAs (Type-2) (ie. LSAs with scope area) can
be summarized. Type-5 AS-external-LSAs can't be summarized - their scope is AS.
Summarizing Type-7 AS-external-LSAs isn't supported yet by Quagga.

@example
@group
router ospf
 network 192.168.1.0/24 area 0.0.0.0
 network 10.0.0.0/8 area 0.0.0.10
 area 0.0.0.10 range 10.0.0.0/8
@end group
@end example

With configuration above one Type-3 Summary-LSA with routing info 10.0.0.0/8 is
announced into backbone area if area 0.0.0.10 contains at least one intra-area
network (ie. described with router or network LSA) from this range.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} range IPV4_PREFIX not-advertise} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} range IPV4_PREFIX not-advertise} {}
Instead of summarizing intra area paths filter them - ie. intra area paths from this
range are not advertised into other areas.
This command makes sense in ABR only.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} range IPV4_PREFIX substitute IPV4_PREFIX} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} range IPV4_PREFIX substitute IPV4_PREFIX} {}
Substitute summarized prefix with another prefix.

@example
@group
router ospf
 network 192.168.1.0/24 area 0.0.0.0
 network 10.0.0.0/8 area 0.0.0.10
 area 0.0.0.10 range 10.0.0.0/8 substitute 11.0.0.0/8
@end group
@end example

One Type-3 summary-LSA with routing info 11.0.0.0/8 is announced into backbone area if
area 0.0.0.10 contains at least one intra-area network (ie. described with router-LSA or
network-LSA) from range 10.0.0.0/8.
This command makes sense in ABR only.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} virtual-link @var{a.b.c.d}} {}
@deffnx {OSPF Command} {area <0-4294967295> virtual-link @var{a.b.c.d}} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} virtual-link @var{a.b.c.d}} {}
@deffnx {OSPF Command} {no area <0-4294967295> virtual-link @var{a.b.c.d}} {}
@anchor{OSPF virtual-link}
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} shortcut} {}
@deffnx {OSPF Command} {area <0-4294967295> shortcut} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} shortcut} {}
@deffnx {OSPF Command} {no area <0-4294967295> shortcut} {}
Configure the area as Shortcut capable. See @cite{RFC3509}. This requires
that the 'abr-type' be set to 'shortcut'.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} stub} {}
@deffnx {OSPF Command} {area <0-4294967295> stub} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} stub} {}
@deffnx {OSPF Command} {no area <0-4294967295> stub} {}
Configure the area to be a stub area. That is, an area where no router
originates routes external to OSPF and hence an area where all external 
routes are via the ABR(s). Hence, ABRs for such an area do not need
to pass AS-External LSAs (type-5s) or ASBR-Summary LSAs (type-4) into the
area. They need only pass Network-Summary (type-3) LSAs into such an area,
along with a default-route summary.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} stub no-summary} {}
@deffnx {OSPF Command} {area <0-4294967295> stub no-summary} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} stub no-summary} {}
@deffnx {OSPF Command} {no area <0-4294967295> stub no-summary} {}
Prevents an @command{ospfd} ABR from injecting inter-area 
summaries into the specified stub area.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} default-cost <0-16777215>} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} default-cost <0-16777215>} {}
Set the cost of default-summary LSAs announced to stubby areas.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} export-list NAME} {}
@deffnx {OSPF Command} {area <0-4294967295> export-list NAME} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} export-list NAME} {}
@deffnx {OSPF Command} {no area <0-4294967295> export-list NAME} {}
Filter Type-3 summary-LSAs announced to other areas originated from intra-
area paths from specified area.

@example
@group
router ospf
 network 192.168.1.0/24 area 0.0.0.0
 network 10.0.0.0/8 area 0.0.0.10
 area 0.0.0.10 export-list foo
!
access-list foo permit 10.10.0.0/16
access-list foo deny any
@end group
@end example

With example above any intra-area paths from area 0.0.0.10 and from range
10.10.0.0/16 (for example 10.10.1.0/24 and 10.10.2.128/30) are announced into
other areas as Type-3 summary-LSA's, but any others (for example 10.11.0.0/16
or 10.128.30.16/30) aren't.

This command is only relevant if the router is an ABR for the specified
area.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} import-list NAME} {}
@deffnx {OSPF Command} {area <0-4294967295> import-list NAME} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} import-list NAME} {}
@deffnx {OSPF Command} {no area <0-4294967295> import-list NAME} {}
Same as export-list, but it applies to paths announced into specified area as
Type-3 summary-LSAs.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} filter-list prefix NAME in} {}
@deffnx {OSPF Command} {area @var{a.b.c.d} filter-list prefix NAME out} {}
@deffnx {OSPF Command} {area <0-4294967295> filter-list prefix NAME in} {}
@deffnx {OSPF Command} {area <0-4294967295> filter-list prefix NAME out} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} filter-list prefix NAME in} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} filter-list prefix NAME out} {}
@deffnx {OSPF Command} {no area <0-4294967295> filter-list prefix NAME in} {}
@deffnx {OSPF Command} {no area <0-4294967295> filter-list prefix NAME out} {}
Filtering Type-3 summary-LSAs to/from area using prefix lists. This command
makes sense in ABR only.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} authentication} {}
@deffnx {OSPF Command} {area <0-4294967295> authentication} {}
@deffnx {OSPF Command} {no area @var{a.b.c.d} authentication} {}
@deffnx {OSPF Command} {no area <0-4294967295> authentication} {}
Specify that simple password authentication should be used for the given
area.
@end deffn

@deffn {OSPF Command} {area @var{a.b.c.d} authentication message-digest} {}
@deffnx {OSPF Command} {area <0-4294967295> authentication message-digest} {}

@anchor{area authentication message-digest}Specify that OSPF packets
must be authenticated with MD5 HMACs within the given area. Keying
material must also be configured on a per-interface basis (@pxref{ip
ospf message-digest-key}).

MD5 authentication may also be configured on a per-interface basis
(@pxref{ip ospf authentication message-digest}). Such per-interface
settings will override any per-area authentication setting.
@end deffn

@node OSPF interface
@section OSPF interface

@deffn {Interface Command} {ip ospf authentication-key @var{AUTH_KEY}} {}
@deffnx {Interface Command} {no ip ospf authentication-key} {}
Set OSPF authentication key to a simple password.  After setting @var{AUTH_KEY},
all OSPF packets are authenticated. @var{AUTH_KEY} has length up to 8 chars.

Simple text password authentication is insecure and deprecated in favour of
MD5 HMAC authentication (@pxref{ip ospf authentication message-digest}).
@end deffn

@deffn {Interface Command} {ip ospf authentication message-digest} {}
@anchor{ip ospf authentication message-digest}Specify that MD5 HMAC
authentication must be used on this interface. MD5 keying material must
also be configured (@pxref{ip ospf message-digest-key}). Overrides any
authentication enabled on a per-area basis (@pxref{area
authentication message-digest}).

Note that OSPF MD5 authentication requires that time never go backwards
(correct time is NOT important, only that it never goes backwards), even
across resets, if ospfd is to be able to promptly reestabish adjacencies
with its neighbours after restarts/reboots. The host should have system
time be set at boot from an external or non-volatile source (eg battery backed clock, NTP,
etc.) or else the system clock should be periodically saved to non-volative
storage and restored at boot if MD5 authentication is to be expected to work
reliably.
@end deffn

@deffn {Interface Command} {ip ospf message-digest-key KEYID md5 KEY} {}
@deffnx {Interface Command} {no ip ospf message-digest-key} {}
@anchor{ip ospf message-digest-key}Set OSPF authentication key to a
cryptographic password.  The cryptographic algorithm is MD5.  

KEYID identifies secret key used to create the message digest. This ID
is part of the protocol and must be consistent across routers on a
link.

KEY is the actual message digest key, of up to 16 chars (larger strings
will be truncated), and is associated with the given KEYID.
@end deffn

@deffn {Interface Command} {ip ospf cost <1-65535>} {}
@deffnx {Interface Command} {no ip ospf cost} {}
Set link cost for the specified interface.  The cost value is set to router-LSA's
metric field and used for SPF calculation.
@end deffn

@deffn {Interface Command} {ip ospf dead-interval <1-65535>} {}
@deffnx {Interface Command} {ip ospf dead-interval minimal hello-multiplier <2-20>} {}
@deffnx {Interface Command} {no ip ospf dead-interval} {}
@anchor{ip ospf dead-interval minimal} Set number of seconds for
RouterDeadInterval timer value used for Wait Timer and Inactivity
Timer.  This value must be the same for all routers attached to a
common network.  The default value is 40 seconds.

If 'minimal' is specified instead, then the dead-interval is set to 1
second and one must specify a hello-multiplier. The hello-multiplier
specifies how many Hellos to send per second, from 2 (every 500ms) to
20 (every 50ms). Thus one can have 1s convergence time for OSPF. If this form
is specified, then the hello-interval advertised in Hello packets is set to
0 and the hello-interval on received Hello packets is not checked, thus 
the hello-multiplier need NOT be the same across multiple routers on a common
link.
@end deffn

@deffn {Interface Command} {ip ospf hello-interval <1-65535>} {}
@deffnx {Interface Command} {no ip ospf hello-interval} {}
Set number of seconds for HelloInterval timer value.  Setting this value,
Hello packet will be sent every timer value seconds on the specified interface.
This value must be the same for all routers attached to a common network.
The default value is 10 seconds.

This command has no effect if @ref{ip ospf dead-interval minimal} is also 
specified for the interface.
@end deffn

@deffn {Interface Command} {ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)} {}
@deffnx {Interface Command} {no ip ospf network} {}
Set explicitly network type for specifed interface.
@end deffn

@deffn {Interface Command} {ip ospf priority <0-255>} {}
@deffnx {Interface Command} {no ip ospf priority} {}
Set RouterPriority integer value.  The router with the highest priority
will be more eligible to become Designated Router.  Setting the value
to 0, makes the router ineligible to become Designated Router. The
default value is 1.
@end deffn

@deffn {Interface Command} {ip ospf retransmit-interval <1-65535>} {}
@deffnx {Interface Command} {no ip ospf retransmit interval} {}
Set number of seconds for RxmtInterval timer value.  This value is used
when retransmitting Database Description and Link State Request packets.
The default value is 5 seconds.
@end deffn

@deffn {Interface Command} {ip ospf transmit-delay} {}
@deffnx {Interface Command} {no ip ospf transmit-delay} {}
Set number of seconds for InfTransDelay value.  LSAs' age should be 
incremented by this value when transmitting.
The default value is 1 seconds.
@end deffn

@node Redistribute routes to OSPF
@section Redistribute routes to OSPF

@deffn {OSPF Command} {redistribute (kernel|connected|static|rip|bgp)} {}
@deffnx {OSPF Command} {redistribute (kernel|connected|static|rip|bgp) @var{route-map}} {}
@deffnx {OSPF Command} {redistribute (kernel|connected|static|rip|bgp) metric-type (1|2)} {}
@deffnx {OSPF Command} {redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) route-map @var{word}} {}
@deffnx {OSPF Command} {redistribute (kernel|connected|static|rip|bgp) metric <0-16777214>} {}
@deffnx {OSPF Command} {redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> route-map @var{word}} {}
@deffnx {OSPF Command} {redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214>} {}
@deffnx {OSPF Command} {redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214> route-map @var{word}} {}
@deffnx {OSPF Command} {no redistribute (kernel|connected|static|rip|bgp)} {}
@anchor{OSPF redistribute}Redistribute routes of the specified protocol
or kind into OSPF, with the metric type and metric set if specified,
filtering the routes using the given route-map if specified.
Redistributed routes may also be filtered with distribute-lists, see
@ref{ospf distribute-list}.

Redistributed routes are distributed as into OSPF as Type-5 External
LSAs into links to areas that accept external routes, Type-7 External LSAs
for NSSA areas and are not redistributed at all into Stub areas, where
external routes are not permitted.

Note that for connected routes, one may instead use
@dfn{passive-interface}, see @ref{OSPF passive-interface}.
@end deffn

@deffn {OSPF Command} {default-information originate} {}
@deffnx {OSPF Command} {default-information originate metric <0-16777214>} {}
@deffnx {OSPF Command} {default-information originate metric <0-16777214> metric-type (1|2)} {}
@deffnx {OSPF Command} {default-information originate metric <0-16777214> metric-type (1|2) route-map @var{word}} {}
@deffnx {OSPF Command} {default-information originate always} {}
@deffnx {OSPF Command} {default-information originate always metric <0-16777214>} {}
@deffnx {OSPF Command} {default-information originate always metric <0-16777214> metric-type (1|2)} {}
@deffnx {OSPF Command} {default-information originate always metric <0-16777214> metric-type (1|2) route-map @var{word}} {}
@deffnx {OSPF Command} {no default-information originate} {}
Originate an AS-External (type-5) LSA describing a default route into
all external-routing capable areas, of the specified metric and metric
type. If the 'always' keyword is given then the default is always
advertised, even when there is no default present in the routing table.
@end deffn

@deffn {OSPF Command} {distribute-list NAME out (kernel|connected|static|rip|ospf} {}
@deffnx {OSPF Command} {no distribute-list NAME out (kernel|connected|static|rip|ospf} {}
@anchor{ospf distribute-list}Apply the access-list filter, NAME, to
redistributed routes of the given type before allowing the routes to
redistributed into OSPF (@pxref{OSPF redistribute}).
@end deffn

@deffn {OSPF Command} {default-metric <0-16777214>} {}
@deffnx {OSPF Command} {no default-metric} {}
@end deffn

@deffn {OSPF Command} {distance <1-255>} {}
@deffnx {OSPF Command} {no distance <1-255>} {}
@end deffn

@deffn {OSPF Command} {distance ospf (intra-area|inter-area|external) <1-255>} {}
@deffnx {OSPF Command} {no distance ospf} {}
@end deffn

@node Showing OSPF information
@section Showing OSPF information

@deffn {Command} {show ip ospf} {}
@anchor{show ip ospf}Show information on a variety of general OSPF and
area state and configuration information.
@end deffn

@deffn {Command} {show ip ospf interface [INTERFACE]} {}
Show state and configuration of OSPF the specified interface, or all
interfaces if no interface is given.
@end deffn

@deffn {Command} {show ip ospf neighbor} {}
@deffnx {Command} {show ip ospf neighbor INTERFACE} {}
@deffnx {Command} {show ip ospf neighbor detail} {}
@deffnx {Command} {show ip ospf neighbor INTERFACE detail} {}
@end deffn

@deffn {Command} {show ip ospf database} {}
@end deffn

@deffn {Command} {show ip ospf database (asbr-summary|external|network|router|summary)} {}
@deffnx {Command} {show ip ospf database (asbr-summary|external|network|router|summary) @var{link-state-id}} {}
@deffnx {Command} {show ip ospf database (asbr-summary|external|network|router|summary) @var{link-state-id} adv-router @var{adv-router}} {}
@deffnx {Command} {show ip ospf database (asbr-summary|external|network|router|summary) adv-router @var{adv-router}} {}
@deffnx {Command} {show ip ospf database (asbr-summary|external|network|router|summary) @var{link-state-id} self-originate} {}
@deffnx {Command} {show ip ospf database (asbr-summary|external|network|router|summary) self-originate} {}
@end deffn

@deffn {Command} {show ip ospf database max-age} {}
@end deffn

@deffn {Command} {show ip ospf database self-originate} {}
@end deffn

@deffn {Command} {show ip ospf route} {}
Show the OSPF routing table, as determined by the most recent SPF calculation.
@end deffn

@node Debugging OSPF
@section Debugging OSPF

@deffn {Command} {debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail]} {}
@deffnx {Command} {no debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail]} {}
@end deffn

@deffn {Command} {debug ospf ism} {}
@deffnx {Command} {debug ospf ism (status|events|timers)} {}
@deffnx {Command} {no debug ospf ism} {}
@deffnx {Command} {no debug ospf ism (status|events|timers)} {}
@end deffn

@deffn {Command} {debug ospf nsm} {}
@deffnx {Command} {debug ospf nsm (status|events|timers)} {}
@deffnx {Command} {no debug ospf nsm} {}
@deffnx {Command} {no debug ospf nsm (status|events|timers)} {}
@end deffn

@deffn {Command} {debug ospf lsa} {}
@deffnx {Command} {debug ospf lsa (generate|flooding|refresh)} {}
@deffnx {Command} {no debug ospf lsa} {}
@deffnx {Command} {no debug ospf lsa (generate|flooding|refresh)} {}
@end deffn

@deffn {Command} {debug ospf zebra} {}
@deffnx {Command} {debug ospf zebra (interface|redistribute)} {}
@deffnx {Command} {no debug ospf zebra} {}
@deffnx {Command} {no debug ospf zebra (interface|redistribute)} {}
@end deffn

@deffn {Command} {show debugging ospf} {}
@end deffn

@node OSPF Configuration Examples
@section OSPF Configuration Examples
A simple example, with MD5 authentication enabled:

@example
@group
!
interface bge0
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 ABCDEFGHIJK
!
router ospf
 network 192.168.0.0/16 area 0.0.0.1
 area 0.0.0.1 authentication message-digest
@end group
@end example

An @acronym{ABR} router, with MD5 authentication and performing summarisation
of networks between the areas:

@example
@group
!
password ABCDEF
log file /var/log/quagga/ospfd.log
service advanced-vty
!
interface eth0
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 ABCDEFGHIJK
!
interface ppp0
!
interface br0
 ip ospf authentication message-digest
 ip ospf message-digest-key 2 md5 XYZ12345
!
router ospf
 ospf router-id 192.168.0.1
 redistribute connected
 passive interface ppp0
 network 192.168.0.0/24 area 0.0.0.0
 network 10.0.0.0/16 area 0.0.0.0
 network 192.168.1.0/24 area 0.0.0.1
 area 0.0.0.0 authentication message-digest
 area 0.0.0.0 range 10.0.0.0/16
 area 0.0.0.0 range 192.168.0.0/24
 area 0.0.0.1 authentication message-digest
 area 0.0.0.1 range 10.2.0.0/16
!
@end group
@end example
