Candidate profiles are read either from a test description file or, in ifupdown mode, from /etc/network/interfaces.
# Empty lines and lines starting with '#' are ignored. # Other lines contain: # <profile-name> <test-method> <parameters> # At home, look for a host with the given IP and MAC address home peer 192.168.1.1 00:01:02:03:04:05 # At the university, check for the presence of at least one # of the following hosts university peer 220.127.116.11 05:06:03:02:01:0A university peer 18.104.22.168 15:13:B3:A2:2F:CD # If the peer doesn't reply to ARP packets coming from 0.0.0.0 # then you can additionally specify a source address to use university peer 22.214.171.124 15:13:B3:A2:2F:CD 126.96.36.199 # For the work network use a custom script work command /usr/local/bin/check_work # Commands are executed by "sh -c" so shell syntax can be used john-irda command grep -q `cat ~enrico/john-irda-id` /proc/net/irda/discovery # Location name and interface name are exported in NAME and IFACE weirdnet command /usr/local/bin/weirddetect "$NAME" "$IFACE" # Profile "none" is selected if no network signal is detected # (i.e. there is no cable plugged into the socket) no-net missing-cable # Match a wireless network with the given essid home wireless essid Home # You can also match the mac address of the access point home wireless mac 01:02:03:04:0A:0B # Or both home wireless essid Home mac 01:02:03:04:0A:0B # You can also match any open network anyopen wireless open
Every non-comment line represents a test to perform.
The first word in the line is the name that will be printed if the test succeeds.
The second word is the test type.
The remainder of the line contains parameters for the selected test; these vary depending on the test type.
ifupdown, Debian's standard network configuration system, permits one to define different "logical interfaces" (ifupdown's name for configuration profiles) and to choose among them when one configures a network interface. The choice can be delegated to an external "mapping" program. guessnet can be used as such a program if it is run in "ifupdown mode". guessnet runs in ifupdown mode if it is invoked as guessnet-ifupdown or if it is given the --ifupdown-mode option.
In ifupdown mode guessnet reads test data directly from the logical interface definitions in /etc/network/interfaces rather than from a separate test description file.
In ifupdown mode if names are passed to guessnet on its standard input then guessnet considers only those logical interface definitions; otherwise it considers them all. You can have ifupdown deliver data to guessnet's standard input using the map directive. See interfaces(5) for more information. If names are preceded with "!" character then match is inverted, meaning that all logical interfaces will be processed except for the ones specified in standard input. You cannot mix normal and negated interface names in the same mapping directive. Note: when using autofilter option (see above) you can broaden or tighten the automatic matching by specifying interface names as descripted.
In ifupdown mode options are selected by passing "<long-option-name>: <value>" on guessnet's standard input. This feature is provided because ifupdown cannot pass command line arguments to mapping scripts.
If you prefer you can precede the test keyword in /etc/network/interfaces with the word guessnet.
ifupdown does not allow two option lines in /etc/network/interfaces to start with the same word. To work around this limitation, multiple test (or guessnet) lines can have different numerals suffixed to their initial keywords (test1, test2, or guessnet1, guessnet2, and so on).
Here's an example of an /etc/network/interfaces file that has been set up for guessnet:
auto lo eth0 iface lo inet loopback mapping eth0 script guessnet-ifupdown # Scan all logical interfaces # More options can be given here, such as: # map timeout: 10 # map verbose: true # map debug: true # map iwscan-tries: 23 map default: none mapping eth1 script guessnet-ifupdown # Disable open net checking, just comment out if you are # desperate enough :) (see relative stanza below) map !eth1-anyopen # Scan only logical interfaces named eth1-* autofilter: true iface home inet static address 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1 # Lines for resolvconf (if you use it: see apt-cache show resolvconf) # dns-search casa # dns-nameservers 192.168.1.1 192.168.2.1 # Two tests, in case one of the two machines is down when we test test1 peer address 192.168.1.1 mac 00:01:02:03:04:05 test2 peer address 192.168.1.3 mac 00:01:02:03:04:06 iface work inet static address 10.1.1.42 netmask 255.255.255.0 broadcast 10.1.1.255 gateway 10.1.1.1 test command /usr/local/bin/check_work iface work2 inet static address 192.168.2.23 netmask 255.255.255.0 broadcast 192.168.2.255 gateway 192.168.2.1 # A source address has to be specified in case the peer # doesn't reply to ARP packets coming from 0.0.0.0 test peer address 192.168.2.1 mac 00:01:02:03:04:05 source 192.168.2.23 iface eth1-home inet static wireless-essid Home wireless-key s:myverysecret address 192.168.1.5 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 192.168.1.1 # Match a wireless network with the given essid test wireless essid Home # You can also match the mac address of the access point #test wireless mac 01:02:03:04:0A:0B # Or both #test wireless essid Home mac 01:02:03:04:0A:0B iface eth1-work inet dhcp wireless-essid Work wireless-key s:myverysecretkey # Match a wireless network with the given essid # If you have spaces in the essid, use double quotes test wireless essid "Work place" iface eth1-anyopen inet dhcp # You can also match any open network, if you are desperate :) wireless-essid any wireless-mode auto test wireless open # If nothing else is found, try DHCP iface none inet dhcp
One can omit the MAC address, in which case guessnet only tests for the presence of a host with the specified IP address.
If the peer whose presence you want to test for refuses to reply to ARP packets coming from 0.0.0.0 then specify some source IP address from which the peer will accept requests.
Multiple peers can be specified (on multiple lines) but each peer must have a different IP address. This restriction may be eliminated in the future.
You can also omit the IP address and only use the MAC: that is useful to test for the existance of physical interfaces with changing IP addresses. This kind of scan uses an ICMP ping packet requires a source address in most cases, as hosts tend not to reply to pings coming from nowhere.
The test succeeds if the scan reports at least one network for which all the tests (essid, mac of the access point, network is open or closed) match.
In case more than one profile matches a network, only the first one, as found in the configuration file, will succeed. This allows to prioritise profiles: for example, you can prefer your home access point to an open network by listing it first in the configuration file.
This feature allows guessnet to detect the case where there is no cable plugged into a network socket; in this case it makes no sense to go through other detection phases.
This test can be used in ifupdown mode too if a dummy logical interface is defined that includes the test missing-cable option. Bear in mind that when the cable is unplugged, ifupdown will consider the interface to be configured as this dummy logical interface. That is somewhat counterintuitive; one might prefer the interface to be deconfigured in that case. Unfortunately, guessnet is not currently able to tell ifup to refrain from configuring an interface. The problem can be solved, however, by means of the ifplugd(8) program.
Link beat detection is not supported on all network hardware. If the interface or its driver does not support link beat detection then this test does not succeed.
Location name and interface name are exported to the script via the NAME and IFACE environment variables.
For backward compatibility, script can be used instead of command.
Using this test requires that pppoe be installed on the system.
Blanks may be included in the ESSID. For example,
prof1 wireless essid My LANtests for an ESSID of "My LAN".
Note that the wireless test does not attempt to change these properties; it only examines them. This test is designed to work with programs such as waproamd which independently and dynamically manage the wireless network adapter to keep it associated to an access point.
Note that the wireless test is not yet implemented cleanly.
Note that if one of several tests terminates successfully then any other tests still running will be terminated with the KILL signal. Therefore, test programs should not need to do any special cleanup on exit.
The Guessnet webpage is at http://guessnet.alioth.debian.org .