Architecture and Design
***********************

Overview
--------

.. image:: images/arch-overview.png
    :width: 1000px

Trellis operates as a **hybrid L2/L3 fabric**.

As a **pure (or classic) SDN** solution, Trellis **does not use any of the
traditional control protocols** typically found in networking, a non-exhaustive
list of which includes: STP, MSTP, RSTP, LACP, MLAG, PIM, IGMP, OSPF, IS-IS,
Trill, RSVP, LDP and BGP.

Instead, Trellis **uses an SDN Controller (ONOS) decoupled from the data-plane
hardware to directly program ASIC forwarding tables using OpenFlow and with
OF-DPA**, an open-API from Broadcom running on the switches.

In this design, a set of applications running on ONOS implement all the fabric
functionality and features, such as **Ethernet switching**, **IP routing**,
**multicast**, **DHCP Relay**, **pseudowires** and more.

.. note::
    You can learn more about Trellis features and design concepts by visiting
    the `Project Website <https://opennetworking.org/trellis>`_ and reading the
    `Platform Brief
    <https://www.opennetworking.org/wp-content/uploads/2019/09/TrellisPlatformBrief.pdf>`_.


Introduction to OF-DPA Pipeline
-------------------------------

In this design note, we are going to explain the design choices we have made
and how we got around OF-DPA (OpenFlow Data Plane Abstraction) pipeline
restrictions to implement the features we need.  We will start from explaining
the OFDPA flow tables and group tables we use.

Fig. 1 shows the simplified OFDPA pipeline overview.

.. image:: images/arch-ofdpa.png
    :width: 1000px

Fig. 1 Simplified OF-DPA pipeline overview

Flow Tables
-----------

VLAN Table
^^^^^^^^^^
.. note::
    The **VLAN Flow Table (id=10)** is used for IEEE 801.Q VLAN assignment and
    filtering to specify how VLANs are to be handled on a particular port.
    **All packets must have an associated VLAN id in order to be processed by
    subsequent tables**.

    **Table miss**: goto **ACL table**.

According to OFDPA spec, we need to assign a VLAN ID even for untagged packets.
Each untagged packet will be tagged with an **internal VLAN** when being
handled by VLAN table.  The internal VLAN will be popped when the packet is
sent to a output port or controller.  The internal VLAN is assigned according
to the subnet configuration of the input port.  Packets coming from ports that
do not have subnet configured (e.g. the spine facing ports) will be tagged with
VLAN ID **4094**.

The internal VLAN is also used to determine the subnet when a packet needs to
be flooded to all ports in the same subnet. (See L2 Broadcast section for
detail.)

Termination MAC Table
^^^^^^^^^^^^^^^^^^^^^
.. note::
    The **Termination MAC (TMAC) Flow Table (id=20)** determines whether to do
    bridging or routing on a packet.

    It identifies routed packets their destination MAC, VLAN, and Ethertype.

    Routed packet rule types use a Goto-Table instruction to indicate that the
    next table is one of the routing tables.

    **Table miss**: goto **Bridging table**.

In this table, we determine which table the packet should go to by checking the
destination MAC address and the Ethernet type of the packet.

- if dst_mac = router MAC and eth_type = ip, goto **unicast routing** table

- if dst_mac = router MAC and eth_type = mpls, goto **MPLS table**

- if dst_mac = multicast MAC (01:00:5F:00:00:00/FF:FF:FF:80:00:00), goto
  **multicast routing** table

- none of above, goto **bridging table**

MPLS Tables
^^^^^^^^^^^
.. note::
    The MPLS pipeline can support three **MPLS Flow Tables, MPLS Table 0
    (id=23), MPLS Table 1 (id=24) and MPLS Table 2 (id=25)**.

    An MPLS Flow Table lookup matches the label in the outermost MPLS shim
    header in the packets.

    - MPLS Table 0 is only used to pop a protection label on platforms that
      support this table, or to detect an MPLS- TP Section OAM PDU.

    - MPLS Table 1 and MPLS Table 2 can be used for all label operations.

    - MPLS Table 1 and MPLS Table 2 are synchronized flow tables and updating
      one updates the other

    **Table miss**: goto **ACL table**.

We only use MPLS Table 1 (id=24) in current design.

MPLS packets are matched by the MPLS label.

The packet will go to **L3 interface group** with MPLS label being popped and
further go to destination leaf switch.


Unicast Routing Table
^^^^^^^^^^^^^^^^^^^^^
.. note::
    The **Unicast Routing Flow Table (id=30)** supports routing for potentially
    large numbers of IPv4 and IPv6 flow entries using the hardware L3 tables.

    **Table miss**: goto **ACL table**.

In this table, we determine where to output a packet by checking its
**destination IP (unicast)** address.

- if dst_ip locates at a **remote switch**, the packet will go to an **L3 ECMP
  group**, be tagged with MPLS label, and further go to a spine switch

- if dst_ip locates at the **same switch**, the packet will go to an **L3
  interface group** and further go to a host

Note that the priority of flow entries in this table is sorted by prefix
length.

Longer prefix (/32) will have higher priority than shorter prefix (/0).


Multicast Routing Table
^^^^^^^^^^^^^^^^^^^^^^^
.. note::
    The **Multicast Routing Flow Table (id=40)** supports routing for IPv4 and
    IPv6 multicast packets.

    **Table miss**: goto **ACL table**.

Flow entries in this table always match the **destination IP (multicast)**.

Matched packets will go to an **L3 multicast group** and further go to the next
switch or host.


Bridging Table
^^^^^^^^^^^^^^
.. note::
    The **Bridging Flow Table (id=50)** supports Ethernet packet switching for
    potentially large numbers of flow entries using the hardware L2 tables.

    The Bridging Flow Table forwards either based on VLAN (normal switched
    packets) or Tunnel id (isolated forwarding domain packets), with the Tunnel
    id metadata field used to distinguish different flow table entry types by
    range assignment.

    **Table miss**: goto **ACL table**.

In this table, we match the **VLAN ID** and the **destination MAC address** and
determine where the packet should be forwarded to.

- if the destination MAC can be matched, the packet will go to the **L2
  interface group** and further sent to the destination host.

- if the destination MAC can not be matched, the packet will go to the **L2
  flood group** and further flooded to the same subnet.

  Since we cannot match IP in bridging table, we use the VLAN ID to determine
  which subnet this packet should be flooded to.

  The VLAN ID can be either (1) the internal VLAN assigned to untagged packets
  in VLAN table or (2) the VLAN ID that comes with tagged packets.


Policy ACL Table
^^^^^^^^^^^^^^^^
.. note::
    The Policy ACL Flow Table supports wide, multi-field matching.

    Most fields can be wildcard matched, and relative priority must be
    specified in all flow entry modification API calls.

    This is the preferred table for matching BPDU and ARP packets. It also
    provides the Metering instruction.

    **Table miss**: **do nothing**.
    The packet will be forwarded using the output or group in the action set,
    if any.

    If the action set does not have a group or output action the packet is dropped.

In ACL table we trap **ARP**, **LLDP**, **BDDP**, **DHCP** and send those
packets to the **controller**.

Group Tables
------------

L3 ECMP Group
^^^^^^^^^^^^^
.. note::
    OF-DPA L3 ECMP group entries are of OpenFlow type **SELECT**.

    For IP routing the action buckets reference the OF-DPA **L3 Unicast group**
    entries that are members of the multipath group for ECMP forwarding.

    An OF-DPA L3 ECMP Group entry can also be used in a Provider Edge Router.

    In this packet flow it can chain to either an **MPLS L3 Label** group entry
    or to an **MPLS Fast Failover** group entry.

    An OF-DPA L3 ECMP Group entry can be specified as a routing target instead
    of an OF-DPA L3 Unicast Group entry. Selection of an action bucket for
    forwarding a particular packet is hardware-specific.

MPLS Label Group
^^^^^^^^^^^^^^^^
.. note::
    MPLS Label Group entries are of OpenFlow **INDIRECT** type.

    There are four MPLS label Group entry subtypes, all with similar structure.

    These can be used in different configurations to **push up to three
    labels** for tunnel initiation or LSR swap.

MPLS Interface Group
^^^^^^^^^^^^^^^^^^^^
.. note::
    MPLS Interface Group Entry is of OpenFlow type **INDIRECT**.

    It is used to **set the outgoing L2 header** to reach the next hop label
    switch router or provider edge router.

We use **L3 ECMP** group to randomly pick one spine switch when we need to
route a packet from leaves to spines.

We point each bucket to an **MPLS Label** Group in which the MPLS labels are
pushed to the packets to realize Segment Routing mechanism.  (More
specifically, we use the subtype 2 **MPLS L3 VPN Label**).

We then point an MPLS Label Group points to an **MPLS Interface** Group in
which the destination MAC is set to the next hop (spine router).

Finally, the packet will goto an **L2 Interface** Group and being sent to the
output port that goes to the spine router.

Detail of how segment routing is implemented will be explained in the L3
unicast section below.

L3 Unicast Group
^^^^^^^^^^^^^^^^
.. note::
    OF-DPA L3 Unicast group entries are of OpenFlow **INDIRECT** type.

    L3 Unicast group entries are used to supply the routing next hop and output
    interface for packet forwarding.

    To properly route a packet from either the Routing Flow Table or the Policy
    ACL Flow Table, the forwarding flow entry must reference an L3 Unicast
    Group entry.

    All packets must have a VLAN tag.

    **A chained L2 Interface group entry must be in the same VLAN as assigned
    by the L3 Unicast Group** entry.

We use L3 Unicast Group to rewrite the **source MAC**, **destination MAC** and
**VLAN ID** when routing is needed.

L3 Multicast Group
^^^^^^^^^^^^^^^^^^
.. note::
    OF-DPA L3 Multicast group entries are of OpenFlow **ALL** type.

    The action buckets describe the interfaces to which multicast packet
    replicas are forwarded.

    Note that:

    - Chained OF-DPA **L2 Interface** Group entries must be in the **same
      VLAN** as the OF-DPA **L3 Multicast** group entry. However,

    - Chained OF-DPA **L3 Interface** Group entries must be in **different
      VLANs** from the OF-DPA **L3 Multicast** Group entry, **and from each
      other**.

We use L3 multicast group to replicate multicast packets when necessary.

It is also possible that L3 multicast group consists of only one bucket when
replication is not needed.

Detail of how multicast is implemented will be explained in the L3 multicast
section below.

L2 Interface Group
^^^^^^^^^^^^^^^^^^
.. note::
    L2 Interface Group entries are of OpenFlow **INDIRECT** type, with a single
    action bucket.

    OF-DPA L2 Interface group entries are used for egress VLAN filtering and
    tagging.

    If a specific set of VLANs is allowed on a port, appropriate group entries
    must be defined for the VLAN and port combinations.

    Note: OF-DPA uses the L2 Interface group declaration to configure the port
    VLAN filtering behavior.

    This approach was taken since OpenFlow does not support configuring VLANs
    on physical ports.

L2 Flood Group
^^^^^^^^^^^^^^
.. note::
    L2 Flood Group entries are used by VLAN Flow Table wildcard (destination
    location forwarding, or DLF) rules.

    Like OF-DPA L2 Multicast group entry types they are of OpenFlow **ALL**
    type.

    The action buckets each encode an output port.

    Each OF-DPA L2 Flood Group entry bucket forwards a replica to an output
    port, except for packet IN_PORT.

    All of the OF-DPA L2 Interface Group entries referenced by the OF-DPA Flood
    Group entry, and the OF- DPA Flood Group entry itself, must be in the
    **same VLAN**.

    Note: There can only be **one OF-DPA L2 Flood Group** entry defined **per
    VLAN**.

L2 Unicast
----------

.. image:: images/arch-l2u.png
    :width: 800px

Fig. 2: L2 unicast

.. image:: images/arch-l2u-pipeline.png
    :width: 1000px

Fig. 3: Simplified L2 unicast pipeline

The L2 unicast mechanism is designed to support **intra-rack (intra-subnet)**
communication when the destination host is **known**.

Pipeline Walkthrough - L2 Unicast
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- **VLAN Table**: An untagged packet will be assigned an internal VLAN ID
  according to the input port and the subnet configured on the input port.
  Packets of the same subnet will have the same internal VLAN ID.

- **TMAC Table**:  Since the destination MAC of a L2 unicast packet is not the
  MAC of leaf router, the packet will miss the TMAC table and goes to the
  bridging table.

- **Bridging Table**:  If the destination MAC is learnt, there will be a flow
  entry matching that destination MAC and pointing to an L2 interface group.

- **ACL Table**: IP packets will miss the ACL table and the L2 interface group
  will be executed.

  L2 Interface Group: The internal assigned VLAN will be popped before the
  packet is sent to the output port.

L2 Broadcast
------------

.. image:: images/arch-l2f.png
    :width: 800px

Fig. 4: L2 broadcast

.. image:: images/arch-l2f-pipeline.png
    :width: 1000px

Fig. 5: Simplified L2 broadcast pipeline

Pipeline Walkthrough - L2 Broadcast
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- **VLAN Table**: (same as L2 unicast)

- **TMAC Table**: (same as L2 unicast)

- **Bridging Table**: If the destination MAC is not learnt, there will NOT be a
  flow entry matching that destination MAC.

  It will then fallback to a lower priority entry that matches the VLAN
  (subnet) and point to an L2 flood group.

- **ACL Table**: IP packets will miss the ACL table and the L2 flood group will
  be executed.

- **L2 Flood Group**:  Consists of all L2 interface groups related to this VLAN
  (subnet).

- **L2 Interface Group**: The internal assigned VLAN will be popped before the
  packet is sent to the output port.

ARP
---

.. image:: images/arch-arp-pipeline.png
    :width: 1000px

Fig. 6: Simplified ARP pipeline

All ARP packets will be forwarded according to the bridging pipeline.

In addition, a **copy of the ARP packet will be sent to the controller**.

- Controller will use the ARP packets for **learning purpose and update host
  store** accordingly.

- Controller only **replies** an ARP request if the request is trying to
  **resolve an interface address configured on the switch edge port**.

Pipeline Walkthrough - ARP
^^^^^^^^^^^^^^^^^^^^^^^^^^

It is similar to L2 broadcast. Except ARP packets will be matched by a special
ACL table entry and being copied to the controller.


L3 Unicast
----------

.. image:: images/arch-l3u.png
    :width: 800px

Fig. 7: L3 unicast

.. image:: images/arch-l3u-src-pipeline.png
    :width: 1000px

Fig. 8 Simplified L3 unicast pipeline - source leaf

Pipeline Walkthrough - Source Leaf Switch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- **VLAN Table**: An untagged packet will be assigned an internal VLAN ID
  according to the input port and the subnet configured on the input port.
  Packets of the same subnet will have the same internal VLAN ID.

- **TMAC Table**:  Since the destination MAC of a L3 unicast packet is the MAC
  of leaf router and the ethernet type is IPv4, the packet will match the TMAC
  table and go to the unicast routing table.

- **Unicast Routing Table**:  In this table we will lookup the destination IP
  of the packet and point the packet to corresponding L3 ECMP group

- **ACL Table**: IP packets will miss the ACL table and the L3 ECMP group will
  be executed.

- **L3 ECMP Group**:  Hashes on 5 tuple to pick a spine switch and goto the
  MPLS Label Group.

- **MPLS Label Group**: Push the MPLS label corresponding to the destination
  leaf switch and goto the MPLS Interface Group.

- **MPLS Interface Group**: Set source MAC address, destination MAC address,
  VLAN ID and goto the L2 Interface Group.

- **L2 Interface Group**: The internal assigned VLAN will be popped before the
  packet is sent to the output port that goes to the spine.

.. image:: images/arch-l3u-transit-pipeline.png
    :width: 1000px

Fig. 9 Simplified L3 unicast pipeline - spine

Pipeline Walkthrough - Spine Switch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- **VLAN Table**: An untagged packet will be assigned an internal VLAN ID
  according to the input port and the subnet configured on the input port.
  Packets of the same subnet will have the same internal VLAN ID.

- **TMAC Table**:  Since the destination MAC of a L3 unicast packet is the MAC
  of spine router and the ethernet type is MPLS, the packet will match the TMAC
  table and go to the MPLS table.

- **MPLS Table**: In this table we will lookup the MPLS label of the packet,
  figure out the destination leaf switch, pop the MPLS label and point to L3
  ECMP Group.

- **ACL Table**: IP packets will miss the ACL table and the MPLS interface
  group will be executed.

- **L3 ECMP Group**: Hash to pick a link (if there are multiple links) to the
  destination leaf and goto the L3 Interface Group.

- **MPLS Interface Group**: Set source MAC address, destination MAC address,
  VLAN ID and goto the L2 Interface Group.

- **L2 Interface Group**: The internal assigned VLAN will be popped before the
  packet is sent to the output port that goes to the destination leaf switch.

.. image:: images/arch-l3u-dst-pipeline.png
    :width: 1000px

Fig. 10 Simplified L3 unicast pipeline - destination leaf

Pipeline Walkthrough - Destination Leaf Switch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- **VLAN Table**: An untagged packet will be assigned an internal VLAN ID
  according to the input port and the subnet configured on the input port.
  Packets of the same subnet will have the same internal VLAN ID.

- **TMAC Table**:  Since the destination MAC of a L3 unicast packet is the MAC
  of leaf router and the ethernet type is IPv4, the packet will match the TMAC
  table and go to the unicast routing table.

- **Unicast Routing Table**:  In this table we will lookup the destination IP
  of the packet and point the packet to corresponding L3 Unicast Group.

- **ACL Table**: IP packets will miss the ACL table and the L3 Unicast Group
  will be executed.

- **L3 Unicast Group**:  Set source MAC address, destination MAC address, VLAN
  ID and goto the L2 Interface Group.

- **L2 Interface Group**: The internal assigned VLAN will be popped before the
  packet is sent to the output port that goes to the destination leaf switch.


The L3 unicast mechanism is designed to support inter-rack(inter-subnet)
untagged communication when the destination host is known.

Path Calculation and Failover - Unicast
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Coming soon...


L3 Multicast
------------

.. image:: images/arch-l3m.png
    :width: 800px

Fig. 11 L3 multicast

.. image:: images/arch-l3m-pipeline.png
    :width: 1000px

Fig.12 Simplified L3 multicast pipeline

The L3 multicast mechanism is designed to support use cases such as IPTV. The
multicast traffic comes in from the upstream router, replicated by the
leaf-spine switches, send to multiple OLTs and eventually get to the
subscribers.

.. note::
    We would like to support different combinations of ingress/egress VLAN,
    including

    - untagged in -> untagged out
    - untagged in -> tagged out
    - tagged in -> untagged out
    - tagged in -> same tagged out
    - tagged in -> different tagged out

    However, due to the above-mentioned OFDPA restrictions,

    - It is NOT possible to chain L3 multicast group to L2 interface group
      directly if we want to change the VLAN ID

    - It is NOT possible to change VLAN ID by chaining L3 multicast group to L3
      interface group since all output ports should have the same VLAN but the
      spec requires chained L3 interface group to have different VLAN ID from
      each other.

    That means, if we need to change VLAN ID, we need to change it before the
    packets get into the multicast routing table.

    The only viable solution is changing the VLAN ID in the VLAN table.

    We change the VLAN tag on the ingress switch (i.e. the switch that connects
    to the upstream router) when necessary.

    On transit (spine) and egress (destination leaf) switches, output VLAN tag
    will remain the same as input VLAN tag.

Pipeline Walkthrough - Ingress Leaf Switch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. csv-table:: Table 1. All Possible VLAN Combinations on Ingress Switch
   :file: tables/arch-mcast-ingress.csv
   :widths: 2, 5, 5, 10, 10, 5
   :header-rows: 1

.. note::
    In the presence of ``vlan-untagged`` configuration on the ingress port of
    the ingress switch, the ``vlan-untagged`` will be used instead of 4094.

    The reason is that we cannot distinguish unicast and multicast traffic in
    that case, and therefore must assign the same VLAN to the packet.

    The VLAN will anyway get popped in L2IG in this case.

Table 1 shows all possible VLAN combinations on the ingress switches and how
the packet is processed through the pipeline.  We take the second case
**untagged -> tagged 200** as an example to explain more details.

- **VLAN Table**: An untagged packet will be assigned the **egress VLAN ID**.

- **TMAC Table**:  Since the destination MAC of a L2 unicast packet is a
  multicast MAC address, the packet will match the TMAC table and goes to the
  multicast routing table.

- **Multicast Routing Table**: In this table we will lookup the multicast group
  (destination multicast IP) and point the packet to the corresponding L3
  multicast group.

- **ACL Table**: Multicast packets will miss the ACL table and the L3 multicast
  group will be executed.

- **L3 Multicast Group**: The packet will be matched by **egress VLAN ID** and
  forwarded to multiple L2 interface groups that map to output ports.

- **L2 Interface Group**: The egress VLAN will be kept in this case and the
  packet will be sent to the output port that goes to the transit spine switch.


Pipeline Walkthrough - Transit Spine Switch and Egress Leaf Switch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. csv-table:: Table 2. All Possible VLAN Combinations on Transit/Egress Switch
   :file: tables/arch-mcast-transit-egress.csv
   :widths: 2, 5, 5, 10, 10, 5
   :header-rows: 1

Table 2 shows all possible VLAN combinations on the transit/egress switches and
how the packet is processed through the pipeline.

Note that we have already changed the VLAN tag to the desired egress VLAN on
the ingress switch.

Therefore, there are only two cases on the transit/egress switches - either
keep it untagged or keep it tagged. We take the first case **untagged ->
untagged** as an example to explain more details.


- **VLAN Table**: An untagged packet will be assigned an **internal VLAN ID**
  according to the input port and the subnet configured on the input port.
  Packets of the same subnet will have the same internal VLAN ID.

- **TMAC Table**:  (same as ingress switch)

- **Multicast Routing Table**: (same as ingress switch)

- **ACL Table**: (same as ingress switch)

- **L3 Multicast Group**: The packet will be matched by **internal VLAN ID**
  and forwarded to multiple L2 interface groups that map to output ports.

- **L2 Interface Group**: The egress VLAN will be popped in this case and the
  packet will be sent to the output port that goes to the egress leaf switch.

Path Calculation and Failover - Multicast
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Coming soon...

VLAN Cross Connect
------------------

.. image:: images/arch-xconnect.png
    :width: 800px

Fig. 13 VLAN cross connect

.. image:: images/arch-xconnect-pipeline.png
    :width: 1000px

Fig. 14 Simplified VLAN cross connect pipeline

VLAN Cross Connect is originally designed to support Q-in-Q packets between
OLTs and BNGs.

The cross connect pair consists of two output ports.

Whatever packet comes in on one port with specific VLAN tag will be sent to the
other port.

.. note::
    It can only cross connects **two ports on the same switch**.
    :doc:`Pseudowire <configuration/pseudowire>` is required to connect ports
    across different switches.

We use L2 Flood Group to implement VLAN Cross Connect.

The L2 Flood Group for cross connect only consists of two ports.

The input port will be removed before flooding according to the spec and thus
create exactly the desire behavior of cross connect.

Pipeline Walkthrough - Cross Connect
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- **VLAN Table**: When a tagged packet comes in, we no longer need to assign
  the internal VLAN.  The original VLAN will be carried through the entire
  pipeline.

- **TMAC Table**:  Since the VLAN will not match any internal VLAN assigned to
  untagged packets, the packet will miss the TMAC table and goes to the
  bridging table.

- **Bridging Table**: The packet will hit the flow rule that match the cross
  connect VLAN ID and being sent to corresponding L2 Flood Group.

- **ACL Table**: IP packets will miss the ACL table and the L2 flood group will
  be executed.

- **L2 Flood Group**: Consists of two L2 interface groups related to this cross
  connect VLAN.  L2 Interface Group: The original VLAN will NOT be popped
  before the packet is sent to the output port.

vRouter
-------

.. image:: images/arch-vr.png
    :width: 800px

Fig. 15 vRouter

The Trellis fabric needs to be connected to the external world via the vRouter
functionality.  **In the networking industry, the term vRouter implies a
"router in a VM". This is not the case in Trellis**.  Trellis vRouter is NOT a
software router.

**Only the control plane of the router, i.e routing protocols, runs in a VM**.
We use the Quagga routing protocol suite as the control plane for vRouter.

The **vRouter data plane is entirely in hardware**.  Essentially the entire
hardware fabric serves as the (distributed) data plane for vRouter.

The **external router views the entire Trellis fabric as a single router**.

.. image:: images/arch-vr-overview.png

.. image:: images/arch-vr-logical.png

.. note::
    Dual external routers is also supported for redundancy. Visit
    :doc:`External Connectivity <configuration/dual-homing>` for details.

Pipeline Walkthrough - vRouter
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The pipeline is exactly as same as L3 unicast. We just install additional flow
rules in the unicast routing table on each leaf routers.


Learn More
----------
.. tip::
    Most of our design discussion and meeting notes are kept in `Google Drive
    <https://drive.google.com/drive/folders/0Bz9dNKPVvtgsR0M5R0hWSHlfZ0U>`_.
    If you are wondering why features are designed and implemented in a certain
    way, you may find the answers there.
