Search Results

Testvar Properties

Testvar Properties

This section describes the various properties that can be assigned to testvars in config.dic when defining them with buddy::testvar_define.


Indicates a list of alternate values a testvar can contain.

buddy::testvar_define mssClampingValue {
    type { decimal }
    also-accept default


Indicates a list of values a testvar explicitly cannot contain.

buddy::testvar_define wanInterface {
    type { interface }
    also-reject { none }


This property is only relevant for wildcard testvars. Its value is a list that contains the names of additional wildcard testvars that may be defined after defining an instance of the testvar that is being defined by buddy::testvar_define. For example, the wildcard testvar eapIdentity is defined as follows:

buddy::testvar_define eapIdentity* {
    children {

which means that the instances eapPassword<N>, eapUserCertPassword<N>, eapUserCertPath<N> and eapPrivateKey<N> are only relevant if eapIdentity<N> is also defined.


This property’s value contains Tcl script which performs semantic validation of the testvar’s value. See Testvar Constraints for more info on testvar constraints.


The value of the testvar returned by buddy::getvar if the testvar is not defined in the config file and the default-disabled property is not set to yes.

buddy::testvar_define lanIp {

The value returned by buddy::getvar is this property’s value after being passed through Tcl’s subst command, therefore simple command substitution can be used to generate a testvar’s default value dynamically (see testvars acsDiscoveryUrl and lanIp for real-world examples).

proc my_proc_that_returns_lanip_default_value {} {

buddy::testvar_define lanIp {
    default {[ my_proc_that_returns_lanip_default_value ]}

Setting a testvar’s default to a call to buddy::getvar is can be useful if a testvar should inherit the value of another testvar by default:

buddy::testvar_define lanIp {
    default {[ buddy::getvar wanIspIp ]}

It may be necessary to use buddy::getvar_group to ensure the inherited value is taken from a specific testvar group:

buddy::testvar_define lanIp {
    default {[ buddy::getvar_group main wanIspIp ]}


If this property exists and is set to yes, the testvar has no default value and must be explicitly set in the config file. Also, if this property exists and is set to yes, buddy::getvar returns an empty string if the testvar is not set in the config file.

buddy::testvar_define NAME {
    default-disabled yes


Text which describes the testvars meaning for humans.


This property’s value contains a human-friendly name for the testvar being defined. The name should be short and concise but easier to digest than the camelCaseTestvarNames generally used for testvar names. For example, the testvar acsIp might be given a human-name property such as:

buddy::testvar_define acsIp {
    human-name {ACS Server}

The human-name property is used by the configuration visualizer to display a human-friendly name for each node in the network graph.


This property is only relevant for wildcard testvars. Its value contains the number of instances of the testvar that may be defined. For example, the wildcard testvar dnsHostname is defined with an instances property of 10:

buddy::testvar_define dnsHostname* {
    instances 10

which means that the only valid instances of the testvar dnsHostname are: dnsHostname1, dnsHostname2, dnsHostname3, … dnsHostname10.


Indicates the testvar is a member of an IP range start/end pair of testvars. This property’s value is a two-element list of testvar names, the first element is the starting address testvar and the second element is the ending address testvar.

buddy::testvar_define dhcpClientStart {
    ip-range { dhcpClientStart dhcpClientEnd }

buddy::testvar_define dhcpClientEnd {
    ip-range { dhcpClientStart dhcpClientEnd }


Indicates the number of characters a testvar’s value should contain.

buddy::testvar_define cdrouterOui {
    type { hex-bytes }
    length 6

If given as a range MIN-MAX, indicates the minimum and maximum number of characters a testvar’s value should contain.

buddy::testvar_define cdrouterOui {
    type { hex-bytes }
    length 6-24

Both forms are used by testvars whose type property is set to hex-bytes.


A list of values the testvar is allowed to hold. Used by testvars whose type property is set to keyword-list or subset-list.

buddy::testvar_define eapType {
    type { keyword-list }
    list { eap-md5 eap-tls eap-ttls eap-peap eap-sim eap-aka }

min / max

Indicates the minimum/maximum value a testvar can contain. Used by testvars whose type property is set to decimal or decimal-list.

buddy::testvar_define dhcpv6DuidType {
    type { decimal }
    min 1
    max 3

network / *-network

Declares the side of the CPE and which network an IPv4/IPv6 address testvar should reside on. Used by the valid_address constraint command, see Testvar Network Constraints for more info on network validation.


Indicates which testvar groups a testvar is relevant in. This property’s value should be a list of one or more group types. If not set, this property defaults to main. When processing testvar constraints, only testvars defined in testvar groups in which they are relevant are checked. The group types available are below:

Type Description
main Default
wan-group main or wan<N>
lan-group main or lan<N>
wan-group-mp wan<N>
lan-group-mp lan<N>
smb-group smbuser<N>
ftp-group ftpuser<N>
cwmp-group cwmp_profile<N>
tr069-group tr069_device<N>
snmp-group snmpuser<N>

The plural form of each group type is also accepted and is treated identically to the singular form. For example, wan-groups is the same as wan-group and lan-groups-mp is the same as lan-group-mp. If the relevant-groups property does not match any of the above values, it is assumed to be a regular expression and will be matched against the group name using Tcl’s regexp command.

For example, the testvar acsIp is only relevant if defined in the main testvar group. Therefore a definition without a relevant-groups property:

buddy::testvar_define acsIp {
    type { IPv4orIPv6 }

is equivalent to a definition with a relevant-groups property of main:

buddy::testvar_define acsIp {
    type { IPv4orIPv6 }
    relevant-groups { main }

In contrast, the testvar dhcpClientStart is only relevant in LAN groups. Therefore it would require a relevant-groups property that looks like:

buddy::testvar_define dhcpClientStart {
    relevant-groups { lan-group }

which means that dhcpClientStart is only relevant in the main testvar group or additional LAN groups lan2, lan3, etc.


This property’s value is a Tcl dictionary which describes the history of the testvar being defined and can contain the following keys:

Key Value
added CDRouter version X.Y the testvar was added in
deprecated CDRouter version X.Y the testvar was deprecated in
obsoleted CDRouter version X.Y the testvar was obsoleted in

The value for each key should be a CDRouter version number of the form X.Y where X is the major version and Y is the minor version. For example, if acsWaitForConnectionRequest was added in CDRouter 7.3, deprecated in CDRouter 8.0 and obsoleted in CDRouter 8.3 it would have the following status property:

buddy::testvar_define acsWaitForConnectionRequest {
    status { added 7.3 deprecated 8.0 obsoleted 8.3 }

This property is used to display a link to the corresponding release notes in the testvar’s documentation.


This property’s value contains Tcl script which calls skip_labels based on the values of any number of testvars. Each test-constraints property is processed after cdrouter-cli has loaded the configuration file and performed data type validation on the defined testvars but before constraints properties are processed. The Tcl script in a test-constraints property can call all the same constraint commands that a constraints property can use.

See Test Labels for more info on test labels and the test-constraints property.


The type of value the testvar must contain. Used to perform syntactic validation of a testvar’s value. See below for the list of possible types:

Type Description
802.11-channel 802.11 channel number, accepts ‘auto’ value also.
IP-list List of IPv4 addresses
IPv4 IPv4 address
IPv4-netmask IPv4 netmask (e.g.
IPv4orIPv6 IPv4 address or IPv6 address
IPv6 IPv6 address
IPv6-list List of IPv6 addresses
IPv6-prefix IPv6 address with prefix length (e.g. 2001::/64)
IPv6Dynamic IPv6 address, may contain %eui64% token
IPv6IfId 64-bit IPv6 interface identifier, may contain %eui64 token
auth IPsec tunnel authentication type
bssid 802.11 BSSID (Basic Service Set IDentifier), i.e. MAC address, accepts auto value also
custom Reserved for customer-created testvars
date-time Date-time string (see Tcl’s clock scan)
decimal Decimal value, uses min / max and also-accept properties
decimal-list List of decimal values
dlci Data link connection identifier
encrypt IPsec tunnel encryption type
hex Hex string
hex-bytes Even number of hex characters, uses length property
host-name Hostname
keyword-list List of acceptable values stored in list property
lanInterface Linux interface name (e.g. eth0) for LAN interface
lanWEPKey Wireless WEP key
lease-time DHCP lease-time
mac-address MAC address (e.g. 11:22:33:44:55:66)
mtu Packet MTU value
network-slash-mask IPv4 address with netmask (e.g.
port-list List of port numbers
port-number Port number 0-65535
public-type Transport type udp, tcp or both
spi IPsec tunnel SPI number
ssid 802.11 SSID (Service Set IDentifier), i.e. access point name
subset-list List of acceptable values stored in list property, value must be a subset with no duplicates
tr69DeviceSummary DeviceSummary string for TR-069
url URL (e.g.
url-list List of URLs
usp-endpoint-id USP endpoint ID, see
wan-interface Name of WAN group (e.g. wan2) or IPv4/IPv6 address
wanInterface Linux interface name (e.g. eth0) for WAN interface
word Any alphanumeric characters plus -, _, ., * and /
wpaKey Wireless WPA key
yes-no Must be yes or no (deprecated, use keyword-list instead)

For example, the testvar dhcpClientTimeout is expected to hold a decimal value and would there form have the following type property:

buddy::testvar_define dhcpClientTimeout {
    type { decimal }


If exists and is set to yes, the testvar should not be displayed to the user.

buddy::testvar_define NAME {
    undocumented yes