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 leant 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 successful. If IPCP is configured to request two DNS servers, it fails if only one is returned.
The BNG Blaster is not optimized for robustness. Actually the opposite is the case, to ensure it failed if the device under test behaves faulty.
Configuration
Following a basic PPPoE configuration example.
{
"interfaces": {
"network": {
"interface": "eth2",
"address": "10.0.0.1",
"gateway": "10.0.0.2",
"address-ipv6": "fc66:1337:7331::1",
"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 0:{session-global}",
"rate-up": 1024,
"rate-down": 16384
},
"session-traffic": {
"ipv4-pps": 1,
"ipv6-pps": 1,
"ipv6pd-pps": 1
}
}
PPPoE
{ "pppoe": {} }
Attribute |
Description |
Default |
---|---|---|
session-time |
Max PPPoE session time in seconds |
0 (infinity) |
reconnect |
Automatically reconnect sessions if terminated |
false |
discovery-timeout |
PPPoE discovery (PADI and PADR) timeout in seconds |
5 |
discovery-retry |
PPPoE discovery (PADI and PADR) max retry |
10 |
service-name |
PPPoE discovery service name |
|
host-uniq |
PPPoE discovery host-uniq |
false |
vlan-priority |
VLAN PBIT for all PPPoE/PPP control traffic |
0 |
PPP
{ "ppp": {} }
Attribute |
Description |
Default |
---|---|---|
mru |
Define the maximum receive unit proposed via PPP |
1492 |
PPP Authentication
{ "ppp": { "authentication": {} } }
Attribute |
Description |
Default |
---|---|---|
username |
Username |
|
password |
Password |
test |
timeout |
Authentication request timeout in seconds |
5 |
retry |
Authentication request max retry |
30 |
protocol |
This value can be set to PAP or CHAP to reject the other protocol |
allow PAP and CHAP |
PPP LCP
{ "ppp": { "lcp": {} } }
Attribute |
Description |
Default |
---|---|---|
conf-request-timeout |
LCP configuration request timeout in seconds |
5 |
conf-request-retry |
LCP configuration request max retry |
10 |
keepalive-interval |
LCP echo request interval in seconds (0 means disabled) |
30 |
keepalive-retry |
PPP LCP echo request max retry |
3 |
start-delay |
PPP LCP initial request delay in milliseconds |
0 |
ignore-vendor-specific |
Ignore LCP vendor specific requests |
false |
connection-status-message |
Accept LCP connection status messages |
false |
PPP IPCP (IPv4)
{ "ppp": { "ipcp": {} } }
Attribute |
Description |
Default |
---|---|---|
enable |
This option allows to enable or disable the IPCP protocol |
true |
request-ip |
Include IP-Address with 0.0.0.0 in initial LCP configuration request |
true |
request-dns1 |
Request Primary DNS Server Address (option 129) |
true |
request-dns2 |
Request Secondary DNS Server Address (option 131) |
true |
conf-request-timeout |
IPCP configuration request timeout in seconds |
5 |
conf-request-retry |
IPCP configuration request max retry |
10 |
PPP IP6CP (IPv6)
{ "ppp": { "ip6cp": {} } }
Attribute |
Description |
Default |
---|---|---|
enable |
This option allows to enable or disable the IP6CP protocol |
true |
conf-request-timeout |
IP6CP configuration request timeout in seconds |
5 |
conf-request-retry |
IP6CP configuration request max retry |
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, those messages will be ignored as required to emulate different CPE
behaviors.
The LCP option connection-status-message
allows to accept LCP vendor requests
with any OUI if kind is set to 1
by responding with vendor request of
kind 2
. The OUI from request is copied to response in this case.
The value from 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,
"first-seq-rx-access-ipv4": 2,
"first-seq-rx-access-ipv6": 3,
"first-seq-rx-access-ipv6pd": 3,
"first-seq-rx-network-ipv4": 2,
"first-seq-rx-network-ipv6": 3,
"first-seq-rx-network-ipv6pd": 3,
"access-tx-session-packets": 3266,
"access-rx-session-packets": 3265,
"access-rx-session-packets-loss": 0,
"network-tx-session-packets": 3266,
"network-rx-session-packets": 3265,
"network-rx-session-packets-loss": 0,
"access-tx-session-packets-ipv6": 3266,
"access-rx-session-packets-ipv6": 3264,
"access-rx-session-packets-ipv6-loss": 0,
"network-tx-session-packets-ipv6": 3266,
"network-rx-session-packets-ipv6": 3264,
"network-rx-session-packets-ipv6-loss": 0,
"access-tx-session-packets-ipv6pd": 3266,
"access-rx-session-packets-ipv6pd": 3264,
"access-rx-session-packets-ipv6pd-loss": 0,
"network-tx-session-packets-ipv6pd": 3266,
"network-rx-session-packets-ipv6pd": 3264,
"network-rx-session-packets-ipv6pd-loss": 0
}
}
}