<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Bmp on Soap &amp; Bits</title><link>https://soapandbits.net/tags/bmp/</link><description>Recent content in Bmp on Soap &amp; Bits</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 06 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://soapandbits.net/tags/bmp/index.xml" rel="self" type="application/rss+xml"/><item><title>Arista 7280SR3K Internet Edge Border Router: Design and Configuration Reference</title><link>https://soapandbits.net/posts/2026-07-09-arista-border/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid>https://soapandbits.net/posts/2026-07-09-arista-border/</guid><description>Complete design and configuration guide for an Arista DCS-7280SR3K internet edge border router: TCAM allocation, hardware counters, QoS, MPLS/LDP, BGP scale and convergence, RCF policy, BMP telemetry, and operational optimizations for Jericho2C-based platforms.</description><content:encoded><![CDATA[<p>This document covers the design and configuration of an Arista DCS-7280SR3K series border router at an internet edge. It addresses hardware platform constraints (TCAM allocation, counter feature groups), QoS policy design, MPLS/LDP configuration, and all BGP-layer concerns: session parameters, bestpath policy, peer groups, routing control functions (RCF), convergence optimizations, and BMP telemetry. The platform uses a Jericho2C ASIC and runs EOS with the <code>service routing protocols model multi-agent</code> prerequisite — required for internet-scale BGP.</p>
<p><strong>Platform:</strong> DCS-7280SR3K series (Jericho2C ASIC)
<strong>Role:</strong> Internet Border / Transit / Peering</p>
<hr>
<h2 id="cli-prompt-with-timestamp">CLI Prompt with Timestamp</h2>
<p>EOS prompt includes hostname and real-time timestamp for CLI session auditing.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">prompt %H_%D{%y.%m.%d-%H:%M:%S}%P
</span></span></code></pre></div><table>
	<thead>
			<tr>
					<th>Token</th>
					<th>Expands to</th>
					<th>Example</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>%H</code></td>
					<td>Hostname</td>
					<td><code>&lt;hostname&gt;</code></td>
			</tr>
			<tr>
					<td><code>%D{...}</code></td>
					<td>strftime date/time</td>
					<td><code>25.07.03-14:23:01</code></td>
			</tr>
			<tr>
					<td><code>%P</code></td>
					<td>Privilege indicator</td>
					<td><code>#</code></td>
			</tr>
	</tbody>
</table>
<p>Result: <code>&lt;hostname&gt;_25.07.03-14:23:01#</code></p>
<hr>
<h2 id="hardware-tcam-allocation">Hardware TCAM Allocation</h2>
<blockquote>
<p><strong>⚠️ Consult Arista SE before modifying TCAM profiles.</strong> Total key budget is fixed per ASIC. Misconfiguration causes silent TCAM overflow. Verify with <code>show hardware capacity</code> after any profile change.</p>
</blockquote>
<p>Two profiles defined: <code>BR-BLUE</code> and <code>BR-RED</code>. Active system profile is <strong>BR-RED</strong>.</p>
<blockquote>
<p><strong>Rationale for keeping two profiles:</strong> Both profiles remain defined on the device to enable fast rollback. If the active profile (RED) causes unexpected TCAM behavior after a reboot, the operator can switch back to the previous profile (BLUE) with a single <code>system profile</code> change and reboot — no config reconstruction required. Only the <code>system profile</code> line needs to change; the profile definitions themselves stay intact.</p>
</blockquote>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">hardware tcam
</span></span><span class="line"><span class="cl">   profile BR-RED
</span></span><span class="line"><span class="cl">      feature evpn mpls irb
</span></span><span class="line"><span class="cl">         key size limit 160
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature evpn mpls multi-homing
</span></span><span class="line"><span class="cl">         key size limit 160
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature l2-protocol forwarding
</span></span><span class="line"><span class="cl">         sequence 95
</span></span><span class="line"><span class="cl">         key size limit 160
</span></span><span class="line"><span class="cl">         key field dst-mac vlan-tag-format
</span></span><span class="line"><span class="cl">         action redirect-to-cpu snoop
</span></span><span class="line"><span class="cl">         packet ipv4 forwarding bridged
</span></span><span class="line"><span class="cl">         packet ipv6 forwarding bridged
</span></span><span class="line"><span class="cl">         packet non-ip forwarding bridged
</span></span><span class="line"><span class="cl">         packet non-ip forwarding bridged sub-interface
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature mpls
</span></span><span class="line"><span class="cl">         sequence 5
</span></span><span class="line"><span class="cl">         key size limit 160
</span></span><span class="line"><span class="cl">         action drop redirect set-ecn
</span></span><span class="line"><span class="cl">         packet ipv4 mpls ipv4 forwarding mpls decap
</span></span><span class="line"><span class="cl">         packet ipv4 mpls ipv6 forwarding mpls decap
</span></span><span class="line"><span class="cl">         packet mpls ipv4 forwarding mpls
</span></span><span class="line"><span class="cl">         packet mpls ipv6 forwarding mpls
</span></span><span class="line"><span class="cl">         packet mpls non-ip forwarding mpls
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature mpls pop ingress
</span></span><span class="line"><span class="cl">         sequence 90
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature sflow subintf
</span></span><span class="line"><span class="cl">         action sample
</span></span><span class="line"><span class="cl">         packet ipv4 forwarding bridged
</span></span><span class="line"><span class="cl">         packet ipv4 forwarding routed
</span></span><span class="line"><span class="cl">         packet ipv6 forwarding bridged
</span></span><span class="line"><span class="cl">         packet ipv6 forwarding routed
</span></span><span class="line"><span class="cl">         packet mpls forwarding bridged decap
</span></span><span class="line"><span class="cl">         packet non-ip forwarding bridged
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature traffic-policy cpu ipv4
</span></span><span class="line"><span class="cl">         key size limit 160
</span></span><span class="line"><span class="cl">         key field dst-ip ip-frag ip-protocol l4-dst-port l4-src-port src-ip tcp-control ttl
</span></span><span class="line"><span class="cl">         action count set-drop-precedence set-policer
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature traffic-policy cpu ipv6
</span></span><span class="line"><span class="cl">         key field dst-ipv6 ipv6-next-header l4-dst-port l4-src-port src-ipv6-high src-ipv6-low tcp-control ttl
</span></span><span class="line"><span class="cl">         action count set-drop-precedence set-policer
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature traffic-policy port ipv4
</span></span><span class="line"><span class="cl">         sequence 45
</span></span><span class="line"><span class="cl">         key field dscp dst-ip-label ip-frag ip-fragment-offset ip-length ip-protocol l4-dst-port-label l4-src-port-label src-ip-label tcp-control ttl
</span></span><span class="line"><span class="cl">         action count drop redirect set-drop-precedence set-dscp set-tc set-unshared-policer
</span></span><span class="line"><span class="cl">         packet ipv4 forwarding routed
</span></span><span class="line"><span class="cl">         packet mpls ipv4 forwarding bridged
</span></span><span class="line"><span class="cl">         packet mpls ipv4 forwarding mpls
</span></span><span class="line"><span class="cl">         packet mpls ipv4 forwarding routed decap
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature traffic-policy port ipv6
</span></span><span class="line"><span class="cl">         sequence 55
</span></span><span class="line"><span class="cl">         key field dst-ipv6-label hop-limit icmp-type-code ipv6-length ipv6-next-header ipv6-traffic-class l4-dst-port-label l4-src-port-label src-ipv6-label tcp-control
</span></span><span class="line"><span class="cl">         action count drop redirect set-drop-precedence set-dscp set-tc set-unshared-policer
</span></span><span class="line"><span class="cl">         packet ipv6 forwarding routed
</span></span><span class="line"><span class="cl">         packet mpls ipv6 forwarding bridged
</span></span><span class="line"><span class="cl">         packet mpls ipv6 forwarding mpls
</span></span><span class="line"><span class="cl">         packet mpls ipv6 forwarding routed decap
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature traffic-policy port ipv4 egress
</span></span><span class="line"><span class="cl">         key size limit 160
</span></span><span class="line"><span class="cl">         key field dscp dst-ip-label ip-frag ip-protocol l4-dst-port-label l4-src-port-label src-ip-label tcp-control
</span></span><span class="line"><span class="cl">         action count drop set-dscp
</span></span><span class="line"><span class="cl">         packet ipv4 forwarding routed
</span></span><span class="line"><span class="cl">      !
</span></span><span class="line"><span class="cl">      feature traffic-policy port ipv6 egress
</span></span><span class="line"><span class="cl">         key field dst-ipv6-label ipv6-next-header l4-dst-port-label l4-src-port-label src-ipv6-label tcp-control
</span></span><span class="line"><span class="cl">         action count drop set-dscp
</span></span><span class="line"><span class="cl">         packet ipv6 forwarding routed
</span></span><span class="line"><span class="cl">   system profile BR-RED
</span></span></code></pre></div><p>Verification</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">show hardware tcam profile
</span></span><span class="line"><span class="cl">show hardware tcam profile detail
</span></span><span class="line"><span class="cl">show hardware capacity
</span></span></code></pre></div><hr>
<h2 id="hardware-counter-features">Hardware Counter Features</h2>
<p>Hardware counters consume entries from a shared pool. Some features are mutually exclusive.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">hardware counter feature traffic-policy cpu
</span></span><span class="line"><span class="cl">hardware counter feature traffic-policy out
</span></span><span class="line"><span class="cl">hardware counter feature traffic-policy in
</span></span><span class="line"><span class="cl">hardware counter feature ip in
</span></span><span class="line"><span class="cl">hardware counter feature subinterface out
</span></span><span class="line"><span class="cl">hardware counter feature subinterface in
</span></span></code></pre></div><h3 id="mutual-exclusivity">Mutual exclusivity</h3>
<blockquote>
<p><strong>⚠️ Verify against the Arista TOI for your exact EOS version.</strong> Counter bank conflicts and supported combinations change between releases.</p>
</blockquote>
<h3 id="checking-active-counters">Checking active counters</h3>
<p>Use <code>show hardware counter feature</code> to verify which counter banks are active and which ASIC engine slots they occupy. All configured features must show <code>up</code>; any <code>down</code> or absent entry means the bank failed to allocate (resource conflict or reboot required).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">show hardware counter feature 
</span></span><span class="line"><span class="cl">Feature                   Direction        Counter Resource (Engine)        Status        Detail                                              
</span></span><span class="line"><span class="cl">------------------------- ---------------- -------------------------------- ------------- ----------------------------------------------------
</span></span><span class="line"><span class="cl">ACL-IPv4                  out              Jericho2C: 18                    up                                                                
</span></span><span class="line"><span class="cl">ACL                       in               Jericho2C: 8, 19                 up                                                                
</span></span><span class="line"><span class="cl">Traffic policy CPU        n/a              Jericho2C: 10, 23                up                                                                
</span></span><span class="line"><span class="cl">Traffic policy            out              Jericho2C: 24                    up                                                                
</span></span><span class="line"><span class="cl">Traffic policy            in               Jericho2C: 9, 20                 up                                                                
</span></span><span class="line"><span class="cl">IPv4, IPv6                in               Jericho2C: 0                     up                                                                
</span></span><span class="line"><span class="cl">QoS policer               in               Jericho2C: 21, 22                up            Configured with QoS policy-map class police action. 
</span></span><span class="line"><span class="cl">Queue                     out              Jericho2C: 16                    up            Not user-configurable.                              
</span></span><span class="line"><span class="cl">Subinterface              out              Jericho2C: 1                     up                                                                
</span></span><span class="line"><span class="cl">Subinterface              in               Jericho2C: 2                     up                                                                
</span></span><span class="line"><span class="cl">VOQ                       in               Jericho2C: 17                    up            Not user-configurable.
</span></span></code></pre></div><p>Additional verification:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">show traffic-policy counters interface &lt;intf&gt;
</span></span></code></pre></div><p>Enabling a counter feature may require reboot. A feature listed as &ldquo;not active&rdquo; after reboot indicates a resource conflict.</p>
<h3 id="counter-poll-interval">Counter poll interval</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">traffic-policies
</span></span><span class="line"><span class="cl">   counter interface poll interval 15 seconds
</span></span></code></pre></div><hr>
<h2 id="load-interval">Load-interval</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="nb">load</span><span class="o">-</span><span class="n">interval</span> <span class="n">default</span> <span class="mi">5</span>
</span></span></code></pre></div><p>Sets interface rate averaging window to 5 seconds (default is 300s). Provides near-real-time rates for <code>show interfaces</code>, and SNMP ifInOctets rate calculation.</p>
<hr>
<h2 id="platform-sand--voq">Platform Sand / VoQ</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">platform sand mdb profile l3-xxl
</span></span><span class="line"><span class="cl">platform sand voq subinterface allocation 4096
</span></span><span class="line"><span class="cl">platform sand qos rewrite dscp mpls encapsulation hierarchical next-hop disabled
</span></span></code></pre></div><p>Also required:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">service routing protocols model multi-agent
</span></span></code></pre></div><p><code>service routing protocols model multi-agent</code> is a prerequisite for all internet-edge BGP functionality described in this document. The single-agent BGP model lacks the control-plane scale needed for a full routing table and cannot run multi-protocol BGP at the required rate. Once enabled, this setting survives configuration rollback — it can only be reverted by reboot. <strong>Requires reboot; plan alongside the MDB profile change.</strong></p>
<h3 id="mdb-profiles">MDB profiles</h3>
<p>Source: Arista DCS-7280R3K Series datasheet. All values for <strong>7280R3K Series</strong> only (not 7280R3). Active profile highlighted.</p>
<table>
	<thead>
			<tr>
					<th>Profile</th>
					<th>ARP</th>
					<th>MAC</th>
					<th>IPv4 Unicast</th>
					<th>+FlexRoute</th>
					<th>IPv6 Unicast</th>
					<th>Multicast</th>
					<th>TP ACL IPv4</th>
					<th>TP ACL IPv6</th>
					<th>ECMP</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>l3</code></td>
					<td>112k</td>
					<td>256k</td>
					<td>2250k</td>
					<td>+2048k</td>
					<td>683–750k</td>
					<td>128k</td>
					<td>561k</td>
					<td>187k</td>
					<td>512-way</td>
			</tr>
			<tr>
					<td><code>l3-xl</code></td>
					<td>112k</td>
					<td>192k</td>
					<td>2850k</td>
					<td>+1536k</td>
					<td>833–950k</td>
					<td>96k</td>
					<td>561k</td>
					<td>187k</td>
					<td>512-way</td>
			</tr>
			<tr>
					<td><strong><code>l3-xxl</code></strong> ← MLAG</td>
					<td><strong>112k</strong></td>
					<td><strong>192k</strong></td>
					<td><strong>2850k</strong></td>
					<td><strong>+1536k</strong></td>
					<td><strong>833–950k</strong></td>
					<td><strong>96k</strong></td>
					<td><strong>374k</strong></td>
					<td><strong>125k</strong></td>
					<td><strong>512-way</strong></td>
			</tr>
			<tr>
					<td><code>l3-xxxl</code> (no MLAG)</td>
					<td>80k</td>
					<td>384k</td>
					<td>3950k</td>
					<td>+3072k</td>
					<td>1100–1317k</td>
					<td>192k</td>
					<td>30k</td>
					<td>10k</td>
					<td>512-way</td>
			</tr>
			<tr>
					<td><code>balanced-xl</code></td>
					<td>96k</td>
					<td>256k</td>
					<td>1850k</td>
					<td>+2048k</td>
					<td>567–617k</td>
					<td>128k</td>
					<td>561k</td>
					<td>187k</td>
					<td>512-way</td>
			</tr>
			<tr>
					<td><code>l3-host-xl</code></td>
					<td>192k</td>
					<td>256k</td>
					<td>1650k</td>
					<td>+2048k</td>
					<td>500–550k</td>
					<td>128k</td>
					<td>561k</td>
					<td>187k</td>
					<td>512-way</td>
			</tr>
	</tbody>
</table>
<blockquote>
<p><strong>⚠️</strong> <code>l3-xxl</code> vs <code>l3-xl</code>: same IPv4/IPv6 scale but <strong>Traffic Policy ACL capacity is reduced</strong> — 374k IPv4 prefixes (vs 561k) and 125k IPv6 (vs 187k). This is the trade-off for the additional unicast route capacity over <code>l3</code>. Verify that the deployed traffic-policy field-sets stay within these limits.</p>
</blockquote>
<blockquote>
<p><strong>⚠️</strong> Profile change requires reboot. Changing profile also resets TCAM resource allocation — all TCAM profiles must be re-verified after a profile change.</p>
</blockquote>
<h3 id="voq-subinterface-allocation">VoQ subinterface allocation</h3>
<p><code>voq subinterface allocation 4096</code> — reserves VoQ entries for subinterfaces. Changes require reboot. Must be set before subinterfaces are created.</p>
<h3 id="dscp-rewrite-at-mpls-encap">DSCP rewrite at MPLS encap</h3>
<p><code>platform sand qos rewrite dscp mpls encapsulation hierarchical next-hop disabled</code> — prevents MPLS push from overwriting DSCP already set by ingress traffic-policy. Required when DSCP pipe mode is used through MPLS tunnels.</p>
<hr>
<h2 id="qos-subinterface">QoS Subinterface</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">qos subinterface tx-queue count 8
</span></span><span class="line"><span class="cl">qos subinterface scheduling parent round-robin
</span></span></code></pre></div><p>8 egress queues per subinterface. Round-robin parent scheduling ensures fairness between customer subinterfaces on a shared physical port. <code>tx-queue count 8</code> must match the number of queues defined in the QoS profile applied to that subinterface.</p>
<hr>
<h2 id="queue-monitor">Queue Monitor</h2>
<p>Queue monitor is <strong>enabled in production</strong> for tracking queue depth and detecting microbursts.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">queue-monitor length
</span></span><span class="line"><span class="cl">queue-monitor length log 10
</span></span></code></pre></div><p><code>queue-monitor length log 10</code> — log queue depth events when threshold exceeded, with 10-second hysteresis.</p>
<hr>
<h2 id="qos-profiles">QoS Profiles</h2>
<p>Profiles define per-interface egress scheduling. Applied via <code>service-profile &lt;name&gt;</code> on the interface.</p>
<p><strong>Trust model:</strong></p>
<ul>
<li><code>qos trust dscp</code> — honour incoming DSCP (CORE/INFRA links)</li>
<li><code>no qos trust</code> — ignore DSCP; traffic-policy sets TC at ingress (customer/transit ports)</li>
</ul>
<h3 id="queue-allocation">Queue allocation</h3>
<table>
	<thead>
			<tr>
					<th>TC / Queue</th>
					<th>DSCP</th>
					<th>Traffic type</th>
					<th>Queue type</th>
					<th>CORE</th>
					<th>CUST/TRANSIT</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>TC7 / Q7</td>
					<td>56 (CS7)</td>
					<td>Network control (BGP/BFD)</td>
					<td>Strict priority (reserved)</td>
					<td>strict priority</td>
					<td>strict priority</td>
			</tr>
			<tr>
					<td>TC6 / Q6</td>
					<td>48 (CS6)</td>
					<td>Network control</td>
					<td>Strict priority (shaped)</td>
					<td>shape 10%</td>
					<td>shape 10%</td>
			</tr>
			<tr>
					<td>TC5 / Q5</td>
					<td>46/40 (EF)</td>
					<td>Voice / real-time</td>
					<td>Strict priority (shaped)</td>
					<td>shape 50%</td>
					<td>—</td>
			</tr>
			<tr>
					<td>TC4 / Q4</td>
					<td>26 (AF31)</td>
					<td>Business / priority data</td>
					<td>Round-robin (<code>no priority</code>)</td>
					<td>30%</td>
					<td>30%</td>
			</tr>
			<tr>
					<td>TC3 / Q3</td>
					<td>16 (AF21)</td>
					<td>InetPlus / B2C, B2B clients</td>
					<td>Round-robin (<code>no priority</code>)</td>
					<td>30%</td>
					<td>30%</td>
			</tr>
			<tr>
					<td>TC2 / Q2</td>
					<td>45 (NQB)</td>
					<td>Non-queuing / VoIP signalling</td>
					<td>Round-robin (<code>no priority</code>)</td>
					<td>19%</td>
					<td>19%</td>
			</tr>
			<tr>
					<td>TC1 / Q1</td>
					<td>0 (BE)</td>
					<td>Best-effort internet (transit)</td>
					<td>Round-robin (<code>no priority</code>)</td>
					<td>20%</td>
					<td>20%</td>
			</tr>
			<tr>
					<td>TC0 / Q0</td>
					<td>8 (CS1)</td>
					<td>Scavenger / bulk</td>
					<td>Round-robin (<code>no priority</code>)</td>
					<td>1%</td>
					<td>1%</td>
			</tr>
	</tbody>
</table>
<p><strong>Queue type</strong> = the scheduler class for that tx-queue. On Sand/Jericho there are only two: <strong>strict priority (SP)</strong> and <strong>round-robin (RR)</strong>. By default <em>all</em> queues are SP. Setting <code>no priority</code> on a queue demotes it — and every lower-numbered queue — to RR (see the boundary rule below). Here <code>no priority</code> on Q0–Q4 makes them the RR block, leaving Q5–Q7 as the SP block. See the limitations below for why the SP queues are shaped.</p>
<h3 id="queue-scheduling-model-and-limitations">Queue scheduling model and limitations</h3>
<p>Sand/Jericho QoS is more constrained than the per-queue table suggests. The relevant limits:</p>
<ul>
<li>
<p><strong>8 fixed queues (Q0–Q7), 1:1 with traffic class.</strong> TC<em>n</em> always maps to Q<em>n</em>; the queue index cannot be remapped. Only the DSCP→TC mapping is configurable (via <code>qos map</code>, see previous section) — there is no way to add queues or change the TC-to-queue binding.</p>
</li>
<li>
<p><strong>Q7 is reserved for the control plane.</strong> It is hard-wired to TC7 (the TC7↔Q7 mapping is not editable) and always runs strict priority. BGP/BFD self-generated traffic is marked CS7 (see SGT QoS) precisely so it lands here. Historically Q7 was entirely non-configurable; <strong>as of EOS 4.33.0F (&ldquo;Configurable Transmit Queue 7&rdquo;) a limited set of Q7 knobs is exposed on Sand — <code>shape rate</code> and <code>latency maximum</code> (max-latency tail-drop threshold) only.</strong> Q7 stays strict priority; there is no bandwidth/priority control. Two limitations matter for this design:</p>
<ul>
<li><strong>Front-panel ports and LAGs only — <em>not</em> sub-interfaces.</strong> The customer/transit sub-interfaces on this router cannot carry Q7 config; only the physical port / port-channel can.</li>
<li><strong>Only on 8-Qpair interfaces.</strong> Verify with <code>show platform fap mapping interface ethernet &lt;X&gt;</code> — the <code>BaseQPair</code>/QPairs value must be <code>8</code>.</li>
</ul>
<p>Config is via <code>tx-queue 7</code> under the interface (or a <code>qos profile</code> attached with <code>service-profile</code>); remove with <code>no tx-queue 7</code> / <code>default tx-queue 7</code>. Platform-supported: 7500R/R2/R3, 7280R/R2/R3 (incl. this 7280SR3K), 7800R3.</p>
</li>
<li>
<p><strong>Only two scheduler classes exist: strict priority and round-robin.</strong> There are no intermediate priority tiers — a queue is either ahead of every RR queue, or in the RR group. All SP queues are serviced before <em>any</em> RR queue.</p>
</li>
<li>
<p><strong>The SP/RR boundary is monotonic by queue number — SP must be the top contiguous block.</strong> All queues are SP by default. The moment you set any queue to <code>no priority</code>, <em>every lower-numbered queue is forced to RR as well</em>, regardless of its own configuration. You cannot have an SP queue sitting below an RR queue. In practice this means RR is always the bottom block <code>[Q0..Qk]</code> and SP the top block <code>[Qk+1..Q7]</code>; the design&rsquo;s split (RR Q0–Q4, SP Q5–Q7) is the only legal shape for that boundary. Trying to configure, say, Q3 as SP while Q4 is RR silently yields Q3 running RR.</p>
</li>
<li>
<p><strong>SP queues can starve RR queues, so they must be shaped.</strong> Because SP service is exhaustive, an unbounded EF (Q5) or management (Q6) queue could consume the whole port and starve data. That is why Q5 is <code>shape rate 50 percent</code> and Q6 <code>shape rate 10 percent</code> — a hard ceiling bounding the SP queues so headroom is left for the RR group. Q7 is left unshaped because control-plane volume is low and must never be dropped.</p>
</li>
<li>
<p><strong><code>bandwidth percent</code> is an RR-only weight; SP queues cannot use it.</strong> SP queues take whatever they need up to their shaper; only RR queues honour <code>bandwidth percent</code>. This is why the CORE/CUST columns show a shape value for Q5–Q6 but a bandwidth percentage for Q0–Q4.</p>
</li>
<li>
<p><strong>RR bandwidth is a guaranteed minimum, normalised to ≤100%.</strong> The RR shares here sum to exactly 100% (1+20+19+30+30). If the configured sum exceeds 100%, EOS normalises each queue&rsquo;s operational share to <code>configured ÷ cumulative</code>. Below 100%, an RR queue may burst into unused capacity unless separately capped with <code>shape rate</code>.</p>
</li>
<li>
<p><strong>Subinterface QoS is a two-level hierarchy.</strong> The parent scheduler round-robins between subinterfaces (<code>qos subinterface scheduling parent round-robin</code>); the 8 tx-queues are the child schedulers within each subinterface. <code>qos subinterface tx-queue count 8</code> must match the queue count in the applied profile (see QoS Subinterface).</p>
</li>
<li>
<p><strong>Egress queue depth is observed via VOQ, not a directly configurable buffer.</strong> Sand is a VOQ (ingress-buffered) architecture; the <code>VOQ</code> counter is not user-configurable. Use <code>queue-monitor length</code> (see Queue Monitor) to catch microbursts.</p>
</li>
</ul>
<h3 id="qprof-core">QPROF-CORE</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">qos profile QPROF-CORE
</span></span><span class="line"><span class="cl">   qos trust dscp
</span></span><span class="line"><span class="cl">   tx-queue 0
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 1
</span></span><span class="line"><span class="cl">   tx-queue 1
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 20
</span></span><span class="line"><span class="cl">   tx-queue 2
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 19
</span></span><span class="line"><span class="cl">   tx-queue 3
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 30
</span></span><span class="line"><span class="cl">   tx-queue 4
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 30
</span></span><span class="line"><span class="cl">   tx-queue 5
</span></span><span class="line"><span class="cl">      shape rate 50 percent     ! EF — voice/RT, shaped to prevent starvation
</span></span><span class="line"><span class="cl">   tx-queue 6
</span></span><span class="line"><span class="cl">      shape rate 10 percent     ! CS6 — management
</span></span></code></pre></div><h3 id="qprof-transit-upstream--qprof-transit-customer">QPROF-TRANSIT-UPSTREAM / QPROF-TRANSIT-CUSTOMER</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">qos profile QPROF-TRANSIT-UPSTREAM
</span></span><span class="line"><span class="cl">   no qos trust                 ! traffic-policy sets TC; DSCP from transit ignored
</span></span><span class="line"><span class="cl">   tx-queue 0
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 1
</span></span><span class="line"><span class="cl">   tx-queue 1
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 20
</span></span><span class="line"><span class="cl">   tx-queue 2
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 19
</span></span><span class="line"><span class="cl">   tx-queue 3
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 30
</span></span><span class="line"><span class="cl">   tx-queue 4
</span></span><span class="line"><span class="cl">      no priority
</span></span><span class="line"><span class="cl">      bandwidth percent 30
</span></span><span class="line"><span class="cl">   tx-queue 6
</span></span><span class="line"><span class="cl">      shape rate 10 percent
</span></span></code></pre></div><h3 id="profile-to-interface-mapping">Profile-to-interface mapping</h3>
<table>
	<thead>
			<tr>
					<th>Profile</th>
					<th>Trust</th>
					<th>Applied to</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>QPROF-CORE</td>
					<td>DSCP</td>
					<td>Core/backbone interfaces, MPLS links</td>
			</tr>
			<tr>
					<td>QPROF-TRANSIT-UPSTREAM</td>
					<td>None</td>
					<td>IP transit provider ports</td>
			</tr>
			<tr>
					<td>QPROF-TRANSIT-CUSTOMER</td>
					<td>None</td>
					<td>Customer IP transit ports</td>
			</tr>
			<tr>
					<td>QPROF-UNKNOWN</td>
					<td>None</td>
					<td>Fallback / unclassified</td>
			</tr>
	</tbody>
</table>
<hr>
<h2 id="qos-maps-dscp--traffic-class">QoS Maps (DSCP → Traffic Class)</h2>
<p>Applied when <code>qos trust dscp</code> is active. On untrusted interfaces, traffic-policy sets TC directly.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">qos</span> <span class="n">map</span> <span class="n">dscp</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span> <span class="mi">5</span> <span class="mi">6</span> <span class="mi">7</span> <span class="mi">17</span> <span class="mi">18</span> <span class="mi">19</span> <span class="mi">20</span> <span class="mi">21</span> <span class="mi">22</span> <span class="mi">23</span> <span class="mi">24</span> <span class="mi">25</span> <span class="mi">27</span> <span class="mi">28</span> <span class="mi">29</span> <span class="mi">30</span> <span class="mi">31</span> <span class="mi">32</span> <span class="mi">33</span> <span class="mi">34</span> <span class="mi">35</span> <span class="mi">36</span> <span class="mi">37</span> <span class="mi">38</span> <span class="mi">39</span> <span class="mi">41</span> <span class="mi">42</span> <span class="mi">43</span> <span class="mi">44</span> <span class="mi">47</span> <span class="mi">49</span> <span class="mi">50</span> <span class="mi">51</span> <span class="mi">52</span> <span class="mi">53</span> <span class="mi">54</span> <span class="mi">55</span> <span class="mi">57</span> <span class="mi">58</span> <span class="mi">59</span> <span class="mi">60</span> <span class="mi">61</span> <span class="mi">62</span> <span class="mi">63</span> <span class="n">to</span> <span class="n">traffic</span><span class="o">-</span><span class="k">class</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"><span class="n">qos</span> <span class="n">map</span> <span class="n">dscp</span> <span class="mi">45</span> <span class="n">to</span> <span class="n">traffic</span><span class="o">-</span><span class="k">class</span> <span class="mi">2</span>   <span class="o">!</span> <span class="n">NQB</span> <span class="err">→</span> <span class="n">TC2</span> <span class="p">(</span><span class="n">signalling</span> <span class="o">/</span> <span class="n">non</span><span class="o">-</span><span class="n">queuing</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">qos</span> <span class="n">map</span> <span class="n">dscp</span> <span class="mi">16</span> <span class="n">to</span> <span class="n">traffic</span><span class="o">-</span><span class="k">class</span> <span class="mi">3</span>   <span class="o">!</span> <span class="n">AF21</span> <span class="err">→</span> <span class="n">TC3</span> <span class="p">(</span><span class="n">InetPlus</span> <span class="o">/</span> <span class="n">managed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">qos</span> <span class="n">map</span> <span class="n">dscp</span> <span class="mi">26</span> <span class="n">to</span> <span class="n">traffic</span><span class="o">-</span><span class="k">class</span> <span class="mi">4</span>   <span class="o">!</span> <span class="n">AF31</span> <span class="err">→</span> <span class="n">TC4</span> <span class="p">(</span><span class="n">business</span> <span class="o">/</span> <span class="n">priority</span><span class="p">)</span>
</span></span></code></pre></div><p>DSCP 0 (BE) → TC1 (BE internet), DSCP 8 (CS1) → TC0 (scavenger), DSCP 40/46 (EF) → TC5, DSCP 48 (CS6) → TC6, and DSCP 56 (CS7) → TC7 are handled by hardware default maps (not overridden here). The explicit list above catches all unmapped DSCPs → TC0.</p>
<hr>
<h2 id="traffic-policies">Traffic Policies</h2>
<p>Traffic policies are the primary QoS enforcement mechanism. Applied per-interface as ingress or egress classifiers.</p>
<p><strong>Naming convention.</strong> Three distinct object types, three distinct prefixes — so a name tells you what it is at a glance:</p>
<table>
	<thead>
			<tr>
					<th>Prefix</th>
					<th>Object</th>
					<th>Example</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>M-</code></td>
					<td>traffic-policy <code>match</code> clause (a rule)</td>
					<td><code>M-V4U-BGP-PEERS</code></td>
			</tr>
			<tr>
					<td><code>PFX-</code></td>
					<td>prefix field-set (IPv4/IPv6 address data)</td>
					<td><code>PFX-V4-ADMIN</code>, <code>PFX-V6-BOGONS</code></td>
			</tr>
			<tr>
					<td><code>L4P-</code></td>
					<td>L4-port field-set (port-number data)</td>
					<td><code>L4P-AMP-SRC-PORTS</code></td>
			</tr>
	</tbody>
</table>
<p>The <code>V4</code>/<code>V6</code> token marks address family. A match clause and the field-set it references now never share a name (previously both were <code>FS-…</code>, e.g. the NTP rule and its prefix set collided).</p>
<h3 id="policy-inventory">Policy inventory</h3>
<table>
	<thead>
			<tr>
					<th>Policy</th>
					<th>Direction</th>
					<th>Applied to</th>
					<th>Key actions</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>TP-COPP</td>
					<td>CPU (all VRFs)</td>
					<td>Global</td>
					<td>Police ICMP/NTP/DNS, count BGP/BFD/LDP, drop unknown</td>
			</tr>
			<tr>
					<td>TP-TRANSIT-UPSTREAM</td>
					<td>Ingress</td>
					<td>Transit provider ports</td>
					<td>Drop bogons, block IPv6 exthdr/frag, re-mark, AMP mitigation</td>
			</tr>
			<tr>
					<td>TP-TRANSIT-CUSTOMER</td>
					<td>Ingress</td>
					<td>Customer transit</td>
					<td>Drop bogons, anti-AMP, NQB to TC2, scavenger to TC0</td>
			</tr>
			<tr>
					<td>TP-TRANSIT-PNI</td>
					<td>Ingress</td>
					<td>Private peering / PNI</td>
					<td>Drop bogons, allow BGP on LL, AMP mitigation</td>
			</tr>
	</tbody>
</table>
<h3 id="tp-copp">TP-COPP</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">traffic-policies
</span></span><span class="line"><span class="cl">   cpu traffic-policy TP-COPP vrf all
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">   traffic-policy TP-COPP
</span></span><span class="line"><span class="cl">      match M-V4U-ICMP ipv4
</span></span><span class="line"><span class="cl">         protocol icmp
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">            police rate 1024 kbps
</span></span><span class="line"><span class="cl">      match M-V6U-ICMP ipv6
</span></span><span class="line"><span class="cl">         protocol icmpv6
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">            police rate 1024 kbps
</span></span><span class="line"><span class="cl">      match M-V4U-BFD ipv4
</span></span><span class="line"><span class="cl">         source prefix field-set PFX-V4-BFD-PEERS PFX-V4-LL PFX-V4-ROUTERS-LO
</span></span><span class="line"><span class="cl">         protocol udp source port all destination port 3784-3785, 7784
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">      match M-V4U-BGP-PEERS ipv4
</span></span><span class="line"><span class="cl">         protocol neighbors bgp
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">      match M-V4M-LDP ipv4
</span></span><span class="line"><span class="cl">         destination prefix 224.0.0.2/32
</span></span><span class="line"><span class="cl">         protocol udp source port all destination port ldp
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">      match M-V4U-LDP ipv4
</span></span><span class="line"><span class="cl">         source prefix field-set PFX-V4-ROUTERS-LO
</span></span><span class="line"><span class="cl">         protocol tcp source port all destination port ldp
</span></span><span class="line"><span class="cl">         protocol udp source port all destination port ldp
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">      match M-V4U-SSH ipv4
</span></span><span class="line"><span class="cl">         source prefix field-set PFX-V4-ADMIN
</span></span><span class="line"><span class="cl">         protocol tcp source port all destination port ssh netconf-ssh
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">      match M-V4U-SNMP ipv4
</span></span><span class="line"><span class="cl">         source prefix field-set PFX-V4-ADMIN
</span></span><span class="line"><span class="cl">         protocol udp source port all destination port snmp
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">      match M-V4U-GRPC ipv4
</span></span><span class="line"><span class="cl">         source prefix field-set PFX-V4-ADMIN
</span></span><span class="line"><span class="cl">         protocol tcp source port all destination port gnmi
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">      match M-V4U-NTP ipv4
</span></span><span class="line"><span class="cl">         source prefix field-set PFX-V4-NTP
</span></span><span class="line"><span class="cl">         protocol udp source port ntp destination port all
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">            police rate 1024 kbps
</span></span><span class="line"><span class="cl">      match M-V4U-TCP-ESTABLISHED ipv4
</span></span><span class="line"><span class="cl">         protocol tcp flags established
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">      match M-V4U-TCP-SYN-ACK ipv4
</span></span><span class="line"><span class="cl">         protocol tcp flags ack syn
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">            police rate 1024 kbps
</span></span><span class="line"><span class="cl">      match M-V4U-DISCARD ipv4
</span></span><span class="line"><span class="cl">         actions
</span></span><span class="line"><span class="cl">            count
</span></span><span class="line"><span class="cl">            drop
</span></span><span class="line"><span class="cl">      match ipv4-all-default ipv4
</span></span><span class="line"><span class="cl">      match ipv6-all-default ipv6
</span></span></code></pre></div><h3 id="amp-source-ports-field-set">AMP source ports field-set</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">field-set l4-port L4P-AMP-SRC-PORTS
</span></span><span class="line"><span class="cl">   17, 19, 111, 123, 137, 161, 389, 520, 751, 1434, 1900, 5353, 6881, 11211, 27015, 27960
</span></span><span class="line"><span class="cl">   ! qotd, chargen, portmap/rpc, ntp, netbios, snmp, ldap, rip,
</span></span><span class="line"><span class="cl">   ! kerberos, ms-sql, ssdp, mdns, bittorrent, memcached, srcds/quake
</span></span></code></pre></div><h3 id="tp-transit-upstream-key-elements">TP-TRANSIT-UPSTREAM (key elements)</h3>
<p>Bogon and malformed-packet filtering is enforced in the <strong>hardware dataplane</strong> via traffic-policy, rather than in the BGP control plane via route-map. This drops invalid traffic at line rate before it reaches the routing process, and also prevents bogon-destined packets already in the forwarding table from being forwarded.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">traffic-policy TP-TRANSIT-UPSTREAM
</span></span><span class="line"><span class="cl">   match M-V4U-BOGONS ipv4
</span></span><span class="line"><span class="cl">      destination prefix field-set PFX-V4-BOGONS
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         drop
</span></span><span class="line"><span class="cl">   match M-V6U-BOGONS ipv6
</span></span><span class="line"><span class="cl">      destination prefix field-set PFX-V6-BOGONS
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         drop
</span></span><span class="line"><span class="cl">   match M-V6U-EXTHD-BLOCK ipv6
</span></span><span class="line"><span class="cl">      protocol 0, 43, 60        ! HBH / routing / dest options
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         drop
</span></span><span class="line"><span class="cl">   match M-V6U-FRAG-BLOCK ipv6
</span></span><span class="line"><span class="cl">      protocol 44
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         drop
</span></span><span class="line"><span class="cl">   match M-V4U-UDP-FRAGMENT ipv4
</span></span><span class="line"><span class="cl">      protocol udp
</span></span><span class="line"><span class="cl">      fragment
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         set dscp 8
</span></span><span class="line"><span class="cl">         set traffic class 0
</span></span><span class="line"><span class="cl">   match M-V4U-AMP-SOURCE-PORTS ipv4
</span></span><span class="line"><span class="cl">      protocol udp source port field-set L4P-AMP-SRC-PORTS
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         set dscp 8
</span></span><span class="line"><span class="cl">         set traffic class 0
</span></span><span class="line"><span class="cl">   match M-V4U-SCAVENGER-BULK ipv4
</span></span><span class="line"><span class="cl">      protocol tcp source port all destination port ftp-data rsync ftps-data
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         set dscp 8
</span></span><span class="line"><span class="cl">         set traffic class 0
</span></span><span class="line"><span class="cl">   match M-V4U-NBQ ipv4
</span></span><span class="line"><span class="cl">      dscp 34, 45
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         set dscp 45
</span></span><span class="line"><span class="cl">         set traffic class 2
</span></span><span class="line"><span class="cl">   match M-V4U-INETPLUS ipv4
</span></span><span class="line"><span class="cl">      destination prefix field-set PFX-V4-INETPLUS
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         set dscp 16
</span></span><span class="line"><span class="cl">         set traffic class 3
</span></span><span class="line"><span class="cl">   match M-V4U-INET ipv4
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         set dscp 0
</span></span><span class="line"><span class="cl">         set traffic class 1
</span></span><span class="line"><span class="cl">   match ipv4-all-default ipv4
</span></span><span class="line"><span class="cl">      actions
</span></span><span class="line"><span class="cl">         count
</span></span><span class="line"><span class="cl">         set dscp 8
</span></span><span class="line"><span class="cl">         set traffic class 0
</span></span></code></pre></div><hr>
<h2 id="sgt-qos--self-generated-traffic">SGT QoS — Self-Generated Traffic</h2>
<p>Control-plane traffic originated by the router must be explicitly DSCP-marked.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">router bfd
</span></span><span class="line"><span class="cl">   qos dscp 56              ! BFD → CS7
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">router bgp &lt;ASN&gt;
</span></span><span class="line"><span class="cl">   bgp transport qos dscp 56   ! BGP TCP sessions → CS7
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">snmp-server qos dscp 26
</span></span><span class="line"><span class="cl">dns qos dscp 26
</span></span><span class="line"><span class="cl">ntp qos dscp 26
</span></span><span class="line"><span class="cl">sflow qos dscp 26
</span></span><span class="line"><span class="cl">logging qos dscp 26
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">management ssh
</span></span><span class="line"><span class="cl">   qos dscp 26
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">management api gnmi
</span></span><span class="line"><span class="cl">   transport grpc MGMT
</span></span><span class="line"><span class="cl">      qos dscp 26
</span></span><span class="line"><span class="cl">   transport grpc default
</span></span><span class="line"><span class="cl">      qos dscp 26
</span></span></code></pre></div><table>
	<thead>
			<tr>
					<th>Protocol</th>
					<th>DSCP</th>
					<th>CS/AF</th>
					<th>TC</th>
					<th>Rationale</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>BGP TCP</td>
					<td>56</td>
					<td>CS7</td>
					<td>7 (strict)</td>
					<td>Session drops cause routing black-holes</td>
			</tr>
			<tr>
					<td>BFD</td>
					<td>56</td>
					<td>CS7</td>
					<td>7 (strict)</td>
					<td>Sub-second detection — cannot tolerate jitter</td>
			</tr>
			<tr>
					<td>SNMP</td>
					<td>26</td>
					<td>AF31</td>
					<td>4</td>
					<td>OAM, not real-time</td>
			</tr>
			<tr>
					<td>DNS</td>
					<td>26</td>
					<td>AF31</td>
					<td>4</td>
					<td>Router DNS queries</td>
			</tr>
			<tr>
					<td>NTP</td>
					<td>26</td>
					<td>AF31</td>
					<td>4</td>
					<td>Clock sync</td>
			</tr>
			<tr>
					<td>sFlow</td>
					<td>26</td>
					<td>AF31</td>
					<td>4</td>
					<td>Telemetry</td>
			</tr>
			<tr>
					<td>Syslog</td>
					<td>26</td>
					<td>AF31</td>
					<td>4</td>
					<td>Operational logging</td>
			</tr>
			<tr>
					<td>SSH</td>
					<td>26</td>
					<td>AF31</td>
					<td>4</td>
					<td>CLI access</td>
			</tr>
			<tr>
					<td>gNMI/gRPC</td>
					<td>26</td>
					<td>AF31</td>
					<td>4</td>
					<td>Streaming telemetry</td>
			</tr>
	</tbody>
</table>
<hr>
<h2 id="mpls-ldp">MPLS LDP</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">mpls ip
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">mpls ldp
</span></span><span class="line"><span class="cl">   router-id interface Loopback0 force   ! stable RID; force = use even if non-primary
</span></span><span class="line"><span class="cl">   igp sync delay 2                       ! RFC 5443: hold IS-IS max-metric 2s after LDP UP before restoring normal metric
</span></span><span class="line"><span class="cl">   interface disabled default             ! LDP not enabled by default on interfaces
</span></span><span class="line"><span class="cl">   neighbor hello-redundancy              ! dual-hello on LAG members
</span></span><span class="line"><span class="cl">   no shutdown
</span></span><span class="line"><span class="cl">   !
</span></span></code></pre></div><p>LDP must be explicitly enabled per interface. <code>interface disabled default</code> is critical — it prevents LDP from attempting sessions on all interfaces including external ones.</p>
<p><code>igp sync delay 2</code> is part of IGP–LDP synchronisation (RFC 5443). When an LDP session goes down, IS-IS advertises the affected link at maximum metric so traffic reroutes away from the label-less path. When the LDP session re-establishes, IS-IS holds the maximum metric for 2 seconds before restoring the normal metric — giving LDP time to complete label exchange before traffic is attracted back to the link.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">interface EthernetX
</span></span><span class="line"><span class="cl">   mpls ip
</span></span><span class="line"><span class="cl">   mpls ldp interface
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">interface Loopback0
</span></span><span class="line"><span class="cl">   mpls ldp interface
</span></span></code></pre></div><hr>
<h2 id="mpls-icmp">MPLS ICMP</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">mpls icmp ttl-exceeded tunneling     ! include original IP header in TTL-exceeded ICMP
</span></span><span class="line"><span class="cl">mpls oam standard ietf               ! RFC 4379 MPLS ping/trace
</span></span><span class="line"><span class="cl">mpls icmp ipv6 source-interface Loopback0
</span></span><span class="line"><span class="cl">mpls icmp ip   source-interface Loopback0
</span></span></code></pre></div><table>
	<thead>
			<tr>
					<th>Parameter</th>
					<th>Effect</th>
					<th>Without it</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>ttl-exceeded tunneling</code></td>
					<td>ICMP includes original inner IP header</td>
					<td>traceroute shows only MPLS hops</td>
			</tr>
			<tr>
					<td><code>oam standard ietf</code></td>
					<td>RFC 4379 MPLS ping/trace</td>
					<td>Vendor-specific OAM, incompatible with third-party</td>
			</tr>
			<tr>
					<td><code>source-interface Loopback0</code></td>
					<td>ICMP sourced from stable loopback</td>
					<td>ICMP from transit link — unreachable if link fails</td>
			</tr>
	</tbody>
</table>
<hr>
<h2 id="tunnel-ribs">Tunnel-ribs</h2>
<p>Tunnel-ribs aggregate multiple label signalling protocols for BGP next-hop resolution with explicit preference ordering.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">tunnel-ribs
</span></span><span class="line"><span class="cl">   tunnel-rib TR-SR-OVER-LDP
</span></span><span class="line"><span class="cl">      source-protocol bgp labeled-unicast preference 30   ! highest preference
</span></span><span class="line"><span class="cl">      source-protocol isis segment-routing preference 40
</span></span><span class="line"><span class="cl">      source-protocol ldp preference 50                   ! lowest preference / fallback
</span></span></code></pre></div><p>Lower preference number = higher priority.</p>
<table>
	<thead>
			<tr>
					<th>Protocol</th>
					<th>Preference</th>
					<th>Description</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>bgp labeled-unicast</td>
					<td>30</td>
					<td>BGP-LU (inter-AS or explicit paths)</td>
			</tr>
			<tr>
					<td>isis segment-routing</td>
					<td>40</td>
					<td>SR-ISIS node SIDs</td>
			</tr>
			<tr>
					<td>ldp</td>
					<td>50</td>
					<td>LDP label bindings (fallback)</td>
			</tr>
	</tbody>
</table>
<p>The name <code>TR-SR-OVER-LDP</code> reflects a migration scenario: SR-ISIS is preferred, LDP serves as fallback. Removing LDP from the rib when migration is complete requires no BGP policy changes.</p>
<hr>
<h2 id="sflow">sFlow</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">sflow sample 512                   ! 1:512 sampling rate
</span></span><span class="line"><span class="cl">sflow destination &lt;SFLOW-COLLECTOR&gt;       ! collector (e.g. Akvorado)
</span></span><span class="line"><span class="cl">sflow source &lt;LOOPBACK0&gt;        ! Loopback0 — stable, matches router-id
</span></span><span class="line"><span class="cl">sflow sample input subinterface
</span></span><span class="line"><span class="cl">sflow sample output subinterface
</span></span><span class="line"><span class="cl">sflow extension bgp                ! add BGP attrs to flow records
</span></span><span class="line"><span class="cl">sflow qos dscp 26
</span></span><span class="line"><span class="cl">sflow interface disable default    ! explicit opt-in per interface
</span></span><span class="line"><span class="cl">no sflow hardware acceleration
</span></span><span class="line"><span class="cl">sflow run
</span></span></code></pre></div><p>Enable per-interface:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">interface EthernetX
</span></span><span class="line"><span class="cl">   sflow enable
</span></span><span class="line"><span class="cl">   sflow egress enable
</span></span></code></pre></div><p><code>sflow extension bgp</code> adds BGP attributes to flow records: peer AS, origin AS, AS path, next-hop, communities. Requires BGP running; tools like Akvorado use these for AS-level traffic matrices.</p>
<p><code>no sflow hardware acceleration</code> is required alongside it: hardware acceleration offloads sampling to the ASIC for higher raw sample rates, but conflicts with BGP attribute annotation and per-subinterface sampling (<code>sflow sample input/output subinterface</code>) simultaneously.</p>
<p>The trade-off is intentional — richer per-flow records for AS-level traffic analysis outweigh the raw rate benefit.</p>
<hr>
<h2 id="maintenance-mode">Maintenance Mode</h2>
<p>Two maintenance modes: <strong>SOFT</strong> (graceful drain with BGP prepend + GSHUT) and <strong>HARD</strong> (immediate withdraw of all external routes).</p>
<p>On boot, <code>MNT-UN-SOFT</code> runs automatically for 120 seconds to allow BGP reconvergence before accepting traffic.</p>
<h3 id="structure">Structure</h3>
<table>
	<thead>
			<tr>
					<th>Component</th>
					<th>Type</th>
					<th>Purpose</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>MNT-UN-SOFT</td>
					<td>Unit</td>
					<td>Soft drain — on-boot + manual</td>
			</tr>
			<tr>
					<td>MNT-UN-HARD-EXT</td>
					<td>Unit</td>
					<td>Hard withdraw — emergency</td>
			</tr>
			<tr>
					<td>MNT-GR-SOFT-VRF-DEFAULT-INT</td>
					<td>Group</td>
					<td>iBGP peers for soft drain</td>
			</tr>
			<tr>
					<td>MNT-GR-SOFT-VRF-DEFAULT-EXT</td>
					<td>Group</td>
					<td>eBGP peers for soft drain</td>
			</tr>
			<tr>
					<td>MNT-GR-HARD-VRF-DEFAULT-EXT</td>
					<td>Group</td>
					<td>eBGP peers for hard withdraw</td>
			</tr>
	</tbody>
</table>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">maintenance
</span></span><span class="line"><span class="cl">   profile bgp MNT-PR-SOFT-EXT
</span></span><span class="line"><span class="cl">      initiator route-map RP-ALL-EXT-SOFT-MNT-OUT out
</span></span><span class="line"><span class="cl">   !
</span></span><span class="line"><span class="cl">   profile bgp MNT-PR-HARD-EXT
</span></span><span class="line"><span class="cl">      initiator route-map RP-ALL-EXT-HARD-MNT-OUT out
</span></span><span class="line"><span class="cl">      initiator route-map RP-ALL-EXT-HARD-MNT-IN in
</span></span><span class="line"><span class="cl">   !
</span></span><span class="line"><span class="cl">   profile bgp MNT-PR-SOFT-INT
</span></span><span class="line"><span class="cl">      initiator route-map RP-ALL-INT-SOFT-MNT-OUT out
</span></span><span class="line"><span class="cl">   !
</span></span><span class="line"><span class="cl">   profile unit MNT-UN-SOFT
</span></span><span class="line"><span class="cl">      on-boot duration 120
</span></span><span class="line"><span class="cl">   !
</span></span><span class="line"><span class="cl">   unit MNT-UN-SOFT
</span></span><span class="line"><span class="cl">      group bgp MNT-GR-SOFT-VRF-DEFAULT-EXT
</span></span><span class="line"><span class="cl">      group bgp MNT-GR-SOFT-VRF-DEFAULT-INT
</span></span><span class="line"><span class="cl">   !
</span></span><span class="line"><span class="cl">   unit MNT-UN-HARD-EXT
</span></span><span class="line"><span class="cl">      group bgp MNT-GR-HARD-VRF-DEFAULT-EXT
</span></span></code></pre></div><h3 id="route-maps">Route maps</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">! SOFT EXTERNAL — prepend own ASN x5 + GSHUT community (RFC 8326)
</span></span><span class="line"><span class="cl">route-map RP-ALL-EXT-SOFT-MNT-OUT permit 10
</span></span><span class="line"><span class="cl">   set as-path prepend auto repeat 5
</span></span><span class="line"><span class="cl">   set community community-list CMST-SPECIAL-GSHUT additive
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">! SOFT INTERNAL — prepend with dummy 65500 ASN x5 + maintenance large-community
</span></span><span class="line"><span class="cl">route-map RP-ALL-INT-SOFT-MNT-OUT permit 10
</span></span><span class="line"><span class="cl">   set as-path prepend 65500 repeat 5
</span></span><span class="line"><span class="cl">   set community community-list CMST-SPECIAL-GSHUT additive
</span></span><span class="line"><span class="cl">   set large-community large-community-list CMLR-SPECIAL-MNT-SOFT additive
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">! HARD EXTERNAL — deny all
</span></span><span class="line"><span class="cl">route-map RP-ALL-EXT-HARD-MNT-OUT deny 10
</span></span><span class="line"><span class="cl">route-map RP-ALL-EXT-HARD-MNT-IN deny 10
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">! HARD INTERNAL — add large-community then deny (except own aggregates)
</span></span><span class="line"><span class="cl">route-map RP-ALL-INT-HARD-MNT-OUT permit 10
</span></span><span class="line"><span class="cl">   set large-community large-community-list CMLR-SPECIAL-MNT-HARD additive
</span></span><span class="line"><span class="cl">   continue 20
</span></span><span class="line"><span class="cl">route-map RP-ALL-INT-HARD-MNT-OUT deny 20
</span></span><span class="line"><span class="cl">   match ip address prefix-list PL-V4U-AS&lt;ASN&gt;
</span></span><span class="line"><span class="cl">route-map RP-ALL-INT-HARD-MNT-OUT deny 30
</span></span><span class="line"><span class="cl">   match ipv6 address prefix-list PL-V6U-AS&lt;ASN&gt;
</span></span></code></pre></div><h3 id="operations">Operations</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">! Enter soft maintenance
</span></span><span class="line"><span class="cl">configure
</span></span><span class="line"><span class="cl">  maintenance
</span></span><span class="line"><span class="cl">    unit MNT-UN-SOFT
</span></span><span class="line"><span class="cl">      quiesce
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">! Exit maintenance
</span></span><span class="line"><span class="cl">configure
</span></span><span class="line"><span class="cl">  maintenance
</span></span><span class="line"><span class="cl">    unit MNT-UN-SOFT
</span></span><span class="line"><span class="cl">      no quiesce
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">show maintenance
</span></span><span class="line"><span class="cl">show maintenance unit MNT-UN-SOFT
</span></span><span class="line"><span class="cl">show bgp neighbor | include maintenance
</span></span></code></pre></div><hr>
<h2 id="bgp-transport--session-parameters">BGP Transport &amp; Session Parameters</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">router bgp &lt;ASN&gt;
</span></span><span class="line"><span class="cl">   bgp asn notation asdot
</span></span><span class="line"><span class="cl">   router-id &lt;LOOPBACK0&gt;
</span></span><span class="line"><span class="cl">   update wait-install            ! hold updates until FIB install complete
</span></span><span class="line"><span class="cl">   bgp transport pmtud            ! Path MTU Discovery on BGP TCP
</span></span><span class="line"><span class="cl">   bgp transport qos dscp 56      ! BGP TCP → CS7
</span></span><span class="line"><span class="cl">   bgp always-compare-med         ! compare MED across ASes
</span></span></code></pre></div><h3 id="update-wait-install">update wait-install</h3>
<p>When a large routing table is received, BGP can converge and begin advertising routes before the hardware FIB has finished programming them. <code>update wait-install</code> breaks this race: outbound BGP updates are held until the FIB install is confirmed, preventing the router from attracting traffic it cannot yet forward. This increases convergence time under FIB pressure — monitor hardware programming status on Jericho2 with <code>show platform sand l3 summary | grep backlog</code>. A non-zero <code>backlog</code> value means routes are still queued for hardware programming and BGP updates are being held.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">show platform sand l3 summary | grep backlog
</span></span><span class="line"><span class="cl">  Routes:       1050278  backlog:  0  unprogrammed:  0
</span></span><span class="line"><span class="cl">  Adjacencies:  327      backlog:  0  unprogrammed:  0
</span></span><span class="line"><span class="cl">  Routes:       242681  backlog:  0  unprogrammed:  0
</span></span><span class="line"><span class="cl">  Adjacencies:  327     backlog:  0  unprogrammed:  0
</span></span><span class="line"><span class="cl">  Routes:       59  backlog:  0  unprogrammed:  0
</span></span><span class="line"><span class="cl">  Adjacencies:  23  backlog:  0  unprogrammed:  0
</span></span><span class="line"><span class="cl">Egress rewrite chains in backlog: resource-full 0, no-interface 0
</span></span></code></pre></div><h3 id="route-refresh-demarcated-stale-path-removal">route refresh demarcated stale-path removal</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">neighbor &lt;peer-group&gt; route refresh demarcated stale-path removal
</span></span></code></pre></div><p>Route Refresh (RFC 2918) lets a BGP speaker request its peer to re-advertise its full routing table — used after an inbound policy change to re-evaluate all received routes. The problem: basic Route Refresh has no convergence signal. The local router cannot tell when the peer has finished re-sending, so paths that the peer silently stopped advertising (without an explicit withdraw) can persist in the RIB indefinitely.</p>
<p>RFC 7313 (Enhanced Route Refresh) adds two markers: <strong>BoRR</strong> (Begin of Route Refresh) sent before the re-advertisement starts, and <strong>EoRR</strong> (End of Route Refresh) sent when complete. With <code>stale-path removal</code>, EOS tracks which paths were re-advertised during the refresh window and, upon receiving EoRR, purges any paths from that peer that were not re-sent. This enforces a clean post-refresh RIB state equivalent to a hard reset, but without dropping the session.</p>
<p>Practically: after changing an inbound filter, trigger <code>clear ip bgp &lt;peer&gt; soft in</code> — paths that no longer match the new policy and that the peer does not re-advertise will be removed automatically when the refresh completes.</p>
<h3 id="out-delay">out-delay</h3>
<table>
	<thead>
			<tr>
					<th>Peer type</th>
					<th>out-delay</th>
					<th>Rationale</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>iBGP (border full-mesh)</td>
					<td>3s</td>
					<td>Batch concurrent updates from multiple upstreams before propagating to iBGP</td>
			</tr>
			<tr>
					<td>iBGP (RR client / PE)</td>
					<td>1s</td>
					<td>Faster reconvergence for PE nodes</td>
			</tr>
			<tr>
					<td>eBGP transit / peering</td>
					<td>6s</td>
					<td>Absorb micro-instabilities before exporting</td>
			</tr>
	</tbody>
</table>
<h3 id="rib-in-pre-policy-retain-all">rib-in pre-policy retain all</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">neighbor &lt;transit-peer-group&gt; rib-in pre-policy retain all
</span></span></code></pre></div><p>By default, EOS discards the pre-policy adj-RIB-In after applying inbound filters — only the post-policy result is kept in memory. <code>rib-in pre-policy retain all</code> keeps the full raw table as received from the peer, before any filters are applied.</p>
<p>Two consequences:</p>
<p><strong>Policy changes without route-refresh.</strong> When an inbound RCF or route-map is modified, EOS can re-evaluate all received routes immediately from the cached pre-policy table — no need to request a Route Refresh from the peer. For a transit session carrying 900k+ prefixes, a Route Refresh triggers a full re-advertisement that takes minutes and causes a reconvergence event across the network. With <code>retain all</code>, the policy change takes effect locally in seconds without touching the peer.</p>
<p><strong>BMP and gNMI pre-policy export.</strong> BMP (see BMP Monitoring section) streams both <code>pre-policy</code> and <code>post-policy</code> adj-RIB-In to collectors. Without <code>retain all</code>, there is no pre-policy data to export — only the post-policy view is available. Same applies to gNMI adj-rib-in-pre subscriptions.</p>
<p>Cost: roughly doubles BGP memory consumption for those peer sessions. Apply selectively to transit and peering sessions where policy re-evaluation matters; do not apply globally. Monitor with <code>show bgp memory</code>.</p>
<hr>
<h2 id="bgp-bestpath">BGP Bestpath</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">router bgp &lt;ASN&gt;
</span></span><span class="line"><span class="cl">   maximum-paths 4 ecmp 4
</span></span><span class="line"><span class="cl">   bgp additional-paths install
</span></span><span class="line"><span class="cl">   bgp always-compare-med
</span></span><span class="line"><span class="cl">   no bgp bestpath as-path multipath-relax 
</span></span></code></pre></div><table>
	<thead>
			<tr>
					<th>Parameter</th>
					<th>Behaviour</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>maximum-paths 4 ecmp 4</code></td>
					<td>Install up to 4 equal-cost paths in the FIB and perform ECMP across them. Without this, only the single best path is forwarded.</td>
			</tr>
			<tr>
					<td><code>bgp additional-paths install</code></td>
					<td>Pre-install the best backup path in the FIB alongside the primary. Enables sub-second failover (BGP PIC) without waiting for BGP re-convergence — see §23.</td>
			</tr>
			<tr>
					<td><code>bgp always-compare-med</code></td>
					<td>Compare MED between routes from different ASes. Without this, MED is only compared within the same AS-PATH.</td>
			</tr>
			<tr>
					<td><code>no bgp bestpath as-path multipath-relax</code></td>
					<td>ECMP only across paths with identical AS-path, not just equal length. Prevents unintended load-balancing between different transit upstreams and between fabric sites with distinct AS-paths.</td>
			</tr>
	</tbody>
</table>
<hr>
<h2 id="peer-groups--peers">Peer Groups &amp; Peers</h2>
<p>All peers use named peer-groups. Direct per-peer config is limited to IP address, description, and optional BFD/passive/password.</p>
<h3 id="peer-group-taxonomy">Peer group taxonomy</h3>
<table>
	<thead>
			<tr>
					<th>Group</th>
					<th>AF</th>
					<th>Type</th>
					<th>Key attributes</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>BGR-V4U-INT-IBGPFM-RR</code></td>
					<td>IPv4</td>
					<td>iBGP full-mesh RR</td>
					<td>update-source Lo0, add-paths, out-delay 3</td>
			</tr>
			<tr>
					<td><code>BGR-V6U-INT-IBGPFM-RR</code></td>
					<td>IPv6</td>
					<td>iBGP full-mesh RR</td>
					<td>same</td>
			</tr>
			<tr>
					<td><code>BGR-V4U-INT-RRC-CLIENT</code></td>
					<td>IPv4</td>
					<td>iBGP RR client</td>
					<td>route-reflector-client, out-delay 1</td>
			</tr>
			<tr>
					<td><code>BGR-V6U-INT-RRC-CLIENT</code></td>
					<td>IPv6</td>
					<td>iBGP RR client</td>
					<td>same</td>
			</tr>
			<tr>
					<td><code>BGR-V4U-EXT-TRANSIT-*</code></td>
					<td>IPv4</td>
					<td>eBGP upstream transit</td>
					<td>remove-private-as, out-delay 6, rib-in retain</td>
			</tr>
			<tr>
					<td><code>BGR-V6U-EXT-TRANSIT-*</code></td>
					<td>IPv6</td>
					<td>eBGP upstream transit</td>
					<td>same</td>
			</tr>
			<tr>
					<td><code>BGR-V4U-EXT-RS-*</code></td>
					<td>IPv4</td>
					<td>IXP route server</td>
					<td>no enforce-first-as, maximum-routes 0, out-delay 6</td>
			</tr>
			<tr>
					<td><code>BGR-V6U-EXT-RS-*</code></td>
					<td>IPv6</td>
					<td>IXP route server</td>
					<td>same</td>
			</tr>
			<tr>
					<td><code>BGR-V4U-EXT-PEER-*</code></td>
					<td>IPv4</td>
					<td>Direct peering</td>
					<td>out-delay 6, max-routes per peer</td>
			</tr>
			<tr>
					<td><code>BGR-V6U-EXT-PEER-*</code></td>
					<td>IPv6</td>
					<td>Direct peering</td>
					<td>same</td>
			</tr>
			<tr>
					<td><code>BGR-V4U-EXT-CUST-*</code></td>
					<td>IPv4</td>
					<td>Customer / IP transit</td>
					<td>send-community, passive where applicable</td>
			</tr>
			<tr>
					<td><code>BGR-V6U-EXT-CUST-*</code></td>
					<td>IPv6</td>
					<td>Customer / IP transit</td>
					<td>same</td>
			</tr>
	</tbody>
</table>
<h3 id="peer-group-definition-example">Peer group definition example</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">router bgp &lt;ASN&gt;
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-PROVIDER peer group
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-PROVIDER remote-as &lt;upstream-ASN&gt;
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-PROVIDER send-community standard large
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-PROVIDER maximum-routes 1048576 warning-limit 80 percent warning-only
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-PROVIDER route refresh demarcated stale-path removal
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-PROVIDER remove-private-as all replace-as
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-PROVIDER out-delay 6 changes
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-PROVIDER rib-in pre-policy retain all
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">   neighbor X.X.X.X peer group BGR-V4U-EXT-TRANSIT-PROVIDER
</span></span><span class="line"><span class="cl">   neighbor X.X.X.X description TRANSIT-PROVIDER-A
</span></span></code></pre></div><p><code>remove-private-as all</code> strips private ASNs from the AS-path before sending to an upstream. <code>replace-as</code> goes further: instead of leaving a gap, it substitutes the local AS number in place of each removed private ASN. This ensures the AS-path is never empty or shorter than expected when the upstream receives it — some ISPs reject routes with an empty AS-path or apply stricter filtering to them.</p>
<p><code>maximum-routes 0</code> (unlimited) is sometimes recommended for full-table transit peers to avoid session drops as the internet table grows. <code>1048576 warning-limit 80 percent warning-only</code> is used here instead: the session never drops, but a syslog warning fires at ~838k prefixes — providing early notice of abnormal peer behaviour (route leak, misconfigured customer) before it becomes a capacity problem.</p>
<h3 id="ixp-route-server">IXP route server</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">neighbor BGR-V4U-EXT-RS-IXNAME peer group
</span></span><span class="line"><span class="cl">neighbor BGR-V4U-EXT-RS-IXNAME remote-as &lt;RS-ASN&gt;
</span></span><span class="line"><span class="cl">no neighbor BGR-V4U-EXT-RS-IXNAME enforce-first-as  ! RS doesn&#39;t prepend its ASN
</span></span><span class="line"><span class="cl">neighbor BGR-V4U-EXT-RS-IXNAME maximum-routes 0
</span></span><span class="line"><span class="cl">neighbor BGR-V4U-EXT-RS-IXNAME remove-private-as all replace-as
</span></span></code></pre></div><h3 id="bfd-on-ebgp-peers">BFD on eBGP peers</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">neighbor &lt;IP&gt; bfd damping
</span></span><span class="line"><span class="cl">neighbor &lt;IP&gt; bfd interval 300 min-rx 300 multiplier 4
</span></span><span class="line"><span class="cl">! damping: suppress BFD flaps from triggering BGP session churn
</span></span><span class="line"><span class="cl">! 300ms × 4 = 1.2s detection time
</span></span></code></pre></div><p>The standard internet-edge recommendation is 500 ms × 3 (1.5 s detection). Timers here are tightened to 300 ms × 4 (1.2 s) to detect link failures faster. <code>bfd damping</code> is added to prevent rapid BFD oscillations on unstable links from cycling the BGP session — without it, a flapping physical link would repeatedly reset BGP, causing unnecessary route churn across the network.</p>
<hr>
<h2 id="rcf--routing-control-functions">RCF — Routing Control Functions</h2>
<p>RCF replaces route-maps for BGP policy. Functions are written in EOS RCF language and applied as <code>rcf in &lt;function&gt;()</code> / <code>rcf out &lt;function&gt;()</code>.</p>
<h3 id="policy-by-peer-type">Policy by peer type</h3>
<table>
	<thead>
			<tr>
					<th>Peer type</th>
					<th>Inbound RCF</th>
					<th>Outbound RCF</th>
					<th>Key logic</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>iBGP border</td>
					<td><code>allow_all()</code></td>
					<td><code>rp_nhs_cisco_style()</code></td>
					<td>Accept all; set NH to self Cisco-style</td>
			</tr>
			<tr>
					<td>iBGP RR client</td>
					<td><code>RP_V4U_INT_RRC_REDUCED_IN()</code></td>
					<td><code>RP_V4U_INT_RRC_REDUCED_OUT()</code></td>
					<td>Reduced table to PEs</td>
			</tr>
			<tr>
					<td>Upstream transit</td>
					<td><code>RP_V4U_TRANSIT_&lt;X&gt;_IN()</code></td>
					<td><code>RP_V4U_TRANSIT_&lt;X&gt;_OUT()</code></td>
					<td>Reject bogons/own; export own + communities</td>
			</tr>
			<tr>
					<td>IXP route server</td>
					<td><code>RP_V4U_RS_&lt;IX&gt;_IN_&lt;LOC&gt;()</code></td>
					<td><code>RP_V4U_RS_&lt;IX&gt;_OUT_&lt;LOC&gt;()</code></td>
					<td>Filter bogons/private; export own with LC</td>
			</tr>
			<tr>
					<td>Direct peer</td>
					<td><code>RP_V4U_PEER_&lt;X&gt;_IN_&lt;IXP&gt;()</code></td>
					<td><code>RP_V4U_PEER_&lt;X&gt;_OUT_&lt;IXP&gt;()</code></td>
					<td>Strict max-prefix; own prefixes out</td>
			</tr>
			<tr>
					<td>Customer transit</td>
					<td><code>RP_V4U_CUST_&lt;X&gt;_IN()</code></td>
					<td><code>RP_V4U_CUST_&lt;X&gt;_OUT()</code></td>
					<td>Customer&rsquo;s own prefixes in; default + table out</td>
			</tr>
	</tbody>
</table>
<h3 id="rcf-application-example">RCF application example</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">address-family ipv4
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-&lt;PROVIDER-A&gt;   rcf in  RP_V4U_TRANSIT_&lt;PROVIDER-A&gt;_IN()
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TRANSIT-&lt;PROVIDER-A&gt;   rcf out RP_V4U_TRANSIT_&lt;PROVIDER-A&gt;_OUT()
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-PEER-&lt;PEER-A-IX&gt;       rcf in  RP_V4U_PEER_&lt;PEER-A&gt;_IN_IX_&lt;LOC&gt;()
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-PEER-&lt;PEER-A-IX&gt;       rcf out RP_V4U_PEER_&lt;PEER-A&gt;_OUT_IX_&lt;LOC&gt;()
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-CUST-&lt;CUSTOMER&gt;         rcf in  RP_V4U_CUST_&lt;CUSTOMER&gt;_IN()
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-CUST-&lt;CUSTOMER&gt;         rcf out RP_V4U_CUST_&lt;CUSTOMER&gt;_OUT()
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TOOLS-SCRUB             rcf in  deny_all()
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-EXT-TOOLS-SCRUB             rcf out RP_V4U_TOOLS_SCRUB_OUT()
</span></span></code></pre></div><hr>
<h2 id="bgp-missing-policy-safety">BGP Missing-policy Safety</h2>
<p>RFC 8212 defines that a BGP speaker should deny routes in both directions when no policy is configured — EOS does not implement this by default and requires explicit configuration. <code>action deny</code> is per-direction: a peer with only an inbound policy will not have its outbound silently blocked. This is intentional — monitoring and looking-glass peer-groups carry no outbound policy by design and should not be affected. The alternative <code>action deny-in-out</code> would deny both directions whenever either direction lacks a policy, which is too broad for a multi-purpose border router.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">address-family ipv4
</span></span><span class="line"><span class="cl">   bgp missing-policy direction in  action deny
</span></span><span class="line"><span class="cl">   bgp missing-policy direction out action deny
</span></span><span class="line"><span class="cl">address-family ipv6
</span></span><span class="line"><span class="cl">   bgp missing-policy direction in  action deny
</span></span><span class="line"><span class="cl">   bgp missing-policy direction out action deny
</span></span></code></pre></div><p>A new peer-group without RCF assignments will have 0 prefixes in/out — this is intentional and forces explicit policy before a session becomes operational.</p>
<hr>
<h2 id="bgp-add-paths-ibgp">BGP Add-paths (iBGP)</h2>
<p>Add-paths (RFC 7911) enables BGP Prefix Independent Convergence (PIC). Without it, a next-hop failure triggers a full BGP re-convergence scan across the entire routing table — on a full internet table this takes seconds. With <code>bgp additional-paths install</code>, a backup path is pre-installed in the FIB alongside the primary. When the primary next-hop fails, the dataplane switches to the backup immediately without waiting for BGP to rerun bestpath selection.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">router bgp &lt;ASN&gt;
</span></span><span class="line"><span class="cl">   bgp additional-paths install
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">   ! iBGP border full-mesh
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-INT-IBGPFM-BORDER additional-paths receive
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-INT-IBGPFM-BORDER additional-paths send backup
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">   ! RR clients — reflect best + backup to PEs
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-INT-RRC-CLIENT additional-paths receive
</span></span><span class="line"><span class="cl">   neighbor BGR-V4U-INT-RRC-CLIENT additional-paths send backup
</span></span></code></pre></div><table>
	<thead>
			<tr>
					<th>Mode</th>
					<th>Behaviour</th>
					<th>Use case</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>any</code></td>
					<td>Send all paths with unique path-id</td>
					<td>RR reflecting all paths</td>
			</tr>
			<tr>
					<td><code>backup</code></td>
					<td>Send best + first non-best only</td>
					<td>Border routers — backup for fast-reroute</td>
			</tr>
			<tr>
					<td><code>all</code></td>
					<td>All best paths per ECMP group</td>
					<td>ECMP load balancing</td>
			</tr>
	</tbody>
</table>
<p><code>send backup</code> installs the backup path in FIB for sub-second failover when the primary NH fails — before BGP re-converges.</p>
<hr>
<h2 id="nh-resolution-via-tunnel-rib">NH Resolution via Tunnel-rib</h2>
<p>BGP next-hops resolved through MPLS tunnels. Applied as a second <code>router bgp</code> stanza.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">router bgp &lt;ASN&gt;
</span></span><span class="line"><span class="cl">   address-family ipv4
</span></span><span class="line"><span class="cl">      next-hop resolution ribs tunnel-rib TR-SR-OVER-LDP system-connected
</span></span><span class="line"><span class="cl">   address-family ipv6
</span></span><span class="line"><span class="cl">      next-hop resolution ribs tunnel-rib TR-SR-OVER-LDP system-connected
</span></span><span class="line"><span class="cl">   address-family vpn-ipv4
</span></span><span class="line"><span class="cl">      next-hop resolution ribs tunnel-rib TR-SR-OVER-LDP system-connected
</span></span><span class="line"><span class="cl">   address-family vpn-ipv6
</span></span><span class="line"><span class="cl">      next-hop resolution ribs tunnel-rib TR-SR-OVER-LDP system-connected
</span></span></code></pre></div><hr>
<h2 id="bmp-monitoring">BMP Monitoring</h2>
<p>BMP (BGP Monitoring Protocol, RFC 7854) streams BGP session state and adj-RIB updates to external collectors for offline analysis, route leak detection, and policy auditing. Two collectors are deployed for redundancy. Both pre-policy and post-policy exports are enabled — pre-policy shows exactly what the peer advertised before any filters, post-policy shows what was accepted. <code>bgp rib bestpaths disabled</code> reduces collector load by suppressing loc-RIB bestpath streaming; the collectors reconstruct bestpath from the per-peer adj-RIB feeds. <code>rib-in pre-policy retain all</code> on transit peer-groups (§18) is a prerequisite for meaningful pre-policy export.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">router</span> <span class="n">bgp</span> <span class="o">&lt;</span><span class="n">ASN</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="n">monitoring</span> <span class="n">station</span> <span class="n">bmp</span><span class="o">-</span><span class="n">collector</span><span class="o">-</span><span class="n">site</span><span class="o">-</span><span class="n">a</span>
</span></span><span class="line"><span class="cl">      <span class="n">update</span><span class="o">-</span><span class="n">source</span> <span class="n">Loopback0</span>
</span></span><span class="line"><span class="cl">      <span class="n">statistics</span>
</span></span><span class="line"><span class="cl">      <span class="n">connection</span> <span class="n">address</span> <span class="o">&lt;</span><span class="n">BMP</span><span class="o">-</span><span class="n">COLLECTOR</span><span class="o">-</span><span class="mi">1</span><span class="o">-</span><span class="ne">IP</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="n">connection</span> <span class="n">mode</span> <span class="n">active</span> <span class="n">port</span> <span class="mi">1790</span>
</span></span><span class="line"><span class="cl">      <span class="n">connection</span> <span class="n">keepalive</span> <span class="mi">30</span> <span class="mi">3</span> <span class="mi">10</span>        <span class="o">!</span> <span class="n">interval</span> <span class="mi">30</span><span class="n">s</span><span class="p">,</span> <span class="n">retries</span> <span class="mi">3</span><span class="p">,</span> <span class="n">timeout</span> <span class="mi">10</span><span class="n">s</span>
</span></span><span class="line"><span class="cl">      <span class="k">export</span><span class="o">-</span><span class="n">policy</span> <span class="n">received</span> <span class="n">routes</span> <span class="n">pre</span><span class="o">-</span><span class="n">policy</span> <span class="n">post</span><span class="o">-</span><span class="n">policy</span>
</span></span><span class="line"><span class="cl">      <span class="k">export</span><span class="o">-</span><span class="n">policy</span> <span class="n">bgp</span> <span class="n">rib</span> <span class="n">bestpaths</span> <span class="n">disabled</span>
</span></span><span class="line"><span class="cl">   <span class="o">!</span>
</span></span><span class="line"><span class="cl">   <span class="n">monitoring</span> <span class="n">station</span> <span class="n">bmp</span><span class="o">-</span><span class="n">collector</span><span class="o">-</span><span class="n">site</span><span class="o">-</span><span class="n">b</span>
</span></span><span class="line"><span class="cl">      <span class="n">update</span><span class="o">-</span><span class="n">source</span> <span class="n">Loopback0</span>
</span></span><span class="line"><span class="cl">      <span class="n">statistics</span>
</span></span><span class="line"><span class="cl">      <span class="n">connection</span> <span class="n">address</span> <span class="o">&lt;</span><span class="n">BMP</span><span class="o">-</span><span class="n">COLLECTOR</span><span class="o">-</span><span class="mi">2</span><span class="o">-</span><span class="ne">IP</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="n">connection</span> <span class="n">mode</span> <span class="n">active</span> <span class="n">port</span> <span class="mi">1790</span>
</span></span><span class="line"><span class="cl">      <span class="n">connection</span> <span class="n">keepalive</span> <span class="mi">30</span> <span class="mi">3</span> <span class="mi">10</span>
</span></span><span class="line"><span class="cl">      <span class="k">export</span><span class="o">-</span><span class="n">policy</span> <span class="n">received</span> <span class="n">routes</span> <span class="n">pre</span><span class="o">-</span><span class="n">policy</span> <span class="n">post</span><span class="o">-</span><span class="n">policy</span>
</span></span><span class="line"><span class="cl">      <span class="k">export</span><span class="o">-</span><span class="n">policy</span> <span class="n">bgp</span> <span class="n">rib</span> <span class="n">bestpaths</span> <span class="n">disabled</span>
</span></span></code></pre></div><h3 id="export-policy">Export policy</h3>
<table>
	<thead>
			<tr>
					<th>Parameter</th>
					<th>Value</th>
					<th>Meaning</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>received routes pre-policy</code></td>
					<td>enabled</td>
					<td>Stream adj-rib-in-pre (raw from peer)</td>
			</tr>
			<tr>
					<td><code>received routes post-policy</code></td>
					<td>enabled</td>
					<td>Stream adj-rib-in-post (after our filters)</td>
			</tr>
			<tr>
					<td><code>bgp rib bestpaths</code></td>
					<td>disabled</td>
					<td>Do not stream loc-rib bestpaths (reduces load)</td>
			</tr>
	</tbody>
</table>
<h3 id="bmp-message-types-rfc-7854">BMP message types (RFC 7854)</h3>
<table>
	<thead>
			<tr>
					<th>Message</th>
					<th>Trigger</th>
					<th>Contains</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Route Monitoring</td>
					<td>BGP UPDATE send/receive</td>
					<td>BGP UPDATE with path attributes</td>
			</tr>
			<tr>
					<td>Statistics Report</td>
					<td>Periodic</td>
					<td>Prefix counters, rejected routes</td>
			</tr>
			<tr>
					<td>Peer Down</td>
					<td>Session down</td>
					<td>Peer state, reason code</td>
			</tr>
			<tr>
					<td>Peer Up</td>
					<td>Session established</td>
					<td>OPEN messages, capabilities</td>
			</tr>
			<tr>
					<td>Initiation</td>
					<td>BMP session start</td>
					<td>Router sysDescr, sysName</td>
			</tr>
	</tbody>
</table>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">show bgp monitoring station
</span></span><span class="line"><span class="cl">show bgp monitoring station bmp-collector-site-a
</span></span><span class="line"><span class="cl">show bgp monitoring statistics
</span></span><span class="line"><span class="cl">show bgp monitoring peer
</span></span></code></pre></div><hr>
<h2 id="bgp-lg-role">BGP-LG Role</h2>
<p>EOS has a built-in <code>bgplg</code> role for read-only BGP lookups. The role definition is explicit and uses CLI command ACLs.</p>
<h3 id="user">User</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">username bgplg privilege 15 role bgplg secret sha512 &lt;hash&gt;
</span></span></code></pre></div><h3 id="role-definition">Role definition</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">role bgplg
</span></span><span class="line"><span class="cl">   5  permit mode exec command terminal width
</span></span><span class="line"><span class="cl">   6  permit mode exec command terminal length
</span></span><span class="line"><span class="cl">   10 permit mode exec command ping
</span></span><span class="line"><span class="cl">   20 permit mode exec command traceroute
</span></span><span class="line"><span class="cl">   30 permit mode exec command show ip bgp
</span></span><span class="line"><span class="cl">   40 permit mode exec command show ipv6 bgp
</span></span><span class="line"><span class="cl">   50 permit mode exec command show bgp
</span></span><span class="line"><span class="cl">   60 permit mode exec command show route
</span></span><span class="line"><span class="cl">   70 deny command .*                        ! deny everything else
</span></span></code></pre></div><h3 id="ibgp-peer-group-for-bgplg">iBGP peer group for bgplg</h3>
<p>A dedicated iBGP peer-group <code>BGR-ALL-INT-IBGP-BGPLG-LG</code> is used to feed a local route-reflector session for the looking glass. This allows the bgplg user to query a local BGP view without exposing the full RIB or requiring a separate session to a route server.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">router bgp &lt;ASN&gt;
</span></span><span class="line"><span class="cl">   neighbor BGR-ALL-INT-IBGP-BGPLG-LG peer group
</span></span><span class="line"><span class="cl">   neighbor BGR-ALL-INT-IBGP-BGPLG-LG remote-as &lt;ASN&gt;
</span></span><span class="line"><span class="cl">   neighbor BGR-ALL-INT-IBGP-BGPLG-LG update-source Loopback0
</span></span><span class="line"><span class="cl">   no neighbor BGR-ALL-INT-IBGP-BGPLG-LG additional-paths send
</span></span><span class="line"><span class="cl">   neighbor BGR-ALL-INT-IBGP-BGPLG-LG send-community standard extended large
</span></span><span class="line"><span class="cl">   neighbor BGR-ALL-INT-IBGP-BGPLG-LG maximum-routes 10
</span></span><span class="line"><span class="cl">   neighbor BGR-ALL-INT-IBGP-BGPLG-LG route refresh demarcated stale-path removal
</span></span></code></pre></div><p><code>maximum-routes 10</code> — safety limit; the LG peer-group is for query, not full table distribution.</p>
<hr>
<h2 id="show-tech-support-optimization">Show Tech-Support Optimization</h2>
<p>On a router carrying a full internet routing table, the default <code>show tech-support</code> output includes BGP RIB and routing table commands that can take 20+ minutes to complete and produce several hundred MB of text. This makes the bundle impractical for routine collection and can block the CLI during time-sensitive troubleshooting.</p>
<p>EOS allows individual show commands to be excluded from the tech-support bundle via <code>management tech-support</code>. The commands that generate disproportionately large output on internet-edge routers are the full BGP RIB dumps and routing table listings — these are better captured on-demand when needed rather than included in every tech-support.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">management tech-support
</span></span><span class="line"><span class="cl">   show commands exclude
</span></span><span class="line"><span class="cl">      show ip bgp
</span></span><span class="line"><span class="cl">      show ip bgp detail
</span></span><span class="line"><span class="cl">      show ip bgp neighbors detail
</span></span><span class="line"><span class="cl">      show ipv6 bgp
</span></span><span class="line"><span class="cl">      show ipv6 bgp detail
</span></span><span class="line"><span class="cl">      show ipv6 bgp neighbors detail
</span></span><span class="line"><span class="cl">      show ip route
</span></span><span class="line"><span class="cl">      show ipv6 route
</span></span><span class="line"><span class="cl">      show ip route detail
</span></span><span class="line"><span class="cl">      show ipv6 route detail
</span></span></code></pre></div><p>For regular offline capture, schedule a daily compressed tech-support to flash:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">schedule DAILY-TECH-SUPPORT
</span></span><span class="line"><span class="cl">   interval 1440
</span></span><span class="line"><span class="cl">   timeout 120
</span></span><span class="line"><span class="cl">   command show tech-support | gzip &gt; flash:tech-support-latest.log.gz
</span></span></code></pre></div><p>The <code>interval 1440</code> fires once per day (minutes). <code>timeout 120</code> prevents the job from blocking indefinitely if the system is under load. The output file is overwritten each run — for retention, use a syslog-forwarded copy or replace the filename with a datestamped path via a bash alias.</p>
]]></content:encoded></item></channel></rss>