IPoE

The BNG Blaster excels in emulating IP over Ethernet (IPoE) subscribers, allowing network administrators, developers, and service providers to simulate subscriber connections that utilize Ethernet as the underlying link layer protocol. This functionality is particularly valuable for testing and validating the performance and behavior of network infrastructure components that handle IPoE-based connections.

IPoE subscribers can be addressed either statically or dynamically. For static addressing, the BNG Blaster enables users to define and assign specific IP addresses to individual subscribers or groups of subscribers, facilitating accurate testing of network configurations and policies that rely on static IP address allocation. For dynamic addressing, the BNG Blaster supports DHCP (Dynamic Host Configuration Protocol) to dynamically allocate IP addresses to subscribers, allowing realistic testing of scenarios where IPoE subscribers obtain their addresses dynamically, similar to real-world deployments.

The BNG Blaster also provides support for different VLAN (Virtual Local Area Network) modes, including 1:1 and N:1 configurations. In the 1:1 VLAN mode, each IPoE subscriber is associated with a dedicated VLAN, ensuring isolation and individual control over their network traffic. On the other hand, the N:1 VLAN mode allows multiple IPoE subscribers to share a common VLAN.

Static Addresses

Static addresses mean that the IP address and gateway are assigned statically as shown in the example below.

{
    "interfaces": {
        "access": [
        {
            "interface": "eth1",
            "type": "ipoe",
            "vlan-mode": "1:1",
            "outer-vlan-min": 128,
            "outer-vlan-max": 4000,
            "address": "200.0.0.1",
            "address-iter": "0.0.0.4",
            "gateway": "200.0.0.2",
            "gateway-iter": "0.0.0.4"
        }
    ]
    }
}

DHCPv4/v6

The most common case for IPoE is using DHCPv4/v6 as shown below.

{
    "interfaces": {
        "access": [
        {
            "interface": "eth1",
            "type": "ipoe",
            "outer-vlan": 7,
            "vlan-mode": "N:1"
        }
    ]
    },
    "dhcp": {
        "enable": true
    },
    "dhcpv6": {
        "enable": true
    },
    "access-line": {
        "agent-remote-id": "DEU.RTBRICK.{session-global}",
        "agent-circuit-id": "0.0.0.0/0.0.0.0 eth 0:{session-global}"
    }
}

IPoE

{ "ipoe": {} }

Attribute

Description

ipv6

Enable/disable IPv6.
Default: true (enabled)

ipv4

Enable/disable IPv4.
Default: true (enabled)

arp-timeout

Initial ARP timeout/retry interval in seconds.
Default: 1

arp-interval

Periodic ARP interval in seconds (0 means disabled).
Default: 300

vlan-priority

VLAN PBIT for generic IPoE control traffic.
Used for ARP and ICMPv6 ND/RS/NS control traffic.
Default master value for IPoE traffic (including DHCP and DHCPv6)
unless overridden by protocol-specific settings.
Default: 0

DHCP

{ "dhcp": {} }

Attribute

Description

enable

This option allows enabling or disabling DHCP.
Default: true

broadcast

DHCP broadcast flag.
Default: false

timeout

DHCP timeout in seconds.
Default: 5

retry

DHCP retry.
Default: 10

release-interval

DHCP release interval.
Default: 1

release-retry

DHCP release retry.
Default: 3

tos

IPv4 TOS for all DHCP control traffic.
Default: 0

vlan-priority

VLAN PBIT for all DHCP control traffic.
Overrides IPoE vlan-priority for DHCP packets only.
Default: 0

access-line

Add access-line attributes like Agent-Remote/Circuit-Id.
Default: true

vendor-class-id

Add DHCP vendor class id/option 60.
Default: none

keep-address

Emulates init-reboot on stop if enabled together with
release-retry set to zero (disabled).
Default: false

DHCPv6

{ "dhcpv6": {} }

Attribute

Description

enable

This option allows enabling or disabling DHCPv6.
Default: true

ia-na

This option allows enabling or disabling DHCPv6 IA_NA for IPoE.
IA_NA for PPPoE is enabled per access interface (dhcpv6-ia-na).
Default: true

ia-pd

This option allows enabling or disabling DHCPv6 IA_PD.
Default: true

ia-separate

Send separate requests for IA_NA and IA_PD.
Default: false

rapid-commit

DHCPv6 rapid commit (2-way handshake).
Default: true

timeout

DHCPv6 timeout in seconds.
Default: 5

retry

DHCPv6 retry.
Default: 10

vlan-priority

VLAN PBIT for all DHCPv6 control traffic.
Overrides IPoE vlan-priority for DHCPv6 packets only.
Default: 0

access-line

Add access-line attributes like Agent-Remote/Circuit-Id.
Default: true

ldra

This option allows enabling or disabling LDRA.
DHCPv6 LDRA (Lightweight DHCPv6 Relay Agent) is defined in
Adding access-line information like Agent-Remote-Id or
Agent-Circuit-Id should be used with LDRA enabled only.
Default: false

IPoE Commands

The command session-info session-id <id> provides detailed information for IPoE sessions.

$ sudo bngblaster-cli run.sock session-info session-id 1 | jq .

{
    "status": "ok",
    "code": 200,
    "session-info": {
        "type": "ipoe",
        "session-id": 1,
        "session-state": "Established",
        "interface": "eth1",
        "outer-vlan": 8,
        "inner-vlan": 1,
        "mac": "02:00:00:00:00:01",
        "agent-circuit-id": "0.0.0.0/0.0.0.0 eth 0:1",
        "agent-remote-id": "DEU.RTBRICK.1",
        "ipv4-address": "1.1.1.3",
        "ipv4-netmask": "255.255.255.255",
        "ipv4-gateway": "1.1.1.1",
        "ipv4-dns1": "10.0.0.3",
        "ipv4-dns2": "10.0.0.4",
        "ipv6-prefix": "fc66:1337:2222::3/128",
        "ipv6-delegated-prefix": "fc66:1337:3333:2::/64",
        "dhcp-state": "Bound",
        "dhcp-server": "1.1.1.1",
        "dhcp-lease-time": 300,
        "dhcp-lease-expire": 299,
        "dhcp-lease-expire-t1": 149,
        "dhcp-lease-expire-t2": 261,
        "dhcp-tx": 2,
        "dhcp-rx": 2,
        "dhcp-tx-discover": 1,
        "dhcp-rx-offer": 1,
        "dhcp-tx-request": 1,
        "dhcp-rx-ack": 1,
        "dhcp-rx-nak": 0,
        "dhcp-tx-release": 0,
        "dhcpv6-state": "Bound",
        "dhcpv6-lease-time": 14400,
        "dhcpv6-lease-expire": 14399,
        "dhcpv6-lease-expire-t1": 899,
        "dhcpv6-lease-expire-t2": 1439,
        "dhcpv6-tx": 1,
        "dhcpv6-rx": 1,
        "dhcpv6-tx-solicit": 1,
        "dhcpv6-rx-advertise": 0,
        "dhcpv6-tx-request": 0,
        "dhcpv6-rx-reply": 1,
        "dhcpv6-tx-renew": 0,
        "dhcpv6-tx-release": 0,
        "dhcpv6-dns1": "fc66::3",
        "dhcpv6-dns2": "fc66::4",
        "tx-packets": 6,
        "rx-packets": 6,
        "rx-fragmented-packets": 0,
        "session-traffic": {
            "total-flows": 6,
            "verified-flows": 0,
            "downstream-ipv4-flow-id": 2,
            "downstream-ipv4-tx-packets": 13,
            "downstream-ipv4-rx-packets": 13,
            "downstream-ipv4-rx-first-seq": 1,
            "downstream-ipv4-loss": 0,
            "downstream-ipv4-wrong-session": 0,
            "upstream-ipv4-flow-id": 1,
            "upstream-ipv4-tx-packets": 13,
            "upstream-ipv4-rx-packets": 13,
            "upstream-ipv4-rx-first-seq": 1,
            "upstream-ipv4-loss": 0,
            "upstream-ipv4-wrong-session": 0,
            "downstream-ipv6-flow-id": 4,
            "downstream-ipv6-tx-packets": 13,
            "downstream-ipv6-rx-packets": 13,
            "downstream-ipv6-rx-first-seq": 1,
            "downstream-ipv6-loss": 0,
            "downstream-ipv6-wrong-session": 0,
            "upstream-ipv6-flow-id": 3,
            "upstream-ipv6-tx-packets": 13,
            "upstream-ipv6-rx-packets": 13,
            "upstream-ipv6-rx-first-seq": 1,
            "upstream-ipv6-loss": 0,
            "upstream-ipv6-wrong-session": 0,
            "downstream-ipv6pd-flow-id": 6,
            "downstream-ipv6pd-tx-packets": 13,
            "downstream-ipv6pd-rx-packets": 13,
            "downstream-ipv6pd-rx-first-seq": 1,
            "downstream-ipv6pd-loss": 0,
            "downstream-ipv6pd-wrong-session": 0,
            "upstream-ipv6pd-flow-id": 5,
            "upstream-ipv6pd-tx-packets": 13,
            "upstream-ipv6pd-rx-packets": 13,
            "upstream-ipv6pd-rx-first-seq": 1,
            "upstream-ipv6pd-loss": 0,
            "upstream-ipv6pd-wrong-session": 0
        }
    }
}