wirefilter - Wire packet filter for Virtual Distributed Ethernet
[-f rcfile] [-l loss] [-l lostburst] [-d delay] [-D dup] [-b bandwidth]
[-s interface_speed] [-c channel_bufsize] [-n noise_factor] [-m
mtu_size] [-M mgmt socket] [-v vde_plug1:vde_plug2] [--daemon]
[--pidfile pidfile_path] [--blink blink] [--blinkid blink_identifier]
A wirefilter is able to emulate delays and packet loss on virtual
dpipe vde_plug /tmp/s1 = wirefilter -l 10 = vde_plug /tmp/s2
creates a wire between two vde_switches (with sockets /tmp/s1 and
/tmp/s2 respectively). This cable looses 10% of the packets in each
The same cable can be created using:
wirefilter -v /tmp/s1:/tmp/s2 -l 10
use a startup configuration file. It is useful for complex
defitions such as those for the Markov mode (see below). The
startup configuration file has the same syntax of the management
interface, in other word it is a script of management commands
executed before the first packet is forwarded.
percentage of loss as a floating point number. It is possible to
specify different loss percentage for the two channels: LR20.5
means 20.5% of packet flowing left to right are lost, RL10 means
10% from right to left.
when this is not zero, wirefilter uses the Gilbert model for
bursty errors. This is the mean length of lost packet bursts.
(it is a two state Markov chain: the probability to exit from
the faulty state is 1/lostburst, the probability to enter the
faulty state is loss/(lostburst-(1-loss)). The loss rate
converges to the value loss.
Extra delay (in milliseconds). This delay is added to the real
communication delay. Packets are temporarily stored and resent
after the delay. It is possible to specify different values for
LR and RL like in the previous option. When the delay is
specified as two numbers with a + in between, the first is the
standard delay and the second is a random variation. 1000+500
means that the delay can be randomly chosen between half second
and 1.5 seconds. It is possible to add 'U' or 'N' at the end.
1000+500U means that the dealys are uniformly distributed,
1000+500N means that the delays follow a Gaussian normal
distribution (more than 98% of the values are inside the
-D dup percentage of dup packet. It has the same syntax of -l. Do not
use dup factor 100% because it means that each packet is sent
Channel bandwidth in Bytes/sec. It has the same syntax of -d. It
is also possible to use suffixes K,M,G to abbreviate 2^10, 2^20,
2^30. 128K means 128KBytes/sec. 128+64K means 64i to
196KBytes/sec. Sender is not prevented from sending packets,
delivery is delayed to limit the bandwidth to the desired value.
(Like a bottleneck along the path) U and N after the values
(e.g. 128+64KN) set the statistic distribution to use (uniform
Interface speed in Bytes/sec. It has the same syntax of -b.
Input is blocked for the tramission time of the packet, thus the
sender is prevented from sending too fast.
Channel buffer size (in Bytes): maximum size of the packet
queue. Exceeding packets are discarded.
-n noise factor
Number of bits damaged/one megabyte.
-m mtu size
Packets longer than mtu_size are discarded.
-N nofifo. with -N packets can be reordered.
-M mgmt socket
the unix socket where the parameters (loss percentage, delay
etc) can be checked and changed runtime. unixterm(1) can be used
as a remote terminal for wirefilter.
If this option is used, the two local vde_plugs (vde_plug1 and
vde_plug2) will be connected each other instead of stdin/stdout,
using the libvdeplug libraries. This option activates an
interactive management session on console (stdin/stdout).
this option sets the access mode of the mgmt socket. The
command syntax is quite simple. help provides the list of
commands. It is possible to load a script file using the load
wirefilter becomes a daemon
wirefilter saves its pid into the file.
This option defines the id sent for each packet to the blink
server (see the --blink option below). The stardard identifier
for a wirefilter is the process pid.
wirefilter sends a log message to the specified PF_UNIX/DATAGRAM
socket for each packet sent. Each packet has the format: id
direction length. e.g:
6768 LR 44
6768 LR 44
6768 RL 100
6768 LR 100
6768 LR 44
wirefilter provides also a more complex set of parameters using a
Markov chain to emulate different states of the link and the
tranistions between states. Each state is represented by a node.
Markov chain parameters can be set with management commands or rc files
only. In fact, due to the large number of parameters the command line
would have been unreadable.
defines the number of different states. All the parameters of
the connection can be defined node by node. Nodes are numbered
starting from zero (to n-1). e.g.:
these command define a delay of 90-110 ms (normal distribution)
for the node number 4 and a 10 loss for the node 2. It is
possible to resize the Markov chain at run-time. New nodes are
unreachable and do not have any edge to other states (i.e. each
new node has a loopback edge to the node itself with 100%
probability). When reducing the number of nodes, the weight of
the edges towards deleted nodes is added to the loopback edge.
When the current node of the emulation is deleted, node 0
becomes the current node. (The emulation always starts from
time period (ms) for the markov chain computation. Each ms
microseconds a random number generator decides which is the next
state (default value=100ms).
assign a name to a node of the markov chain.
manually set the current node to the node n.
define an edge between n1 and n2; w is the weight (probability
percentage) of the edge. The loopback edge (from a node to
itself) is always computed as 100% minus the sum of the weights
of outgoing edges.
showedges [ n ]
list the edges from node n (or from the current node when the
command has no parameters). Null weight edges are omitted.
show the current Markov state.
showinfo [ n ]
show status and information on state (node) n. If the
parameter is omitted it shows the status and information on the
markov-debug [ n ]
set the debug level for the current management connection. In
the actual implementation when n is greater than zero each
change of markov node causes the output of a debug trace. Debug
tracing get disabled when n is zero or the parameter is missing.
Virtual Distributed Ethernet is not related in any way with www.vde.com
("Verband der Elektrotechnik, Elektronik und Informationstechnik" i.e.
the German "Association for Electrical, Electronic & Information
vde_switch(1), vdeq(1). dpipe(1). unixterm(1).
VDE is a project by Renzo Davoli <email@example.com>