def write_ifup_routes_file(self, settings, prefix=""): """write_ifup_routes_file writes /etc/config/ifup.d/10-default-route""" filename = prefix + self.ifup_routes_filename file_dir = os.path.dirname(filename) if not os.path.exists(file_dir): os.makedirs(file_dir) self.ifup_route_file = open(filename, "w+") file = self.ifup_route_file file.write("#!/bin/sh") file.write("\n\n") file.write("## Auto Generated\n") file.write("## DO NOT EDIT. Changes will be overwritten.\n") file.write("\n") file.write(". /lib/functions/network.sh\n") file.write("\n") file.write("INTERFACE=$1\n") file.write("DEVICE=$2\n") file.write("\n") if get_number_of_wans(settings) == 1: file.write("\n# Only one wan, do nothing\n\n") else: file.write("TMPFILE=`mktemp -t default-route.XXXXXX`\n") file.write("\n") file.write("write_rules()\n") file.write("{\n") file.write("\tnft -f $TMPFILE\n") file.write("\tretval=$?\n") file.write("\twhile [ $retval -ne 0 ] ; do\n") file.write("\t\tnft -f $TMPFILE\n") file.write("\t\tretval=$?\n") file.write("\tdone\n") file.write("\trm $TMPFILE\n") file.write("\texit 0\n") file.write("}\n\n") interfaces = settings.get('network').get('interfaces') for intf in interfaces: if enabled_wan(intf): if intf.get('v4ConfigType') != 'DISABLED': self.create_ifup_default_route( file, intf.get('interfaceId'), network_util.get_interface_name( settings, intf, 'ipv4'), "ip") if intf.get('v6ConfigType') != 'DISABLED': self.create_ifup_default_route( file, intf.get('interfaceId'), network_util.get_interface_name( settings, intf, 'ipv6'), "ip6") file.flush() file.close() os.chmod(filename, os.stat(filename).st_mode | stat.S_IEXEC) print("%s: Wrote %s" % (self.__class__.__name__, filename))
def write_wireless_file(self, settings, prefix=""): filename = prefix + self.wireless_filename file_dir = os.path.dirname(filename) if not os.path.exists(file_dir): os.makedirs(file_dir) self.network_file = open(filename, "w+") file = self.network_file file.write("## Auto Generated\n") file.write("## DO NOT EDIT. Changes will be overwritten.\n") file.write("\n") interfaces = settings['network']['interfaces'] devidx = 0 for intf in interfaces: if intf.get('type') == 'WIFI': file.write("config wifi-device 'radio%d'\n" % devidx) file.write("\toption type 'mac80211'\n") file.write("\toption channel '%s'\n" % intf['wirelessChannel']) file.write("\toption hwmode '%s'\n" % self.get_hwmode(intf)) file.write("\t%s\n" % self.get_device_id(intf)) file.write("%s" % self.get_htmode(intf)) if intf.get('configType') == 'DISABLED': file.write("\toption disabled '1'\n") else: file.write("\toption disabled '0'\n") self.write_country(file) file.write("\n") file.write("config wifi-iface 'default_radio%d'\n" % devidx) file.write("\toption device 'radio%d'\n" % devidx) file.write("\toption ifname '%s'\n" % intf.get('device')) if intf.get('configType') == 'BRIDGED': file.write("\toption network '%s'\n" % (network_util.get_bridge_name(settings, intf))) elif intf.get('configType') == 'ADDRESSED': file.write("\toption network '%s'\n" % (network_util.get_interface_name(settings, intf))) if intf.get('wirelessMode') == 'AP': file.write("\toption mode 'ap'\n") else: file.write("\toption mode 'sta'\n") file.write("\toption ssid '%s'\n" % intf.get('wirelessSsid')) if intf.get('wirelessEncryption') == 'NONE': file.write("\toption encryption 'none'\n") elif intf.get('wirelessEncryption') == 'WPA1': file.write("\toption encryption 'psk'\n") file.write("\toption key '%s'\n" % intf.get('wirelessPassword')) elif intf.get('wirelessEncryption') == 'WPA12': file.write("\toption encryption 'psk-mixed+tkip+ccmp'\n") file.write("\toption key '%s'\n" % intf.get('wirelessPassword')) else: file.write("\toption encryption 'psk2'\n") file.write("\toption key '%s'\n" % intf.get('wirelessPassword')) self.write_macaddr(file, intf.get('macaddr')) file.write("\n") devidx += 1 file.flush() file.close() print("%s: Wrote %s" % (self.__class__.__name__, filename))
def write_ifup_routes_file(self, settings, prefix=""): """write_ifup_routes_file writes /etc/config/ifup.d/10-default-route""" filename = prefix + self.ifup_routes_filename file_dir = os.path.dirname(filename) if not os.path.exists(file_dir): os.makedirs(file_dir) self.ifup_route_file = open(filename, "w+") file = self.ifup_route_file file.write("#!/bin/sh") file.write("\n\n") file.write("## Auto Generated\n") file.write("## DO NOT EDIT. Changes will be overwritten.\n") file.write("\n") file.write(". /lib/functions/network.sh\n") file.write("\n") file.write("INTERFACE=$1\n") file.write("DEVICE=$2\n") file.write("\n") if get_number_of_wans(settings) == 1: file.write("\n# Only one wan, do nothing\n\n") else: interfaces = settings.get('network').get('interfaces') for intf in interfaces: if enabled_wan(intf): file.write("[ %s = \"$INTERFACE\" ] && {\n" % network_util.get_interface_name(settings, intf)) file.write( "\tnft list chain inet wan-routing route-to-default-wan | grep -q mark-for-wan- || {\n" ) file.write( "\t\tnft flush chain inet wan-routing route-to-default-wan\n" ) file.write( "\t\tnft add rule inet wan-routing route-to-default-wan dict sessions ct id wan_policy long_string set system-default\n" ) file.write( "\t\tnft add rule inet wan-routing route-to-default-wan jump mark-for-wan-%d\n" % intf.get('interfaceId')) file.write("\t}\n") file.write("\texit 0\n") file.write("}\n\n") file.flush() file.close() os.chmod(filename, os.stat(filename).st_mode | stat.S_IEXEC) print("%s: Wrote %s" % (self.__class__.__name__, filename))
def write_ifup_routes_file(self, settings, prefix=""): """write_ifup_routes_file writes /etc/config/ifup.d/10-default-route""" filename = prefix + self.ifup_routes_filename file_dir = os.path.dirname(filename) if not os.path.exists(file_dir): os.makedirs(file_dir) self.ifup_route_file = open(filename, "w+") file = self.ifup_route_file file.write("#!/bin/sh") file.write("\n\n") file.write("## Auto Generated\n") file.write("## DO NOT EDIT. Changes will be overwritten.\n") file.write("\n") file.write(". /lib/functions/network.sh\n") file.write("\n") file.write("INTERFACE=$1\n") file.write("DEVICE=$2\n") file.write("\n") if get_number_of_wans(settings) == 1: file.write("\n# Only one wan, do nothing\n\n") else: interfaces = settings.get('network').get('interfaces') for intf in interfaces: if enabled_wan(intf): file.write("[ %s = \"$INTERFACE\" ] && {\n" % network_util.get_interface_name(settings, intf)) file.write("\tnft list chain inet wan-routing route-to-default-wan | grep -q mark-for-wan- || {\n") file.write("\t\tnft flush chain inet wan-routing route-to-default-wan\n") file.write("\t\tnft add rule inet wan-routing route-to-default-wan dict sessions ct id wan_policy long_string set system-default\n") file.write("\t\tnft add rule inet wan-routing route-to-default-wan jump mark-for-wan-%d\n" % intf.get('interfaceId')) file.write("\t}\n") file.write("\texit 0\n") file.write("}\n\n") file.flush() file.close() os.chmod(filename, os.stat(filename).st_mode | stat.S_IEXEC) print("%s: Wrote %s" % (self.__class__.__name__, filename))
def write_wireless_file(self, settings, prefix=""): filename = prefix + self.wireless_filename file_dir = os.path.dirname(filename) if not os.path.exists(file_dir): os.makedirs(file_dir) self.network_file = open(filename, "w+") file = self.network_file file.write("## Auto Generated\n") file.write("## DO NOT EDIT. Changes will be overwritten.\n") file.write("\n") interfaces = settings['network']['interfaces'] devidx = 0 for intf in interfaces: if intf.get('type') == 'WIFI': file.write("config wifi-device 'radio%d'\n" % devidx) file.write("\toption type 'mac80211'\n") file.write("\toption channel '%s'\n" % intf['wirelessChannel']) file.write("\toption hwmode '%s'\n" % self.get_hwmode(intf)) file.write("\t%s\n" % self.get_device_id(intf)) thruput = intf.get('wirelessThroughput') if thruput == None or thruput == "" or thruput == "AUTO": file.write("%s" % self.get_htmode(intf)) else: file.write("\toption htmode '%s'\n" % thruput) if not intf.get('enabled'): file.write("\toption disabled '1'\n") else: file.write("\toption disabled '0'\n") self.write_country(file) file.write("\n") file.write("config wifi-iface 'default_radio%d'\n" % devidx) file.write("\toption device 'radio%d'\n" % devidx) file.write("\toption ifname '%s'\n" % intf.get('device')) if intf.get('configType') == 'BRIDGED': file.write("\toption network '%s'\n" % (network_util.get_bridge_name(settings, intf))) elif intf.get('configType') == 'ADDRESSED': file.write("\toption network '%s'\n" % (network_util.get_interface_name(settings, intf, 'ipv4'))) if intf.get('wirelessMode') == 'AP': file.write("\toption mode 'ap'\n") else: file.write("\toption mode 'sta'\n") file.write("\toption ssid '%s'\n" % intf.get('wirelessSsid')) if intf.get('wirelessEncryption') == 'NONE': file.write("\toption encryption 'none'\n") elif intf.get('wirelessEncryption') == 'WPA1': file.write("\toption encryption 'psk'\n") file.write("\toption key '%s'\n" % intf.get('wirelessPassword')) elif intf.get('wirelessEncryption') == 'WPA12': file.write("\toption encryption 'psk-mixed+tkip+ccmp'\n") file.write("\toption key '%s'\n" % intf.get('wirelessPassword')) else: file.write("\toption encryption 'psk2'\n") file.write("\toption key '%s'\n" % intf.get('wirelessPassword')) self.write_macaddr(file, intf.get('macaddr')) file.write("\n") devidx += 1 file.flush() file.close() print("%s: Wrote %s" % (self.__class__.__name__, filename))
def write_ifdown_routes_file(self, settings, prefix=""): """write_ifdown_routes_file writes /etc/config/ifdown.d/10-default-route""" filename = prefix + self.ifdown_routes_filename file_dir = os.path.dirname(filename) if not os.path.exists(file_dir): os.makedirs(file_dir) self.ifdown_route_file = open(filename, "w+") file = self.ifdown_route_file file.write("#!/bin/sh") file.write("\n\n") file.write("## Auto Generated\n") file.write("## DO NOT EDIT. Changes will be overwritten.\n") file.write("\n") file.write(". /lib/functions/network.sh\n") file.write("\n") file.write("INTERFACE=$1\n") if get_number_of_wans(settings) == 1: file.write("\n# Only one wan, do nothing\n\n") else: file.write("TMPFILE=`mktemp -t default-route.XXXXXX`\n") file.write("\n") file.write("write_rules()\n") file.write("{\n") file.write("\tnft -f $TMPFILE\n") file.write("\tretval=$?\n") file.write("\twhile [ $retval -ne 0 ] ; do\n") file.write("\t\tnft -f $TMPFILE\n") file.write("\t\tretval=$?\n") file.write("\tdone\n") file.write("\trm $TMPFILE\n") file.write("\texit 0\n") file.write("}\n\n") file.write("update_default_route()\n") file.write("{\n") file.write("\n") file.write( "\techo flush chain inet wan-routing route-to-default-wan >> $TMPFILE\n" ) interfaces = settings.get('network').get('interfaces') for intf in interfaces: if enabled_wan(intf): file.write("\tnetwork_is_up %s && {\n" % network_util.get_interface_name(settings, intf)) file.write( "\t\techo add rule inet wan-routing route-to-default-wan dict sessions ct id wan_policy long_string set system-default >> $TMPFILE\n" ) file.write( "\t\techo add rule inet wan-routing route-to-default-wan jump mark-for-wan-%d >> $TMPFILE\n" % intf.get('interfaceId')) file.write("\t\twrite_rules\n") file.write("\t}\n\n") file.write("}\n\n") for intf in interfaces: if enabled_wan(intf): file.write("[ %s = \"$INTERFACE\" ] && {\n" % network_util.get_interface_name(settings, intf)) file.write( "\tnft list chain inet wan-routing route-to-default-wan | grep -q mark-for-wan-%d && {\n" % intf.get('interfaceId')) file.write("\t\tupdate_default_route\n") file.write("\t}\n") file.write("}\n\n") file.write("[ -z \"$INTERFACE\" ] && {\n") file.write("\tupdate_default_route\n") file.write("}\n\n") file.flush() file.close() os.chmod(filename, os.stat(filename).st_mode | stat.S_IEXEC) print("%s: Wrote %s" % (self.__class__.__name__, filename))
def write_wan_manager_file(self, settings, prefix=""): """write_wan_manager_file writes /etc/config/wan_manager""" filename = prefix + self.wan_manager_filename file_dir = os.path.dirname(filename) if not os.path.exists(file_dir): os.makedirs(file_dir) self.wan_manager_file = open(filename, "w+") file = self.wan_manager_file file.write("## Auto Generated\n") file.write("## DO NOT EDIT. Changes will be overwritten.\n") file.write("\n\n") file.write("# Make sure default route is up to date\n") file.write("/etc/config/ifdown.d/10-default-route") file.write("\n\n") wan = settings['wan'] policies = wan.get('policies') for policy in policies: if policy.get('enabled'): policyId = policy.get('policyId') interfaces = policy.get('interfaces') if len(interfaces) == 1 and interfaces[0].get( 'interfaceId') == 0: interfaces = get_wan_list(settings) for intf in interfaces: interfaceId = intf.get('interfaceId') interfaceName = network_util.get_interface_name( settings, get_interface_by_id(settings, interfaceId)) criteria = policy.get('criteria') if criteria is None: file.write("up policy-%d %d %s &\n" % (policyId, interfaceId, interfaceName)) else: down_by_attribute = False for criterion in criteria: if criterion.get('type') == 'ATTRIBUTE': if criterion.get('attribute') == 'VPN': if intf.get( 'type') != 'OPENVPN' and intf.get( 'type') != 'WIREGUARD': file.write( "attribute policy-%d %d %s VPN down &\n" % (policyId, interfaceId, interfaceName)) down_by_attribute = True else: file.write( "attribute policy-%d %d %s VPN up &\n" % (policyId, interfaceId, interfaceName)) elif criterion.get('attribute') == 'NAME': name_contains = criterion.get( 'name_contains') if name_contains not in interfaceName: file.write( "attribute policy-%d %d %s NAME %s down &\n" % (policyId, interfaceId, interfaceName, name_contains)) down_by_attribute = True else: file.write( "attribute policy-%d %d %s NAME %s up &\n" % (policyId, interfaceId, interfaceName, name_contains)) if down_by_attribute is False: file.write("up policy-%d %d %s &\n" % (policyId, interfaceId, interfaceName)) for criterion in criteria: if criterion.get('type') == 'METRIC': metric_value = criterion.get( 'metric_value') metric = criterion.get('metric') if metric == 'LATENCY': stat_name = "latency" metric_name = "1_minute" elif metric == 'AVAILABLE_BANDWIDTH': stat_name = "available_bandwidth" metric_name = "1_minute" elif metric == 'JITTER': stat_name = "jitter" metric_name = "1_minute" elif metric == 'PACKET_LOSS': stat_name = "packet_loss" metric_name = "1_minute" metric_op = criterion.get('metric_op') if metric_op == "<": op = "lt" elif metric_op == "<=": op = "le" elif metric_op == ">": op = "gt" elif metric_op == ">=": op = "ge" file.write( "metric policy-%d %d %s %s %s %s %d &\n" % (policyId, interfaceId, interfaceName, stat_name, metric_name, op, metric_value)) elif criterion.get('type') == 'CONNECTIVITY': test_type = criterion.get( 'connectivityTestType') interval = criterion.get( 'connectivityTestInterval') timeout = criterion.get( 'connectivityTestTimeout') threshold = criterion.get( 'connectivityTestFailureThreshold') target = criterion.get( 'connectivityTestTarget') if test_type == "PING": test = "ping" elif test_type == "HTTP": test = "http" elif test_type == "ARP": test = "arp" elif test_type == "DNS": test = "dns" file.write( "test policy-%d %d %s %s %d %d %d %s &\n" % (policyId, interfaceId, interfaceName, test, interval, timeout, threshold, target)) if policy.get('type') == "SPECIFIC_WAN": file.write("specific_wan policy-%d %d &\n" % (policyId, interfaceId)) elif policy.get('type') == "BEST_OF": best_of_metric = policy.get('best_of_metric') if best_of_metric == "LOWEST_LATENCY": stat_name = "latency" metric_name = "1_minute" op = "le" elif best_of_metric == "LOWEST_JITTER": stat_name = "jitter" metric_name = "1_minute" op = "le" elif best_of_metric == "HIGHEST_AVAILABLE_BANDWIDTH": stat_name = "available_bandwidth" metric_name = "1_minute" op = "ge" elif best_of_metric == "LOWEST_PACKET_LOSS": stat_name = "packet_loss" metric_name = "1_minute" op = "le" file.write("best_of policy-%d %s %s %s &\n" % (policyId, stat_name, metric_name, op)) elif policy.get('type') == "BALANCE": algorithm = policy.get('balance_algorithm') file.write("balance policy-%d %s &\n" % (policyId, algorithm)) file.flush() file.close() print("%s: Wrote %s" % (self.__class__.__name__, filename))
def write_dhcp_file(self, settings, prefix=""): """writes prefix/etc/config/dhcp""" filename = prefix + self.dhcp_filename file_dir = os.path.dirname(filename) if not os.path.exists(file_dir): os.makedirs(file_dir) system = settings.get('system') dns = settings.get('dns') dhcp = settings.get('dhcp') file = open(filename, "w+") file.write("## Auto Generated\n") file.write("## DO NOT EDIT. Changes will be overwritten.\n") file.write("\n") file.write("config dnsmasq\n") interfaces = settings['network']['interfaces'] ## Only enable dns reserver for static Ethernet or PPPoE interfaces, ## if those interfaces are enabled. dnsmasq_dns_server_template = "\tlist server '{dns_resolver_address}@{device}'\n" for intf in interfaces: if intf.get('enabled') == True and intf.get( 'configType' ) == 'ADDRESSED' and intf.get('wan') is True and intf.get( 'v4ConfigType') == 'STATIC': if intf.get('v4StaticDNS1') != None: file.write( DhcpManager.dnsmasq_dns_server_template.format( dns_resolver_address=intf.get('v4StaticDNS1'), device=intf.get('device'))) if intf.get('v4StaticDNS2') != None: file.write( DhcpManager.dnsmasq_dns_server_template.format( dns_resolver_address=intf.get('v4StaticDNS2'), device=intf.get('device'))) if intf.get('enabled') == True and intf.get( 'configType' ) == 'ADDRESSED' and intf.get('wan') is True and intf.get( 'v4ConfigType' ) == 'PPPOE' and intf.get('v4PPPoEUsePeerDNS') is False: if intf.get('v4PPPoEDNS1') != None: file.write( DhcpManager.dnsmasq_dns_server_template.format( dns_resolver_address=intf.get('v4PPPoEDNS1'), device=intf.get('device'))) if intf.get('v4PPPoEDNS2') != None: file.write( DhcpManager.dnsmasq_dns_server_template.format( dns_resolver_address=intf.get('v4PPPoEDNS2'), device=intf.get('device'))) if dns.get('localServers') != None: for local_server in dns.get('localServers'): file.write("\tlist server '/%s/%s'\n" % (local_server.get('domain'), local_server.get('localServer'))) if system.get('domainName') != None: file.write("\toption domain '%s'\n" % system.get('domainName')) file.write("\toption expandhosts '1'\n") file.write("\toption nonegcache '0'\n") if dhcp.get('dhcpAuthoritative') is True: file.write("\toption authoritative '1'\n") else: file.write("\toption authoritative '0'\n") file.write("\tlist interface '*'\n") file.write("\toption localise_queries '1'\n") file.write("\toption nohosts '1'\n") file.write("\toption domainneeded '0'\n") file.write("\toption boguspriv '0'\n") file.write("\toption filterwin2k '0'\n") file.write("\toption readethers '0'\n") file.write("\toption rebind_protection '0'\n") file.write("\toption rebind_localhost '0'\n") file.write("\toption nonwildcard '0'\n") file.write("\toption localservice '0'\n") file.write("\toption dhcpleasemax '5000'\n") file.write("\toption dnsforwardmax '512'\n") file.write("\toption leasefile '/tmp/dhcp.leases'\n") file.write("\toption resolvfile '/tmp/resolv.conf.auto'\n") file.write("\tlist addnhosts '/tmp/hosts.untangle'\n") file.write("\n") dhcpv6_in_use = False # If relay is enabled on a WAN intf. then we need to adjust LAN intf config appropriately dhcpv6_relay_enabled = False for intf in interfaces: if intf.get('v6RelayEnabled'): dhcpv6_relay_enabled = True for intf in interfaces: if intf.get('configType') == 'ADDRESSED': interface_name = network_util.get_interface_name( settings, intf, "ipv4") file.write("config dhcp '%s'\n" % interface_name) if intf.get('dhcpEnabled') is True: if intf.get('v4ConfigType') != 'DISABLED': file.write("\toption interface '%s'\n" % interface_name) file.write("\toption force 1\n") file.write( "\toption start '%d'\n" % calc_dhcp_range_start(intf.get('v4StaticAddress'), intf.get('v4StaticPrefix'), intf.get('dhcpRangeStart'))) file.write( "\toption limit '%d'\n" % calc_dhcp_range_limit(intf.get('dhcpRangeStart'), intf.get('dhcpRangeEnd'))) if intf.get('dhcpLeaseDuration') != None and intf.get( 'dhcpLeaseDuration') != 0: file.write("\toption leasetime '%d'\n" % intf.get('dhcpLeaseDuration')) else: file.write("\toption leasetime '3600'\n") if intf.get( 'dhcpGatewayOverride') != None and intf.get( 'dhcpGatewayOverride') != "" and intf.get( 'dhcpGatewayOverride') != 0: file.write("\tlist dhcp_option '3,%s'\n" % intf.get('dhcpGatewayOverride')) else: file.write("\tlist dhcp_option '3,%s'\n" % intf.get('v4StaticAddress')) if intf.get('dhcpPrefixOverride') != None and intf.get( 'dhcpPrefixOverride') != "" and intf.get( 'dhcpPrefixOverride') != 0: file.write("\tlist dhcp_option '1,%s'\n" % network_util.ipv4_prefix_to_netmask( intf.get('dhcpPrefixOverride'))) else: file.write("\tlist dhcp_option '1,%s'\n" % network_util.ipv4_prefix_to_netmask( intf.get('v4StaticPrefix'))) if intf.get('dhcpDNSOverride') != None and intf.get( 'dhcpDNSOverride') != "": dns_servers = intf.get('dhcpDNSOverride') else: dns_servers = intf.get('v4StaticAddress') file.write("\tlist dhcp_option '6,%s'\n" % dns_servers) if intf.get('dhcpOptions') != None: for dhcp_option in intf.get('dhcpOptions'): if dhcp_option.get( 'enabled' ) is None or not dhcp_option.get('enabled'): continue file.write("\tlist dhcp_option '%s'\n" % dhcp_option.get('value')) if intf.get('v6ConfigType') != 'DISABLED': dhcpv6_in_use = True if dhcpv6_relay_enabled: write_relay_options(file, intf.get('wan')) else: file.write("\toption dhcpv6 'server'\n") file.write("\toption ra 'server'\n") file.write("\n") else: file.write("\toption interface '%s'\n" % interface_name) # Only add relay options to interfaces that have IPv6 enabled, or if they are a WAN with relay enabled if (intf.get('wan') is False and intf.get('v6ConfigType') is not None and intf.get('v6ConfigType') != 'DISABLED' and dhcpv6_relay_enabled ) or intf.get('v6RelayEnabled'): write_relay_options(file, intf.get('wan')) else: file.write("\toption ignore '1'\n") file.write("\n") if dhcpv6_in_use is True: file.write("config odhcpd 'odhcpd'\n") file.write("\toption maindhcp '0'\n") file.write("\toption leasefile '/tmp/hosts/odhcpd'\n") file.write("\toption leasetrigger '/usr/sbin/odhcpd-update'\n") file.write("\toption loglevel '4'\n") file.write("\n") if dns.get('staticEntries') != None: for entry in dns.get('staticEntries'): if entry.get('name') != None and entry.get('address') != None: file.write("config 'domain'\n") file.write("\toption name '%s'\n" % entry.get('name')) file.write("\toption ip '%s'\n" % entry.get('address')) file.write("\n") if dhcp.get('staticDhcpEntries') != None: for entry in dhcp.get('staticDhcpEntries'): if entry.get('macAddress') != None and entry.get( 'address') != None: file.write("config 'host'\n") file.write("\toption ip '%s'\n" % entry.get('address')) file.write("\toption mac '%s'\n" % entry.get('macAddress')) file.write("\n") file.flush() file.close() print("%s: Wrote %s" % (self.__class__.__name__, filename))