Red Hat network scripts integration
-----------------------------------

The RPM packages for Open vSwitch provide some integration with Red
Hat's network scripts.  Using this integration is optional.

To use the integration for a Open vSwitch bridge or interface named
<name>, create or edit /etc/sysconfig/network-scripts/ifcfg-<name>.
This is a shell script that consists of a series of VARIABLE=VALUE
assignments.  The following OVS-specific variable names are supported:

    - DEVICETYPE: Always set to "ovs".

    - TYPE: If this is "OVSBridge", then this file represents an OVS
      bridge named <name>.  Otherwise, it represents a port on an OVS
      bridge and TYPE must have one of the following values:

        * "OVSPort", if <name> is a physical port (e.g. eth0) or
          virtual port (e.g. vif1.0).

        * "OVSIntPort", if <name> is an internal port (e.g. a tagged
          VLAN).

        * "OVSBond", if <name> is an OVS bond.

        * "OVSTunnel", if <name> is an OVS tunnel.

    - OVS_BRIDGE: If TYPE is anything other than "OVSBridge", set to
      the name of the OVS bridge to which the port should be attached.

    - OVS_OPTIONS: Optionally, extra options to set in the "Port"
      table when adding the port to the bridge, as a sequence of
      column[:key]=value options.  For example, "tag=100" to make the
      port an access port for VLAN 100.  See the documentation of
      "add-port" in ovs-vsctl(8) for syntax and the section on the
      Port table in ovs-vswitchd.conf.db(5) for available options.

    - OVS_EXTRA: Optionally, additional ovs-vsctl commands, separated
      by "--" (double dash).

    - BOND_IFACES: For "OVSBond" interfaces, a list of physical
      interfaces to bond together.

    - OVS_TUNNEL_TYPE: For "OVSTunnel" interfaces, the type of the tunnel.
      For example, "gre", "vxlan", etc.

    - OVS_TUNNEL_OPTIONS: For "OVSTunnel" interfaces, this field should be
      used to specify the tunnel options like remote_ip, key, etc.

Note
----

* "ifdown" on a bridge will not bring individual ports on the bridge
down.  "ifup" on a bridge will not add ports to the bridge.  This
behavior should be compatible with standard bridges (with
TYPE=Bridge).

* If 'ifup' on an interface is called multiple times, one can see
"RTNETLINK answers: File exists" printed on the console. This comes from
ifup-eth trying to add zeroconf route multiple times and is harmless.

Examples
--------

Standalone bridge:

==> ifcfg-ovsbridge0 <==
DEVICE=ovsbridge0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=A.B.C.D
NETMASK=X.Y.Z.0
HOTPLUG=no

Enable DHCP on the bridge:
* Needs OVSBOOTPROTO instead of BOOTPROTO.
* All the interfaces that can reach the DHCP server
as a space separated list in OVSDHCPINTERFACES.

DEVICE=ovsbridge0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
OVSBOOTPROTO="dhcp"
OVSDHCPINTERFACES="eth0"
HOTPLUG=no


Adding Internal Port to ovsbridge0:

==> ifcfg-intbr0 <==
DEVICE=intbr0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSIntPort
OVS_BRIDGE=ovsbridge0
HOTPLUG=no


Internal Port with fixed IP address:

DEVICE=intbr0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSIntPort
OVS_BRIDGE=ovsbridge0
BOOTPROTO=static
IPADDR=A.B.C.D
NETMASK=X.Y.Z.0
HOTPLUG=no

Internal Port with DHCP:
* Needs OVSBOOTPROTO or BOOTPROTO.
* All the interfaces that can reach the DHCP server
as a space separated list in OVSDHCPINTERFACES.

DEVICE=intbr0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSIntPort
OVS_BRIDGE=ovsbridge0
OVSBOOTPROTO="dhcp"
OVSDHCPINTERFACES="eth0"
HOTPLUG=no

Adding physical eth0 to ovsbridge0 described above:

==> ifcfg-eth0 <==
DEVICE=eth0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=ovsbridge0
BOOTPROTO=none
HOTPLUG=no


Tagged VLAN interface on top of ovsbridge0:

==> ifcfg-vlan100 <==
DEVICE=vlan100
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSIntPort
BOOTPROTO=static
IPADDR=A.B.C.D
NETMASK=X.Y.Z.0
OVS_BRIDGE=ovsbridge0
OVS_OPTIONS="tag=100"
OVS_EXTRA="set Interface $DEVICE external-ids:iface-id=$(hostname -s)-$DEVICE-vif"
HOTPLUG=no


Bonding:

==> ifcfg-bond0 <==
DEVICE=bond0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBond
OVS_BRIDGE=ovsbridge0
BOOTPROTO=none
BOND_IFACES="gige-1b-0 gige-1b-1 gige-21-0 gige-21-1"
OVS_OPTIONS="bond_mode=balance-tcp lacp=active"
HOTPLUG=no

==> ifcfg-gige-* <==
DEVICE=gige-*
ONBOOT=yes
HOTPLUG=no

An Open vSwitch Tunnel:

==> ifcfg-gre0 <==
DEVICE=ovs-gre0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSTunnel
OVS_BRIDGE=ovsbridge0
OVS_TUNNEL_TYPE=gre
OVS_TUNNEL_OPTIONS="options:remote_ip=A.B.C.D"

Reporting Bugs
--------------

Please report problems to bugs@openvswitch.org.
