Added file explaining config parsing and inheritance by chan-sccp.
This commit is contained in:
parent
0692b3cd6a
commit
a6a7b517d1
91
Technical.notes/asterisk-chan-sccp-config-handling.txt
Normal file
91
Technical.notes/asterisk-chan-sccp-config-handling.txt
Normal file
|
@ -0,0 +1,91 @@
|
|||
Config Structure & Handling explained
|
||||
-------------------------------------
|
||||
Asterisk has a config parsing system that provides a generic interface to
|
||||
config sections and paramater, this system has multiple backends like
|
||||
ini, ldap, database that all present their data in a unified structure.
|
||||
|
||||
From chan-sccp's view all the config sections and parameters looks exactly
|
||||
the same. In principal we don't have to know where the settings are coming
|
||||
from, we just need to be able to handle three cases:
|
||||
- requested section+paramater does not exist -> error
|
||||
- requested section+parameter exists and returns a value
|
||||
- requested section+parameter exists and returns NULL (ie: no field present in
|
||||
ini/table or is set to NULL)
|
||||
|
||||
Based on this simple view of the world we built sccp_config.c and it's
|
||||
primary source of information sccp_config_entries.hh. The latter contains:
|
||||
- all valid config sections and parameters
|
||||
- their links to the in memory entity structures (POD's)
|
||||
- flags:
|
||||
- their deprecated/obsolete status
|
||||
- their value inheritance structure, device or lines can inherit values from
|
||||
the [general] section if they are not provided (See more about inheritance
|
||||
below)
|
||||
- what to do when a value changes (either directly or through inheritance)
|
||||
- ultimate fallback value for parameter that cannot be/work `unspecified`
|
||||
- dedicated parser required to process the value, if a generic parser would
|
||||
not work (for example handling codecs, deny/permit)
|
||||
- help descriptions for each parameter
|
||||
|
||||
Config value inheritance
|
||||
------------------------
|
||||
sccp_config_entries.hh contains universal fallback values for parameters
|
||||
that cannot work without one. Without this ultimate fallback
|
||||
value, chan-sccp would crash/not work. For example chan-sccp would not know
|
||||
what tcp-port to use for it's listerning connection, if not provided.
|
||||
They are built-in fallback values fixed at compile time.
|
||||
|
||||
sccpdevices or sccplines can inherit values from the general section
|
||||
in sccp.conf. The parameters in the general section are further backed by
|
||||
the sccp_config_entries.hh with it's fallback value, in case they
|
||||
are not provided.
|
||||
|
||||
So for example:
|
||||
If sccpdevice:keepalive is not set, it will get it's value from
|
||||
general:keepalive, which if not set, will fallback to the value provided
|
||||
in sccp_config_entries.hh. The actual sccpdevice:keepalive is on evaluated
|
||||
at the moment the device is connecting and registering to chan-sccp, at
|
||||
which moment the value trickles down. So let's assume this situation:
|
||||
|
||||
sccp.conf:
|
||||
```
|
||||
[general]
|
||||
;keepalive=120
|
||||
|
||||
[SEPxxxxx]
|
||||
;keepalive=140
|
||||
```
|
||||
|
||||
In this case the universal default will be provided by
|
||||
sccp_config_entries.hh. When we now set general:keepalive to 120 and issue
|
||||
`sccp reload`, all devices will have to be restart (RESTART_REQUIRED flag
|
||||
is set for keepalive in sccp_config_entries.hh). They will start to connect
|
||||
again, and the keepalive parameter is reevalueated, they will now see that
|
||||
they do not have a personal keepalive parameter provided and will use the
|
||||
general one, instead.
|
||||
|
||||
Note: inheritance is specifically specified in the sccp_config_entries.hh
|
||||
file and just not automatically happen just based on the parameter name for
|
||||
example.
|
||||
|
||||
You can think of the sccp_config_entries.hh and a universal section in the
|
||||
sccp.conf that has a slew of fallback values that are there to have your
|
||||
back. It will allow you to get by with a minimal config file without having
|
||||
to worry about chan-sccp not working, becasue you forgot to set the port
|
||||
number for example.
|
||||
|
||||
So mentally you can think of it like this:
|
||||
```
|
||||
[universal]
|
||||
keepalive=60
|
||||
|
||||
[general]
|
||||
;keepalive=120
|
||||
|
||||
[SEPxxxxx]
|
||||
;keepalive=140
|
||||
```
|
||||
|
||||
Note: changing sccp_config_entries.hh after the binary has been build, will
|
||||
not do anything, the fallback values are backed into the final binary at
|
||||
compile time.
|
Loading…
Reference in a new issue