Skip to content

Commit

Permalink
pppoe-server: T6141: T5364: PPPoE-server add pado-delay without sessi…
Browse files Browse the repository at this point in the history
…ons fails
  • Loading branch information
natali-rs1985 committed Apr 11, 2024
1 parent 5d89003 commit a4b038b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
9 changes: 5 additions & 4 deletions data/templates/accel-ppp/pppoe.config.j2
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,13 @@ vlan-mon={{ iface }},{{ iface_config.vlan | join(',') }}
service-name={{ service_name | join(',') }}
{% endif %}
{% if pado_delay %}
{% set pado_delay_param = namespace(value='0') %}
{% for delay in pado_delay | sort(attribute='0') %}
{% set delay_without_sessions = pado_delay.delays_without_sessions[0] | default('0') %}
{% set pado_delay_param = namespace(value=delay_without_sessions) %}
{% for delay, sessions in pado_delay.delays_with_sessions | sort(attribute='1') %}
{% if not loop.last %}
{% set pado_delay_param.value = pado_delay_param.value + ',' + delay + ':' + pado_delay[delay].sessions %}
{% set pado_delay_param.value = pado_delay_param.value + ',' + delay + ':' + sessions|string %}
{% else %}
{% set pado_delay_param.value = pado_delay_param.value + ',-1:' + pado_delay[delay].sessions %}
{% set pado_delay_param.value = pado_delay_param.value + ',-1:' + sessions|string %}
{% endif %}
{% endfor %}
pado-delay={{ pado_delay_param.value }}
Expand Down
27 changes: 26 additions & 1 deletion src/conf_mode/service_pppoe-server.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@
pppoe_conf = r'/run/accel-pppd/pppoe.conf'
pppoe_chap_secrets = r'/run/accel-pppd/pppoe.chap-secrets'

def convert_pado_delay(pado_delay):
new_pado_delay = {'delays_without_sessions': [],
'delays_with_sessions': []}
for delay, sessions in pado_delay.items():
if not sessions:
new_pado_delay['delays_without_sessions'].append(delay)
else:
new_pado_delay['delays_with_sessions'].append((delay, int(sessions['sessions'])))
return new_pado_delay

def get_config(config=None):
if config:
conf = config
Expand All @@ -54,6 +64,10 @@ def get_config(config=None):
# Multiple named pools require ordered values T5099
pppoe['ordered_named_pools'] = get_pools_in_order(dict_search('client_ip_pool', pppoe))

if dict_search('pado_delay', pppoe):
pado_delay = dict_search('pado_delay', pppoe)
pppoe['pado_delay'] = convert_pado_delay(pado_delay)

# reload-or-restart does not implemented in accel-ppp
# use this workaround until it will be implemented
# https://phabricator.accel-ppp.org/T3
Expand All @@ -65,6 +79,17 @@ def get_config(config=None):
pppoe['server_type'] = 'pppoe'
return pppoe

def verify_pado_delay(pppoe):
if 'pado_delay' in pppoe:
pado_delay = pppoe['pado_delay']

delays_without_sessions = pado_delay['delays_without_sessions']
if len(delays_without_sessions) > 1:
raise ConfigError(
f'Cannot add more then ONE pado-delay without sessions, '
f'but {len(delays_without_sessions)} were set'
)

def verify(pppoe):
if not pppoe:
return None
Expand All @@ -73,7 +98,7 @@ def verify(pppoe):
verify_accel_ppp_ip_pool(pppoe)
verify_accel_ppp_name_servers(pppoe)
verify_accel_ppp_wins_servers(pppoe)

verify_pado_delay(pppoe)

if 'interface' not in pppoe:
raise ConfigError('At least one listen interface must be defined!')
Expand Down

0 comments on commit a4b038b

Please sign in to comment.