Skip to content

Subscriber Groups

Defines how subscribers are grouped and configured based on VLAN. Each group binds a set of VLANs to one or more access types (IPoE, PPPoE, LAC, LNS, L2GW), address profiles, service group, and AAA policy. Both IPoE and PPPoE sessions use the same profile and service group resolution.

Where access-types is declared

access-types belongs on each entry in vlans, not on the group. A group that declares access-types at the top level is rejected at config load, with one exception: an LNS-only group sets access-types: [lns] at the group level and must not declare vlans, because L2TP-terminated subscribers do not arrive by S-VLAN demux.

subscriber-groups:
  groups:
    residential:
      vlans:
        - svlan: "100-199"
          cvlan: any
          access-types: [ipoe]      # per VLAN range
          interface: loop100
          parent-interface: eth1
    wholesale-lns:
      access-types: [lns]           # group level, LNS only, no vlans
      ipv4-profile: residential

Group Settings

Field Type Description Example
access-types []string LNS-only groups. Must be exactly [lns], and the group must not declare vlans. Every other access type declares access-types per VLAN range. [lns]
vlans VLANRule VLAN matching rules
vlan-tpid string Outer TPID for subscriber traffic: dot1ad (0x88A8, default) or dot1q (0x8100) dot1ad
ipv4-profile string IPv4 profile name residential
ipv6-profile string IPv6 profile name default-v6
session-mode string Session mode: unified or independent unified
vrf string VRF for subscribers in this group customers
default-service-group string Default service group for subscribers cgnat-residential
aaa-policy string Default AAA policy name default-policy
ipv6 GroupIPv6 IPv6 settings for this group
bgp GroupBGP BGP settings for this group
pppoe GroupPPPoE PPPoE settings for this group
mss-clamp GroupMSSClamp TCP MSS clamping for this group
dhcpv6.allow-relay-forward bool Accept DHCPv6 Relay-Forward messages for this group (LDRA). Default true. See DHCPv6 true
l2tp.profile string L2TP profile name for lac or lns ranges. See L2TP wholesale
l2gw.handoff-group string Default handoff group for l2gw ranges. See L2GW isp-blue
l2gw.idle-timeout uint32 Tear down a dynamic l2gw circuit after this many seconds with no traffic in either direction. 0 disables. 3600

VLAN Rules

Field Type Description Example
svlan string S-VLAN match: single ID or range 100-199
cvlan string C-VLAN match: single, range, or any any
access-types []string Required. One or more of ipoe, pppoe, lac, lns, l2gw. The only valid multi-element combination is [ipoe, pppoe] (mixed access on a shared S-VLAN range); lac, lns and l2gw are single-element only. [ipoe]
interface string Gateway interface for matched subscribers loop100
parent-interface string Access interface where these subscribers arrive. May be a physical port, a bond, a VXLAN tunnel (l2gw), or a pseudowire headend. Required for every access type except lns, and must name an interface defined in interfaces. See Interfaces eth1
vrf string VRF override for this VLAN range customers
dhcp string Named DHCP server from the top-level dhcp.servers list upstream-dhcp
trigger string l2gw ranges only: dhcp (default) punts DHCPv4 and DHCPv6 on circuit miss, packet punts the first frame of any protocol. See L2GW packet
aaa.policy string AAA policy override for this VLAN range custom-policy

One access interface

All VLAN ranges across all groups must reference the same parent-interface, with one exception: l2gw ranges are exempt, because each wholesale access operator lands on its own NNI port. A configuration mixing two access interfaces for IPoE, PPPoE or LAC is rejected at load.

Group IPv6

Field Type Description Example
ra IPv6RA Router Advertisement configuration

IPv6 RA

Field Type Description Example
managed bool Set Managed (M) flag in RA true
other bool Set Other (O) flag in RA true
router_lifetime int Router lifetime in seconds 1800
max_interval int Max RA interval in seconds 600
min_interval int Min RA interval in seconds 200
on_link bool Advertise the access prefix on-link (L flag) for this group; overrides dhcpv6.ra.on_link. Default false (off-link, subscribers route via the BNG) false
unicast bool Deliver periodic RAs as per-subscriber unicast vs multicast for this group; overrides dhcpv6.ra.unicast. Default true (unicast, multicast fallback when the client link-local is unknown) true

Group BGP

Field Type Description Example
enabled bool Enable BGP for this group true
advertise-pools bool Automatically create BGP network statements for address pools. If disabled, configure networks manually under protocols.bgp true
redistribute-connected bool Redistribute connected routes into BGP false
network-route-policy string Route-policy applied to BGP network statements for this group's pools POOL-EXPORT
redistribute-route-policy string Route-policy applied to BGP redistribute for this group REDIST-FILTER
vrf string VRF name for BGP advertisements customers

Group PPPoE

PPPoE-specific settings. Only consulted for VLAN ranges whose access-types include pppoe.

Field Type Description Example
mru uint16 Negotiated PPP MRU. Default 1492 (RFC 2516). Set to 1500 to negotiate baby giants on the wire via PPP-Max-Payload (RFC 4638). Range 1492 to 1500. 1500

When mru is greater than 1492, the BNG advertises PPP-Max-Payload in PADO and PADS, sets the per-session VPP interface MTU to the negotiated value, and updates the LCP local MRU to match. The BNG only advertises the tag if the client included it first in PADI, per RFC 4638 ยง3.

Raising mru above 1492 is rejected at config commit unless the parent access interface MTU is large enough to carry the resulting frame. The required parent MTU is mru + 8 (PPPoE 6 + PPP 2) + 4 for outer dot1q only or + 8 for QinQ. Example: mru: 1500 over dot1q requires the parent interface MTU to be at least 1512.

Every L2 device between the BNG and the subscriber CPE must also support baby giants, this is a one-time provisioning task on the access network.

Group MSS Clamp

TCP MSS clamping for subscriber traffic. Enabled by default for every subscriber group because broken PMTUD middleboxes are common on the public internet.

Field Type Description Example
enabled bool Enable MSS clamping for this group. Default true. true
subscriber-path-mtu uint16 MTU of the subscriber path used to auto-derive MSS for IPoE groups. Default 1500. PPPoE groups always use the per-session negotiated PPP MRU and ignore this field. 1500
ipv4-mss uint16 Explicit IPv4 MSS. Beats auto-derive. 1400
ipv6-mss uint16 Explicit IPv6 MSS. Beats auto-derive. 1380

Auto-derived MSS values:

Access type Path MTU source IPv4 MSS IPv6 MSS
IPoE subscriber-path-mtu (default 1500) path mtu - 40 path mtu - 60
PPPoE, default pppoe.mru per-session, fixed 1492 1452 1432
PPPoE, pppoe.mru: 1500 per-session, negotiated 1500 1460 1440

subscriber-path-mtu is intentionally separate from the BNG access interface MTU. An operator running jumbo frames on the access link (e.g. for MPLS or SR-MPLS in the access path) does not need to lower it just because the subscriber CPE on the other side of that link still terminates at 1500. For non-standard subscriber paths, set subscriber-path-mtu explicitly per group.

Set enabled: false to opt out of clamping for a group, for example when every link in the subscriber path supports PMTUD properly. Operators should be aware that clamping the SYN MSS option means subscriber TCP flows will not perform PMTUD, which is the desired behaviour for typical FTTH but not for every deployment.

Example

ipv4-profiles:
  residential:
    gateway: 10.255.0.1
    dns:
      - 8.8.8.8
      - 8.8.4.4
    pools:
      - name: subscriber-pool
        network: 10.255.0.0/16
    dhcp:
      lease-time: 3600

ipv6-profiles:
  default-v6:
    iana-pools:
      - name: wan-link-pool
        network: 2001:db8:0:1::/64
        range_start: 2001:db8:0:1::1000
        range_end: 2001:db8:0:1::ffff
        gateway: 2001:db8:0:1::1
        preferred_time: 3600
        valid_time: 7200
    pd-pools:
      - name: subscriber-pd-pool
        network: 2001:db8:100::/40
        prefix_length: 56
        preferred_time: 3600
        valid_time: 7200
    dns:
      - 2001:4860:4860::8888
      - 2001:4860:4860::8844

service-groups:
  cgnat-residential:
    vrf: cgnat
    unnumbered: loop100
    urpf: strict

subscriber-groups:
  groups:
    residential:
      session-mode: unified
      ipv4-profile: residential
      ipv6-profile: default-v6
      default-service-group: cgnat-residential
      aaa-policy: default-policy
      vlans:
        - svlan: "100-199"
          cvlan: any
          access-types: [ipoe]
          interface: loop100
          parent-interface: eth1
      bgp:
        enabled: true
        advertise-pools: true
        network-route-policy: POOL-EXPORT
    residential-pppoe:
      ipv4-profile: residential
      ipv6-profile: default-v6
      aaa-policy: default-policy
      vlans:
        - svlan: "200-299"
          cvlan: any
          access-types: [pppoe]
          interface: loop100
          parent-interface: eth1
      pppoe:
        mru: 1500

interfaces:
  eth1:
    enabled: true
    mtu: 1512

aaa:
  auth_provider: local
  policy:
    - name: default-policy
      format: $remote-id$