diff --git a/doc/source/contributor/bgp_supportability_matrix.rst b/doc/source/contributor/bgp_supportability_matrix.rst new file mode 100644 index 00000000..ed5cc952 --- /dev/null +++ b/doc/source/contributor/bgp_supportability_matrix.rst @@ -0,0 +1,83 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + + Convention for heading levels in Neutron devref: + ======= Heading 0 (reserved for the title in a document) + ------- Heading 1 + ~~~~~~~ Heading 2 + +++++++ Heading 3 + ''''''' Heading 4 + (Avoid deeper levels because they do not render well.) + +========================= +BGP Supportability Matrix +========================= + +The next sections highlight the options and features supported by each driver + + +BGP Driver (SB) +--------------- + ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+--------------------------+--------------------+-----------------------+-------------+ +| Exposing Method | Description | Expose with | Wired with | Expose Tenants | Expose only GUA | OVS-DPDK/HWOL Support | Implemented | ++=================+=====================================================+==========================================+==========================================+==========================+====================+=======================+=============+ +| Underlay | Expose IPs on the default underlay network | Adding IP to dummy nic isolated in a VRF | Ingress: ip rules, and ip routes on the | Yes | Yes | No | Yes | +| | | | routing table associated with OVS | | (expose_ipv6_gua | | | +| | | | Egress: OVS flow to change MAC | (expose_tenant_networks) | _tenant_networks) | | | ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+--------------------------+--------------------+-----------------------+-------------+ + + +BGP Driver (NB) +--------------- + +Note until RFE on OVN (https://bugzilla.redhat.com/show_bug.cgi?id=2107515) +is implemented there is no option to expose tenant networks as we do not know +where the CR-LRP port is associated to. + ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+--------------------------+-----------------------+-------------+ +| Exposing Method | Description | Expose with | Wired with | Expose Tenants or GUA | OVS-DPDK/HWOL Support | Implemented | ++=================+=====================================================+==========================================+==========================================+==========================+=======================+=============+ +| Underlay | Expose IPs on the default underlay network | Adding IP to dummy nic isolated in a VRF | Ingress: ip rules, and ip routes on the | No support until OVN | No | Yes | +| | | | routing table associated to ovs | has information about | | | +| | | | Egress: ovs-flow to change mac | the CR-LRP chassis on | | | ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+ the SB DB +-----------------------+-------------+ +| L2VNI | Extends the L2 segment on a given VNI | No need to expose it, automatic with the | Ingress: vxlan + bridge device | | No | No | +| | | FRR configuration and the wiring | Egress: nothing | | | | ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+ +-----------------------+-------------+ +| VRF | Expose IPs on a given VRF (vni id) | Add IPs to dummy nic associated to the | Ingress: vxlan + bridge device | | No | No | +| | | VRF device (lo_VNI_ID) | Egress: flow to redirect to VRF device | | | | ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+ +-----------------------+-------------+ +| Dynamic | Mix of the previous, depending on annotations it | Mix of the previous three | Ingress: mix of all the above | | No | No | +| | exposes it differently and on different VNIs | | Egress: mix of all the above | | | | ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+ +-----------------------+-------------+ +| OVN-Cluster | Make use of an extra OVN cluster (per node) instead | Adding IP to dummy nic isolated in a VRF | Ingress: ovn routes, ovs flow (mac tweak)| | Yes | No | +| | of kernel routing -- exposing the IPs with BGP is | (as it only supports the underlay option)| Egress: ovn routes and policies, | | | | +| | the same as before | | and ovs flow (mac tweak) | | | | ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+--------------------------+-----------------------+-------------+ + + +BGP Stretched Driver (SB) +------------------------- + ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+----------------+--------------------+-----------------------+-------------+ +| Exposing Method | Description | Expose with | Wired with | Expose Tenants | Expose only GUA | OVS-DPDK/HWOL Support | Implemented | ++=================+=====================================================+==========================================+==========================================+================+====================+=======================+=============+ +| Underlay | Expose IPs on the default underlay network | Adding IP routes to default VRF table | Ingress: ip rules, and ip routes on the | Yes | No | No | Yes | +| | | | routing table associated to ovs | | | | | +| | | | Egress: ovs-flow to change mac | | | | | ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+----------------+--------------------+-----------------------+-------------+ + + +EVPN Driver (SB) +---------------- + ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+----------------+--------------------+-----------------------+-------------+ +| Exposing Method | Description | Expose with | Wired with | Expose Tenants | Expose only GUA | OVS-DPDK/HWOL Support | Implemented | ++=================+=====================================================+==========================================+==========================================+================+====================+=======================+=============+ +| VRF | Expose IPs on a given VRF (vni id) -- requires | Add IPs to dummy nic associated to the | Ingress: vxlan + bridge device | Yes | No | No | No | +| | newtorking-bgpvpn or manual NB DB inputs | VRF device (lo_VNI_ID) | Egress: flow to redirect to VRF device | | | | | ++-----------------+-----------------------------------------------------+------------------------------------------+------------------------------------------+----------------+--------------------+-----------------------+-------------+ diff --git a/doc/source/contributor/index.rst b/doc/source/contributor/index.rst index e4fff7bd..4a78000d 100644 --- a/doc/source/contributor/index.rst +++ b/doc/source/contributor/index.rst @@ -8,4 +8,4 @@ bgp_mode_design evpn_mode_design bgp_mode_stretched_l2_design - + bgp_supportability_matrix diff --git a/ovn_bgp_agent/config.py b/ovn_bgp_agent/config.py index f944ae6b..070e539c 100644 --- a/ovn_bgp_agent/config.py +++ b/ovn_bgp_agent/config.py @@ -39,6 +39,8 @@ agent_opts = [ default=False), cfg.StrOpt('driver', help='Driver to be used', + choices=('ovn_bgp_driver', 'ovn_evpn_driver', + 'ovn_stretched_l2_bgp_driver', 'nb_ovn_bgp_driver'), default='ovn_bgp_driver'), cfg.StrOpt('ovsdb_connection', default='unix:/usr/local/var/run/openvswitch/db.sock', @@ -118,6 +120,22 @@ agent_opts = [ help='Allows to filter on the address scope. Only networks' ' with the same address scope on the provider and' ' internal interface are announced.'), + cfg.StrOpt('exposing_method', + default='underlay', + choices=('underlay', 'l2vni', 'vrf', 'dynamic', 'ovn'), + help='The exposing mechanism to be used. underlay is the ' + 'default and simply expose it on the default/plain ' + 'network.' + 'With l2vni the l2 is extended over the l3 infrastructure ' + 'and it is exposed on a given VNI (Type-2).' + 'With vrf the routes are exposed in different VRFs/VNIs ' + '(Type-5).' + 'With dynamic, a mix between underlay, l2vni and vrf is ' + 'used, depending on the information annotated on the ' + 'ports. ' + 'Finally, with ovn, instead of using kernel networking a ' + 'dedicated ovn cluster per node is used for the traffic ' + 'redirection'), ] root_helper_opts = [