[ovs-dev] [OVS-dev]: OVN: RFC re: logical and physical endpoint separation proposal

Darrell Lu dlu998 at gmail.com
Sat Jan 30 02:36:59 UTC 2016


The following is a proposal regarding how to allow logical
and physical endpoint contexts for OVN to stay separated, from
a CMS POV.

A logical endpoint has the form: ls1-port1.
A physical endpoint has the general form:
chassis/physical port or location on chassis/encapsulation.

Some advantages for cleanly separating logical and physical
layers are:

1) Logical and physical domains can be managed separately; for
   example, by different companies or business units, with minimal
   interaction overhead.

2)The physical layer details can change without needing to
   change the logical layer; for example, a physical endpoint
   vlan can change without needing to change the logical layer,
   which in OVN resides in the NB DB.
   The physical endpoint encapsulations can even change in future,
   without needing to update the NB DB supported options and/or
   churning the NB DB.

3) The logical configuration remains simple in that it just needs
   to concern itself with tasks such linking users to services,
   without too much concern about where the services
   or users are presently located.


A physical topology CMS or sub-component of a CMS can be
used to configure physical endpoints in the SB DB directly,
bypassing the NB DB and northd processing.


A new Physical_Endpoint table describes endpoints used to reach a
physical network only, including localnet and gateway cases.


This physical topology CMS would write to this new table.

Physical_Endpoint TABLE

Summary:
     Core Features:
         name             string (must be unique within table)
         chassis          chassis record
         chassis_port     string
         type             string
         ingress_encap    string
         egress_encap     string


Details:
     Core Features:
          name: string (must be unique within table)
                    A physical_endpoint name which can be used to describe
its
                    connection role.
          chassis: chassis record.
          chassis_port: string
                    Physical port with the context the associated chassis.
          type: string, can be single vlan, which is presently supported.
                    In future, a tunnel type such as MPLS/IP tunnels or
                    multiple vlans might be used. Nomenclature is TBD.
          ingress_encap: string
                    Encapsulation expected for packets received on this
                    physical endpoint. Incorrect encapsulation will
                    result in packet drop.
          egress_encap: string
                    Encapsulation used for packets transmitted on this
                    physical endpoint.
                    If type is vlan, ingress_encap == egress_encap as
                    per existing OVN expected behavior.

A new ovn-sbctl command can be used in lieu of CMS support.

ovn-sbctl phys-endpt-add phys_endpt_name chassis_name chassis_port type
                         ingress_encap egress_encap


The existing Port Binding table is modified for localnet and gateway cases.
options : phys_endpt was added for gateways.
options : phys_endpt replaces tag for localnet.
Note that there is some redundancy in information, as phys_endpt
includes chassis and there is a separate column for chassis in the
Port Binding table.

Port_Binding TABLE
.
.
.

   Summary:
       Core Features:
         datapath                    Datapath_Binding
         logical_port                string (must be unique within table)
         chassis                     optional weak reference to Chassis
         tunnel_key                  integer, in range 1 to 32,767
         mac                         set of strings
         type                        string
       Patch Options:
         options : peer              optional string
       Localnet Options:
         options : network_name      optional string
         options : phys_endpt        optional physical endpoint record
       VTEP Options:
         options : vtep-physical-switch
                                     optional string
         options : vtep-logical-switch
                                     optional string
         options : phys_endpt        optional physical endpoint record
       Nested Containers:
         parent_port                 optional string
         tag                         optional integer, in range 1 to 4,095
.
.
.
   Details:
      Localnet Options:
          These options apply to logical ports with type of localnet.

           options : phys_endpt: optional physical endpoint record
                  Used to derive physical port, ingress encapsulations
                  and egress encapsulations.
.
.
      VTEP Options:
          These options apply to logical ports with type of vtep.

          options : phys_endpt: optional physical endpoint record
                  Used to derive physical port, ingress encapsulations
                  and egress encapsulations.
.
.
.

The existing ovn-sbctl lport-bind command syntax is not modified so as not
to impact existing HV support. This may be TBD.

A new ovn-sbctl command is added for use in localnet and gateway cases.
The below command should be used in place of ovn-sbctl lport-bind for
localnet and gateway cases.

ovn-sbctl lport-bind-phys-endpt logical-port phys-endpt-name

       [--may-exist] lport-bind-phys-endpt logical-port phys-endpt-name
              Binds the logical port named logical-port to phys-endpt.

              Without  --may-exist, attempting to bind a logical port that
has
              already been bound is an error.  With --may-exist, this
 command
              does  nothing  if logical-port has already been bound to a
              phys-endpt.

       [--if-exists] lport-unbind-phys-endpt logical-port phys-endpt-name
              Resets the binding of logical-port to NULL.

              Without --if-exists, attempting to unbind a logical port that
is
              not  bound  is an error.  With --if-exists, attempting to
unbind
              logical port that is not bound has no effect.

Darrell



More information about the dev mailing list