External Connectivity
=====================

vRouter
-------

Physical Connectivity
^^^^^^^^^^^^^^^^^^^^^

External routers must be physically connected to one of the fabric leaf
switches.

Currently there is a limitation that the **external/upstream router and the
Quagga instance must be connected to the same fabric leaf switch**.

Therefore it is necessary to use an additional front panel port on the
leaf-switch (or at least an additional VLAN) to connect to the compute node
hosting Quagga.

.. image:: ../../images/config-vr-physical.png

Configure vRouter
^^^^^^^^^^^^^^^^^

The operator will need to configure a subnet between the Leaf-switch, the
external/upstream router and the Quagga instance. There are 3 IP addresses we
need to allocate - 1 on the switch port, 1 in Quagga, and 1 on the upstream
router. This means the peering subnet **cannot be smaller than a /29**.

BGP peering happens between the IP addresses configured on the interfaces in
Quagga and the external router.

Routes are advertised by Quagga to the upstream with the next-hop set to the
switch port IP address.  This means that when traffic comes to the fabric leaf
switch from outside, the switch is able to distinguish peering traffic from
data traffic and treat each appropriately.

The following shows an ONOS interface configuration example:

.. code-block:: json

    {
      "ports" : {
        "of:0000000000000001/1" : {
          "interfaces" : [
            {
              "name" : "upstream1",
              "ips"  : [ "10.0.1.2/24" ],
              "vlan-untagged" : 4000
            }
          ]
        },
        "of:0000000000000001/2" : {
          "interfaces" : [
              {
                "name" : "quagga",
                "ips"  : [ "10.0.1.2/24" ],
                "vlan-untagged" : 4000
              }
          ]
        }
      }
    }

- ``name``: An arbitrary name string for the interface. Optional.

- ``ips``: Configure the peering subnet (10.0.1.0/24) and the switch port IP
  (10.0.1.2).  Note that we use the same IP address on both the Quagga and
  upstream interfaces.

- ``vlan-untagged``: Configure the same VLAN ID on both interfaces. It doesn't
  matter exactly what the VLAN ID is, but it must be the same on both the
  Quagga-facing and upstream-facing interfaces.

In this case the peering subnet is ``10.0.1.0/24``.
The upstream router is using the ``10.0.1.1`` address.
Quagga is assigned ``10.0.1.3``, which is the address used for peering.

The upstream router needs to be configured with ``10.0.1.3`` as its BGP
neighbor, and the BGP peering will be established between ``10.0.1.1`` and
``10.0.1.3``. The ``10.0.1.2`` address is used by the fabric switch and for the
next-hop for routes advertised by Quagga.

Of course you are not obliged to use ``10.0.1.0/24``, you should use a subnet
that makes sense for your peering environment.

.. note::
    This configuration will set up an L2 link between the two fabric switch
    ports, over which the Quagga and external router can communicate.

    Both Quagga and the upstream router will receive untagged packets (i.e they
    will never see packets with VLAN id 4000, which is used inside the leaf
    switch to establish a bridging domain).

    If you need a VLAN tag in the compute node to distinguish the traffic going
    to Quagga, you can change the VLAN assignment on the switch port
    "of:0000000000000001/2" to be ``vlan-tagged`` instead of ``vlan-untagged``.

Deploy the Quagga Docker Image
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

SD-Fabric uses a slightly modified version of Quagga, so the easiest way to
deploy this is to use the provided docker image.

.. code-block:: console

    $ docker pull opencord/quagga

We also need to download the **pipework** tool which will be used to connect
the docker image to the physical interface that we set aside earlier.

.. code-block:: console

    $ wget https://raw.githubusercontent.com/jpetazzo/pipework/master/pipework
    $ chmod +x pipework

Create a directory for your Quagga configuration files, and create a ``bgpd.conf``
and ``zebra.conf`` in there.  This folder is going to be mounted into the Quagga
container.  More on configuring Quagga later.

.. code-block:: console

    $ mkdir configs
    $ touch zebra.conf bgpd.conf

Now run the docker image (make sure the path the config directory matches what
is on your system):

.. code-block:: console

    $ sudo docker run --privileged -d -v configs:/etc/quagga -n quagga opencord/quagga

Finally, we can use the pipework tool to add the physical interface into the
container so that Quagga can talk out over the fabric:

.. code-block:: console

    $ sudo ./pipework mlx1 -i eth1 quagga 10.0.1.3/24

This will add host interface ``mlx1`` to the container with name ``quagga``
with interface name ``eth1`` inside the container.  The newly added interface
will have the IP ``10.0.1.3``.  This IP address should be the peering subnet
address that you want to assign to Quagga.

If you need to change anything about the container (for example if you change
the Quagga configuration) you can remove the original container and run a new
one:

.. code-block:: console

    $ sudo docker rm -f quagga
    $ sudo docker run --privileged -d -v configs:/etc/quagga -n quagga opencord/quagga

Configure Quagga
^^^^^^^^^^^^^^^^

At this point Quagga should have IP connectivity to the external routers, and
it should be able to ping them on the peering subnet.

Now Quagga and the upstream routers can be configured to peer with one another.
This configuration of Quagga is going to be highly dependent on the
configuration of the upstream network, so it won't be possible to give
comprehensive configuration examples here.

It is recommended to consult the Quagga documentation for exhaustive
information on Quagga's capabilities and configuration.  Here I will attempt to
provide a few basic examples of Quagga configuration to get you started.
You'll have to enhance these with the features and functions that are needed in
your network.

Zebra configuration
"""""""""""""""""""

Regardless of which routing protocols you are using in your network, it is
important to configure Zebra's FPM connection to send routes to the FPM app
running on ONOS.  This feature was enabled by the patch that was applied
earlier when we installed Quagga.

A minimal Zebra configuration might look like this:

.. code-block:: text

    !
    hostname cord-zebra
    password cord
    !
    fpm connection ip 10.6.0.1 port 2620
    !

The FPM connection IP address is the IP address of **one of the ONOS cluster
instances** - does not matter which one.  If you have other configuration that
needs to go in ``zebra.conf`` you should add that here as well.

BGP configuration
"""""""""""""""""

An example simple BGP configuration for peering with one BGP peer might look
like this:

.. code-block:: text

    hostname bgp
    password cord
    !
    ip prefix-list 1 seq 10 permit 192.168.0.0/16
    !
    route-map NEXTHOP permit 10
    match ip address prefix-list 1
    set ip next-hop 10.0.1.2
    !
    router bgp 65535
      bgp router-id 10.0.1.3
      !
      network 192.168.0.0/16
      !
      neighbor 10.0.1.1 remote-as 65540
      neighbor 10.0.1.1 description upstream1
      neighbor 10.0.1.1 route-map NEXTHOP out
      !

This configuration peers with one upstream router ``10.0.1.1`` and advertises
one route ``192.168.0.0/16``.  Note that Quagga (and as a result SD-Fabric) is in
a different AS ``65535`` from the upstream router AS ``65540``, as we are using
E-BGP for this connectivity.

.. note::
    Pay attention to the configuration to rewrite the next hop of routes that
    are advertised to the upstream router.

    A ``route-map`` is used to set the next hop of advertised routes to
    ``10.0.1.2``, which is **different from the address that Quagga is using to
    peer with the external router**.

    As mentioned above, it is important that this rewriting is done correctly
    so that the fabric switch is able to **distinguish data plane and control
    plane** traffic.

Route service and static route
------------------------------

Access route service via CLI
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View routes
"""""""""""

This will show routes from all sources, including static and dynamic routes.

The example below shows routes learned from the upstream router (Source: FPM)
and routes configured manually (Source: STATIC)

.. code-block:: text

    onos> routes

    B: Best route, R: Resolved route

    Table: ipv4
    B R  Network            Next Hop        Source (Node)
         0.0.0.0/0          172.16.0.1      FPM (127.0.0.1)
    > *  1.1.0.0/18         10.0.1.20       STATIC
    > *  10.0.99.0/24       10.0.1.1        FPM (127.0.0.1)
      *  10.0.99.0/24       10.0.6.1        FPM (127.0.0.1)
       Total: 2

    Table: ipv6
    B R  Network                                     Next Hop                                Source (Node)
    > *  2000::7700/120                              fe80::288:ff:fe00:1                     FPM (127.0.0.1)
    > *  2000::8800/120                              fe80::288:ff:fe00:2                     FPM (127.0.0.1)
    > *  2000::9900/120                              fe80::288:ff:fe00:1                     FPM (127.0.0.1)
      *  2000::9900/120                              fe80::288:ff:fe00:2                     FPM (127.0.0.1)
       Total: 3


Add a static route
""""""""""""""""""

.. code-block:: console

    onos> route-add <prefix> <nexthop>
    onos> route-add 1.1.0.0/18 10.0.1.20
    onos> route-add 2020::101/120 2000::1


Remove a static route
"""""""""""""""""""""

.. code-block:: console

    onos> route-remove <prefix> <nexthop>
    onos> route-remove 1.1.0.0/18 10.0.1.20


Access route service via REST
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Single route
""""""""""""

.. code-block:: console

    $ curl --user onos:rocks -X POST -H 'Content-Type:application/json' http://<controller-ip>:8181/onos/routeservice/routes -d@routes.json
    $ curl --user onos:rocks -X GET -H 'Accept:application/json' http://<controller-ip>:8181/onos/routeservice/routes | python -mjson.tool
    $ curl --user onos:rocks -X DELETE -H 'Content-Type:application/json' http://<controller-ip>:8181/onos/routeservice/routes -d@routes.json

with identical json format for both POST and DELETE:

.. code-block:: json

    {
      "prefix": "20.0.0.1/24",
      "nextHop": "10.0.1.10"
    }


Bulk routes
"""""""""""

.. code-block:: console

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

with identical json format for both POST and DELETE:

.. code-block:: json

    {
      "routes": [
        {
          "prefix": "20.0.0.1/24",
          "nextHop": "10.0.1.10"
        },
        {
          "prefix": "30.0.0.1/24",
          "nextHop": "10.0.2.15"
        }
      ]
    }


Verify routes
^^^^^^^^^^^^^
Check the leaf switches that the route (e.g. 1.1.0.0/18) has been programmed in
the routing table (table 30).

.. code-block:: console

    onos> flows any of:0000000000000205 30
    <snip>
    id=670000d1f6782c, state=ADDED, bytes=0, packets=0, duration=39, liveType=UNKNOWN, priority=36010, tableId=30, appId=org.onosproject.segmentrouting, payLoad=null, selector=[ETH_TYPE:ipv4, IPV4_DST:1.1.0.0/18],
     treatment=DefaultTrafficTreatment{immediate=[], deferred=[GROUP:0x70000014], transition=TABLE:60, meter=None, cleared=false, metadata=null}
    <snip>

Notes about next hops
^^^^^^^^^^^^^^^^^^^^^
The next hop of a route should be resolvable to a MAC address that is known to
ONOS.  Typically the next hop is a server interface that is known to ONOS as a
host learned via ARP or DHCP.  If you are not sure, check the ``hosts`` command
on the ONOS CLI.

.. code-block:: console

    onos> hosts
    <snip>
    id=A2:9B:32:9D:7F:B3/None, mac=A2:9B:32:9D:7F:B3, location=of:0000000000000205/48, vlan=None, ip(s)=[192.168.101.2], configured=false
    id=B2:A4:E2:72:D1:91/None, mac=B2:A4:E2:72:D1:91, location=of:0000000000000204/16, vlan=None, ip(s)=[10.0.1.20], configured=false
    id=EE:22:F7:BE:86:50/None, mac=EE:22:F7:BE:86:50, location=of:0000000000000205/16, vlan=None, ip(s)=[10.0.2.15], configured=false

If the next hop has not been resolved for any reason, it would be necessary to
configure the next hop as a host (/32 prefix) together with MAC address and
location.

Learn more about how to configure a host using `Network Config Host Provider
<https://wiki.onosproject.org/display/ONOS/Network+Config+Host+Provider>`_

Finally note that if you are configuring routes manually/statically and they
are publicly routable IPs that should be reachable from “outside”, you would
need to configure Quagga to advertise them upstream.


Route blackhole
---------------
The blackhole consists of a rule on table 30 on every edge device on the
fabric.  The Table 30 rule matches on a given IP address and mask and has
nothing but a ``clearDeferred`` action, practically dropping the packet.  Every IP
we want to blackhole will have it's own rule in every edge switch.

An example of such rule is:

.. code-block:: text

    ADDED, bytes=0, packets=0, table=30, priority=48010, selector=[ETH_TYPE:ipv4, IPV4_DST:50.0.0.0/24], treatment=[transition=TABLE:60]

Route blackholing can be done via network configuration.

.. code-block:: json

    {
      "apps" : {
        "org.onosproject.segmentrouting" : {
          "segmentrouting": {
            "blackholeIps": [
              "50.0.0.0/24"
            ]
          }
        }
      }
    }

Ignore certain FPM peer
-----------------------
The ``FpmConnectionInfo`` consists a new flag ``acceptRoutes``, indicating
whether we want to accept or discard the routes advertised by certain FPM peer.
Per current requirement, we always have the ``acceptRoutes`` flag set to
``true`` by default, meaning that we will accept routes from all peers.

We can updated the flag using REST API and CLI command as below

REST API
^^^^^^^^
- ``POST /acceptRoutes`` to enable or disable ``acceptRoutes`` flag
- ``GET /acceptRoutes`` to fetch the current status of the FPM connection

.. image:: ../../images/config-fpm-rest.png
    :width: 900px

CLI
^^^

- ``fpm-set-accept-routes`` to enable or disable ``acceptRoutes`` flag

  .. code-block:: console

     onos> fpm-set-accept-routes 10.250.16.40 52560 false

- ``fpm-get-accept-route`` to fetch the current status of the FPM connection

  .. code-block:: console

    onos> fpm-get-accept-route
    <snip>
    peer 10.250.16.40  port 52560 acceptRoutes false
    peer 10.250.16.41  port 52594 acceptRoutes true
    <snip>
