7.8 Testing the Entire Application
Now our remote data logging example is multihomed. That is to say that it will accept TCP connections (sockets) from multiple network interfacesspecifically, the PPP and Ethernet interfaces. We tested DataLogger over Ethernet only using the DataLoggerClient developed in Section 7.4. Testing our new PPP functionality is going to take a little more work. However, we can use DataLoggerClient without modification for testing both interfaces simultaneously.
The test setup tests the full dial-up networking capabilities provided by PPPDaemon using analog modems and a phone line simulator. However, you can also test DataLogger's PPP support using a hard-wired serial connection. The test configuration used here includes the following equipment.
A TINI boardrunning the DataLogger server
A Windows 2000 machinedial-up networking client
A Linux machineEthernet networking client
Two analog modemsone attached to the Windows 2000 PC and the other attached to serial port 0 of the TINI
The humidity sensing circuit detailed in Section 4.4.3
A diagram of a sample test configuration is shown in Figure 7.2. This is one of the smallest test configurations that can be used to test the full networking capabilities of the DataLogger application. TINI's network interface IP addresses are 192.168.0.15 and 192.168.1.1 for Ethernet and PPP, respectively.
Figure 7.2 Sample test configuration
To keep the necessary equipment to a minimum, the Linux (Ethernet) client connects directly to TINI using an Ethernet crossover cable. The Linux box and TINI could also be connected using straight-through cable with an Ethernet hub. The PPP connection is made using two analog modems on either side of a phone line simulator. If two different phone lines are available, you can of course use the public phone network instead.
If we add a couple of debug statements (see Listing 7.23) to DataLogger's run method, it will display connection information, including both the remote client's IP address and TINI's local interface IP address.
Listing 7.23 Adding debug statements
public void run() { ... while (true) { ... s = ss.accept(); ... System.out.println("New client:" + s.toString()); System.out.println("Local interface:" + s.getLocalAddress()); ... } }
Now we can launch DataLogger, supplying the sample count, sample rate, and client authentication information as command line parameters.
TINI /> java DataLogger.tini 60 120 ducto kid Starting DataLogger ...
To test the PPP interface, you'll need to create a new dial-up network connection. The details on how this is accomplished are platform specific and are not covered here. After you've created the new dial-up connection, you can use it to manually connect to the TINI or optionally use whatever dial-on demand capability is provided on the client OS. Regardless, once you initiate the connection, the following sequence of events occurs.
Client modem dials TINI's modem.
TINI's modem answers the incoming call.
PPP option negotiation begins.
Authentication information is transmitted from the remote peer to TINI.
IP addresses of TINI and remote peer are established.
At this point, the communication link is ready for network traffic. After successfully establishing the link, executing the "ipconfig -x" command at the slush prompt will produce the output shown here. Note that the Ethernet and loopback interfaces are not shown for brevity.
... Interface 2 is active. Name : ppp0 Type : Point-to-Point Protocol IP Address : 192.168.1.1 Subnet Mask : 255.255.255.0 Gateway : 0.0.0.0 ...
A new network interface has been added to the system as a result of the PPPDaemon invoking addInterface on its PPP object after the modem link was established. The local address is set to the value specified during construction of PPPDaemon, and the interface name is the same as supplied by addInterface. The "ppp0" interface will remain in the system until removeInterface is invoked in response to a PPP CLOSED event.
Now that both the Ethernet (eth0) and PPP (ppp0) interfaces are active, we can connect to the server over both using the DataLoggerClient.
Output from launching the Linux (Ethernet) Client
java DataLoggerClient 192.168.0.15 Total readings=2 Entry 0:Fri Feb 02 14:31:06 CST 2001, RH=27.738698340362145, TEMP=23.40625 Entry 1:Fri Feb 02 14:33:07 CST 2001, RH=27.402815524359628, TEMP=23.46875
Output from launching the Win2K (PPP) Client
java DataLoggerClient 192.168.1.1 Total readings=2 Entry 0:Fri Feb 02 14:31:06 CST 2001, RH=27.738698340362145, TEMP=23.40625 Entry 1:Fri Feb 02 14:33:07 CST 2001, RH=27.402815524359628, TEMP=23.46875
DataLogger (TINI) output
New client:Socket[addr=192.168.0.100/192.168.0.100,port=1056, localport=5588] Local interface:192.168.0.15/192.168.0.15 New client:Socket[addr=192.168.1.2/192.168.1.2,port=1949,localport=5588] Local interface:192.168.1.1/192.168.1.1
From the output above we can see that DataLoggerClient was launched on both the Linux and Win2K client at about the same time and within a few minutes of starting the DataLogger application on TINI. Each client receives the same log data, but each connects to the server using a different IP address. Notice, however, that the local port value displayed in the TINI output is DataLogger's SERVER_PORT number (5588) for both connections. When the Linux box establishes its connection, DataLogger displays the remote client's IP address (192.168.0.100) and the IP address of its own local Ethernet interface (192.168.0.15). When the Win2K client connects the client (192.168.1.2) and server (192.168.1.1) the IP addresses displayed are those selected in PPPDaemon's constructor during initialization of the PPP object. In the Ethernet case, both IP addresses were statically configured outside of program control. In the PPP case, however, the IP addresses were set programatically by PPPDaemon.
Further improvements to the DataLogger application are certainly possible. For example, we could improve its flexibility by allowing more parameters to be supplied on the command line or perhaps read from a configuration file. Some examples of additional useful parameters are serial port number, serial port data rate, and client and server IP addresses to be used by the PPP network interface. We could also modify PPPDaemon to support multiple PPP interfaces. This requires using multiple serial ports to allow two different clients to establish dial-up connections simultaneously.