paradrop.confd package

Submodules

paradrop.confd.base module

class ConfigObject(name=None)[source]

Bases: object

PRIO_CONFIG_IFACE = 30
PRIO_CONFIG_QDISC = 45
PRIO_CREATE_IFACE = 20
PRIO_CREATE_QDISC = 40
PRIO_CREATE_VLAN = 25
PRIO_IPTABLES_RULE = 37
PRIO_IPTABLES_TOP = 35
PRIO_IPTABLES_ZONE = 36
PRIO_START_DAEMON = 60
apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

classmethod build(manager, source, name, options, comment)[source]

Build a config object instance from the UCI section.

Arguments: source – file containing this configuration section name – name of the configuration section

If None, a unique name will be generated.

options – dictionary of options loaded from the section comment – comment string or None

copy()[source]

Make a copy of the config object.

The copy will receive the same name and option values.

dump()[source]

Return full configuration section as a string.

findByType(allConfigs, module, typename, where={})[source]

Look up sections by type (generator).

where: filter the returned results by checking option values.

classmethod getModule()[source]

Get the module name (e.g. “dhcp”, “wireless”) for a ConfigObject class.

getName()[source]

Return section name.

Subclasses that do not have names (anonymous sections) should override this to return some other unique identifier such as an interface name.

getTypeAndName()[source]

Return tuple (section module, section type, section name).

lookup(allConfigs, sectionModule, sectionType, sectionName, addDependent=True)[source]

Look up a section by type and name.

If addDependent is True (default), the current object will be added as a dependent of the found section.

Will raise an exception if the section is not found.

maskable = True
nextId = 0
options = []
optionsMatch(other)[source]

Test equality of config sections by comparing option values.

static prioritizeConfigs(reverse=False)[source]

Assign priorities to config objects based on the dependency graph.

Priority zero is assigned to all configs with no dependencies.

priority(config1) > priority(config2) means config1 should be applied later than config2, and config1 should be reverted earlier than config2. For configs with the same priority value, it is presumed that order does not matter.

If reverse is True, the priorities are made negative so that traversing in increasing order gives the proper order for reverting.

Returns a list of tuples (priority, config). This format is suitable for heapq.

removeFromParents()[source]

Remove this section from being tracked by its parents.

Call this before discarding a configuration section so that later on, if the parent is updated, it doesn’t try to update non-existent children.

revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

setup()[source]

Finish object initialization.

This is called after the config object is initialized will all of its options values filled in. Override to do some preparation work before we start generating commands.

typename = None
updateApply(new, allConfigs)[source]

Return a list of commands to update to new configuration.

Implementing this is optional for subclasses. The default behavior is to call apply.

Returns a list of (priority, Command) tuples.

updateRevert(new, allConfigs)[source]

Return a list of commands to (partially) revert the configuration.

The implementation can be selective about what it reverts (e.g. do not delete an interface if we are only updating its IP address). The default behavior is to call revert.

Returns a list of (priority, Command) tuples.

class ConfigOption(name, type=<type 'str'>, required=False, default=None)[source]

Bases: object

default
name
required
type
interpretBoolean(s)[source]

Interpret string as a boolean value.

“0” and “False” are interpreted as False. All other strings result in True. Technically, only “0” and “1” values should be seen in UCI files. However, because of some string conversions in Python, we may encounter “False”.

paradrop.confd.client module

reload(path)[source]

Reload file(s) specified by path.

This function blocks until the request completes. On completion it returns a status string, which is a JSON list of loaded configuration sections with a ‘success’ field. For critical errors it will return None.

reloadAll()[source]

Reload all files from the system configuration directory.

This function blocks until the request completes. On completion it returns a status string, which is a JSON list of loaded configuration sections with a ‘success’ field. For critical errors it will return None.

systemStatus()[source]

Return system status string from pdconf.

waitSystemUp()[source]

Wait for the configuration daemon to finish its first load.

This function blocks until the request completes. On completion it returns a status string, which is a JSON list of loaded configuration sections with a ‘success’ field. For critical errors it will return None.

paradrop.confd.command module

class Command(command, parent=None, ignoreFailure=False)[source]

Bases: object

execute()[source]
success()[source]

Returns True if the command was successfully executed.

class CommandList[source]

Bases: list

append(priority, command)[source]

L.append(object) – append object to end

commands()[source]

Iterate over commands in order by priority.

Commands are first sorted by assigned priority. Within each priority level, the order in which they were added is maintained.

class ErrorCommand(error, parent=None)[source]

Bases: paradrop.confd.command.Command

Special command object that indicates an error occurred.

execute()[source]
success()[source]

Returns True if the command was successfully executed.

class FunctionCommand(parent, function, *args, **kwargs)[source]

Bases: paradrop.confd.command.Command

Command that runs a Python function.

execute()[source]
class KillCommand(pid, parent=None)[source]

Bases: paradrop.confd.command.Command

Special command object for killing a process

execute()[source]
getPid()[source]
kill(pid, kill_signal=4, timeout=8)[source]

Kill a child process and wait with timeout.

  1. Send a SIGTERM signal to the process.
  2. Wait up to kill_signal seconds for the process to exit.
  3. If process is still running, send a SIGKILL signal.

4. Wait up to timeout seconds (cumulative with kill_signal) for the process to exit.

Returns True if the process exited before timeout seconds elapsed.

paradrop.confd.dhcp module

class ConfigDhcp(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

options = [ConfigOption(name='interface', type=<type 'str'>, required=True, default=None), ConfigOption(name='leasetime', type=<type 'str'>, required=False, default=None), ConfigOption(name='limit', type=<type 'int'>, required=False, default=None), ConfigOption(name='start', type=<type 'int'>, required=False, default=None), ConfigOption(name='dhcp_option', type=<type 'list'>, required=False, default=[]), ConfigOption(name='relay', type=<type 'list'>, required=False, default=[])]
typename = 'dhcp'
class ConfigDnsmasq(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

options = [ConfigOption(name='authoritative', type=<type 'bool'>, required=False, default=True), ConfigOption(name='cachesize', type=<type 'int'>, required=False, default=150), ConfigOption(name='dhcp_boot', type=<type 'str'>, required=False, default=None), ConfigOption(name='dhcpleasemax', type=<type 'int'>, required=False, default=1000), ConfigOption(name='domain', type=<type 'str'>, required=False, default=None), ConfigOption(name='enable_tftp', type=<type 'bool'>, required=False, default=False), ConfigOption(name='expandhosts', type=<type 'bool'>, required=False, default=True), ConfigOption(name='interface', type=<type 'list'>, required=False, default=None), ConfigOption(name='leasefile', type=<type 'str'>, required=False, default=None), ConfigOption(name='noresolv', type=<type 'bool'>, required=False, default=False), ConfigOption(name='server', type=<type 'list'>, required=False, default=None), ConfigOption(name='tftp_root', type=<type 'str'>, required=False, default=None)]
revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

typename = 'dnsmasq'
class ConfigDomain(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

getName()[source]

Return section name.

Subclasses that do not have names (anonymous sections) should override this to return some other unique identifier such as an interface name.

options = [ConfigOption(name='name', type=<type 'str'>, required=False, default=None), ConfigOption(name='ip', type=<type 'str'>, required=False, default=None)]
typename = 'domain'

paradrop.confd.firewall module

class ConfigDefaults(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

getName()[source]

Return section name.

Subclasses that do not have names (anonymous sections) should override this to return some other unique identifier such as an interface name.

get_iptables()[source]

Get the list of iptables commands to use (iptables / ip6tables).

options = [ConfigOption(name='input', type=<type 'str'>, required=False, default='ACCEPT'), ConfigOption(name='output', type=<type 'str'>, required=False, default='ACCEPT'), ConfigOption(name='forward', type=<type 'str'>, required=False, default='ACCEPT'), ConfigOption(name='disable_ipv6', type=<type 'bool'>, required=False, default=None)]
revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

typename = 'defaults'
updateApply(new, allConfigs)[source]

Return a list of commands to update to new configuration.

Implementing this is optional for subclasses. The default behavior is to call apply.

Returns a list of (priority, Command) tuples.

updateRevert(new, allConfigs)[source]

Return a list of commands to (partially) revert the configuration.

The implementation can be selective about what it reverts (e.g. do not delete an interface if we are only updating its IP address). The default behavior is to call revert.

Returns a list of (priority, Command) tuples.

class ConfigForwarding(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

options = [ConfigOption(name='src', type=<type 'str'>, required=True, default=None), ConfigOption(name='dest', type=<type 'str'>, required=True, default=None)]
revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

typename = 'forwarding'
class ConfigRedirect(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

ANY_PROTO = set(['none', None, 'any'])
apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

options = [ConfigOption(name='src', type=<type 'str'>, required=False, default=None), ConfigOption(name='src_ip', type=<type 'str'>, required=False, default=None), ConfigOption(name='src_dip', type=<type 'str'>, required=False, default=None), ConfigOption(name='src_port', type=<type 'str'>, required=False, default=None), ConfigOption(name='src_dport', type=<type 'str'>, required=False, default=None), ConfigOption(name='proto', type=<type 'str'>, required=True, default=None), ConfigOption(name='dest', type=<type 'str'>, required=False, default=None), ConfigOption(name='dest_ip', type=<type 'str'>, required=False, default=None), ConfigOption(name='dest_port', type=<type 'str'>, required=False, default=None), ConfigOption(name='target', type=<type 'str'>, required=False, default='DNAT')]
revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

typename = 'redirect'
class ConfigRule(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

get_iptables()[source]

Get the list of iptables commands to use (iptables / ip6tables).

options = [ConfigOption(name='name', type=<type 'str'>, required=False, default=None), ConfigOption(name='src', type=<type 'str'>, required=False, default=None), ConfigOption(name='src_ip', type=<type 'str'>, required=False, default=None), ConfigOption(name='src_port', type=<type 'str'>, required=False, default=None), ConfigOption(name='src_mac', type=<type 'str'>, required=False, default=None), ConfigOption(name='proto', type=<type 'str'>, required=False, default=None), ConfigOption(name='dest', type=<type 'str'>, required=False, default=None), ConfigOption(name='dest_ip', type=<type 'str'>, required=False, default=None), ConfigOption(name='dest_port', type=<type 'str'>, required=False, default=None), ConfigOption(name='target', type=<type 'str'>, required=True, default=None), ConfigOption(name='family', type=<type 'str'>, required=False, default='any'), ConfigOption(name='extra', type=<type 'str'>, required=False, default=None)]
revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

typename = 'rule'
class ConfigZone(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

get_iptables()[source]

Get the list of iptables commands to use (iptables / ip6tables).

options = [ConfigOption(name='name', type=<type 'str'>, required=True, default=None), ConfigOption(name='network', type=<type 'list'>, required=False, default=None), ConfigOption(name='masq', type=<type 'bool'>, required=False, default=False), ConfigOption(name='masq_src', type=<type 'list'>, required=False, default=['0.0.0.0/0']), ConfigOption(name='masq_dest', type=<type 'list'>, required=False, default=['0.0.0.0/0']), ConfigOption(name='conntrack', type=<type 'bool'>, required=False, default=False), ConfigOption(name='input', type=<type 'str'>, required=False, default='RETURN'), ConfigOption(name='forward', type=<type 'str'>, required=False, default='RETURN'), ConfigOption(name='output', type=<type 'str'>, required=False, default='RETURN'), ConfigOption(name='family', type=<type 'str'>, required=False, default='any')]
revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

setup()[source]

Finish object initialization.

This is called after the config object is initialized will all of its options values filled in. Override to do some preparation work before we start generating commands.

typename = 'zone'

paradrop.confd.main module

This module listens for messages and triggers reloading of configuration files. This module is the service side of the implementation. If you want to issue reload commands to the service, see the client.py file instead.

listen(configManager)[source]
run_thread(execute=True)[source]

Start pdconfd service as a thread.

This function schedules pdconfd to run as a thread and returns immediately.

paradrop.confd.manager module

class ConfigManager(writeDir, execCommands=True)[source]

Bases: object

changingSet(files)[source]

Return the sections from the current configuration that may have changed.

This checks which sections from the current configuration came from files in the given file list. These are sections that may be changed or removed when we reload the files.

execute(commands)[source]

Execute commands.

Takes a CommandList object.

findMatchingConfig(config, byName=False)[source]

Check the current config for an identical section.

Returns the matching object or None.

getPreviousCommands()[source]

Get the most recent command list.

loadConfig(search=None, execute=True)[source]

Load configuration files and apply changes to the system.

We process the configuration files in sections. Each section corresponds to an interface, firewall rule, DHCP server instance, etc. Each time we reload configuration files after the initial time, we check for changes against the current configuration. Here is the decision tree for handling differences in the newly loaded configuration vs. the existing configuration:

Section exists in current config (by type and name)?
  • No -> Add section, apply changes, and stop.
  • Yes -> Continue.

Section is identical to the one in the current config (by option values)?

  • No -> Revert current section, mark any affected dependents,

    add new section, apply changes, and stop.

  • Yes -> Continue.

Section has not changed but one of its dependencies has?
  • No -> Stop.

  • Yes -> Revert current section, mark any affected dependents,

    add new section, apply changes, and stop.

readConfig(files)[source]

Load configuration files and return configuration objects.

This method only loads the configuration files without making any changes to the system and returns configuration objects as a generator.

statusString()[source]

Return a JSON string representing status of the system.

The format will be a list of dictionaries. Each dictionary corresponds to a configuration block and contains at the following fields.

type: interface, wifi-device, etc. name: name of the section (may be autogenerated for some configs) comment: comment from the configuration file or None success: True if all setup commands succeeded

unload(execute=True)[source]
waitSystemUp()[source]

Wait for the first load to complete and return system status string.

findConfigFiles(search=None)[source]

Look for and return a list of configuration files.

The behavior depends on whether the search argument is a file, a directory, or None.

If search is None, return a list of files in the system config directory. If search is a file name (not a path), look for it in the working directory first, and the system directory second. If search is a full path to a file, and it exists, then return that file. If search is a directory, return the files in that directory.

paradrop.confd.network module

class ConfigInterface(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

DEV_PLUS_VID = <_sre.SRE_Pattern object>
addToBridge(ifname)[source]

Generate commands to add ifname to bridge.

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

maskable = False
options = [ConfigOption(name='proto', type=<type 'str'>, required=True, default=None), ConfigOption(name='ifname', type=<type 'list'>, required=False, default=[]), ConfigOption(name='type', type=<type 'str'>, required=False, default=None), ConfigOption(name='bridge_empty', type=<type 'bool'>, required=False, default=False), ConfigOption(name='enabled', type=<type 'bool'>, required=False, default=True), ConfigOption(name='ipaddr', type=<type 'str'>, required=False, default=None), ConfigOption(name='netmask', type=<type 'str'>, required=False, default=None), ConfigOption(name='gateway', type=<type 'str'>, required=False, default=None)]
removeFromBridge(ifname)[source]

Generate commands to add ifname to bridge.

revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

setup()[source]

Finish object initialization.

This is called after the config object is initialized will all of its options values filled in. Override to do some preparation work before we start generating commands.

typename = 'interface'
updateApply(new, allConfigs)[source]

Return a list of commands to update to new configuration.

Implementing this is optional for subclasses. The default behavior is to call apply.

Returns a list of (priority, Command) tuples.

updateRevert(new, allConfigs)[source]

Return a list of commands to (partially) revert the configuration.

The implementation can be selective about what it reverts (e.g. do not delete an interface if we are only updating its IP address). The default behavior is to call revert.

Returns a list of (priority, Command) tuples.

paradrop.confd.qos module

class ConfigClass(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

options = [ConfigOption(name='packetsize', type=<type 'int'>, required=False, default=None), ConfigOption(name='packetdelay', type=<type 'int'>, required=False, default=None), ConfigOption(name='maxsize', type=<type 'int'>, required=False, default=None), ConfigOption(name='avgrate', type=<type 'int'>, required=False, default=None), ConfigOption(name='limitrate', type=<type 'int'>, required=False, default=None), ConfigOption(name='priority', type=<type 'int'>, required=False, default=None)]
typename = 'class'
class ConfigClassgroup(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

get_class_id(class_name)[source]

Get ID for a traffic class in this group.

Returns None if the class is not a member of the group.

options = [ConfigOption(name='classes', type=<type 'str'>, required=True, default=None), ConfigOption(name='default', type=<type 'str'>, required=True, default=None)]
setup()[source]

Finish object initialization.

This is called after the config object is initialized will all of its options values filled in. Override to do some preparation work before we start generating commands.

typename = 'classgroup'
class ConfigClassify(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

make_iptables_cmd(action, ifname, class_id)[source]
options = [ConfigOption(name='target', type=<type 'str'>, required=True, default=None), ConfigOption(name='proto', type=<type 'str'>, required=False, default=None), ConfigOption(name='srchost', type=<type 'str'>, required=False, default=None), ConfigOption(name='dsthost', type=<type 'str'>, required=False, default=None), ConfigOption(name='ports', type=<type 'str'>, required=False, default=None), ConfigOption(name='srcports', type=<type 'str'>, required=False, default=None), ConfigOption(name='dstports', type=<type 'str'>, required=False, default=None), ConfigOption(name='portrange', type=<type 'str'>, required=False, default=None), ConfigOption(name='pktsize', type=<type 'str'>, required=False, default=None), ConfigOption(name='tcpflags', type=<type 'str'>, required=False, default=None), ConfigOption(name='mark', type=<type 'str'>, required=False, default=None), ConfigOption(name='connbytes', type=<type 'str'>, required=False, default=None), ConfigOption(name='tos', type=<type 'str'>, required=False, default=None), ConfigOption(name='dscp', type=<type 'str'>, required=False, default=None), ConfigOption(name='direction', type=<type 'str'>, required=False, default=None)]
revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

typename = 'classify'
class ConfigInterface(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

options = [ConfigOption(name='enabled', type=<type 'bool'>, required=True, default=None), ConfigOption(name='classgroup', type=<type 'str'>, required=False, default='Default'), ConfigOption(name='overhead', type=<type 'bool'>, required=False, default=True), ConfigOption(name='upload', type=<type 'int'>, required=False, default=4096), ConfigOption(name='download', type=<type 'int'>, required=False, default=512)]
revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

typename = 'interface'
compute_hfsc_params(classes, capacity)[source]

paradrop.confd.wireless module

class ConfGenerator[source]

Bases: object

writeHeader(output)[source]
writeOptions(options, output, title=None)[source]
class ConfigWifiDevice(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

detectPrimaryInterface()[source]

Find the primary network interface associated with this Wi-Fi device.

By primary we mean the first interface (e.g. wlan0 or wlan1) that exists at system startup before any interface add commands. We will use the primary interface first, and create additional virtual interfaces after that.

That seems overly complicated, but it is required in cases where the Wi-Fi device does not support virtual interfaces.

Returns interface name or None.

nextInterfaceName()[source]

Get the next available interface name.

options = [ConfigOption(name='type', type=<type 'str'>, required=True, default=None), ConfigOption(name='phy', type=<type 'str'>, required=False, default=None), ConfigOption(name='macaddr', type=<type 'str'>, required=False, default=None), ConfigOption(name='ifname', type=<type 'str'>, required=False, default=None), ConfigOption(name='channel', type=<type 'int'>, required=True, default=None), ConfigOption(name='hwmode', type=<type 'str'>, required=False, default=None), ConfigOption(name='txpower', type=<type 'int'>, required=False, default=None), ConfigOption(name='country', type=<type 'str'>, required=False, default=None), ConfigOption(name='require_mode', type=<type 'str'>, required=False, default=None), ConfigOption(name='htmode', type=<type 'str'>, required=False, default=None), ConfigOption(name='beacon_int', type=<type 'int'>, required=False, default=None), ConfigOption(name='frag', type=<type 'int'>, required=False, default=None), ConfigOption(name='rts', type=<type 'int'>, required=False, default=None), ConfigOption(name='ldpc', type=<type 'bool'>, required=False, default=None), ConfigOption(name='short_gi_20', type=<type 'bool'>, required=False, default=None), ConfigOption(name='short_gi_40', type=<type 'bool'>, required=False, default=None), ConfigOption(name='tx_stbc', type=<type 'int'>, required=False, default=None), ConfigOption(name='rx_stbc', type=<type 'int'>, required=False, default=None), ConfigOption(name='max_amsdu', type=<type 'bool'>, required=False, default=None), ConfigOption(name='dsss_cck_40', type=<type 'bool'>, required=False, default=None), ConfigOption(name='rxldpc', type=<type 'bool'>, required=False, default=None), ConfigOption(name='short_gi_80', type=<type 'bool'>, required=False, default=None), ConfigOption(name='short_gi_160', type=<type 'bool'>, required=False, default=None), ConfigOption(name='tx_stbc_2by1', type=<type 'bool'>, required=False, default=None), ConfigOption(name='rx_antenna_pattern', type=<type 'bool'>, required=False, default=None), ConfigOption(name='tx_antenna_pattern', type=<type 'bool'>, required=False, default=None), ConfigOption(name='vht_max_mpdu', type=<type 'int'>, required=False, default=None), ConfigOption(name='rx_stbc', type=<type 'int'>, required=False, default=None)]
releaseInterfaceName(ifname)[source]

Mark an interface name as no longer used.

revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

setup()[source]

Finish object initialization.

This is called after the config object is initialized will all of its options values filled in. Override to do some preparation work before we start generating commands.

typename = 'wifi-device'
class ConfigWifiIface(name=None)[source]

Bases: paradrop.confd.base.ConfigObject

apply(allConfigs)[source]

Return a list of commands to apply this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

getIfname(device, interface)[source]

Returns the name to be used by this WiFi interface, e.g. as seen by ifconfig.

This comes from the “ifname” option if it is set. Otherwise, we use the interface name of the associated network.

getName()[source]

Return a unique and consistent identifier for the section.

If ifname is set, then that is a good choice for the name because interface names need to be unique on the system.

If ifname is not set, then we use the combined string device:network. The assumption is that no one will put multiple APs on the same device and same network, or if they do, (e.g. multiple APs on the br-lan bridge), then they will configure the ifname to be unique.

getRandomMAC()[source]

Generate a random MAC address.

Returns a string “02:xx:xx:xx:xx:xx”. The first byte is 02, which indicates a locally administered address.

makeHostapdConf(wifiDevice, interface)[source]
makeWpaSupplicantConf(wifiDevice, interface)[source]
options = [ConfigOption(name='device', type=<type 'str'>, required=True, default=None), ConfigOption(name='mode', type=<type 'str'>, required=True, default=None), ConfigOption(name='ssid', type=<type 'str'>, required=False, default='Paradrop'), ConfigOption(name='hidden', type=<type 'bool'>, required=False, default=False), ConfigOption(name='isolate', type=<type 'bool'>, required=False, default=False), ConfigOption(name='wmm', type=<type 'bool'>, required=False, default=True), ConfigOption(name='network', type=<type 'str'>, required=False, default='lan'), ConfigOption(name='encryption', type=<type 'str'>, required=False, default='none'), ConfigOption(name='key', type=<type 'str'>, required=False, default=None), ConfigOption(name='maxassoc', type=<type 'int'>, required=False, default=None), ConfigOption(name='doth', type=<type 'bool'>, required=False, default=True), ConfigOption(name='short_preamble', type=<type 'bool'>, required=False, default=True), ConfigOption(name='auth_server', type=<type 'str'>, required=False, default=None), ConfigOption(name='auth_port', type=<type 'int'>, required=False, default=1812), ConfigOption(name='auth_secret', type=<type 'str'>, required=False, default=None), ConfigOption(name='acct_server', type=<type 'str'>, required=False, default=None), ConfigOption(name='acct_port', type=<type 'int'>, required=False, default=1813), ConfigOption(name='acct_secret', type=<type 'str'>, required=False, default=None), ConfigOption(name='nasid', type=<type 'str'>, required=False, default=None), ConfigOption(name='ownip', type=<type 'str'>, required=False, default=None), ConfigOption(name='dynamic_vlan', type=<type 'int'>, required=False, default=0), ConfigOption(name='identity', type=<type 'str'>, required=False, default=None), ConfigOption(name='password', type=<type 'str'>, required=False, default=None), ConfigOption(name='ieee80211r', type=<type 'bool'>, required=False, default=False), ConfigOption(name='mobility_domain', type=<type 'str'>, required=False, default='4f57'), ConfigOption(name='r0_key_lifetime', type=<type 'int'>, required=False, default=10000), ConfigOption(name='r1_key_holder', type=<type 'str'>, required=False, default='00004f577274'), ConfigOption(name='reassociation_deadline', type=<type 'int'>, required=False, default=1000), ConfigOption(name='r0kh', type=<type 'list'>, required=False, default=[]), ConfigOption(name='r1kh', type=<type 'list'>, required=False, default=[]), ConfigOption(name='pmk_r1_push', type=<type 'bool'>, required=False, default=False), ConfigOption(name='acct_interval', type=<type 'int'>, required=False, default=300), ConfigOption(name='ifname', type=<type 'str'>, required=False, default=None)]
revert(allConfigs)[source]

Return a list of commands to revert this configuration.

Most subclasses will need to implement this function.

Returns a list of (priority, Command) tuples.

typename = 'wifi-iface'
updateApply(new, allConfigs)[source]

Return a list of commands to update to new configuration.

Implementing this is optional for subclasses. The default behavior is to call apply.

Returns a list of (priority, Command) tuples.

updateRevert(new, allConfigs)[source]

Return a list of commands to (partially) revert the configuration.

The implementation can be selective about what it reverts (e.g. do not delete an interface if we are only updating its IP address). The default behavior is to call revert.

Returns a list of (priority, Command) tuples.

class HostapdConfGenerator(wifiIface, wifiDevice, interface)[source]

Bases: paradrop.confd.wireless.ConfGenerator

generate(path)[source]
get11acOptions()[source]
get11nOptions()[source]
get11rOptions()[source]

Get options related to 802.11r (fast BSS transition).

getMainOptions()[source]
getRadiusOptions()[source]
getSecurityOptions()[source]
readMode(device)[source]

Determine HT/VHT mode if applicable.

writeHeader(output)[source]
class WpaSupplicantConfGenerator(wifiIface, wifiDevice, interface)[source]

Bases: paradrop.confd.wireless.ConfGenerator

generate(path)[source]
getMainOptions()[source]
writeHeader(output)[source]
getPhyFromMAC(mac)[source]
getPhyMACAddress(phy)[source]
get_cipher_list(encryption_mode)[source]

Get list of ciphers from encryption mode.

Example: get_cipher_list(“psk2+tkip+aes”) -> [“TKIP”, “CCMP”]

isHexString(data)[source]

Test if a string contains only hex digits.

Module contents