# Tools {#tools}

S2SS comes with a couple of tools to test and debug connectivity and configurations.
All S2SS tools are available as subcommands to the `s2ss` wrapper:
 
### `s2ss server`

Starts the simulator to simulator server. The server acts as a central gateway to forward simulation data.

    Usage: s2ss-server CONFIG
      CONFIG is a required path to a configuration file
    
    Supported node types:
     - file: support for file log / replay node type
     - socket: Network socket (libnl3)
     - gtfpga: GTFPGA PCIe card (libpci)
     - ngsi: OMA Next Generation Services Interface 10 (libcurl, libjansson, libuuid)
     - websocket: Send and receive samples of a WebSocket connection (libwebsockets)

### `s2ss pipe`

The `pipe` subcommand allows to read and write samples to `stdin` / `stdout`.

    Usage: s2ss-pipe CONFIG [-r] NODE
      CONFIG  path to a configuration file
      NODE    the name of the node to which samples are sent and received from
      -r      swap read / write endpoints)

### `s2ss signal`

The `signal` subcommand is a signal generator which writes samples to `stdout`.
This command can be combined with the `pipe` subcommand.

    Usage: s2ss-signal SIGNAL [OPTIONS]
      SIGNAL   is on of: 'mixed', 'random', 'sine', 'triangle', 'square', 'ramp'
      -v NUM   specifies how many values a message should contain
      -r HZ    how many messages per second
      -f HZ    the frequency of the signal
      -a FLT   the amplitude
      -d FLT   the standard deviation for 'random' signals
      -l NUM   only send LIMIT messages and stop

### `s2ss test`

    Usage: s2ss-test CONFIG TEST NODE [ARGS]
      CONFIG  path to a configuration file
      TEST    the name of the test to execute: 'rtt'
      NODE    name of the node which shoud be used

## Examples

 1. Start server:

    $ s2ss server etc/example.conf

 2. Receive/dump data to file

    $ s2ss pipe etc/example.conf node_name > dump.csv

 3. Replay recorded data:

    $ s2ss pipe etc/example.conf -r node_name < dump.csv

 4. Send random generated values:

    $ s2ss signal random 4 100 | s2ss pipe etc/example.conf destination_node

 5. Test ping/pong latency:

    $ s2ss test latency etc/example.conf test_node