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
}
}
}