Skip to main content

Interfaces Configuration

Configure network interface role mapping.

Overview

The interfaces section maps physical network interfaces to their roles in the BNG:

  • Management — Out-of-band management (SSH, API, SNMP)
  • Subscriber Trunk — Subscriber-facing trunk (QinQ tagged traffic)
  • Upstream — Upstream/transit peering (BGP/OSPF)
  • CGNAT Handoff — Optional dedicated CGNAT handoff interface

Configuration Options

management

Management interface for out-of-band access (required).

interfaces:
management: "eth0"

Type: String (interface name)
Required: Yes
Default: None
Constraints: Valid interface name (e.g., "eth0", "ens18")

CLI:

abng# set interfaces management "eth0"

Purpose:

  • SSH access for CLI and administration
  • REST API access
  • SNMP monitoring
  • Always in management VRF (separate from subscriber traffic)

subscriber_trunk

Subscriber-facing trunk interface (required).

interfaces:
subscriber_trunk: "eth1"

Type: String (interface name)
Required: Yes
Default: None
Constraints: Valid interface name (e.g., "eth1", "ens19")

CLI:

abng# set interfaces subscriber_trunk "eth1"

Purpose:

  • Receives QinQ-tagged subscriber traffic
  • VLAN demux creates sub-interfaces on this trunk
  • Carries PPPoE PADI/PADO and DHCP Discover/Offer frames
  • Can be a VLAN interface itself (e.g., "eth1.6969" for router-on-a-stick)

upstream

Upstream/transit peering interface (required).

interfaces:
upstream: "eth2"

Type: String (interface name)
Required: Yes
Default: None
Constraints: Valid interface name (e.g., "eth2", "ens20")

CLI:

abng# set interfaces upstream "eth2"

Purpose:

  • BGP and OSPF peering with upstream routers
  • Carries subscriber traffic to/from upstream
  • Carries transit traffic

cgnat_handoff

Optional dedicated CGNAT handoff interface.

interfaces:
cgnat_handoff: "eth3"

Type: String (interface name)
Required: No
Default: None
Constraints: Valid interface name (e.g., "eth3", "ens21")

CLI:

abng# set interfaces cgnat_handoff "eth3"

Purpose:

  • Dedicated interface for CGNAT traffic steering
  • Separates CGNAT traffic from upstream traffic
  • Optional — if not configured, CGNAT traffic uses upstream interface

Example Configurations

Standard Configuration

Three separate physical interfaces:

interfaces:
management: "eth0"
subscriber_trunk: "eth1"
upstream: "eth2"

Network layout:

Management ──── eth0
Subscribers ──── eth1
Upstream ──────── eth2

With CGNAT Handoff

Four separate physical interfaces:

interfaces:
management: "eth0"
subscriber_trunk: "eth1"
upstream: "eth2"
cgnat_handoff: "eth3"

Network layout:

Management ──── eth0
Subscribers ──── eth1
Upstream ──────── eth2
CGNAT ────────── eth3

Router-on-a-Stick

All services on one physical interface, separated by VLANs:

interfaces:
management: "eth0"
subscriber_trunk: "eth1.6969"
upstream: "eth1.6970"
cgnat_handoff: "eth1.6971"

Network layout:

Management ──── eth0
Subscribers ──── eth1.6969 (VLAN 6969)
Upstream ──────── eth1.6970 (VLAN 6970)
CGNAT ────────── eth1.6971 (VLAN 6971)

Note: Management is always on a separate interface (eth0) and in the management VRF.

Configuration via CLI

Set Management Interface

abng> configure
abng# set interfaces management "eth0"
abng# commit

Set Subscriber Trunk

abng# set interfaces subscriber_trunk "eth1"
abng# commit

Set Upstream Interface

abng# set interfaces upstream "eth2"
abng# commit

Set CGNAT Handoff

abng# set interfaces cgnat_handoff "eth3"
abng# commit

Verification

View Interface Configuration

abng> show configuration | match "^interfaces:"
interfaces:
management: eth0
subscriber_trunk: eth1
upstream: eth2
cgnat_handoff: eth3

View Interface Status

abng> show interfaces
┌──────────┬──────────┬─────────────┬──────────┬──────────┐
│ Name │ State │ IP Address │ MTU │ RX/TX │
├──────────┼──────────┼─────────────┼──────────┼──────────┤
│ eth0 │ UP │ 10.255.0.1 │ 15001.2G/850M│
│ eth1 │ UP │ — │ 150045.3G/12G│
│ eth2 │ UP │ 10.255.0.2 │ 15002.1G/1.8G│
│ eth3 │ UP │ 10.99.0.1 │ 1500 │ 500M/200M│
└──────────┴──────────┴─────────────┴──────────┴──────────┘

Validation Rules

FieldValidation
managementMust be a valid interface name that exists on the system
subscriber_trunkMust be a valid interface name that exists on the system
upstreamMust be a valid interface name that exists on the system
cgnat_handoffOptional, must be a valid interface name if specified

Best Practices

  1. Naming Convention — Use consistent naming (e.g., eth0, eth1, eth2)
  2. Separate Interfaces — Use separate physical interfaces when possible for better isolation
  3. Management Interface — Always use a dedicated management interface (eth0)
  4. Subscriber Trunk — Use a high-capacity interface for subscriber traffic
  5. Upstream Interface — Use a high-capacity interface for upstream peering
  6. CGNAT Handoff — Use a dedicated interface if CGNAT traffic is significant
  7. Router-on-a-Stick — Only use for small deployments or testing

Troubleshooting

Interface Not Found

Validation error: interface "eth10" not found

Solution: Check available interfaces:

ip link show

Interface Already in Use

Error: interface "eth0" is already in use

Solution: Ensure the interface is not used by another service.

Subscriber Trunk Not Receiving Traffic

  1. Check interface is up: ip link show eth1
  2. Check VLAN tags are correct: tcpdump -i eth1 -e
  3. Check demux is enabled: show configuration | match demux
  4. Check demux logs: journalctl -u abng-demux -f

Next Steps