# OSPFv3

ospf6d is a daemon support OSPF version 3 for IPv6 network. OSPF for IPv6 is described in RFC 2740.

## Configuring OSPF6

Configuration for the daemon should be saved in the FRR integrated configuration file located in /etc/frr/frr.conf, see Integrated Config File for more information on system configuration.

Prior versions of FRR supported reading and writing per-daemon config files; however, with the introduction of the centralized management daemon `mgmtd` this could no longer be supported.

In order to allow for an orderly transition from per-daemon config files to the integrated config file, FRR daemons will continue to try and read their specific per-daemon configuration file as before. Additionally the config can still be loaded directly using the `-f` or `--config-file` CLI options; however, these files will not be updated when the configuration is written (e.g., with the `write mem` command).

Warning

Per-daemon files will no longer be updated when the user issues a `write memory` command. Therefore these per-daemon config files should only be used as a mechanism for transitioning to the integrated config, and then removed.

### Configuration Commands

router ospf6 [vrf NAME]

ospf6 router-id A.B.C.D

  Set router's Router-ID.

timers throttle spf (0-600000) (0-600000) (0-600000)

  This command sets the initial delay, the initial-holdtime and the 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 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 separated by at least 'hold-time' milliseconds. The hold-time is adaptive and initially is set to the 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 initial-holdtime, bounded by the maximum-holdtime configured with this command. If the adaptive hold-time elapses without any SPF-triggering event occurring then the current holdtime is reset to the initial-holdtime.

      router ospf6
       timers throttle spf 200 400 10000

  In this example, the delay is set to 200ms, the initial holdtime is set to 400ms and the 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 separated 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.

auto-cost reference-bandwidth COST

  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.

maximum-paths (1-64)

  Use this command to control the maximum number of parallel routes that OSPFv3 can support. The default is 64.

write-multiplier (1-100)

  Use this command to tune the amount of work done in the packet read and write threads before relinquishing control. The parameter is the number of packets to process before returning. The default value of this parameter is 20.

clear ipv6 ospf6 process [vrf NAME]

  This command clears up the database and routing tables and resets the neighborship by restarting the interface state machine. This will be helpful when there is a change in router-id and if user wants the router-id change to take effect, user can use this cli instead of restarting the ospf6d daemon.

clear ipv6 ospf6 [vrf NAME] interface [IFNAME]

  This command restarts the interface state machine for all interfaces in the VRF or only for the specific interface if `IFNAME` is specified.

### ASBR Summarisation Support in OSPFv3

> External routes in OSPFv3 are carried by type 5/7 LSA (external LSAs). External LSAs are generated by ASBR (Autonomous System Boundary Router). Large topology database requires a large amount of router memory, which slows down all processes, including SPF calculations. It is necessary to reduce the size of the OSPFv3 topology database, especially in a large network. Summarising routes keeps the routing tables smaller and easier to troubleshoot.

> External route summarization must be configured on ASBR. Stub area do not allow ASBR because they don’t allow type 5 LSAs.

> An ASBR will inject a summary route into the OSPFv3 domain.

> Summary route will only be advertised if you have at least one subnet that falls within the summary range.

> Users will be allowed an option in the CLI to not advertise range of ipv6 prefixes as well.

> The configuration of ASBR Summarisation is supported using the CLI command

summary-address X:X::X:X/M [tag (1-4294967295)] [{metric (0-16777215) | metric-type (1-2)}]

  This command will advertise a single External LSA on behalf of all the prefixes falling under this range configured by the CLI. The user is allowed to configure tag, metric and metric-type as well. By default, tag is not configured, default metric as 20 and metric-type as type-2 gets advertised. A summary route is created when one or more specific routes are learned and removed when no more specific route exist. The summary route is also installed in the local system with Null0 as next-hop to avoid leaking traffic.

no summary-address X:X::X:X/M [tag (1-4294967295)] [{metric (0-16777215) | metric-type (1-2)}]

  This command can be used to remove the summarisation configuration. This will flush the single External LSA if it was originated and advertise the External LSAs for all the existing individual prefixes.

summary-address X:X::X:X/M no-advertise

  This command can be used when user do not want to advertise a certain range of prefixes using the no-advertise option. This command when configured will flush all the existing external LSAs falling under this range.

no summary-address X:X::X:X/M no-advertise

  This command can be used to remove the previous configuration. When configured, tt will resume originating external LSAs for all the prefixes falling under the configured range.

aggregation timer (5-1800)

  The summarisation command takes effect after the aggregation timer expires. By default the value of this timer is 5 seconds. User can modify the time after which the external LSAs should get originated using this command.

no aggregation timer (5-1800)

  This command removes the timer configuration. It reverts back to default 5 second timer.

show ipv6 ospf6 summary-address [detail] [json]

  This command can be used to see all the summary-address related information. When detail option is used, it shows all the prefixes falling under each summary-configuration apart from other information.

### OSPF6 area

area A.B.C.D range X:X::X:X/M [<advertise|not-advertise|cost (0-16777215)>]

area (0-4294967295) range X:X::X:X/M [<advertise|not-advertise|cost (0-16777215)>]

  Summarize a group of internal subnets into a single Inter-Area-Prefix LSA. This command can only be used at the area boundary (ABR router).

  By default, the metric of the summary route is calculated as the highest metric among the summarized routes. The cost option, however, can be used to set an explicit metric.

  The not-advertise option, when present, prevents the summary route from being advertised, effectively filtering the summarized routes.

area A.B.C.D nssa [no-summary] [default-information-originate [metric-type (1-2)] [metric (0-16777214)]]

area (0-4294967295) nssa [no-summary] [default-information-originate [metric-type (1-2)] [metric (0-16777214)]]

  Configure the area to be a NSSA (Not-So-Stubby Area).

  The following functionalities are implemented as per RFC 3101:

  1. Advertising Type-7 LSA into NSSA area when external route is redistributed into OSPFv3.

  2. Processing Type-7 LSA received from neighbor and installing route in the route table.

  3. Support for NSSA ABR functionality which is generating Type-5 LSA when backbone area is configured. Currently translation of Type-7 LSA to Type-5 LSA is enabled by default.

  4. Support for NSSA Translator functionality when there are multiple NSSA ABR in an area.

  An NSSA ABR can be configured with the no-summary option to prevent the advertisement of summaries into the area. In that case, a single Type-3 LSA containing a default route is originated into the NSSA.

  NSSA ABRs and ASBRs can be configured with default-information-originate option to originate a Type-7 default route into the NSSA area. In the case of NSSA ASBRs, the origination of the default route is conditioned to the existence of a default route in the RIB that wasn't learned via the OSPF protocol.

area A.B.C.D nssa range X:X::X:X/M [<not-advertise|cost (0-16777215)>]

area (0-4294967295) nssa range X:X::X:X/M [<not-advertise|cost (0-16777215)>]

  Summarize a group of external subnets into a single Type-7 LSA, which is then translated to a Type-5 LSA and avertised to the backbone. This command can only be used at the area boundary (NSSA ABR router).

  By default, the metric of the summary route is calculated as the highest metric among the summarized routes. The cost option, however, can be used to set an explicit metric.

  The not-advertise option, when present, prevents the summary route from being advertised, effectively filtering the summarized routes.

area A.B.C.D export-list NAME

area (0-4294967295) export-list NAME

  Filter Type-3 summary-LSAs announced to other areas originated from intra- area paths from specified area.

      router ospf6
       area 0.0.0.10 export-list foo
      !
      ipv6 access-list foo permit 2001:db8:1000::/64
      ipv6 access-list foo deny any

  With example above any intra-area paths from area 0.0.0.10 and from range 2001:db8::/32 (for example 2001:db8:1::/64 and 2001:db8:2::/64) are announced into other areas as Type-3 summary-LSA's, but any others (for example 2001:200::/48) aren't.

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

area A.B.C.D import-list NAME

area (0-4294967295) import-list NAME

  Same as export-list, but it applies to paths announced into specified area as Type-3 summary-LSAs.

area A.B.C.D filter-list prefix NAME in

area A.B.C.D filter-list prefix NAME out

area (0-4294967295) filter-list prefix NAME in

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.

### OSPF6 interface

ipv6 ospf6 area <A.B.C.D|(0-4294967295)>

  Enable OSPFv3 on the interface and add it to the specified area.

ipv6 ospf6 cost COST

  Sets interface's output cost. Default value depends on the interface bandwidth and on the auto-cost reference bandwidth.

ipv6 ospf6 hello-interval HELLOINTERVAL

  Sets interface's Hello Interval. Default 10

ipv6 ospf6 dead-interval DEADINTERVAL

  Sets interface's Router Dead Interval. Default value is 40.

ipv6 ospf6 graceful-restart hello-delay HELLODELAYINTERVAL

  Set the length of time during which Grace-LSAs are sent at 1-second intervals while coming back up after an unplanned outage. During this time, no hello packets are sent.

  A higher hello delay will increase the chance that all neighbors are notified about the ongoing graceful restart before receiving a hello packet (which is crucial for the graceful restart to succeed). The hello delay shouldn't be set too high, however, otherwise the adjacencies might time out. As a best practice, it's recommended to set the hello delay and hello interval with the same values. The default value is 10 seconds.

ipv6 ospf6 retransmit-interval RETRANSMITINTERVAL

  Sets interface's Rxmt Interval. Default value is 5.

ipv6 ospf6 priority PRIORITY

  Sets interface's Router Priority. Default value is 1.

ipv6 ospf6 transmit-delay TRANSMITDELAY

  Sets interface's Inf-Trans-Delay. Default value is 1.

ipv6 ospf6 network (broadcast|point-to-point|point-to-multipoint)

  Set explicitly network type for specified interface.

  The only functional difference between `point-to-point` (PtP) and `point-to-multipoint` (PtMP) mode is the packet addressing for database flooding and updates. PtP will use multicast packets while PtMP will unicast them. Apart from this, `ipv6 ospf6 p2p-p2mp connected-prefixes` has a different default for PtP and PtMP. There are no other differences, in particular FRR does not impose a limit of one neighbor in PtP mode.

  FRR does not support NBMA mode for IPv6 and likely never will, as NBMA is considered deprecated for IPv6. Refer to this IETF OSPF working group discussion for context.

### OSPF6 point-to-point and point-to-multipoint operation

OSPFv3, by default, operates in broadcast mode where it elects a DR and BDR for each network segment. This can be changed to point-to-point (PtP) / point-to-multipoint (PtMP) mode by configuration. The actual physical interface characteristics do not matter for this setting, all interfaces can be configured for all modes. However, routers must be configured for the same mode to form adjacencies.

The main advantages of PtP/PtMP mode are:

- no DR/BDR election

- adjacencies can be suppressed in a pairwise manner for any two routers, e.g. to represent the underlying topology if it isn't a true full mesh

- distinct costs can be set for each pair of routers and direction

The main downside is less efficient flooding on networks with a large number of OSPFv3 routers.

Warning

All options in this section should be considered "advanced" configuration options. Inconsistent or nonsensical combinations can easily result in a non-functional setup.

ipv6 ospf6 p2p-p2mp disable-multicast-hello

  Disables sending normal multicast hellos when in PtP/PtMP mode. Some vendors do this automatically for PtMP mode while others have a separate `no-broadcast` option matching this.

  If this setting is used, you must issue `ipv6 ospf6 neighbor X:X::X:X poll-interval (1-65535)` for each neighbor to send unicast hello packets.

ipv6 ospf6 p2p-p2mp config-neighbors-only

  Only form adjacencies with neighbors that are explicitly configured with the `ipv6 ospf6 neighbor X:X::X:X` command. Hellos from other routers are ignored.

  Warning

  This setting is not intended to provide any security benefit. Do not run OSPFv3 over untrusted links without additional security measures (e.g. IPsec.)

ipv6 ospf6 p2p-p2mp connected-prefixes <include|exclude>

  For global/ULA prefixes configured on this interfaces, do (not) advertise the full prefix to the area. Regardless of this setting, the router's own address, as a /128 host route with the "LA" (Local Address) bit set, will always be advertised.

  The default is to include connected prefixes for PtP mode and exclude them for PtMP mode. Since these prefixes will cover other router's addresses, these addresses can become unreachable if the link is partitioned if the other router does not advertise the address as a /128. However, conversely, if all routers have this flag set, the overall prefix will not be advertised anywhere. End hosts on this link will therefore be unreachable (and blackholing best-practices for non-existing prefixes apply.) It may be preferable to have only one router announce the connected prefix.

  The Link LSA (which is not propagated into the area) always includes all prefixes on the interface. This setting only affects the Router LSA that is visible to all routers in the area.

  Note

  Before interacting with this setting, consider either not configuring any global/ULA IPv6 address on the interface, or directly configuring a /128 if needed. OSPFv3 relies exclusively on link-local addresses to do its signaling and there is absolutely no reason to configure global/ULA addresses as far as OSPFv3 is concerned.

ipv6 ospf6 neighbor X:X::X:X

  Explicitly configure a neighbor by its link-local address on this interface. This statement has no effect other than allowing an adjacency when `ipv6 ospf6 p2p-p2mp config-neighbors-only` is set. This command does not cause unicast hellos to be sent.

  Only link-local addresses can be used to establish explicit neighbors. When using this command, you should probably assign static IPv6 link-local addresses to all routers on this link. It would technically be possible to use the neighbor's Router ID (IPv4 address) here to ease working with changing link-local addresses but this is not planned as a feature at the time of writing. Global/ULA IPv6 addresses cannot be supported here due to the way OSPFv3 works.

ipv6 ospf6 neighbor X:X::X:X poll-interval (1-65535)

  Send unicast hellos to this neighbor at the specified interval (in seconds.) The interval is only used while there is no adjacency with this neighbor. As soon as an adjacency is formed, the interface's `ipv6 ospf6 hello-interval HELLOINTERVAL` value is used. (`hello-interval` must be the same on all routers on this link.)

  RFC 2328 recommends a "much larger" value than `hello-interval` for this setting, but this is a legacy of ATM and X.25 networks and nowadays you should probably just use the same value as for `hello-interval`.

ipv6 ospf6 neighbor X:X::X:X cost (1-65535)

  Use a distinct cost for paths traversing this neighbor. The default is to use the interface's cost value (which may be automatically calculated based on link bandwidth.) Note that costs are directional in OSPF and the reverse direction must be set on the other router.

### OSPF6 route-map

Usage of ospfd6's route-map support.

set metric [+|-](0-4294967295)

  Set a metric for matched route when sending announcement. Use plus (+) sign to add a metric value to an existing metric. Use minus (-) sign to substract a metric value from an existing metric.

### Redistribute routes to OSPF6

redistribute <babel|bgp|connected|isis|kernel|openfabric|ripng|sharp|static|table> [metric-type (1-2)] [metric (0-16777214)] [route-map WORD]

  Redistribute routes of the specified protocol or kind into OSPFv3, with the metric type and metric set if specified, filtering the routes using the given route-map if specified.

default-information originate [{always|metric (0-16777214)|metric-type (1-2)|route-map WORD}]

  The command injects default route in the connected areas. The always argument injects the default route regardless of it being present in the router. Metric values and route-map can also be specified optionally.

### Graceful Restart

graceful-restart [grace-period (1-1800)]

  Configure Graceful Restart (RFC 5187) restarting support. When enabled, the default grace period is 120 seconds.

  To perform a graceful shutdown, the "graceful-restart prepare ipv6 ospf" EXEC-level command needs to be issued before restarting the ospf6d daemon.

  When Graceful Restart is enabled and the ospf6d daemon crashes or is killed abruptely (e.g. SIGKILL), it will attempt an unplanned Graceful Restart once it restarts.

graceful-restart helper enable [A.B.C.D]

  Configure Graceful Restart (RFC 5187) helper support. By default, helper support is disabled for all neighbors. This config enables/disables helper support on this router for all neighbors. To enable/disable helper support for a specific neighbor, the router-id (A.B.C.D) has to be specified.

graceful-restart helper strict-lsa-checking

  If 'strict-lsa-checking' is configured then the helper will abort the Graceful Restart when a LSA change occurs which affects the restarting router. By default 'strict-lsa-checking' is enabled"

graceful-restart helper supported-grace-time (10-1800)

  Supports as HELPER for configured grace period.

graceful-restart helper planned-only

  It helps to support as HELPER only for planned restarts. By default, it supports both planned and unplanned outages.

graceful-restart prepare ipv6 ospf

  Initiate a graceful restart for all OSPFv3 instances configured with the "graceful-restart" command. The ospf6d daemon should be restarted during the instance-specific grace period, otherwise the graceful restart will fail.

  This is an EXEC-level command.

### Authentication trailer support:

IPv4 version of OSPF supports authentication as part of the base RFC. When IPv6 version of OSPF was developed there was IPSec support for IPv6, Hence OSPFv3(IPv6 version of OSPF) suggest to use IPSec as authentication and encryption mechanism. IPSec supports authentication using AH header and Encryption using ESP.

There are few disadvantages of using IPSec with OSPFv3.

  1. If encryption is enabled for OSPFv3 packets, then its not possible to give priority to control packets.

  2. IPSec has platform dependency and may not be supported in all platforms.

  3. It is performance intensive.

  4. Its difficult to configure.

Some advantages of OSPFv3 authentication trailer feature.

  1. It provides replay protection via sequence number.

  2. It provides IPv6 source address protection.

  3. No platform dependency.

  4. Easy to implement and maintain.

This feature is support for `RFC7166`.

FRR supports MD5 and SHA256 internally and relays on openssl for other hash algorithms. If user wants to use only MD5 and SHA256, no special action is required. If user wants complete support of authentication trailer with all hash algorithms follow below steps.

#### Installing Dependencies:

    sudo apt update
    sudo apt-get install openssl

#### Compile:

Follow normal compilation as mentioned in the build page. If you want to use all the hash algorithms then follow the steps mentioned in note before compiling.

Note

If your platform supports `openssl`, please make sure to add `--with-crypto=openssl` to your configure options. Default value is `--with-crypto=internal`

#### CLI Configuration:

There are two ways in which authentication trailer can be configured for OSPFv3. These commands are mutually exclusive, only one can be configured at any time.

> 1. Using manual key configuration.

> 2. Using keychain.

##### List of hash algorithms supported:

###### Without openssl:

> `MD5` `HMAC-SHA-256`

###### With openssl:

> `MD5` `HMAC-SHA-1` `HMAC-SHA-256` `HMAC-SHA-384` `HMAC-SHA-512`

##### Example configuration of manual key:

###### Without openssl:

ipv6 ospf6 authentication key-id (1-65535) hash-algo <md5|hmac-sha-256> key WORD

###### With openssl:

ipv6 ospf6 authentication key-id (1-65535) hash-algo <md5|hmac-sha-256|hmac-sha-1|hmac-sha-384|hmac-sha-512> key WORD

##### Example configuration of keychain:

ipv6 ospf6 authentication keychain KEYCHAIN_NAME

#### Running configuration:

##### Manual key:

    frr# show running-config
    Building configuration...

    Current configuration:
    !
    interface ens192
     ipv6 address 2001:DB8::2/64
     ipv6 ospf6 authentication key-id 10 hash-algo hmac-sha-256 key abhinay

##### Keychain:

    frr# show running-config
    Building configuration...

    Current configuration:
    !
    interface ens192
     ipv6 address 2001:DB8::2/64
     ipv6 ospf6 authentication keychain abhinay

##### Example keychain config:

    frr#show running-config
    Building configuration...

    Current configuration:
    !
     key chain abcd
      key 100
       key-string password
       cryptographic-algorithm sha1
      exit
      key 200
       key-string password
       cryptographic-algorithm sha256
      exit
     !
     key chain pqr
      key 300
       key-string password
       cryptographic-algorithm sha384
      exit
      key 400
       key-string password
       cryptographic-algorithm sha384
      exit
     !

#### Show commands:

There is an interface show command that displays if authentication trailer is enabled or not. json output is also supported.

There is support for drop counters, which will help in debugging the feature.

    frr# show ipv6 ospf6 interface ens192
    ens192 is up, type BROADCAST
      Interface ID: 5
      Number of I/F scoped LSAs is 2
        0 Pending LSAs for LSUpdate in Time 00:00:00 [thread off]
        0 Pending LSAs for LSAck in Time 00:00:00 [thread off]
      Authentication trailer is enabled with manual key         ==> new info added
        Packet drop Tx 0, Packet drop Rx 0

OSPFv3 supports options in hello and database description packets hence the presence of authentication trailer needs to be stored in OSPFv3 neighbor info. Since RFC specifies that we need to handled sequence number for every ospf6 packet type, sequence number recvd in authentication header from the neighbor is stored in neighbor to validate the packet. json output is also supported.

    frr# show ipv6 ospf6 neighbor 2.2.2.2 detail
     Neighbor 2.2.2.2%ens192
        Area 1 via interface ens192 (ifindex 3)
        0 Pending LSAs for LSUpdate in Time 00:00:00 [thread off]
        0 Pending LSAs for LSAck in Time 00:00:00 [thread off]
        Authentication header present                           ==> new info added
                             hello        DBDesc       LSReq        LSUpd        LSAck
          Higher sequence no 0x0          0x0          0x0          0x0          0x0
          Lower sequence no  0x242E       0x1DC4       0x1DC3       0x23CC       0x1DDA

Sent packet sequence number is maintained per ospf6 router for every packet that is sent out of router, so sequence number is maintained per ospf6 process.

    frr# show ipv6 ospf6
     OSPFv3 Routing Process (0) with Router-ID 2.2.2.2
     Number of areas in this router is 1
     Authentication Sequence number info
      Higher sequence no 3, Lower sequence no 1656

#### Debug command:

Below command can be used to enable ospfv3 authentication trailer specific logs if you have to debug the feature.

debug ospf6 authentication [<tx|rx>]

Feature supports authentication trailer tx/rx drop counters for debugging, which can be used to see if packets are getting dropped due to error in processing authentication trailer information in OSPFv3 packet. json output is also supported.

    frr# show ipv6 ospf6 interface ens192
    ens192 is up, type BROADCAST
      Interface ID: 5
      Number of I/F scoped LSAs is 2
        0 Pending LSAs for LSUpdate in Time 00:00:00 [thread off]
        0 Pending LSAs for LSAck in Time 00:00:00 [thread off]
      Authentication trailer is enabled with manual key
        Packet drop Tx 0, Packet drop Rx 0                      ==> new counters

#### Clear command:

Below command can be used to clear the tx/rx drop counters in interface. Below command can be used to clear all ospfv3 interface or specific interface by specifying the interface name.

clear ipv6 ospf6 auth-counters interface [IFNAME]

### Showing OSPF6 information

show ipv6 ospf6 [vrf <NAME|all>] [json]

  Show information on a variety of general OSPFv3 and area state and configuration information. JSON output can be obtained by appending 'json' to the end of command.

show ipv6 ospf6 [vrf <NAME|all>] database [<detail|dump|internal>] [json]

  This command shows LSAs present in the LSDB. There are three view options. These options helps in viewing all the parameters of the LSAs. JSON output can be obtained by appending 'json' to the end of command. JSON option is not applicable with 'dump' option.

show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> [json]

  These options filters out the LSA based on its type. The three views options works here as well. JSON output can be obtained by appending 'json' to the end of command.

show ipv6 ospf6 [vrf <NAME|all>] database adv-router A.B.C.D linkstate-id A.B.C.D [json]

  The LSAs additinally can also be filtered with the linkstate-id and advertising-router fields. We can use the LSA type filter and views with this command as well and visa-versa. JSON output can be obtained by appending 'json' to the end of command.

show ipv6 ospf6 [vrf <NAME|all>] database self-originated [json]

  This command is used to filter the LSAs which are originated by the present router. All the other filters are applicable here as well.

show ipv6 ospf6 [vrf <NAME|all>] interface [json]

  To see OSPF interface configuration like costs. JSON output can be obtained by appending "json" in the end.

show ipv6 ospf6 [vrf <NAME|all>] neighbor [json]

  Shows state and chosen (Backup) DR of neighbor. JSON output can be obtained by appending 'json' at the end.

show ipv6 ospf6 [vrf <NAME|all>] interface traffic [json]

  Shows counts of different packets that have been received and transmitted by the interfaces. JSON output can be obtained by appending "json" at the end.

show ipv6 route ospf6

  This command shows internal routing table.

show ipv6 ospf6 zebra [json]

  Shows state about what is being redistributed between zebra and OSPF6. JSON output can be obtained by appending "json" at the end.

show ipv6 ospf6 [vrf <NAME|all>] redistribute [json]

  Shows the routes which are redistributed by the router. JSON output can be obtained by appending 'json' at the end.

show ipv6 ospf6 [vrf <NAME|all>] route [<intra-area|inter-area|external-1|external-2|X:X::X:X|X:X::X:X/M|detail|summary>] [json]

  This command displays the ospfv3 routing table as determined by the most recent SPF calculations. Options are provided to view the different types of routes. Other than the standard view there are two other options, detail and summary. JSON output can be obtained by appending 'json' to the end of command.

show ipv6 ospf6 [vrf <NAME|all>] route X:X::X:X/M match [detail] [json]

  The additional match option will match the given address to the destination of the routes, and return the result accordingly.

show ipv6 ospf6 [vrf <NAME|all>] interface [IFNAME] prefix [detail|<X:X::X:X|X:X::X:X/M> [<match|detail>]] [json]

  This command shows the prefixes present in the interface routing table. Interface name can also be given. JSON output can be obtained by appending 'json' to the end of command.

show ipv6 ospf6 [vrf <NAME|all>] spf tree [json]

  This commands shows the spf tree from the recent spf calculation with the calling router as the root. If json is appended in the end, we can get the tree in JSON format. Each area that the router belongs to has it's own JSON object, with each router having "cost", "isLeafNode" and "children" as arguments.

show ipv6 ospf6 graceful-restart helper [detail] [json]

  This command shows the graceful-restart helper details including helper configuration parameters.

### OSPFv3 Debugging

The following debug commands are supported:

debug ospf6 abr

  Toggle OSPFv3 ABR debugging messages.

debug ospf6 asbr

  Toggle OSPFv3 ASBR debugging messages.

debug ospf6 border-routers {router-id [A.B.C.D] | area-id [A.B.C.D]}

  Toggle OSPFv3 border router debugging messages. This can be specified for a router with specific Router-ID/Area-ID.

debug ospf6 flooding

  Toggle OSPFv3 flooding debugging messages.

debug ospf6 interface

  Toggle OSPFv3 interface related debugging messages.

debug ospf6 lsa

  Toggle OSPFv3 Link State Advertisements debugging messages.

debug ospf6 lsa aggregation

  Toggle OSPFv3 Link State Advertisements summarization debugging messages.

debug ospf6 message

  Toggle OSPFv3 message exchange debugging messages.

debug ospf6 neighbor

  Toggle OSPFv3 neighbor interaction debugging messages.

debug ospf6 nssa

  Toggle OSPFv3 Not So Stubby Area (NSSA) debugging messages.

debug ospf6 route

  Toggle OSPFv3 routes debugging messages.

debug ospf6 spf

  Toggle OSPFv3 Shortest Path calculation debugging messages.

debug ospf6 zebra

  Toggle OSPFv3 zebra interaction debugging messages.

debug ospf6 graceful-restart

  Toggle OSPFv3 graceful-restart helper debugging messages.

### Sample configuration

Example of ospf6d configured on one interface and area:

    interface eth0
     ipv6 ospf6 area 0.0.0.0
     ipv6 ospf6 instance-id 0
    !
    router ospf6
     ospf6 router-id 212.17.55.53
     area 0.0.0.0 range 2001:770:105:2::/64
    !

Larger example with policy and various options set:

    debug ospf6 neighbor state
    !
    interface fxp0
     ipv6 ospf6 area 0.0.0.0
     ipv6 ospf6 cost 1
     ipv6 ospf6 hello-interval 10
     ipv6 ospf6 dead-interval 40
     ipv6 ospf6 retransmit-interval 5
     ipv6 ospf6 priority 0
     ipv6 ospf6 transmit-delay 1
     ipv6 ospf6 instance-id 0
    !
    interface lo0
     ipv6 ospf6 cost 1
     ipv6 ospf6 hello-interval 10
     ipv6 ospf6 dead-interval 40
     ipv6 ospf6 retransmit-interval 5
     ipv6 ospf6 priority 1
     ipv6 ospf6 transmit-delay 1
     ipv6 ospf6 instance-id 0
    !
    router ospf6
     router-id 255.1.1.1
     redistribute static route-map static-ospf6
    !
    access-list access4 permit 127.0.0.1/32
    !
    ipv6 access-list access6 permit 3ffe:501::/32
    ipv6 access-list access6 permit 2001:200::/48
    ipv6 access-list access6 permit ::1/128
    !
    ipv6 prefix-list test-prefix seq 1000 deny any
    !
    route-map static-ospf6 permit 10
     match ipv6 address prefix-list test-prefix
     set metric-type type-2
     set metric 2000
    !
    line vty
     access-class access4
     ipv6 access-class access6
     exec-timeout 0 0
    !