Pseudowire
==========
In Trellis, we assign different subnets to hosts that attach to different edge
(leaf) switches.  These hosts communicate over IP when traversing the spine
switches, meaning that the layer-2 header is not preserved across
transportation.  However, in some use cases it is beneficial for hosts that
connect to different leaves to be able to talk directly over L2 and also belong
to the same IP subnet.

We implemented Pseudowire (PW) in Trellis to fulfill this requirement.

Pseudowires create tunnels between different connection points that transport
L2 traffic between them.

Pseudowires can handle single-tagged/double-tagged traffic and are able to
modify the VLAN tags in some cases.

.. note::
  Pseudowires are only supported on OF-DPA hardware switches.

Managing pseudowires via REST
-----------------------------

You can find the REST API documentation at ``http://${ONOS-IP}:8181/onos/v1/docs``.

Please click the drop down list and select Segment Routing Server.

.. image:: ../images/config-pw-rest.png
    :width: 700px

We configure and implement PWs through the dedicated REST API.

.. code-block:: console

    $ curl --user onos:rocks -X POST -H 'Content-Type:application/json' http://${ONOS-IP}:8181/onos/segmentrouting/pseudowire/ -d@pseudowire.json
    $ curl --user onos:rocks -X GET -H 'Content-Type:application/json' http://${ONOS-IP}:8181/onos/segmentrouting/pseudowire/ -d@pseudowire.json
    $ curl --user onos:rocks -X DELETE -H 'Content-Type:application/json' http://${ONOS-IP}:8181/onos/segmentrouting/pseudowire/ -d@pseudowire.json

Below is an example configuration for a single pseudowire, which transfers L2
double tagged traffic from cp1 to cp2 and also changes the outer VLAN tag of
the packets.

.. code-block:: json

    {
        "pwId" : 42,
        "cP1": "of:0000000000000205/25",
        "cP2": "of:0000000000000206/33",
        "cP1InnerTag": "101",
        "cP1OuterTag": "110",
        "cP2InnerTag": "101",
        "cP2OuterTag": "111",
        "mode": "RAW",
        "sdTag": "",
        "pwLabel": "1572"
    }

- ``cP1``: First connection point of PW

- ``cP2``: Second connection point of PW

- ``cP1InnerTag / cp1OuterTag``: The expected inner and outer VLAN tags for
  ``cp1``. If you only want to use a single incoming tag, use the innerTag, and
  use ``None`` for the outerTag.

- ``cP2InnerTag / cp2OuterTag``: The expected inner and outer VLAN tags for ``cp2``.

- ``mode``: Pseudowire mode - RAW and TAGGED. Only RAW mode is supported in Trellis.

- ``sdTag``: Service delimiting tag, only meaningful when in TAGGED mode.

- ``pwLabel``: Unique pseudowire label.

- ``pwId``: ID of the pseudowire.

The REST API also supports bulk addition and removal of pseudowire.

.. code-block:: console

    $ curl --user onos:rocks -X POST -H 'Content-Type:application/json'http://<controller-ip>:8181/onos/segmentrouting/pseudowire/bulk -d@pseudowires.json
    $ curl --user onos:rocks -X DELETE -H 'Content-Type:application/json'http://<controller-ip>:8181/onos/segmentrouting/pseudowire/bulk -d@pseudowires.json

with the following example configuration:

.. code-block:: json

    {
      "pseudowires": [{
          "pwId": 43,
          "cP1": "of:0000000000000227/15",
          "cP2": "of:0000000000000205/33",
          "cP1InnerTag": "101",
          "cP1OuterTag": "",
          "cP2InnerTag": "101",
          "cP2OuterTag": "",
          "mode": "RAW",
          "sdTag": "",
          "pwLabel": "2572"
        },
        {
          "pwId": 42,
          "cP1": "of:0000000000000201/12",
          "cP2": "of:0000000000000204/12",
          "cP1InnerTag": "101",
          "cP1OuterTag": "",
          "cP2InnerTag": "101",
          "cP2OuterTag": "",
          "mode": "RAW",
          "sdTag": "",
          "pwLabel": "1572"
        }
      ]
    }


Managing pseudowires via CLI
----------------------------

To add a pseudowire:

.. code-block:: text

    onos> sr-pw-add --help
    DESCRIPTION
            onos:sr-pw-add

        Add a pseudowire to the network configuration, if it already exists update it.

    SYNTAX
            onos:sr-pw-add [options] pwId pwLabel mode sDTag cP1 cP1InnerVlan cP1OuterVlan cP2 cP2InnerVlan cP2OuterVlan

    <omitted>

    onos> sr-pw-add 42 1000 RAW None of:0000000000000204/12 100 10 of:0000000000000205/12 100 40

To list existing pseudowires:

.. code-block:: text

    onos> sr-pw-list

To remove a pseudowire:

.. code-block:: text

    onos> sr-pw-remove 42


Type of pseudowires
-------------------

- **Leaf - Leaf** : As explained above we support leaf - leaf pseudowires.

- **Spine - Leaf** : We further support leaf to spine pseudowires, where one
  termination point resides in a spine switch rather than a leaf switch.
  Please note that the encapsulated traffic for these types of pseudowires is
  carried **tagged** between leaf and spines, the reason for this is due to
  some hardware limitation. The **reserved transport VLAN is 4093**.

- Multi-stage

  - **Leaf - Spine-1 - Spine-2**: Where Spine-1 and Spine-2 are interconnected
    between them and are part of distinct topologies.

  - **Leaf_1 - Spine_1 - Spine_2 - Leaf_2**: Where leaf-1 and leaf-2 are part
    of different fabric topologies which are interconnected between them
    between two spines.


Common errors
-------------

If your pseudowires do not work make sure you have done the following in the
host side:

- Disabled VLAN offloading in the VM interfaces and also in the compute node
  interfaces.

- Set the compute node interfaces and the VM interfaces at promiscuous mode.

- In general, do the above for all the interfaces and bridges participated in
  the topology (either in a VM or physical server).

- Before programming pseudowires make sure that the topology is completely up
  and running and also the configuration is added to the controller and the
  fabric is in an operational state.


Restrictions
------------

We list now some restrictions of pseudowire support, some of them stem from the
implementation while others from switch hardware constraints.

- We only support pseudowires with the same type of tagged traffic at each end.
  For example, if cP1 handles single tagged traffic then cP2 must handle single
  tagged traffic (same applies for single tagged and double tagged traffic).
  However, for pseudowires with single tagged traffic we support changing the
  tag, and for pseudowires with double tagged traffic we support changing the
  outer tag.  We would like to support more use cases, however we are limited
  by hardware pipeline restrictions.  In the future, and if needed, we might
  address this by using the egress tables of OF-DPA.

- As of now, we only support RAW mode. We will support also TAGGED mode in the
  future if needed by any use case.  Since, we only support RAW mode the
  ``sdTag`` must always be empty or None.

Implementation limits
---------------------

- **Link failures**: We partially support link failures.
  Specifically, our PW implementation does not properly handle link failures
  when the link involved is the one used for pseudowire traffic at the spine
  switches towards a leaf switch.

  This is due to an OF-DPA limitation which does not allow the use of MPLS ECMP
  groups in the spine.

  We plan to address this in the next release.

- **Device failures**: We do not handle device failures currently, on a device
  failure please remove and re-install the pseudowire.  We will address this
  soon.
