mirror of
https://github.com/rtbrick/bngblaster.git
synced 2024-05-06 15:54:57 +00:00
624 lines
47 KiB
HTML
624 lines
47 KiB
HTML
<!DOCTYPE html>
|
||
<html class="writer-html5" lang="en" data-content_root="../">
|
||
<head>
|
||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>OSPF — BNG Blaster 0.8 documentation</title>
|
||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=19f00094" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/tabs.css?v=a5c4661c" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=411f5019" />
|
||
|
||
|
||
<!--[if lt IE 9]>
|
||
<script src="../_static/js/html5shiv.min.js"></script>
|
||
<![endif]-->
|
||
|
||
<script src="../_static/jquery.js?v=5d32c60e"></script>
|
||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||
<script src="../_static/documentation_options.js?v=a0e24af7"></script>
|
||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||
<script src="../_static/js/theme.js"></script>
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="next" title="MPLS" href="mpls.html" />
|
||
<link rel="prev" title="ISIS" href="isis.html" />
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav">
|
||
<div class="wy-grid-for-nav">
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search" >
|
||
|
||
|
||
|
||
<a href="../index.html" class="icon icon-home">
|
||
BNG Blaster
|
||
<img src="../_static/rtbrick_logo.png" class="logo" alt="Logo"/>
|
||
</a>
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||
<ul class="current">
|
||
<li class="toctree-l1"><a class="reference internal" href="../install.html">Installation</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">Quickstart Guide</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../interfaces.html">Interfaces</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../access/index.html">Access Protocols</a></li>
|
||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Routing Protocols</a><ul class="current">
|
||
<li class="toctree-l2"><a class="reference internal" href="isis.html">ISIS</a></li>
|
||
<li class="toctree-l2 current"><a class="current reference internal" href="#">OSPF</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="#configuration">Configuration</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#interfaces">Interfaces</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#neighbors">Neighbors</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#database">Database</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#flooding">Flooding</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#lsa-update-command">LSA Update Command</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#lsa-update-via-scapy">LSA Update via Scapy</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#mrt-files">MRT Files</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#lspgen">LSPGEN</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#ospfv3">OSPFv3</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="mpls.html">MPLS</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="bgp.html">BGP</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="ldp.html">LDP</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="lspgen.html">LSPGEN</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../streams.html">Traffic Streams</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../http.html">HTTP Emulation</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../nat.html">NAT / CGNAT</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../reports.html">Reports</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuration</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../api/index.html">API/CLI</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../controller.html">Controller</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../performance.html">Performance Guide</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../troubleshooting.html">Troubleshooting</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../faq.html">Frequently Asked Questions</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="../index.html">BNG Blaster</a>
|
||
</nav>
|
||
|
||
<div class="wy-nav-content">
|
||
<div class="rst-content">
|
||
<div role="navigation" aria-label="Page navigation">
|
||
<ul class="wy-breadcrumbs">
|
||
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||
<li class="breadcrumb-item"><a href="index.html">Routing Protocols</a></li>
|
||
<li class="breadcrumb-item active">OSPF</li>
|
||
<li class="wy-breadcrumbs-aside">
|
||
<a href="../_sources/routing/ospf.rst.txt" rel="nofollow"> View page source</a>
|
||
</li>
|
||
</ul>
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div itemprop="articleBody">
|
||
|
||
<section id="ospf">
|
||
<span id="id1"></span><h1>OSPF<a class="headerlink" href="#ospf" title="Link to this heading"></a></h1>
|
||
<p>OSPF (Open Shortest Path First) is a dynamic Interior Gateway Protocol (IGP)
|
||
widely used in large computer networks. It efficiently determines the best paths
|
||
for data transmission, adapting to network changes in real-time. OSPF’s link-state
|
||
algorithm builds a detailed network map, optimizing data delivery and
|
||
ensuring network stability.</p>
|
||
<p>There are two versions of OSPF: OSPFv2 and OSPFv3. OSPFv2 is used for IPv4 networks,
|
||
while OSPFv3 is designed specifically for IPv6 networks.</p>
|
||
<p>The BNG Blaster can emulate multiple OSPF instances of both versions, OSPFv2 and OSPFv3
|
||
(OSPFv3 is basically working but still under development).</p>
|
||
<p>An OSPF instance is a virtual OSPF node with one or more network interfaces attached. Such a
|
||
node behaves like a “real router” including database synchronization and flooding. Every
|
||
instance generates a <code class="docutils literal notranslate"><span class="pre">self</span></code> originated type 1 router LSA describing the node itself.</p>
|
||
<section id="configuration">
|
||
<h2>Configuration<a class="headerlink" href="#configuration" title="Link to this heading"></a></h2>
|
||
<p>Following an example OSPFv2 configuration with two instances
|
||
attached to two network interfaces.</p>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interfaces"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"network"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"eth1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.1.2/30"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"gateway"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.1.1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"ospfv2-instance-id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"ospfv2-type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"p2p"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"eth2"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.2.2/24"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"gateway"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.2.1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"ospfv2-instance-id"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"ospfv2-type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"broadcast"</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="nt">"ospf"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"instance-id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"router-id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.0.11"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"hostname"</span><span class="p">:</span><span class="w"> </span><span class="s2">"R1"</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"instance-id"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"router-id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.0.12"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"hostname"</span><span class="p">:</span><span class="w"> </span><span class="s2">"R2"</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"> </span><span class="nt">"ospf"</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span><span class="w"> </span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<table class="docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>Attribute</p></th>
|
||
<th class="head"><p>Description</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p><strong>instance-id</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF instance identifier.</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>version</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF version.</div>
|
||
<div class="line">Default: 2</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><strong>auth-key</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF authentication key.</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>auth-type</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF authentication type (simple or md5).</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><strong>hello-interval</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF hello interval in seconds.</div>
|
||
<div class="line">Default: 10 Range: 1 - 65535</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>dead-interval</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF dead interval in seconds.</div>
|
||
<div class="line">Default: 40 Range: 1 - 65535</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><strong>lsa-retry-interval</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF LSA retry interval in seconds.</div>
|
||
<div class="line">Default: 5 Range: 1 - 65535</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>hostname</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF hostname.</div>
|
||
<div class="line">Default: bngblaster</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><strong>router-id</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF router identifier.</div>
|
||
<div class="line">Default: 10.10.10.10</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>router-priority</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF router priority.</div>
|
||
<div class="line">Default: 64 Range: 0 - 255</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><strong>area</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF area.</div>
|
||
<div class="line">Default: 0.0.0.0</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>sr-base</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF SR base.</div>
|
||
<div class="line">Default: 0 Range: 0 - 1048575</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><strong>sr-range</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF SR range.</div>
|
||
<div class="line">Default: 0 Range: 0 - 1048575</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>sr-node-sid</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF SR node SID.</div>
|
||
<div class="line">Default: 0 Range: 0 - 1048575</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><strong>teardown-time</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF teardown time in seconds.</div>
|
||
<div class="line">Default: 5 Range: 0 - 65535</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>The support for multiple instances allows different use cases. One example might
|
||
be to create two instances connected to the device or network under test. Now
|
||
inject an LSA on one instance and check if learned over the tested network on
|
||
the other instance.</p>
|
||
<p>Every OSPF instance can be also connected to an emulated link state graph loaded
|
||
by MRT files as shown in the example below.</p>
|
||
<img alt="OSPF" src="../_images/bbl_ospf.png" />
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"ospf"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"instance-id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"router-id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.0.11"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"hostname"</span><span class="p">:</span><span class="w"> </span><span class="nt">"R1"</span>
|
||
<span class="w"> </span><span class="nt">"external"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"mrt-file"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ospf.mrt"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"connections"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"router-id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.10.0.1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"local-ipv4-address"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.0.1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"metric"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"> </span><span class="nt">"ospf"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"external"</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<table class="docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>Attribute</p></th>
|
||
<th class="head"><p>Description</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p><strong>purge</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">Automatically purge all external LSA during teardown.</div>
|
||
<div class="line">Default: true</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>mrt-file</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">OSPF MRT file.</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"> </span><span class="nt">"ospf"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"external"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"connections"</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<table class="docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>Attribute</p></th>
|
||
<th class="head"><p>Description</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p><strong>router-id</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">Mandatory remote router identifier.</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>metric</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">Optional interface metric.</div>
|
||
<div class="line">Default: 10 Range: 0 - 4294967295</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><strong>local-ipv4-address</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">Mandatory local IPv4 address (OSPFv2 only).</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p><strong>local-interface-id</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">Local interface identifier (OSPFv3 only).</div>
|
||
<div class="line">Default: 1 (2, 3, …)</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr class="row-even"><td><p><strong>neighbor-interface-id</strong></p></td>
|
||
<td><div class="line-block">
|
||
<div class="line">Remote interface identifier (OSPFv3 only).</div>
|
||
<div class="line">Default: <cite>local-interface-id</cite></div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</section>
|
||
<section id="interfaces">
|
||
<h2>Interfaces<a class="headerlink" href="#interfaces" title="Link to this heading"></a></h2>
|
||
<p>The BNG Blaster supports P2P and broadcast interfaces only.</p>
|
||
<p>The following command returns detailed informations about all
|
||
OSPF interfaces associated with the given OSPF instance (e.g. instance 1).</p>
|
||
<p><code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">sudo</span> <span class="pre">bngblaster-cli</span> <span class="pre">run.sock</span> <span class="pre">ospf-interfaces</span> <span class="pre">instance</span> <span class="pre">1</span></code></p>
|
||
</section>
|
||
<section id="neighbors">
|
||
<h2>Neighbors<a class="headerlink" href="#neighbors" title="Link to this heading"></a></h2>
|
||
<p>The following command returns detailed informations about all
|
||
OSPF neighbors associated with the given OSPF instance (e.g. instance 1).</p>
|
||
<p><code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">sudo</span> <span class="pre">bngblaster-cli</span> <span class="pre">run.sock</span> <span class="pre">ospf-neighbors</span> <span class="pre">instance</span> <span class="pre">1</span></code></p>
|
||
</section>
|
||
<section id="database">
|
||
<h2>Database<a class="headerlink" href="#database" title="Link to this heading"></a></h2>
|
||
<p>The BNG Blaster distinguishes between three different source types of
|
||
LSA entries in the OSPF database.</p>
|
||
<p>The type <code class="docutils literal notranslate"><span class="pre">self</span></code> is used for the self-originated LSA describing the own
|
||
BNG Blaster OSPF instance. LSP entries of type <code class="docutils literal notranslate"><span class="pre">adjacency</span></code> are learned
|
||
from OSPF neighbors. The type <code class="docutils literal notranslate"><span class="pre">external</span></code> is used for those LSA entries
|
||
learned via MRT files or injected via <code class="docutils literal notranslate"><span class="pre">ospf-lsa/pdu-update</span></code> <a class="reference internal" href="../api/index.html#api"><span class="std std-ref">command</span></a>.</p>
|
||
<p><code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">sudo</span> <span class="pre">bngblaster-cli</span> <span class="pre">run.sock</span> <span class="pre">ospf-database</span> <span class="pre">instance</span> <span class="pre">1</span></code></p>
|
||
<p>The BNG Blaster automatically purges all LSAs of type
|
||
<code class="docutils literal notranslate"><span class="pre">self</span></code> and <code class="docutils literal notranslate"><span class="pre">external</span></code> during teardown. This is done by
|
||
generating LSAs with newer sequence numbers and max age.</p>
|
||
</section>
|
||
<section id="flooding">
|
||
<h2>Flooding<a class="headerlink" href="#flooding" title="Link to this heading"></a></h2>
|
||
<p>The BNG Blaster floods LSAs received to all other active
|
||
neighbors of the OSPF instance except to those with neighbor
|
||
router-id equal to the source router-id of the LSA.</p>
|
||
</section>
|
||
<section id="lsa-update-command">
|
||
<h2>LSA Update Command<a class="headerlink" href="#lsa-update-command" title="Link to this heading"></a></h2>
|
||
<p>It is also possible to inject LSAs using the <code class="docutils literal notranslate"><span class="pre">ospf-lsa-update</span></code> <a class="reference internal" href="../api/index.html#api"><span class="std std-ref">command</span></a>.</p>
|
||
<p>This <a class="reference internal" href="../api/index.html#api"><span class="std std-ref">command</span></a> expects a list of hex encoded LSA including
|
||
the OSPF LSA common header (<code class="docutils literal notranslate"><span class="pre">|</span> <span class="pre">LS</span> <span class="pre">age</span> <span class="pre">|</span> <span class="pre">Options</span> <span class="pre">|</span> <span class="pre">LS</span> <span class="pre">type</span> <span class="pre">|</span></code>).</p>
|
||
<p><code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">cat</span> <span class="pre">command.json</span> <span class="pre">|</span> <span class="pre">jq</span> <span class="pre">.</span></code></p>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"command"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ospf-lsa-update"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"arguments"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"instance"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"lsa"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="s2">"000100050ac801000aff010180000001e7790024ffffff00000000140000000000000000"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="s2">"000100050ac802000aff010180000001dc830024ffffff00000000140000000000000000"</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The command <code class="docutils literal notranslate"><span class="pre">ospf-pdu-update</span></code> work similar to <code class="docutils literal notranslate"><span class="pre">ospf-lsa-update</span></code> expecting OSPF LS update
|
||
request PDU including OSPF common header (<code class="docutils literal notranslate"><span class="pre">|</span> <span class="pre">Version</span> <span class="pre">|</span> <span class="pre">Type</span> <span class="pre">|</span></code>).</p>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"command"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ospf-pdu-update"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"arguments"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"instance"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"pdu"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="s2">"020400400101010100000000456e0000000000000000000000000001000100050ac80c000aff01018000012d13160024ffffff00000000140000000000000000"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="s2">"0204004001010101000000003b780000000000000000000000000001000100050ac80b000aff01018000012d1e0c0024ffffff00000000140000000000000000"</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="lsa-update-via-scapy">
|
||
<h2>LSA Update via Scapy<a class="headerlink" href="#lsa-update-via-scapy" title="Link to this heading"></a></h2>
|
||
<p>The following example shows how to generate LSAs via Scapy
|
||
and inject them using the ospf-lsa-update <a class="reference internal" href="../api/index.html#api"><span class="std std-ref">command</span></a>.</p>
|
||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||
<span class="kn">import</span> <span class="nn">socket</span>
|
||
<span class="kn">import</span> <span class="nn">os</span>
|
||
<span class="kn">import</span> <span class="nn">json</span>
|
||
|
||
<span class="kn">from</span> <span class="nn">scapy.contrib.ospf</span> <span class="kn">import</span> <span class="o">*</span>
|
||
|
||
<span class="k">def</span> <span class="nf">error</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
<span class="w"> </span><span class="sd">"""print error and exit"""</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">execute_command</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">socket_path</span><span class="p">):</span>
|
||
<span class="n">client</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_UNIX</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_STREAM</span><span class="p">)</span>
|
||
<span class="k">try</span><span class="p">:</span>
|
||
<span class="n">client</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">socket_path</span><span class="p">)</span>
|
||
<span class="n">client</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">request</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">))</span>
|
||
<span class="n">data</span> <span class="o">=</span> <span class="s2">""</span>
|
||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||
<span class="n">junk</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span>
|
||
<span class="k">if</span> <span class="n">junk</span><span class="p">:</span>
|
||
<span class="n">data</span> <span class="o">+=</span> <span class="n">junk</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="k">break</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||
<span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||
<span class="k">finally</span><span class="p">:</span>
|
||
<span class="n">client</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="n">error</span><span class="p">(</span><span class="s2">"socket </span><span class="si">%s</span><span class="s2"> not found"</span> <span class="o">%</span> <span class="n">socket_path</span><span class="p">)</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
|
||
<span class="w"> </span><span class="sd">"""main function"""</span>
|
||
<span class="n">socket_path</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||
|
||
<span class="n">command</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="s2">"command"</span><span class="p">:</span> <span class="s2">"ospf-lsa-update"</span><span class="p">,</span>
|
||
<span class="s2">"arguments"</span><span class="p">:</span> <span class="p">{</span>
|
||
<span class="s2">"instance"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||
<span class="s2">"lsa"</span><span class="p">:</span> <span class="p">[]</span>
|
||
<span class="p">}</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="n">lsa</span> <span class="o">=</span> <span class="n">OSPF_External_LSA</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="s2">"10.200.1.0"</span><span class="p">,</span> <span class="n">adrouter</span><span class="o">=</span><span class="s2">"10.255.1.1"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="s2">"255.255.255.0"</span><span class="p">,</span> <span class="n">seq</span><span class="o">=</span><span class="mi">2147483649</span><span class="p">)</span>
|
||
<span class="n">command</span><span class="p">[</span><span class="s2">"arguments"</span><span class="p">][</span><span class="s2">"lsa"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lsa</span><span class="o">.</span><span class="n">build</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span><span class="p">())</span>
|
||
|
||
<span class="n">lsa</span> <span class="o">=</span> <span class="n">OSPF_External_LSA</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="s2">"10.200.2.0"</span><span class="p">,</span> <span class="n">adrouter</span><span class="o">=</span><span class="s2">"10.255.1.1"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="s2">"255.255.255.0"</span><span class="p">,</span> <span class="n">seq</span><span class="o">=</span><span class="mi">2147483649</span><span class="p">)</span>
|
||
<span class="n">command</span><span class="p">[</span><span class="s2">"arguments"</span><span class="p">][</span><span class="s2">"lsa"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lsa</span><span class="o">.</span><span class="n">build</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span><span class="p">())</span>
|
||
|
||
<span class="n">execute_command</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">command</span><span class="p">)</span>
|
||
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
|
||
<span class="n">main</span><span class="p">()</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="mrt-files">
|
||
<h2>MRT Files<a class="headerlink" href="#mrt-files" title="Link to this heading"></a></h2>
|
||
<p>The BNG Blaster can load LSA updates from a MRT file as defined in
|
||
<a class="reference external" href="https://datatracker.ietf.org/doc/html/rfc6396">RFC6396</a>.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>0 1 2 3
|
||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Timestamp |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Type | Subtype |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Length |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Message... (variable)
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
</pre></div>
|
||
</div>
|
||
<p>The message field contains the complete OSPF LS Update PDU including
|
||
the OSPF common header starting with version field.</p>
|
||
<p>Those files can be loaded at startup via the configuration option
|
||
<code class="docutils literal notranslate"><span class="pre">"ospf":</span> <span class="pre">{</span> <span class="pre">"external":</span> <span class="pre">{</span> <span class="pre">"mrt-file":</span> <span class="pre">"<file>"</span> <span class="pre">}</span> <span class="pre">}</span></code> or alternative
|
||
via <code class="docutils literal notranslate"><span class="pre">ospf-load-mrt</span></code> <a class="reference internal" href="../api/index.html#api"><span class="std std-ref">command</span></a>.</p>
|
||
<p><code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">sudo</span> <span class="pre">bngblaster-cli</span> <span class="pre">run.sock</span> <span class="pre">ospf-load-mrt</span> <span class="pre">file</span> <span class="pre">ospf.mrt</span> <span class="pre">instance</span> <span class="pre">1</span></code></p>
|
||
<p>The following example shows how to generate such MRT file via Scapy.</p>
|
||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">struct</span>
|
||
<span class="kn">from</span> <span class="nn">scapy.contrib.ospf</span> <span class="kn">import</span> <span class="o">*</span>
|
||
|
||
<span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
|
||
<span class="w"> </span><span class="sd">"""main function"""</span>
|
||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"ospf.mrt"</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
|
||
<span class="n">lsa</span> <span class="o">=</span> <span class="n">OSPF_External_LSA</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="s2">"10.222.</span><span class="si">%s</span><span class="s2">.0"</span> <span class="o">%</span> <span class="n">i</span><span class="p">,</span> <span class="n">adrouter</span><span class="o">=</span><span class="s2">"10.255.1.1"</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="s2">"255.255.255.0"</span><span class="p">,</span> <span class="n">seq</span><span class="o">=</span><span class="mi">2147483949</span><span class="p">)</span>
|
||
<span class="n">ospf</span> <span class="o">=</span> <span class="n">OSPF_Hdr</span><span class="p">()</span><span class="o">/</span><span class="n">OSPF_LSUpd</span><span class="p">(</span><span class="n">lsacount</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="n">lsa</span>
|
||
<span class="n">pdu</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"!II"</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">ospf</span><span class="o">.</span><span class="n">build</span><span class="p">()</span>
|
||
<span class="n">mrt</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"!IHHI"</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">pdu</span><span class="p">))</span> <span class="o">+</span> <span class="n">pdu</span>
|
||
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">mrt</span><span class="p">)</span>
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
|
||
<span class="n">main</span><span class="p">()</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="lspgen">
|
||
<h2>LSPGEN<a class="headerlink" href="#lspgen" title="Link to this heading"></a></h2>
|
||
<p>The BNG Blaster includes a tool called <a class="reference internal" href="lspgen.html#lspgen"><span class="std std-ref">lspgen</span></a>, which is able to generate
|
||
topologies and link state packets for export as MRT and PCAP files. This tool
|
||
is also able to inject LSAs directly using the <code class="docutils literal notranslate"><span class="pre">ospf-pdu-update</span></code>
|
||
<a class="reference internal" href="../api/index.html#api"><span class="std std-ref">command</span></a>.</p>
|
||
</section>
|
||
<section id="ospfv3">
|
||
<h2>OSPFv3<a class="headerlink" href="#ospfv3" title="Link to this heading"></a></h2>
|
||
<p>The BNG Blaster also provides support for OSPFv3, although it should be noted that
|
||
its support, compared to OSPFv2, is still considered experimental.</p>
|
||
<p>Conceptually, OSPFv2 and OSPFv3 function the same way in the BNG Blaster, and the
|
||
basic configuration differs only in the version number. The control commands are
|
||
also identical.</p>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interfaces"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"network"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"eth1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"address-ipv6"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fc66:1337:60::2/64"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"gateway-ipv6"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fc66:1337:60::1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"ospfv3-instance-id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"ospfv3-type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"p2p"</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="nt">"ospf"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"instance-id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"router-id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.0.0.16"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"hostname"</span><span class="p">:</span><span class="w"> </span><span class="s2">"R6"</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||
<a href="isis.html" class="btn btn-neutral float-left" title="ISIS" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||
<a href="mpls.html" class="btn btn-neutral float-right" title="MPLS" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>© Copyright 2020-2024, RtBrick, Inc..</p>
|
||
</div>
|
||
|
||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
|
||
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<script>
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(true);
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html> |