NONE            = '.*'                  : ''
OPT_REGEXP_ID   = '[ug]id=[[:alnum:]]+' : ''
OPT_REGEXP_MODE = 'mode=[0-7]{3,4}' : ''
OPT_REGEXP_FLAGS= 'flags=(sh|utxt|dtxt)' : ''
OPT_REGEXP_OPT  = '(RE:OPT_REGEXP_ID)|(RE:OPT_REGEXP_MODE)|(RE:OPT_REGEXP_FLAGS)' : ''
OPT_REGEXP      = '((RE:OPT_REGEXP_OPT)( +(RE:OPT_REGEXP_OPT))*)*' : 'wrong option for file, please read developer documentation to find out about possible options and their values'
NOTEMPTY        = '.*[^ ]+.*'           : 'may not be empty'
NOBLANK         = '[^ ]+'               : 'may not contain spaces'
ENOBLANK        = '()|(RE:NOBLANK)'     : 'neither without spaces nor empty'
NUMERIC         = '0|[1-9][0-9]*'       : 'should be numeric (decimal)'
ENUMERIC        = '()|(RE:NUMERIC)'     : 'neither numeric (decimal) nor empty'
DOT_NUMERIC     = '(RE:NUMERIC).[0-9]+'
                : 'should be numeric (decimal) with dot e.g. 5.0'
EDOT_NUMERIC    = '()|(RE:DOT_NUMERIC)'
                : 'neither numeric (decimal) with dot e.g. 5.0 nor empty'
NUM_HEX         = '0x[[:xdigit:]]+'
                : 'should be a hexadecimal number (a number starting with "0x")'
ENUM_HEX        = '()|0x[[:xdigit:]]+'
                : 'should be empty or a hexadecimal number (a number starting with "0x")'
NUM_ANY         = '(RE:NUMERIC)|(RE:NUM_HEX)'
                : 'should be a decimal or hexadecimal number'
ENUM_ANY        = '()|(RE:NUMERIC)|(RE:NUM_HEX)'
                : 'should be empty or be a decimal or hexadecimal number'
YESNO           = 'yes|no'
                : 'only yes or no are allowed'
IMOND_YESNO     = 'yes' 
		: 'The development version of imond is for developers only; If you would like to use it, please edit the check files to enable it manually'
CONSOLE         = 'no|yes|primary|secondary'
                : 'choose one of yes, no, primary, secondary'
COMPTYPE        = 'gzip|bzip2'
                : 'only gzip or bzip2 are allowed compression methods'
MOUNTTYPE       = 'ro|rw|no'
                : 'only ro, rw, or no are allowed mount options'
FLMOUNTDEV      = 'first|second|no'
                : 'only first, second, or no are allowed floppy mount devices'
DIALMODE        = 'auto|manual|off'
                : 'only auto, manual or off are allowed'
BOOT_TYPES      = 'fd1440|fd1680|dual1440|dual1680|dualfd|fd|fdx2|integrated|attached|netboot|pxeboot|cd|cdemul|hd|ls120'
                : 'wrong boot type! should be fd1440, fd1680, dual1440, dual1680, dualfd, fd, fdx2, cd, cdemul, ls120, hd, integrated, attached or netboot.'
CIRCUIT         = 'pppoe|dhcp|(RE:NUMERIC)'
                : 'no valid circuit ("pppoe", "dhcp" or a number)'
CIRCUITS        = '(RE:CIRCUIT)([[:space:]]+(RE:CIRCUIT))*'
                : 'no valid circuits, please specify one or more circuits ("pppoe", "dhcp" or a number)'
MACADDR         = '[[:xdigit:]][[:xdigit:]](:[[:xdigit:]][[:xdigit:]]){5}'
                : 'wrong mac address, should be 6 hex numbers each 
                   represented by two digits and devided by ":" (for instance 
                   00:00:E8:83:72:92)'
HOSTNAME        = '[[:alnum:]](-?[[:alnum:]])*'
                : 'wrong hostname, only letters, numbers and minus sign 
                   are allowed; no leading or trailing minus sign'
EHOSTNAME       = '()|(RE:HOSTNAME)'
                : 'no valid hostname, should be empty or contain only 
                   letters, numbers and minus sign; leading or trailing minus signs are not allowed.'
DOMAIN          = '[[:alnum:]](-?[[:alnum:]])*(\.[[:alnum:]](-?[[:alnum:]])*)*'
                : 'wrong domain name, only letters, numbers and minus sign 
                   are allowed; parts are divided by a dot (for instance 
                   lan.fli4l); no leading or trailing minus sign or dot'
EDOMAIN         = '()|(RE:DOMAIN)'
                : 'neither valid domain name (only letters, numbers and minus 
                   sign are allowed; parts are divided by a dot (for instance 
                   lan.fli4l); no leading or trailing minus sign or dot) or empty'
FQDN            = '(RE:HOSTNAME)\.(RE:DOMAIN)'
                : 'wrong fully qualified domain name, should consist of a 
                   host name and a domain name diveded by a dot; only 
                   letters, numbers and minus sign are allowed, no leading 
                   or trailing minus sign'
EFQDN           = '()|(RE:FQDN)'
                : 'neither a fully qualified domain name (should consist of a 
                   host name and a domain name diveded by a dot; only letters, 
                   numbers and minus sign are allowed, no leading or trailing 
                   minus sign) nor empty'
DHCPTYPE        = 'hostname|mac'                : 'only hostname or mac are allowed'
OCTET           = '1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]'
                : 'should be a value between 0 and 255'
IPADDR          = '((RE:OCTET)\.){3}(RE:OCTET)' : 'no valid ip address'
EIPADDR         = '()|(RE:IPADDR)'
                : 'should be empty or contain a valid ip address'
NEIPADDR        = 'none|()|(RE:IPADDR)'
                : 'should be empty or contain "none" or a valid ip address'
IPADDRESSES     = '(RE:IPADDR)([[:space:]]+(RE:IPADDR))*'
                : 'no valid ip address, please specify one or more valid ip addresses'
EIPADDRESSES    = '()|(RE:IPADDRESSES)'
                : 'should be empty or contain one or more valid ip addresses'
NUM_INT         = '6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[0-5][0-9]{4}|[0-9]{1,4}'
                : 'should be an number between 0 and 65535'
PORT_RANGE      = '(RE:NUM_INT)(-(RE:NUM_INT))?'
                : 'should be a port or a port range, something like 0 or 0-65535'
DENY_PORT       = '(RE:PORT_RANGE)([[:space:]]+(REJECT|DROP)(-TCP|-UDP)?)?'
                : 'no valid port specification, should be a single port 
                   (i.e. 23) or a port range (137-139), optionally followed  
                   by DROP or REJECT optionally followed by -TCP or -UDP'
ACCEPT_PORT     = '(RE:PORT_RANGE)([[:space:]]+(TCP|UDP))?'
                : 'no valid port specification, should be a single port 
                   (i.e. 23) or a port range (137-139), optionally followed 
                   by TCP or UDP'
POLICY          = 'REJECT|DROP|ACCEPT'
                : 'policy: REJECT, DROP, or ACCEPT'
DNS_SPEC        = '(RE:DOMAIN)[[:space:]]+(RE:IPADDR)'
                : 'invalid specification for special dns servers, should 
                   be a domain name followed by one ip address'
MASK            = '3[0-2]|[1-2]?[0-9]'
                : 'no valid netmask spezified, please specify a value 
                   between 0 and 32'
NETWORK         = '(RE:IPADDR)/(RE:MASK)'
                : 'no valid network specification, should be a network 
                  address followed by a netmask, for instance 192.168.6.0/24'
ENETWORK        = '()|(RE:NETWORK)'
                : 'no valid network specification, should be empty or
                  should contain a network address followed by a netmask, for
                  instance 192.168.6.0/24'
NETWORKS        = '(RE:NETWORK)([[:space:]]+(RE:NETWORK))*'
                : 'no valid network specification, should be one or more 
                  network addresse(s) followed by a netmask, 
                  for instance 192.168.6.0/24'
ENETWORKS       = '()|(RE:NETWORKS)'
                : 'no valid network specification, should be empty or 
                  should contain one or more 
                  network addresse(s) followed by a netmask, 
                  for instance 192.168.6.0/24'
MULTIPLE_NETWORKS = '(RE:NETWORK)([[:space:]]+(RE:NETWORK))+'
                : 'no valid network specification, should be two or more 
                  network addresses followed by their netmasks, 
                  for instance "192.168.6.0/24 192.168.7.0/24"'
EMULTIPLE_NETWORKS= '()|(RE:MULTIPLE_NETWORKS)'
                : 'no valid network specification, should be empty or 
                  contain two or more 
                  network addresses followed by their netmasks, 
                  for instance "192.168.6.0/24 192.168.7.0/24"'
IPADDR_NETWORK  = '(RE:IPADDR)|(RE:NETWORK)'
                : 'neither valid ip address nor valid network'
EIPADDR_NETWORK = '()|(RE:IPADDR)|(RE:NETWORK)'
                : 'no valid ip address, network or empty'
MAILADDR        = '[[:alnum:]]([[:alnum:].-]+)?@((RE:DOMAIN)|localhost)'
                : 'not a valid mail address, use e.g. "aaaa@bbbb.ccc"'
EMAILADDR       = '()|(RE:MAILADDR)'
                : 'neither a mail address nor empty'
CRONTAB         = '([0-9,/*-]+) *([0-9,/*-]+) *([0-9,/*-]+) *([0-9,/*(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec)-]+) *([0-7,/*(mon,tue,wed,thu,fri,sat,sun)-]+)'
                : 'not a valid crontab string, use e.g. "3 5 * * *"'
DISK            = '(sd|hd|nftl)[a-d]'        : 'no valid disk'
PARTITION       = '(RE:DISK)[1-8]'      : 'no valid partition'
REL_PATH        = '(([[:alnum:]]|[-_.])+)(/([[:alnum:]]|[-_.])+)*/?'
                : 'no valid relative path, only numbers, letters, "-" and 
                   "_" divided by "/" are allowed'
E_REL_PATH      = '()|(RE:REL_PATH)'
                : 'neither empty nor valid relative path; only numbers, 
                  letters, "-" and "_" divided by "/" are allowed'
ABS_PATH        = '/(RE:E_REL_PATH)'
                : 'no valid absolute path (must start with a slash and 
                   only numbers, letters, "-" and "_" divided by "/" are 
                   allowed)'
E_ABS_PATH      = '()|(RE:ABS_PATH)'
                : 'neither empty nor 
                   valid absolute path (must start with a slash and 
                   only numbers, letters, "-" and "_" divided by "/" are 
                   allowed)'
PART_OPT        = 'auto|(RE:PARTITION)|([1-2]?[0-9]{2}|[3-9])[0-9]{2}'
                : 'no valid PART_OPT, should be auto, a value between 
                  300 and 29999 or a partition'
NET_DRV         = '3c503|3c505|3c507|3c509|3c515|3c59x|8139too|82596|b44|e100|amd8111e|at1700|cs89x0|de4x5|depca|dgrs|dmfe|dummy|e2100|eepro100|eepro|eexpress|epic100|eth16i|ewrk3|fealnx|forcedeth|hp100|hp|hp-plus|lance|natsemi|natsemi-db|ne2k-pci|ne|ni5010|ni52|ni65|pcnet32|r8169|sis900|smc9194|smc-ultra|starfire|strip|sundance|tc35815|tlan|typhoon|via-rhine|wd|winbond-840|tulip|8139cp|acenic|dl2k|e1000|hamachi|ns83820|sk98lin|tg3|yellowfin|rtl8139-db|3c59x-db|epic100-db|sunhme'
                : 'invalid ethernet driver, please choose one of the drivers in config/base.txt'
TR_DRV          = '3c359|abyss|ibmtr|lanstreamer|olympic|smctr|tmsisa|tmspci'
                : 'invalid token ring driver'
+NET_DRV        = '(RE:TR_DRV)' : ''
ETH_BASE_DEV_NAME= 'eth[1-9]?[0-9]'
                : 'Invalid ethernet device name, ether devices are named eth0, eth1, ..., eth9'
ETH_DEV_NAME    = '(RE:ETH_BASE_DEV_NAME)(:[1-9]?[0-9])?'
                : 'Invalid ethernet device name, ether devices are named eth0, eth1:3, eth2:0'
TR_DEV_NAME     = 'tr[1-9]?[0-9]'
                : 'Invalid tokenring device name, tokenring devices are named tr0, tr1, ..., tr9'
DUMMY_DEV_NAME  = 'dummy[1-9]?[0-9]'
                : 'Invalid dummy device name, dummy devices are named dummy<number>'
HOST_REF        = '@((RE:HOSTNAME)|(RE:FQDN))' : 'no error message yet'

IP_NET_NAME     = '(RE:TR_DEV_NAME)|(RE:ETH_DEV_NAME)|(RE:DUMMY_DEV_NAME)'
                : 'Invalid device name, only ethernet (eth), token ring (tr) or dummy (dummy<number>) devices are allowed.'
IP_NET_TYPE     = 'green|orange|()' 
                : 'Invalid network type, only green or orange are allowed'
IP_ROUTE        = '(RE:NETWORK)[[:space:]]+(((RE:HOST_REF)|(RE:IPADDR)|(RE:IP_NET_NAME))|(((RE:HOST_REF)|(RE:IPADDR))[[:space:]]+(RE:IP_NET_NAME)))'
                : 'no valid route specification (network/cidr gateway)'
OBSOLETE_2_1    = 'obsolete{64}'
                : 'This variable was removed in version 2.1, please 
                   read the documentation'

INPUT_POLICY    = 'DROP|REJECT|ACCEPT' : 'choose either DROP, REJECT or ACCEPT'
FORWARD_POLICY  = 'DROP|REJECT|ACCEPT' : 'choose either DROP, REJECT or ACCEPT'
FW_TMPL         = 'tmpl:[^[:space:]]+'
                : 'no errormessage yet'
FW_MAC          = 'mac:(RE:MACADDR)' : 'none'
FW_NET          = '(ip_net|IP_NET)_[1-9]?[0-9]' : 'none'
FW_ROUTE_NET    = '(ip_route|IP_ROUTE)_[1-9]?[0-9]' : 'none'
FW_NET_IP       = '(RE:FW_NET)_(ipaddr|IPADDR)' : 'none'
FW_NET_DEV      = '(RE:FW_NET)_(dev|DEV)' : 'none'
FW_IF           = '!?(lo|eth[0-9]+|br[0-9]+|circuit-[-_[:alnum:]]+|(RE:FW_NET_DEV)|pppoe|any|tun[+]|tun[0-9]+|isdn[+]|isdn[0-9]+|i?ppp[+]|i?ppp[0-9]+)'
                : 'no errormessage yet'
FW_IF_IN        = 'if:(RE:FW_IF):any' : 'no errormessage yet'
FW_IF_OUT       = 'if:any:(RE:FW_IF)' : 'no errormessage yet'
FW_IF_IN_OUT    = 'if:(RE:FW_IF):(RE:FW_IF)' : 'no errormessage yet'
FW_ICMP_TYPES   = 'echo-reply|echo-request' : 'none'
FW_ICMP         = '!?(icmp|icmp:(RE:FW_ICMP_TYPES))' : 'none'
FW_PROTO        = 'prot:((!?(tcp|udp|gre|(RE:NUMERIC)))|(RE:FW_ICMP))'
                : 'no errormessage yet'
FW_STATES       = 'RELATED|ESTABLISHED|NEW|INVALID'
                : 'no errormessage yet'
FW_STATE        = 'state:(RE:FW_STATES)(,(RE:FW_STATES))*'
                : 'no errormessage yet'
FW_PORTS        = '(RE:PORT_RANGE)|(RE:NUM_INT)(,(RE:NUM_INT)){1,14}'
                : 'no errormessage yet'
FW_LENGTH       = 'length:(RE:PORT_RANGE)'
                : 'no errormessage yet'
FW_LIMIT_EXPR   = '[[:digit:]]+/(second|minute|hour|day)(:[[:digit:]]+)?'
                : 'no error message yet'
FW_LIMIT        = 'limit:(RE:FW_LIMIT_EXPR)'
                : 'invalid limit expression'
FW_IP           = '!?((RE:FW_PORTS)|(any|(RE:IPADDR)(/(RE:MASK))?|(RE:FW_NET)|(RE:FW_ROUTE_NET)|(RE:FW_NET_IP)|(RE:HOST_REF))(:(RE:FW_PORTS))?)[[:space:]]+'
                : 'no errormessage yet'
PRE_IP          = '((RE:FW_TMPL)[[:space:]]+)?!?((RE:FW_PORTS)|(any|dynamic|(RE:IPADDR)(/(RE:MASK))?|(RE:FW_NET)|(RE:FW_ROUTE_NET)|(RE:FW_NET_IP)|(RE:HOST_REF))(:(RE:FW_PORTS))?)[[:space:]]+'
                : 'no errormessage yet'
FW_LOG_ACTION   = 'LOG(:[-_[:alnum:]]+)?' : ''
FW_ACTION       = '(DROP|REJECT|ACCEPT|[-_a-z]+)([[:space:]]+BIDIRECTIONAL)?([[:space:]]+(NOLOG|(RE:FW_LOG_ACTION)))?|(RE:FW_LOG_ACTION)([[:space:]]+BIDIRECTIONAL)?'
                : 'no errormessage yet'
FW_GENERIC_MATCH= '((RE:FW_TMPL)|(RE:FW_PROTO)|(RE:FW_LENGTH)|(RE:FW_STATE)|(RE:FW_MAC))'
                : 'no errormessage yet'
FW_INPUT_MATCH  = '((RE:FW_GENERIC_MATCH)|(RE:FW_IF_IN))[[:space:]]+'
                : 'no errormessage yet'
FW_INPUT_RULE   = '[[:space:]]*(RE:FW_INPUT_MATCH)*(RE:FW_IP){0,2}(RE:FW_ACTION)'
                : 'no errormessage yet'
FW_FORWARD_MATCH= '((RE:FW_GENERIC_MATCH)|(RE:FW_IF_IN_OUT))[[:space:]]+'
                : 'no errormessage yet'
FW_FORWARD_RULE = '[[:space:]]*((RE:FW_FORWARD_MATCH)+)?(RE:FW_IP){0,2}(RE:FW_ACTION)'
                : 'no errormessage yet'
FW_NAT_POST_MATCH= '((RE:FW_GENERIC_MATCH)|(RE:FW_IF_OUT))[[:space:]]+'
                : 'no errormessage yet'
FW_NAT_PRE_MATCH= '((RE:FW_GENERIC_MATCH)|(RE:FW_IF_IN))[[:space:]]+'
                : 'no errormessage yet'
NAT_DST         = '((RE:IPADDR)(-(RE:IPADDR))?|(RE:FW_NET_IP)|(RE:HOST_REF))(:(RE:PORT_RANGE))?'
                : 'no errormessage yet'
FW_NAT_SNAT_ACTION= 'SNAT:(RE:NAT_DST)' : 'no error message yet'
FW_NAT_MASQ_ACTION= 'MASQUERADE(:(RE:PORT_RANGE))?' : 'no error message yet'
FW_NAT_NETMAP_ACTION= 'NETMAP:((RE:IPADDR)|(RE:NETWORK))' : 'no error message yet'
FW_NAT_POST_ACTION= '((ACCEPT|(RE:FW_NAT_MASQ_ACTION))([[:space:]]+BIDIRECTIONAL)?|(RE:FW_NAT_SNAT_ACTION)|(RE:FW_NAT_NETMAP_ACTION))([[:space:]]+(RE:FW_LOG_ACTION))?'
                : 'no errormessage yet'
FW_NAT_PRE_ACTION= '((ACCEPT|DROP)([[:space:]]+BIDIRECTIONAL)?|DNAT:(RE:NAT_DST)|REDIRECT:(RE:FW_PORTS)|NETMAP:((RE:IPADDR)|(RE:NETWORK)))([[:space:]]+(RE:FW_LOG_ACTION))?'
                : 'no errormessage yet'
FW_NAT_POST_RULE= '[[:space:]]*((RE:FW_NAT_POST_MATCH)+)?(RE:FW_IP){0,2}(RE:FW_NAT_POST_ACTION)'
                : 'no errormessage yet'
FW_NAT_PRE_RULE = '[[:space:]]*((RE:FW_NAT_PRE_MATCH)+)?((RE:FW_IP)?(RE:PRE_IP))?(RE:FW_NAT_PRE_ACTION)'
                : 'no errormessage yet'
FW_USER_RULE    = 'chain:[-_a-z]+|(RE:FW_FORWARD_RULE)' : 'no error message yet'
LANG            = '(de)|(en)|(fr)|(nl)'
                : 'language is not available, please choose between de, en, fr and nl'
DNS_LISTEN_IP   = '(RE:FW_NET_IP)|(RE:IPADDR)' : 'use either an ip address or a reference to one of the IP_NET_x-Variables (i.e. IP_NET_1_IPADDR)'
DNS_TRIGGER_DIAL_IN='(RE:YESNO)|(RE:IPADDR)' : 'use either yes (to ping the default ip), an IP address or no to disable this feature'
DNS_IP          = '(RE:FW_NET_IP)|(RE:IPADDR)|(RE:HOST_REF)' : 'use either an ip address, a reference to one of the IP_NET_x-Variables (i.e. IP_NET_1_IPADDR) or a reference to a hostname declared via HOST_%_NAME or HOST_%_ALIAS.'
PORTFW_TARGET   = '((((RE:FW_NET)|(RE:DNS_IP)|(RE:CIRCUIT)):)?((RE:PORT_RANGE)|none))'
                : 'invalid portforwarding target, should be a port (i.e. 21), 
                   a port range (3000-3010), a local address (specified as ip address, network, reference to IP_NET_x, reference to a name or alias specified in HOST_x) combined with a port(range) or none, a circuit and a port(range) (pppoe:23)'
PORTFW_NEW_TARGET= '(RE:DNS_IP)(:(RE:PORT_RANGE))?'
                : 'invalid new target for portforwarding, a local address (specified as ip address, network, reference to IP_NET_x, reference to a name or alias specified in HOST_x) optionally combined with a port (i.e. 192.168.6.15:22)'
PORTFW_PROTO    = 'udp|tcp|gre|(RE:NUMERIC)'
                : 'invalid portforwarding protocol, should be "udp", "tcp", "gre" or the protocol number'
CONFIG_FILENAME = '[-@_.[:alnum:]]+'
                : 'no valid filename, only numbers, letters, ".", "-", "@" and 
                   "_" are allowed'

FW_NETWORK_REF  = '(RE:IPADDR_NETWORK)|(RE:FW_NET)|(RE:FW_ROUTE_NET)|(RE:FW_NET_IP)|(RE:HOST_REF)'
                : 'noerror message yet'
EFW_NETWORK_REFS= '()|((RE:FW_NETWORK_REF)[[:space:]]+)*(RE:FW_NETWORK_REF)'
                : 'should either be empty or contain an ip address, a network specification, a reference to ip_net_x or a hostname/fqdn'
MFW_NETWORK_REFS= '((RE:FW_NETWORK_REF)[[:space:]]+)+(RE:FW_NETWORK_REF)'
                : 'should at least two of the following things: an ip address, a network specification, a reference to ip_net_x or a hostname/fqdn'
EMFW_NETWORK_REFS= '()|(RE:MFW_NETWORK_REFS)'
                : 'should either be empty or contain at least two of the following things: an ip address, a network specification, a reference to ip_net_x or a hostname/fqdn'
FW_LOG_LIMIT    = '(RE:FW_LIMIT_EXPR)'
                : 'invalid limit specification'
EFW_LOG_LIMIT   = '()|(RE:FW_LOG_LIMIT)'
                : 'invalid limit specification, should be empty or a valid limit'
MENU_LANG       = '()|(RE:LANG)'  
                : 'language is not available, please choose between de, en, fr and nl'
KEYBOARD_LOCALE = '()|([[:alpha:]][[:alpha:]][-_.[:alnum:]]*)'
                : 'wrong locale, please select auto, off, or a name that matches a mapfile in opt/etc like de matches opt/etc/de.map.'
HOST_IP         = '(RE:FW_NET_IP)|(RE:IPADDR)' : 'use either an ip address or a reference to one of the IP_NET_x-Variables (i.e. IP_NET_1_IPADDR)'
HOST_NAME       = 'HOSTNAME|(RE:HOSTNAME)'
                : 'wrong hostname, only letters, numbers and minus sign are allowed or aliasname "HOSTNAME"; no leading or trailing minus sign'
DMZ_DEV         = 'pppoe|ppp[0-9]+|ippp[+]|isdn[+]|IP_NET_[0-9]+_DEV'
                : 'wrong device specification, use pppoe, ppp<index>, ippp+, isdn+ or a reference to IP_NET_x_DEV'
COMPORT         = 'com[1-4]'
                : 'must be a valid com device (com1, com2, com3 or com4)'
ILEDDEV         = '()|(RE:COMPORT)'
                : 'should be empty or contain a valid com device (com1, com2, com3 or com4)'
PARPORT_ADDS    = '0x0*([23]78|3[BbDd][Cc])'
                : 'must be a valid parallel port address (0x378, 0x278, 0x3BC, 0x3DC)'
