PPPoE

Emulating PPP over Ethernet (PPPoE) sessions was initial use case of the BNG Blaster supporting 1:1 and N:1 VLAN mode.

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

user{session-global}@rtbrick.com

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