PPPoE
Emulating PPP over Ethernet (PPPoE) sessions was initial use case of the BNG Blaster supporting 1:1 and N:1 VLAN mode.
The BNG Blaster concept is leaned to the idea of fail-fast. Therefore PPPoE sessions may not be established if not all expected conditions are fulfilled. PPPoE sessions become established only if all enabled network protocols (IPCP and IP6CP) are negotiated successfully. If IPCP is configured to request two DNS servers, it fails if only one is returned.
The BNG Blaster is not optimized for robustness. The opposite is the case, to ensure it failed if the device under test behaves faulty.
Configuration
Following is a basic PPPoE configuration example.
{
"interfaces": {
"network": {
"interface": "eth2",
"address": "10.0.0.1/24",
"gateway": "10.0.0.2",
"address-ipv6": "fc66:1337:7331::1/64",
"gateway-ipv6": "fc66:1337:7331::2"
},
"access": [
{
"interface": "eth1",
"type": "pppoe",
"outer-vlan-min": 1000,
"outer-vlan-max": 1999,
"inner-vlan-min": 1,
"inner-vlan-max": 4049,
"authentication-protocol": "PAP"
},
{
"interface": "eth1",
"type": "pppoe",
"outer-vlan-min": 2000,
"outer-vlan-max": 2999,
"inner-vlan-min": 1,
"inner-vlan-max": 4049,
"authentication-protocol": "CHAP"
}
]
},
"sessions": {
"count": 1000,
"session-time": 0,
"max-outstanding": 800,
"start-rate": 400,
"stop-rate": 400
},
"pppoe": {
"reconnect": true,
"discovery-timeout": 3,
"discovery-retry": 10
},
"ppp": {
"mru": 1492,
"authentication": {
"username": "user{session-global}@rtbrick.com",
"password": "test",
"timeout": 5,
"retry": 30
},
"lcp": {
"conf-request-timeout": 1,
"conf-request-retry": 10,
"keepalive-interval": 30,
"keepalive-retry": 3
},
"ipcp": {
"enable": true,
"request-ip": true,
"request-dns1": true,
"request-dns2": true,
"conf-request-timeout": 1,
"conf-request-retry": 10
},
"ip6cp": {
"enable": true,
"conf-request-timeout": 1,
"conf-request-retry": 10
}
},
"dhcpv6": {
"enable": true,
"rapid-commit": true
},
"access-line": {
"agent-remote-id": "DEU.RTBRICK.{session-global}",
"agent-circuit-id": "0.0.0.0/0.0.0.0 eth {outer-vlan}:{inner-vlan}",
"rate-up": 1024,
"rate-down": 16384
},
"session-traffic": {
"ipv4-pps": 1,
"ipv6-pps": 1,
"ipv6pd-pps": 1
}
}
PPPoE
{ "pppoe": {} }
Attribute |
Description |
---|---|
session-time |
Max PPPoE session time in seconds.
Default: 0 (infinity)
|
reconnect |
Automatically reconnect sessions if terminated.
Default: false
|
discovery-timeout |
PPPoE discovery (PADI and PADR) timeout in seconds.
Default: 5
|
discovery-retry |
PPPoE discovery (PADI and PADR) max retry.
Default: 10
|
service-name |
PPPoE discovery service name.
Default:
|
host-uniq |
PPPoE discovery host-uniq.
Default: false
|
max-payload |
PPP-Max-Payload (RFC4638).
Default: 0 (disabled)
|
vlan-priority |
VLAN PBIT for all PPPoE/PPP control traffic.
Default: 0
|
PPP
{ "ppp": {} }
Attribute |
Description |
---|---|
mru |
Define the maximum receive unit proposed via PPP.
Default: 1492 Range: 1 - 65535
|
PPP Authentication
{ "ppp": { "authentication": {} } }
Attribute |
Description |
---|---|
username |
Username.
Default: user{session-global}@rtbrick.com
|
password |
Password.
Default: test
|
timeout |
Authentication request timeout in seconds.
Default: 5
|
retry |
Authentication request max retry.
Default: 30
|
protocol |
This value can be set to PAP or CHAP to reject
the other protocol.
Default: allow both PAP and CHAP
|
PPP LCP
{ "ppp": { "lcp": {} } }
Attribute |
Description |
---|---|
conf-request-timeout |
LCP configuration request timeout in seconds.
Default: 5
|
conf-request-retry |
LCP configuration request max retry.
Default: 10
|
keepalive-interval |
LCP echo request interval in seconds (0 means disabled).
Default: 30
|
keepalive-retry |
PPP LCP echo request max retry.
Default: 3
|
start-delay |
PPP LCP initial request delay in milliseconds.
Default: 0
|
ignore-vendor-specific |
Ignore LCP vendor-specific requests.
Default: false
|
connection-status-message |
Accept LCP connection status messages.
Default: false
|
PPP IPCP (IPv4)
{ "ppp": { "ipcp": {} } }
Attribute |
Description |
---|---|
enable |
This option allows to enable or disable the IPCP protocol
Default: true
|
request-ip |
Include IP-Address with 0.0.0.0 in the initial IPCP
configuration request.
Default: true
|
request-dns1 |
Request primary DNS server address (option 129).
Default: true
|
request-dns2 |
Request secondary DNS server address (option 131).
Default: true
|
conf-reject-ignore |
Ignore configuration reject messages.
Default: false
|
conf-request-timeout |
IPCP configuration request timeout in seconds
Default: 5
|
conf-request-retry |
IPCP configuration request max retry.
Default: 10
|
PPP IP6CP (IPv6)
{ "ppp": { "ip6cp": {} } }
Attribute |
Description |
---|---|
enable |
This option allows to enable or disable the IP6CP protocol.
Default: true
|
conf-request-timeout |
IP6CP configuration request timeout in seconds.
Default: 5
|
conf-request-retry |
IP6CP configuration request max retry.
Default: 10
|
LCP Vendor Extension
This chapter refers to RFC 2153 PPP vendor extensions.
Per default, all LCP vendor-specific requests will be rejected sending a
LCP code-reject message. With the LCP option ignore-vendor-specific
enabled in the configuration, those messages will be ignored as required
to emulate different CPE behaviors.
The LCP option connection-status-message
allows accepting LCP vendor requests
with any OUI if kind is set to 1
by responding with vendor request of
kind 2
. The OUI from the request is copied to the response in this case.
The value from the request is stored in the session as connection-status-message
.
PPPoE Commands
The command session-info session-id <id>
provides
detailed information for PPPoE sessions.
$ sudo bngblaster-cli run.sock session-info session-id 1 | jq .
{
"status": "ok",
"code": 200,
"session-information": {
"type": "pppoe",
"session-id": 1,
"session-state": "Established",
"interface": "eth1",
"outer-vlan": 1000,
"inner-vlan": 1,
"mac": "02:00:00:00:00:01",
"username": "user1@rtbrick.com",
"agent-circuit-id": "0.0.0.0/0.0.0.0 eth 0:1",
"agent-remote-id": "DEU.RTBRICK.1",
"lcp-state": "Opened",
"ipcp-state": "Opened",
"ip6cp-state": "Opened",
"ipv4-address": "10.100.128.0",
"ipv4-dns1": "10.0.0.3",
"ipv4-dns2": "10.0.0.4",
"ipv6-prefix": "fc66:1000:1::/64",
"ipv6-delegated-prefix": "fc66:2000::/56",
"ipv6-dns1": "fc66::3",
"ipv6-dns2": "fc66::4",
"dhcpv6-state": "Bound",
"dhcpv6-dns1": "fc66::3",
"dhcpv6-dns2": "fc66::4",
"tx-packets": 10036,
"rx-packets": 10083,
"rx-fragmented-packets": 0,
"session-traffic": {
"total-flows": 6,
"verified-flows": 6,
"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
}
}
}