Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 25 additions & 10 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,23 @@ Release notes for the Juniper Validated Design (JVD) configuration repository.

## 2026-06-01

Two Enterprise WAN snip libraries audited and enriched — EWAN Advanced
Core & Edge and EWAN Finance — bringing cross-reference metadata,
service-mapping headers, and topology-derived use-case context to both.
The repository now also carries an explicit Apache-2.0 license.
New 70-snip library for the 5G xHaul Low-Latency Queueing JVD, plus two
Enterprise WAN snip libraries audited and enriched — EWAN Advanced
Core & Edge and EWAN Finance. The repository now also carries an
explicit Apache-2.0 license.

### New content

- **Low-Latency Queueing snip library** — 70 new configuration
snippets (39 EVO, 31 Junos) in
[`service_provider/low_latency_queueing/configuration/snips/`](service_provider/low_latency_queueing/configuration/snips/).
Covers 5G fronthaul, midhaul, and backhaul QoS across
ACX7509/ACX7100/ACX7024 (EVO), PTX10001-36MR (EVO), and
MX480/MX204/MX304 (Junos). Includes 8-class CoS model aligned to
O-RAN multi-priority requirements, EVPN-ELAN/VPWS/FXC services,
BGP-VPLS, L3VPN-IRB, per-hop behavior classifiers (DSCP, EXP,
802.1p), and SR-ISIS/MPLS transport.

- **EWAN Advanced Core & Edge snip library audit** — headers enriched
across all 48 snips in
[`enterprise_wan/ewan_adv_core_edge/configuration/snips/`](enterprise_wan/ewan_adv_core_edge/configuration/snips/).
Expand All @@ -35,11 +45,14 @@ The repository now also carries an explicit Apache-2.0 license.

- **Portal snip data** regenerated — the
[Snip Library browser](https://juniper.github.io/jvd/portal/#snips)
reflects updated header metadata for both EWAN libraries
(442 snips across 8 JVDs).
reflects the new LLQ library and updated header metadata for both
EWAN libraries (515 snips across 9 JVDs).

### What this means for you

- If you're deploying 5G xHaul with low-latency QoS, start from the
LLQ snips — they provide a validated 8-class CoS model with
per-hop classifiers ready to adapt to your DSCP/EXP marking scheme.
- Pull the latest `main` to get corrected cross-references in both
EWAN snip libraries — `Pair with:` and `Seen on:` sections now
accurately reflect validated device pairings.
Expand All @@ -58,11 +71,12 @@ The repository now also carries an explicit Apache-2.0 license.

| JVD / Area | Added | Modified | Lines added | Lines removed |
| --- | ---: | ---: | ---: | ---: |
| `service_provider/low_latency_queueing` | 72 | 0 | 3,376 | 0 |
| `enterprise_wan/ewan_adv_core_edge` | 0 | 34 | 107 | 9 |
| `enterprise_wan/ewan_finance` | 0 | 20 | 80 | 15 |
| `portal/` | 0 | 2 | 790 | 195 |
| `portal/` | 0 | 2 | 5,542 | 635 |
| `LICENSE` | 1 | 0 | 190 | 0 |
| **TOTAL** | **1** | **56** | **1,167** | **219** |
| **TOTAL** | **73** | **56** | **9,295** | **659** |

</details>

Expand All @@ -71,10 +85,11 @@ The repository now also carries an explicit Apache-2.0 license.

| Area | Lines added | Lines removed | Net |
| --- | ---: | ---: | ---: |
| Service Provider (LLQ) | 3,376 | 0 | +3,376 |
| Enterprise WAN | 187 | 24 | +163 |
| Portal | 790 | 195 | +595 |
| Portal | 5,542 | 635 | +4,907 |
| License | 190 | 0 | +190 |
| **Total** | **1,167** | **219** | **+948** |
| **Total** | **9,295** | **659** | **+8,636** |

</details>

Expand Down
5,192 changes: 4,752 additions & 440 deletions portal/src/data/snips.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Snip Library — 5G xHaul Low-Latency QoS

Reusable configuration snippets extracted from the
[Low-Latency Queueing JVD](../../README.md).

## What's Here

| Category | EVO Snips | Junos Snips | Description |
|----------|-----------|-------------|-------------|
| **cos** | 17 | 12 | Forwarding-classes, classifiers, schedulers, rewrites, interface bindings |
| **firewall** | 3 | 2 | Multi-field classifiers (DSCP→FC, eCPRI MAC→FC) |
| **transport** | 6 | 5 | IS-IS, MPLS, BGP labeled-unicast, ECMP hashing |
| **services** | 4 | 4 | EVPN-VPWS, EVPN-ELAN, BGP-VPLS, L3VPN |
| **policy** | 4 | 4 | PPLB, ALLOW_LOOPBACK, SR loopbacks, next-hop-self |
| **interfaces** | 1 | — | LAG with ESI for EVPN multi-homing |
| **oam** | 1 | — | CFM maintenance-domain (802.1ag) |
| **Total** | **36** | **27** | **63 snips** |

## Key Differentiator: Priority Low-Latency

The headline feature of this JVD is the ACX-specific `priority low-latency`
hardware scheduler (`evo/cos/schedulers-low-latency.conf`). This provides
sub-10µs per-hop latency guarantees for eCPRI fronthaul traffic under
congestion — not available on MX or PTX platforms.

**Scheduler variant split:**
- **ACX (AG/AN):** `SC-LLQ priority low-latency` — hardware LLQ
- **PTX (Core):** `SC-LLQ priority strict-high` — best-available fallback
- **MX (Junos):** `SC-LLQ priority strict-high` — same as PTX

## OS Variants

Snips are filed under `evo/` or `junos/` based on the target OS:

- **EVO** (Evolved Junos): ACX7509, ACX7100-32C, ACX7100-48L, ACX7024, PTX10001-36MR
- **Junos** (Classic): MX204, MX480, MX304

Many CoS/transport/policy snips are byte-identical across OS variants
(noted in headers). The split exists for accurate `Seen on:` tracking
and platform-specific scheduler behavior.

## Device Role Mapping

| Role | Devices | Notable Snips |
|------|---------|---------------|
| Access Node | AN1 (ACX7100-48L), AN3 (ACX7100-48L), AN4 (ACX7024) | LLQ scheduler, eCPRI filter, EVPN-VPWS-MH, LAG-ESI |
| Aggregation HSR | AG1-1 (ACX7509), AG1-2 (ACX7100-32C) | All categories, MFC filters, CFM OAM |
| Aggregation Transport | AG2 (MX204×2), AG3 (MX480×2) | CoS + transport only (no services) |
| Core Router | CR1, CR2 (PTX10001-36MR) | strict-high scheduler, EXP binding, transport |
| Services Aggregation GW | SAG (MX304) | EVPN-ELAN-IRB, VPWS-SH, BGP-VPLS, MFC, L3VPN |

## Template Variables

See [`_variables.md`](_variables.md) for the complete variable reference.
Placeholders use `<variable-name>` syntax in snip bodies.

## Using These Snips

1. Choose the OS variant matching your target platform
2. Replace `<variable>` placeholders with site values
3. Combine snips by following `Pair with:` references in headers
4. Apply CoS binding snips last (they reference schedulers + classifiers)

## Files

- [`_variables.md`](_variables.md) — template variable reference
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# Template Variables — LLQ Snip Library

Variables used in templatized snip bodies. Replace `<variable>` placeholders
with site-specific values when deploying.

## Interface & Unit Variables

| Variable | Description | Example |
|----------|-------------|---------|
| `<ae-interface>` | Aggregated Ethernet interface name | `ae11`, `ae26` |
| `<interface>` | Any physical or logical interface | `et-1/0/1`, `ae26`, `xe-0/1/3:2` |
| `<unit-number>` | Logical unit on the interface | `0`, `101`, `901`, `2501` |

## Addressing & Identity

| Variable | Description | Example |
|----------|-------------|---------|
| `<router-id>` | Device router-id (usually primary loopback) | `192.168.1.3` |
| `<loopback-address>` | BGP local-address (loopback for iBGP) | `192.168.1.3` |
| `<peer-address>` | BGP neighbor address | `192.168.1.9` |
| `<secondary-loopback-v4>` | Additional loopback for SR advertisement | `192.168.10.3` |
| `<secondary-loopback-v6>` | IPv6 secondary loopback for SR | `2001:db8::1:1:10:3` |

## Segment Routing

| Variable | Description | Example |
|----------|-------------|---------|
| `<ipv4-sid-index>` | SR node-segment IPv4 index (unique per device) | `14` |
| `<ipv6-sid-index>` | SR node-segment IPv6 index | `114` |
| `<ipv4-secondary-sid-index>` | SR prefix-segment index for secondary loopback | `214` |
| `<ipv6-secondary-sid-index>` | SR prefix-segment index for secondary IPv6 loopback | `314` |

## Service Instance Variables

| Variable | Description | Example |
|----------|-------------|---------|
| `<instance-name>` | Routing-instance name | `FRONTHAUL-EVPN-VPWS-MH-AN1-1` |
| `<description>` | Human-readable instance description | `L3VPN-IRB-ANYCAST-GATEWAY-MH-1` |
| `<rd-value>` | Route-distinguisher numeric suffix | `3401` |
| `<rd-index>` | RD index (for mac-vrf pattern) | `101` |
| `<rt-value>` | Route-target numeric suffix | `3401` |
| `<rt-index>` | RT index (for mac-vrf pattern) | `101` |
| `<asn>` | Autonomous system number | `63535` |
| `<local-id>` | VPWS local service-id | `1`, `2` |
| `<remote-id>` | VPWS remote service-id | `2`, `1` |

## VLAN & Bridge Domain

| Variable | Description | Example |
|----------|-------------|---------|
| `<vlan-id>` | 802.1Q VLAN identifier | `101`, `901`, `2501` |
| `<vlan-name>` | VLAN name in vlans stanza | `vlan201` |
| `<bridge-domain-name>` | Bridge-domain identifier | `BD_EVPN_ELAN_1501` |
| `<irb-unit>` | IRB interface unit number | `101`, `351` |

## LAG & Multi-Homing

| Variable | Description | Example |
|----------|-------------|---------|
| `<lacp-system-id>` | LACP system-id (shared across AG pair) | `00:00:00:00:00:01` |
| `<esi-value>` | EVPN ESI (10-byte, per-unit unique) | `00:51:11:11:11:11:11:00:00:01` |
| `<service-description>` | Per-unit description string | `FRONTHAUL-EVPN-VPWS-MH-AN1-1` |

## Firewall / MAC Classification

| Variable | Description | Example |
|----------|-------------|---------|
| `<filter-name>` | Firewall filter name | `FF-MFC-IPV4-L3VPN-BD-IRB` |
| `<ecpri-user-plane-mac-N>` | eCPRI user-plane source MAC | `00:0c:0d:00:00:01` |
| `<ecpri-ctrl-plane-mac-N>` | eCPRI control-plane source MAC | `00:0c:0e:00:00:01` |
| `<ecpri-sync-mac-N>` | eCPRI sync source MAC | `00:0c:0f:00:00:01` |
| `<timing-sync-mac-N>` | PTP/timing destination MAC | `00:0c:22:00:00:01` |

## OAM / CFM

| Variable | Description | Example |
|----------|-------------|---------|
| `<md-name>` | Maintenance domain name | `MD_63535` |
| `<level>` | CFM maintenance-domain level (0-7) | `5` |
| `<ma-id>` | Maintenance association identifier | `2501` |
| `<local-mep-id>` | Local MEP identifier | `1003` |
| `<remote-mep-id>` | Remote MEP identifier | `1001` |

## BGP Groups

| Variable | Description | Example |
|----------|-------------|---------|
| `<group-name>` | BGP group name | `ibgp_meg_rr`, `ibgp_cr` |
| `<site-name>` | BGP-VPLS site name | `r2`, `r11` |
| `<site-id>` | BGP-VPLS site-identifier | `1003`, `1011` |
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Topic: DSCP-IPv6 classifier (CL-DSCP-IPV6) — ingress IPv6 packet-to-FC mapping
* Variant: Evolved-OS (EVO)
* Seen on:
* Junos: (none)
* EVO: ag1_1_acx7509 ag1_2_acx7100-32c an1_acx7100-48l an3_acx7100-48l an4_acx7024 cr1_ptx10001-36mr cr2_ptx10001-36mr
*
* Highlights:
* - Identical classification logic to CL-DSCP but applied to IPv6 traffic
* - Required when inet6 traffic is classified separately from inet
* - Applied to L3 service interfaces alongside CL-DSCP
* - Body is byte-identical to the Junos sibling
*
* Pair with:
* - evo/cos/cos-binding-l3-service.conf
* - evo/cos/forwarding-classes.conf
* - evo/cos/classifier-dscp.conf (IPv4 counterpart)
* - evo/cos/rewrite-dscp-ipv6.conf (egress IPv6 FC → DSCP marking)
*/

class-of-service {
classifiers {
dscp-ipv6 CL-DSCP-IPV6 {
import default;
forwarding-class FC-BEST-EFFORT {
loss-priority high code-points be;
}
forwarding-class FC-CONTROL {
loss-priority low code-points cs7;
}
forwarding-class FC-HIGH {
loss-priority high code-points af33;
loss-priority low code-points [ cs3 af31 ];
loss-priority medium-high code-points af32;
}
forwarding-class FC-LLQ {
loss-priority high code-points af43;
loss-priority low code-points [ cs4 af41 ];
loss-priority medium-high code-points af42;
}
forwarding-class FC-LOW {
loss-priority high code-points af13;
loss-priority low code-points [ cs1 af11 ];
loss-priority medium-high code-points af12;
}
forwarding-class FC-MEDIUM {
loss-priority high code-points af23;
loss-priority low code-points [ cs2 af21 ];
loss-priority medium-high code-points af22;
}
forwarding-class FC-REALTIME {
loss-priority low code-points ef;
}
forwarding-class FC-SIGNALING {
loss-priority high code-points cs5;
loss-priority low code-points cs6;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Topic: DSCP classifier (CL-DSCP) — ingress packet-to-FC mapping
* Variant: Evolved-OS (EVO)
* Seen on:
* Junos: (none)
* EVO: ag1_1_acx7509 ag1_2_acx7100-32c an1_acx7100-48l an3_acx7100-48l an4_acx7024 cr1_ptx10001-36mr cr2_ptx10001-36mr
*
* Highlights:
* - AF per-hop behavior: AF4x → FC-LLQ, AF3x → FC-HIGH, AF2x → FC-MEDIUM,
* AF1x → FC-LOW, EF → FC-REALTIME, CS6/CS7 → FC-SIGNALING/CONTROL
* - 3-level loss-priority (low/medium-high/high) for AFxy drop-precedence
* - import default covers unmapped code-points → FC-BEST-EFFORT
* - Applied to L3 service interfaces via interface cos-binding
* - Body is byte-identical to the Junos sibling
*
* Pair with:
* - evo/cos/classifier-dscp-ipv6.conf
* - evo/cos/cos-binding-l3-service.conf
* - evo/cos/forwarding-classes.conf
* - evo/cos/forwarding-classes.conf (FC queue-num definitions)
* - evo/cos/rewrite-dscp.conf (egress FC → DSCP marking)
*/

class-of-service {
classifiers {
dscp CL-DSCP {
import default;
forwarding-class FC-BEST-EFFORT {
loss-priority high code-points be;
}
forwarding-class FC-CONTROL {
loss-priority low code-points cs7;
}
forwarding-class FC-HIGH {
loss-priority high code-points af33;
loss-priority low code-points [ cs3 af31 ];
loss-priority medium-high code-points af32;
}
forwarding-class FC-LLQ {
loss-priority high code-points af43;
loss-priority low code-points [ cs4 af41 ];
loss-priority medium-high code-points af42;
}
forwarding-class FC-LOW {
loss-priority high code-points af13;
loss-priority low code-points [ cs1 af11 ];
loss-priority medium-high code-points af12;
}
forwarding-class FC-MEDIUM {
loss-priority high code-points af23;
loss-priority low code-points [ cs2 af21 ];
loss-priority medium-high code-points af22;
}
forwarding-class FC-REALTIME {
loss-priority low code-points ef;
}
forwarding-class FC-SIGNALING {
loss-priority high code-points cs5;
loss-priority low code-points cs6;
}
}
}
}
Loading
Loading