Provided by: ovn-central_2.5.9-0ubuntu0.16.04.3_amd64 bug

NAME

       ovn-northd - Open Virtual Network central control daemon

SYNOPSIS

       ovn-northd [options]

DESCRIPTION

       ovn-northd  is  a  centralized  daemon  responsible  for  translating  the  high-level OVN
       configuration into logical configuration consumable by daemons such as ovn-controller.  It
       translates  the  logical  network configuration in terms of conventional network concepts,
       taken from the OVN Northbound Database (see ovn-nb(5)), into logical datapath flows in the
       OVN Southbound Database (see ovn-sb(5)) below it.

CONFIGURATION

       ovn-northd  requires a connection to the Northbound and Southbound databases.  The default
       is db.sock in the local Open vSwitch’s "run" directory.  This may be overridden  with  the
       following commands:

              •      --ovnnb-db=database

                     The database containing the OVN Northbound Database.

              •      --ovsnb-db=database

                     The database containing the OVN Southbound Database.

       The database argument must take one of the following forms:

              •      ssl:ip:port

                     The  specified SSL port on the host at the given ip, which must be expressed
                     as an IP address (not a DNS name) in IPv4 or IPv6 address format.  If ip  is
                     an  IPv6  address,  then wrap ip with square brackets, e.g.: ssl:[::1]:6640.
                     The --private-key, --certificate, and --ca-cert options are  mandatory  when
                     this form is used.

              •      tcp:ip:port

                     Connect  to  the given TCP port on ip, where ip can be IPv4 or IPv6 address.
                     If ip is  an  IPv6  address,  then  wrap  ip  with  square  brackets,  e.g.:
                     tcp:[::1]:6640.

              •      unix:file

                     On POSIX, connect to the Unix domain server socket named file.

                     On Windows, connect to a localhost TCP port whose value is written in file.

RUNTIME MANAGEMENT COMMANDS

       ovs-appctl  can  send  commands  to a running ovn-northd process.  The currently supported
       commands are described below.

              exit   Causes ovn-northd to gracefully terminate.

LOGICAL FLOW TABLE STRUCTURE

       One of the main purposes of ovn-northd is  to  populate  the  Logical_Flow  table  in  the
       OVN_Southbound  database.   This section describes how ovn-northd does this for switch and
       router logical datapaths.

   Logical Switch Datapaths
     Ingress Table 0: Admission Control and Ingress Port Security

       Ingress table 0 contains these logical flows:

              •      Priority 100 flows to drop packets with  VLAN  tags  or  multicast  Ethernet
                     source addresses.

              •      Priority  50  flows  that  implement  ingress port security for each enabled
                     logical port.  For logical ports on which port security  is  enabled,  these
                     match  the  inport  and the valid eth.src address(es) and advance only those
                     packets to the next flow table.  For logical ports on which port security is
                     not enabled, these advance all packets that match the inport.

       There are no flows for disabled logical ports because the default-drop behavior of logical
       flow tables causes packets that ingress from them to be dropped.

     Ingress Table 1: from-lport Pre-ACLs

       Ingress table 1 prepares flows for possible  stateful  ACL  processing  in  table  2.   It
       contains  a  priority-0  flow  that simply moves traffic to table 2.  If stateful ACLs are
       used in the logical datapath, a priority-100 flow is added that sends IP  packets  to  the
       connection tracker before advancing to table 2.

     Ingress table 2: from-lport ACLs

       Logical flows in this table closely reproduce those in the ACL table in the OVN_Northbound
       database for the from-lport direction.  allow ACLs translate into logical flows  with  the
       next;  action,  allow-related  ACLs translate into logical flows with the ct_next; action,
       other ACLs translate to drop;.  The priority values from the ACL table are used directly.

       Ingress table 2 also contains a priority 0 flow with action  next;,  so  that  ACLs  allow
       packets by default.  If the logical datapath has a statetful ACL, the following flows will
       also be added:

              •      A priority-1 flow to commit IP traffic to the connection tracker.   This  is
                     needed for the default allow policy because, while the initiater’s direction
                     may not have any stateful rules,  the  server’s  may  and  then  its  return
                     traffic would not be known and marked as invalid.

              •      A priority-65535 flow that allows any traffic that has been committed to the
                     connection tracker (i.e., established flows).

              •      A priority-65535 flow that allows any traffic that is considered related  to
                     a  committed  flow in the connection tracker (e.g., an ICMP Port Unreachable
                     from a non-listening UDP port).

              •      A priority-65535 flow that  drops  all  traffic  marked  by  the  connection
                     tracker as invalid.

     Ingress Table 3: Destination Lookup

       This table implements switching behavior.  It contains these logical flows:

              •      A  priority-100  flow that outputs all packets with an Ethernet broadcast or
                     multicast  eth.dst  to  the  MC_FLOOD  multicast  group,  which   ovn-northd
                     populates with all enabled logical ports.

              •      One  priority-50  flow  that  matches  each  known  Ethernet address against
                     eth.dst and outputs the packet to the single associated output port.

              •      One priority-0 fallback flow that matches all packets and  outputs  them  to
                     the  MC_UNKNOWN multicast group, which ovn-northd populates with all enabled
                     logical  ports  that  accept  unknown  destination  packets.   As  a   small
                     optimization,  if  no  logical  ports  accept  unknown  destination packets,
                     ovn-northd omits this multicast group and logical flow.

     Egress Table 0: to-lport Pre-ACLs

       This is similar to ingress table 1 except for to-lport traffic.

     Egress Table 1: to-lport ACLs

       This is similar to ingress table 2 except for to-lport ACLs.

     Egress Table 2: Egress Port Security

       This is similar to the ingress port security logic in ingress table 0, but with  important
       differences.   Most  obviously,  outport  and  eth.dst  are  checked instead of inport and
       eth.src.  Second, packets directed to broadcast or multicast eth.dst are  always  accepted
       instead  of  being  subject  to  the  port  security  rules; this is implemented through a
       priority-100 flow that matches on eth.mcast with action output;.  Finally, to ensure  that
       even  broadcast  and  multicast  packets  are  not  delivered to disabled logical ports, a
       priority-150 flow for each disabled logical outport overrides the priority-100 flow with a
       drop; action.

   Logical Router Datapaths
     Ingress Table 0: L2 Admission Control

       This  table  drops  packets  that  the router shouldn’t see at all based on their Ethernet
       headers.  It contains the following flows:

              •      Priority-100 flows to drop packets with  VLAN  tags  or  multicast  Ethernet
                     source addresses.

              •      For  each  enabled router port P with Ethernet address E, a priority-50 flow
                     that matches inport == P && (eth.mcast || eth.dst == E), with action next;.

       Other packets are implicitly dropped.

     Ingress Table 1: IP Input

       This table is the core of the logical router  datapath  functionality.   It  contains  the
       following flows to implement very basic IP host functionality.

              •      L3  admission  control:  A priority-100 flow drops packets that match any of
                     the following:

                     •      ip4.src[28..31] == 0xe (multicast source)

                     •      ip4.src == 255.255.255.255 (broadcast source)

                     •      ip4.src == 127.0.0.0/8 || ip4.dst == 127.0.0.0/8 (localhost source or
                            destination)

                     •      ip4.src  == 0.0.0.0/8 || ip4.dst == 0.0.0.0/8 (zero network source or
                            destination)

                     •      ip4.src is any IP address owned by the router.

                     •      ip4.src is the broadcast address of  any  IP  network  known  to  the
                            router.

              •      ICMP  echo  reply.  These flows reply to ICMP echo requests received for the
                     router’s IP address.  Let A be an IP address or broadcast address owned by a
                     router  port.   Then, for each A, a priority-90 flow matches on ip4.dst == A
                     and icmp4.type == 8 && icmp4.code == 0 (ICMP echo request).  These flows use
                     the  following  actions  where,  if  A  is unicast, then S is A, and if A is
                     broadcast, S is the router’s IP address in A’s network:

                     ip4.dst = ip4.src;
                     ip4.src = S;
                     ip.ttl = 255;
                     icmp4.type = 0;
                     inport = ""; /* Allow sending out inport. */
                     next;

                     Similar flows match  on  ip4.dst  ==  255.255.255.255  and  each  individual
                     inport, and use the same actions in which S is a function of inport.

              •      ARP  reply.   These  flows  reply  to  ARP  requests for the router’s own IP
                     address.  For each router port P that owns IP address A and Ethernet address
                     E,  a  priority-90  flow  matches inport == P && arp.tpa == A && arp.op == 1
                     (ARP request) with the following actions:

                     eth.dst = eth.src;
                     eth.src = E;
                     arp.op = 2; /* ARP reply. */
                     arp.tha = arp.sha;
                     arp.sha = E;
                     arp.tpa = arp.spa;
                     arp.spa = A;
                     outport = P;
                     inport = ""; /* Allow sending out inport. */
                     output;

                    UDP port unreachable.  Priority-80  flows  generate  ICMP  port  unreachable
                     messages in reply to UDP datagrams directed to the router’s IP address.  The
                     logical router doesn’t accept any UDP traffic so it always generates such  a
                     reply.

                     These flows should not match IP fragments with nonzero offset.

                     Details TBD.  Not yet implemented.

              •      TCP  reset.   Priority-80  flows generate TCP reset messages in reply to TCP
                     datagrams directed to the router’s IP address.  The logical  router  doesn’t
                     accept any TCP traffic so it always generates such a reply.

                     These flows should not match IP fragments with nonzero offset.

                     Details TBD.  Not yet implemented.

              •      Protocol  unreachable.  Priority-70 flows generate ICMP protocol unreachable
                     messages in reply to packets directed to  the  router’s  IP  address  on  IP
                     protocols other than UDP, TCP, and ICMP.

                     These flows should not match IP fragments with nonzero offset.

                     Details TBD.  Not yet implemented.

              •      Drop  other  IP  traffic to this router.  These flows drop any other traffic
                     destined to an IP address of this router that is not already handled by  one
                     of  the  flows  above,  which amounts to ICMP (other than echo requests) and
                     fragments with nonzero offsets.  For each IP address A owned by the  router,
                     a priority-60 flow matches ip4.dst == A and drops the traffic.

       The  flows  above  handle  all of the traffic that might be directed to the router itself.
       The following flows (with lower priorities) handle the remaining traffic, potentially  for
       forwarding:

              •      Drop  Ethernet  local  broadcast.   A  priority-50 flow with match eth.bcast
                     drops  traffic  destined  to  the  local  Ethernet  broadcast  address.   By
                     definition this traffic should not be forwarded.

              •      Drop  IP  multicast.   A  priority-50  flow  with  match  ip4.mcast drops IP
                     multicast traffic.

              •      ICMP time exceeded.  For each router port  P,  whose  IP  address  is  A,  a
                     priority-40   flow   with  match  inport  ==  P  &&  ip.ttl  ==  {0,  1}  &&
                     !ip.later_frag matches packets whose TTL has  expired,  with  the  following
                     actions to send an ICMP time exceeded reply:

                     icmp4 {
                         icmp4.type = 11; /* Time exceeded. */
                         icmp4.code = 0;  /* TTL exceeded in transit. */
                         ip4.dst = ip4.src;
                         ip4.src = A;
                         ip.ttl = 255;
                         next;
                     };

                     Not yet implemented.

              •      TTL  discard.   A  priority-30  flow with match ip.ttl == {0, 1} and actions
                     drop; drops other packets whose TTL has expired, that should not  receive  a
                     ICMP error reply (i.e. fragments with nonzero offset).

              •      Next  table.   A  priority-0  flows  match  all  packets that aren’t already
                     handled and uses actions next;  to  feed  them  to  the  ingress  table  for
                     routing.

     Ingress Table 2: IP Routing

       A  packet  that arrives at this table is an IP packet that should be routed to the address
       in ip4.dst.  This table implements IP routing, setting reg0 to  the  next-hop  IP  address
       (leaving  ip4.dst,  the  packet’s  final  destination, unchanged) and advances to the next
       table for ARP resolution.

       This table contains the following logical flows:

              •      Routing table.  For each route to IPv4 network N with netmask M,  a  logical
                     flow with match ip4.dst == N/M, whose priority is the number of 1-bits in M,
                     has the following actions:

                     ip.ttl--;
                     reg0 = G;
                     next;

                     (Ingress table 1 already verified  that  ip.ttl--;  will  not  yield  a  TTL
                     exceeded error.)

                     If  the  route  has  a gateway, G is the gateway IP address, otherwise it is
                     ip4.dst.

              •      Destination unreachable.  For each router port P, which owns IP address A, a
                     priority-0  logical  flow with match in_port == P && !ip.later_frag && !icmp
                     has the following actions:

                     icmp4 {
                         icmp4.type = 3; /* Destination unreachable. */
                         icmp4.code = 0; /* Network unreachable. */
                         ip4.dst = ip4.src;
                         ip4.src = A;
                         ip.ttl = 255;
                         next(2);
                     };

                     (The !icmp check prevents recursion if the destination  unreachable  message
                     itself cannot be routed.)

                     These  flows are omitted if the logical router has a default route, that is,
                     a route with netmask 0.0.0.0.

     Ingress Table 3: ARP Resolution

       Any packet that reaches this table is an IP packet whose next-hop IP address is  in  reg0.
       (ip4.dst  is  the  final destination.)  This table resolves the IP address in reg0 into an
       output port in outport and an Ethernet address in eth.dst, using the following flows:

              •      Known MAC bindings.  For each IP address A  whose  host  is  known  to  have
                     Ethernet  address HE and reside on router port P with Ethernet address PE, a
                     priority-200 flow with match reg0 == A has the following actions:

                     eth.src = PE;
                     eth.dst = HE;
                     outport = P;
                     output;

                     MAC bindings can be known statically based on  data  in  the  OVN_Northbound
                     database.   For router ports connected to logical switches, MAC bindings can
                     be known statically from the addresses column  in  the  Logical_Port  table.
                     For  router  ports  connected  to other logical routers, MAC bindings can be
                     known statically from the mac and network column in the  Logical_Router_Port
                     table.

              •      Unknown  MAC  bindings.   For  each non-gateway route to IPv4 network N with
                     netmask M on router port P that owns IP address A and Ethernet address E,  a
                     logical  flow  with  match  ip4.dst  == N/M, whose priority is the number of
                     1-bits in M, has the following actions:

                     arp {
                         eth.dst = ff:ff:ff:ff:ff:ff;
                         eth.src = E;
                         arp.sha = E;
                         arp.tha = 00:00:00:00:00:00;
                         arp.spa = A;
                         arp.tpa = ip4.dst;
                         arp.op = 1;  /* ARP request. */
                         outport = P;
                         output;
                     };

                     TBD:  How  to  install  MAC  bindings  when  an  ARP  response  comes  back.
                     (Implement a "learn" action?)

                     Not yet implemented.

     Egress Table 0: Delivery

       Packets  that  reach  this table are ready for delivery.  It contains priority-100 logical
       flows that match packets on each enabled logical router port, with action output;.