diff --git a/linux/files/ovs_bridge b/linux/files/ovs_bridge
new file mode 100644
-index 0000000..8c0f468
+index 0000000..c609e45
--- /dev/null
+++ b/linux/files/ovs_bridge
-@@ -0,0 +1,14 @@
+@@ -0,0 +1,19 @@
+auto {{ bridge_name }}
+allow-ovs {{ bridge_name }}
-+iface {{ bridge_name }} inet {{ bridge.get('proto', 'manual') }}
++iface {{ bridge_name }} inet static
+ ovs_type OVSBridge
-+ {%- if bridge.get('proto', 'manual') == 'static' %}
+ address {{ bridge.address }}
+ netmask {{ bridge.netmask }}
++ mtu {{ bridge.get('mtu', '1500') }}
++ {%- if bridge.use_interfaces is defined %}
++ ovs_ports {{ bridge.use_interfaces|join(' ') }}
++ {%- endif %}
++ {%- if bridge.datapath_type is defined %}
++ ovs_extra set Bridge ${IFACE} datapath_type={{ bridge.datapath_type }}
+ {%- endif %}
+ {%- if bridge.gateway is defined %}
+ gateway {{ bridge.gateway }}
+ {%- endif %}
-+ {%- if bridge.ovs_options is defined %}
-+ ovs_options {{ bridge.ovs_options }}
++ {%- if bridge.name_servers is defined %}
++ dns-nameservers {{ bridge.name_servers | join(' ') }}
+ {%- endif %}
diff --git a/linux/files/ovs_port b/linux/files/ovs_port
index 222ca8e..efb0307 100644
--- a/linux/files/ovs_port
+++ b/linux/files/ovs_port
-@@ -1,6 +1,9 @@
- auto {{ port_name }}
+@@ -1,6 +1,11 @@
++# With systemd, adding OVS bridges as 'auto' can cause race conditions
++# https://github.com/openvswitch/ovs/blob/master/debian/openvswitch-switch.README.Debian
++# auto {{ port_name }}
+-auto {{ port_name }}
allow-{{ port.bridge }} {{ port_name }}
iface {{ port_name }} inet {{ port.get('proto', 'manual') }}
+{%- if '.' in port_name %}
mtu {{ port.get('mtu', '1500') }}
ovs_bridge {{ port.bridge }}
diff --git a/linux/network/interface.sls b/linux/network/interface.sls
-index 7375b04..bbf2fa0 100644
+index 180f912..dcb295b 100644
--- a/linux/network/interface.sls
+++ b/linux/network/interface.sls
-@@ -67,6 +67,32 @@ remove_cloud_init_file:
+@@ -91,6 +91,34 @@ add_int_{{ int_name }}_to_ovs_dpdk_bridge_{{ interface_name }}:
ovs_bridge_{{ interface_name }}:
openvswitch_bridge.present:
- name: {{ interface_name }}
++{%- if interface.get('proto', 'manual') == 'static' %}
+ file.managed:
+ - name: /etc/network/interfaces.u/ifcfg-{{ interface_name }}
+ - makedirs: True
+ - file: linux_interfaces_final_include
+ - unless:
+ - ip link show {{ interface_name }} | grep -q '\<UP\>'
++{%- endif %}
{# add linux network interface into OVS bridge #}
{%- for int_name, int in network.interface.items() %}