@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
* OSPF Fundamentals::
* Configuring ospfd::           
* OSPF router::                 
* OSPF area::                   
* OSPF interface::              
* Redistribute routes to OSPF::  
* Showing OSPF information::    
* Debugging OSPF::              
* OSPF Configuration Examples::
@end menu

@include ospf_fundamentals.texi

@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>}} {}
@anchor{OSPF network command}
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. 

In some cases it may be more convenient to enable OSPF on a per
interface/subnet basis (@pxref{OSPF ip ospf area command}).

@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 area @var{AREA} [@var{ADDR}]} {} 
@deffnx {Interface Command} {no ip ospf area [@var{ADDR}]} {}
@anchor{OSPF ip ospf area command}

Enable OSPF on the interface, optionally restricted to just the IP address
given by @var{ADDR}, putting it in the @var{AREA} area. Per interface area
settings take precedence to network commands (@pxref{OSPF network command}).

If you have a lot of interfaces, and/or a lot of subnets, then enabling OSPF
via this command may result in a slight performance improvement.

@end deffn

@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
