Updated case proposal with the new name is included below.
Simnet - Simulated network device
Simulated network devices (simnet) are pseudo GLDv3 network devices that
aid in the creation of point-to-point network links on a system. They
are intended to be a testing resource for OpenSolaris developers.
Simnets should help in developing test suites that can run with minimal
network hardware to test protocols and codepaths that were previously
not possible to test on a single system. This case has two components:
the new 'simnet' pseudo GLDv3 network device driver and the changes in
dladm(1M) to create, modify and delete simnets.
Simnets are created by the administrator on a system using dladm(1M).
Simnets can be of type: Ethernet or WiFi and the type is specified at
the time of creation. When creating a new simnet device the simnet
driver uses a random MAC address and registers the device as a new MAC
on the system. Once created administrators can plumb IP, snoop and
create VLANs using the new simnet. In other words upon creation simnets
appear as regular Ethernet/WiFi hardware devices. Simnet instances
persist and survive reboot, unless created with the "temporary" option.
Initially new simnet devices have no peer link attached. No packets are
received from the device and all packets sent to the device are
silently discarded. In this configuration simnets are of limited to
no use. Simnets must have another simnet attached to simulate a
point-to-point link. In such a configuration packets transmitted on a
simnet are received at the other simnet and vice-versa, simulating a
full-duplex point-to-point link. Using a combination of such links one
can simulate a number of network configurations within a single system.
The point-to-point nature of the device allows us to write test software
that can send and capture packets at both the end-points and verify
network software without the distractions that arise from the need and
the use of actual network hardware.
Simnets are different from VNICs. Simnets are used to simulate
point-to-point links and are MAC-level objects that appear to consumers
as real Ethernet/WiFi devices. Therefore, you may create an aggregation
on top of a collection of simnets, while such a thing is not possible
with VNICs or the existing Etherstubs. Such a configuration would allow
the testing of aggregations (and LACP signaling) without having to set
up multiple physical point-to-point connections between two systems. A
VNIC on the other hand is created over an Etherstub or other existing
MAC-level objects (such as Simnets) to provide bandwidth control of
traffic on the underlying link. Etherstubs do not have MAC addresses
associated with them and are not suitable to simulate a single link.
The following dladm sub-commands are introduced by this case:
create-simnet [-t] [-m <media>] <link>
A new simnet device is created on the system with the given
linkname. Media can either be Ethernet (default) or WiFi.
modify-simnet [-t] [-p <peer>] <link>
Another simnet is associated as the peer link of an existing
simnet. If the -p option is not specified any existing peer
link associated with the simnet instance is removed.
delete-simnet [-t] <link>
Delete simnet instance from the system. If the simnet has
a peer simnet associated with it the command fails.
show-simnet [-pP] [-o <field>,...] [<link>]
Lists the existing simnets or when linkname is specified displays
the given simnet on the system. Output fields are: LINK, MEDIA,
MACADDRESS and OTHERLINK
Simnet instances are of data-link class 'DATALINK_CLASS_SIMNET' and the
output from 'dladm show-link' lists simnet instances as belonging to
class 'simnet'. 'dladm show-link' shows the simnet peer (if there is
one) in the 'OVER' field. Simnet instances are not included in the
output of 'dladm show-phys'. Create, modify and delete simnet operations
require sys_net_config privilege.
Simnets are expected to be used during network software development and
testing on OpenSolaris. To encourage use of simnets for testing this
case proposes project teams introduce new private data-link properties
in the simnet driver that modify or control the response from the device
to administrative action.
For example to simulate a WiFi scan the simnet driver introduces a new
_wl_esslist private property. Before performing a WiFi scan on a WiFi
simnet, the _wl_esslist property of the device can be initialized with
test values. Performing the WiFi scan on the simnet will return results
using the values set in _wl_esslist property. This case proposes to
introduce the following two private properties with a stability level of
Project Private and are listed below as examples. As the intended
usage is with testing scripts the stability level for the private
properties shouldn't be a problem. A future project might introduce more
interactive APIs in addition to or in place of the proposed properties.
_wl_esslist WiFi scan results. Comma separated essid and
signal strength pair to set a WiFi scan result.
This property can be set multiple times (max 10)
for multiple WiFi scan results.
_wl_connected Toggle to indicate the device is connected
to a WiFi access point.
Wifi apsects of simnets are intended for use by the NWAM team. Simnets
are currently in use by the RBridges team to test bridging and the TRILL
protocol. As simnets appear as MAC-level objects they can be used for
bridging. Using several point-to-point simnets testing multiple bridged
LANs running the TRILL protocol can be done on a single box.
----------- ------------
<red0>---<red1> | RBridge 1 | <blue0>---<blue1> | RBridge 2 | ....
----------- ------------
red0 and red1, blue0 and blue1 are simnets.
This case introduces simnets with a stability level of Uncommitted, the
private data-link properties for simnets are Project Private and the
release binding is Minor.