### generated by accel_pppoe.py ###
[modules]
log_syslog
pppoe
shaper
{# Common authentication backend definitions #}
{% include 'accel-ppp/config_modules_auth_mode.j2' %}
ippool
{# Common IPv6 definitions #}
{% include 'accel-ppp/config_modules_ipv6.j2' %}
{# Common authentication protocols (pap, chap ...) #}
{% include 'accel-ppp/config_modules_auth_protocols.j2' %}

{% if snmp is defined %}
net-snmp
{% endif %}
{% if limits is defined %}
connlimit
{% endif %}
{% if extended_scripts is defined %}
sigchld
pppd_compat
{% endif %}

[core]
thread-count={{ thread_count }}

[log]
syslog=accel-pppoe,daemon
copy=1
level=5

{% if snmp is defined and snmp.master_agent is defined %}
[snmp]
master=1
{% endif %}

[client-ip-range]
disable

{# Common IP pool definitions #}
{% include 'accel-ppp/config_ip_pool.j2' %}

{# Common IPv6 pool definitions #}
{% include 'accel-ppp/config_ipv6_pool.j2' %}

{# Common DNS name-server definition #}
{% include 'accel-ppp/config_name_server.j2' %}

{% if wins_server is defined and wins_server is not none %}
[wins]
{%   for server in wins_server %}
wins{{ loop.index }}={{ server }}
{%   endfor %}
{% endif %}

{# Common chap-secrets and RADIUS server/option definitions #}
{% include 'accel-ppp/config_chap_secrets_radius.j2' %}

{% if session_control is defined and session_control != 'disable' %}
[common]
single-session={{ session_control }}
{% endif %}

[ppp]
verbose=1
check-ip=1
ccp={{ "1" if ppp_options.ccp is defined else "0" }}
unit-preallocate={{ "1" if authentication.radius.preallocate_vif is defined else "0" }}
{% if ppp_options.min_mtu is defined and ppp_options.min_mtu is not none %}
min-mtu={{ ppp_options.min_mtu }}
{% endif %}
{% if ppp_options.mru is defined and ppp_options.mru is not none %}
mru={{ ppp_options.mru }}
{% endif %}
mppe={{ ppp_options.mppe }}
lcp-echo-interval={{ ppp_options.lcp_echo_interval }}
lcp-echo-timeout={{ ppp_options.lcp_echo_timeout }}
lcp-echo-failure={{ ppp_options.lcp_echo_failure }}
{% if ppp_options.ipv4 is defined and ppp_options.ipv4 is not none %}
ipv4={{ ppp_options.ipv4 }}
{% endif %}
{# IPv6 #}
{% if ppp_options.ipv6 is defined and ppp_options.ipv6 is not none %}
ipv6={{ ppp_options.ipv6 }}
{%   if ppp_options.ipv6_intf_id is defined and ppp_options.ipv6_intf_id is not none %}
ipv6-intf-id={{ ppp_options.ipv6_intf_id }}
{%   endif %}
{%   if ppp_options.ipv6_peer_intf_id is defined and ppp_options.ipv6_peer_intf_id is not none %}
ipv6-peer-intf-id={{ ppp_options.ipv6_peer_intf_id }}
{%   endif %}
ipv6-accept-peer-intf-id={{ "1" if ppp_options.ipv6_accept_peer_intf_id is defined else "0" }}
{% endif %}
{# MTU #}
mtu={{ mtu }}
{% if ppp_options.interface_cache is defined and ppp_options.interface_cache is not none %}
unit-cache={{ ppp_options.interface_cache }}
{% endif %}

[pppoe]
verbose=1
ac-name={{ access_concentrator }}

{% if interface is defined and interface is not none %}
{%   for iface, iface_config in interface.items() %}
{%     if iface_config.vlan_id is not defined and iface_config.vlan_range is not defined %}
interface={{ iface }}
{%     endif %}
{%     if iface_config.vlan_range is defined %}
{%       for regex in iface_config.regex %}
interface=re:^{{ iface | replace('.', '\\.') }}\.({{ regex }})$
{%       endfor %}
vlan-mon={{ iface }},{{ iface_config.vlan_range | join(',') }}
{%     endif %}
{%     if iface_config.vlan_id is defined %}
{%       for vlan in iface_config.vlan_id %}
vlan-mon={{ iface }},{{ vlan }}
interface=re:^{{ iface | replace('.', '\\.') }}\.{{ vlan }}$
{%       endfor %}
{%     endif %}
{%   endfor %}
{% endif %}

{% if service_name %}
service-name={{ service_name | join(',') }}
{% endif %}

{% if pado_delay %}
{%   set pado_delay_param = namespace(value='0') %}
{%   for delay in pado_delay|sort(attribute='0') %}
{%     if not loop.last %}
{%       set pado_delay_param.value = pado_delay_param.value + ',' + delay + ':' + pado_delay[delay].sessions %}
{%     else %}
{%       set pado_delay_param.value = pado_delay_param.value + ',-1:' + pado_delay[delay].sessions %}
{%     endif %}
{%   endfor %}
pado-delay={{ pado_delay_param.value }}
{% endif %}
{% if authentication.radius.called_sid_format is defined and authentication.radius.called_sid_format is not none %}
called-sid={{ authentication.radius.called_sid_format }}
{% endif %}

{% if authentication is defined and authentication.mode is defined and authentication.mode == 'local' %}
{%   if client_ip_pool is defined and client_ip_pool is not none %}
{%     if client_ip_pool.name is defined and client_ip_pool.name is not none %}
{%       for pool, pool_config in client_ip_pool.name.items() %}
{%         if pool_config.subnet is defined and pool_config.subnet is not none %}
ip-pool={{ pool }}
{%           if pool_config.gateway_address is defined and pool_config.gateway_address is not none %}
gw-ip-address={{ pool_config.gateway_address }}/{{ pool_config.subnet.split('/')[1] }}
{%           endif %}
{%         endif %}
{%       endfor %}
{%     endif %}
{%  endif %}
{% endif %}

{% if limits is defined %}
[connlimit]
{%   if limits.connection_limit is defined and limits.connection_limit is not none %}
limit={{ limits.connection_limit }}
{%   endif %}
{%   if limits.burst is defined and limits.burst %}
burst={{ limits.burst }}
{%   endif %}
{%   if limits.timeout is defined and limits.timeout is not none %}
timeout={{ limits.timeout }}
{%   endif %}
{% endif %}

{# Common RADIUS shaper configuration #}
{% include 'accel-ppp/config_shaper_radius.j2' %}

{% if extended_scripts is defined %}
[pppd-compat]
verbose=1
radattr-prefix=/run/accel-pppd/radattr
{% set script_name = {'on_up': 'ip-up', 'on_down': 'ip-down', 'on_change':'ip-change', 'on_pre_up':'ip-pre-up'} %}
{%   for script in extended_scripts %}
{{ script_name[script] }}={{ extended_scripts[script] }}
{%   endfor %}
{% endif %}

[cli]
tcp=127.0.0.1:2001