We implemented a simple and very light-weight testing application for generating and receiving TCP traffic, named “Tcptest.”
With respect to other well-known applications for generating TCP flows (e.g., TTCP, iPerf among the others), Tcptest allows simpler flow generation (especially in the presence of multiple simultaneous connections), avoiding useless overhead operations (e.g., disk access, etc.).
Tcptest can be used both as client (receiver) and server (sender) of connections. Once a connection is established, Tcptest sends a desired number of segments at the maximum MTU. When the last segment is successfully received by the client, the TCP connection is immediately closed. The segments of all the generated connections contain replicas of a same pre-allocated pattern.
The amount of data sent, the number of simultaneous TCP connections, and other options are configurable through a simple command line interface. Tcptest is able to work in two modes:
- One-shot: the chosen number of TCP connections is generated only once.
- Continuous: the chosen number of TCP connections is generated in a persistent and cyclic way.
In both the modes above, Tcptest provides the average duration time of connections and other monitoring parameters made available by the Linux kernel. Continuous mode also provides the number of running and completed connections every second.
TCPTest is released under the GNU-GPL licence.
To dowload the source code click here.
The Distributed SW ROuter Project (DROP) aims to enable a novel distributed paradigm for the control and the management of flexible IP-router platforms based on commodity HW and the Linux operating system. In rough words, DROP allows building extensible and flexible multi-chassis routers on top of server HW platforms and the Linux operating system.
DROP is partially based on the IETF ForCES architecture, and allows building logical network nodes through the aggregation of multiple devices (i.e., SRs) that host “standard” Linux SW objects devoted to packet forwarding (i.e., the Linux kernel) or to control operations (e.g., Quagga, Xorp, etc.).
As suggested by the IETF ForCES directives, DROP provides an architectural solution that is able to orchestrate such objects. In more detail, it was specifically designed in order:
- to meet the features of Linux network system interfaces and applications,
- to hide the complexity of distributed network nodes in an autonomic way,
- to offer a single control and management interface to system administrators.
From a physical point of view, the DROP architecture is composed of three main building blocks:
- a number of devices (or “elements”) running the SW for performing operations at the data- and/or control-plane;
- a number of network interfaces toward “external public” networks (i.e., toward other network devices);
- an “internal private” network that is used to exchange data-path traffic and inter-element signaling messages.
DROP is specifically conceived for aggregating and coordinating all these building blocks in a single logical IP node that is able to directly manage all the public interfaces towards other external devices.
The internal private network could be realized by means of different layer 2 and 2.5 technologies, such as Ethernet (currently supported), Infiniband, MPLS and OpenFlow (whose support is currently under progress). The basic idea consists of enabling a selected set of devices at the edge to this internal network cloud to coordinately work like a single logical node with a sole configuration and management interface, without exposing the presence of the internal network and the complexity of the distributed architecture.
DROP is released under the GNU-GPL license.
There are two ways to accede the Drop source code:
1) web browsing
You can browse it via the web or you can checkout the code from our public Subversion repository. The URL to browse the code is https://svn.econet-project.eu/svn/
You will run into a security issue warning since the used certificate has been issued by our organization, that is not recognized by browsers as trusted certification authority. If you're using Internet Explorer, you can simply click on the "Continue to this website (not recommended)." link on the page. You will be warned by the browser every time you will access the website. If you're using Firefox, you can click on the "I Understand the Risks" link on the page and then click on the "Add Exception..." button. A dialog window will pop up. In this dialog, click on the "Confirm Security Exception" button. If you check "Permanently store this exception" on the dialog, the browser will not warn you anymore. If you're using Chrome, you can simply click on the "Proceed anyway" button on the page. You will be warned by the browser every time you will access the website.
Next you will be prompted for username and password, you can use "guest" as username and leave the password blank.
2) svn checkout
To checkout the code from the Subversion repository simply use the following command (if you are using a GUI client, configure it appropriately):
[foo@tux]# svn co https://db.econet-project.eu/repos/drop/trunk drop
You will be prompted for username and password, you can use "guest" as username and leave the password blank. The command will create in your current path a directory named drop with the source code.
In the main directory there are all the files needed to build the two main applications composing DROP:
- the "ce" application that has to be ran on Control Elements (CE) - i.e., the PCs that are devoted to perform control operations
- and the "fe" application needed by Forwarding Elements (FE) - i.e., the PCs that perform data-path operations.
The first step for installing DROP is to run the "create_objs_dirs.sh" script in order to create the directory structure for the SW objects.
Then, to compile the applications use the command "make ce" and "make fe", respectively. Obviously, if you have heterogeneus HW platforms (e.g., 32- and 64-bit systems), please compile the applications in the system where it has to run.
Congratulations: now you have the DROP applications! The next step is to configure DROP before launching it.
The main directory contains three configuration files: ce.conf, fe.conf and ce.leases. These files are needed to set some parameters useful for the correct working of the ce and fe applications.
The file ce.leases contains the association between IP addresses and indexes of the various FE. This is needed to assure that every FE will join the DROP router with the same identifier.
ce.conf lists a set of IP addresses and ports needed, for example, from bgp, ospf, openflow protocols, together with IP address and port used from the application itself and other parameters like the duration (in seconds) of the heartbeat interval and timeout.
fe.conf contains basically the same information of ce.conf, used from the FE instead.
If you have configured the system, now you are ready to launch DROP by typing on each PCs ./ce (for the control elements) or ./fe (for the forwading elements).
The ce and fe applications use a list of commands, that are available when the applications are launched.
The list of available commands is available typing the command "help".
The commands are:
- help, ?
- status, s
- fe [show] | [<id> [show]]
- iface [show] | [<index> [show]] | [<name> [show]] | [fe <id> [show]]
- address [show] | [<index> [show]] | [<name> [show]] | [fe <id> [show]]
- route [show] | [<index> [show]] | [<name> [show]] | [fe <id> [show]]
- [add <route params>] | [del <route params>]
- CpuInfo [show]
- bgp [show] | [packet]
- of [show] | [<index> [show]] | [<index> update port stats] | [<index> add flow] | [<index> del flow <flow_index>] | [<index> update flow stats] | [<index> mod port <port_index>] | [<index> port stats <port_index> [show]] | [<index> port status [show]] | [<index> flow stats [show]]
- quit, q or exit
[ ] means optional; <> means defined elsewhere
id: identifier of an FE
index: aggregated index of an interface
name: aggregated name (local name:FE id) of an interface
<dest> via <gateway>
<dest> dev <name>
ip: ip address
prefix: prefix len in bits