Index: salt-3003.5+ds+efs/salt/modules/debian_ip.py
===================================================================
--- salt-3003.5+ds+efs.orig/salt/modules/debian_ip.py
+++ salt-3003.5+ds+efs/salt/modules/debian_ip.py
@@ -679,13 +679,14 @@ def _parse_interfaces(interface_files=No
 
     # Return a sorted list of the keys for bond, bridge and ethtool options to
     # ensure a consistent order
+    result = adapters.copy()
     for iface_name in adapters:
         if iface_name == "source":
             continue
         if "data" not in adapters[iface_name]:
             msg = "Interface file malformed for interface: {}.".format(iface_name)
             log.error(msg)
-            adapters.pop(iface_name)
+            result.pop(iface_name)
             continue
         for opt in ["ethtool", "bonding", "bridging"]:
             for inet in ["inet", "inet6"]:
@@ -694,9 +695,9 @@ def _parse_interfaces(interface_files=No
                         opt_keys = sorted(
                             adapters[iface_name]["data"][inet][opt].keys()
                         )
-                        adapters[iface_name]["data"][inet][opt + "_keys"] = opt_keys
+                        result[iface_name]["data"][inet][opt + "_keys"] = opt_keys
 
-    return adapters
+    return result
 
 
 def _parse_ethtool_opts(opts, iface):
@@ -1667,6 +1668,9 @@ def build_interface(iface, iface_type, e
     if iface_type not in _IFACE_TYPES:
         _raise_error_iface(iface, iface_type, _IFACE_TYPES)
 
+    if "proto" not in settings:
+        settings["proto"] = "static"
+
     if iface_type == "slave":
         settings["slave"] = "yes"
         if "master" not in settings:
Index: salt-3003.5+ds+efs/salt/templates/debian_ip/debian_eth.jinja
===================================================================
--- salt-3003.5+ds+efs.orig/salt/templates/debian_ip/debian_eth.jinja
+++ salt-3003.5+ds+efs/salt/templates/debian_ip/debian_eth.jinja
@@ -12,12 +12,13 @@
   } -%}
 {% set concat_opts = ['dns_nameservers'] -%}
 {% set valid_opts = [
-  'autoconf', 'privext', 'dhcp', 'hwaddress', 'vlan_raw_device', 'address', 'addresses', 'netmask',
+  'autoconf', 'privext', 'dhcp', 'hwaddress', 'hwaddr', 'vlan_raw_device', 'address', 'addresses', 'netmask',
   'metric', 'gateway', 'pointopoint', 'scope', 'hostname', 'media', 'leasehours', 'leasetime',
   'vendor', 'client', 'bootfile', 'server', 'mode', 'endpoint', 'dstaddr', 'local', 'ttl', 'mtu',
   'provider', 'unit', 'options', 'master', 'dns_nameservers', 'wireless_mode', 'wpa_ap_scan',
   'wpa_conf', 'wpa_driver', 'wpa_group', 'wpa_key_mgmt', 'wpa_pairwise', 'wpa_proto', 'wpa_psk',
-  'wpa_roam', 'wpa_ssid', 'accept_ra'
+  'wpa_roam', 'wpa_ssid', 'accept_ra',
+  'up_cmds', 'down_cmds', 'pre_up_cmds', 'pre_down_cmds', 'post_up_cmds', 'post_down_cmds',
   ] -%}
 {% if data.enabled %}auto {{ name }}
 {% endif %}{% if data.hotplug %}allow-hotplug {{ name }}
@@ -36,7 +37,7 @@
 {% endif %}{% endfor %}{% endif %}{% if interface.bonding  %}{% for item in interface.bonding_keys  -%}
 {% if interface.bonding[item] is string      %}    bond-{{ item }} {{ interface.bonding[item] }}
 {% elif interface.bonding[item] is iterable  %}    bond-{{ item }} {{ interface.bonding[item]|join(' ') }}
-{% endif %}{% endfor %}{% endif %}{% if interface.bridging %}{% for item in interface.bridging_keys -%}.
+{% endif %}{% endfor %}{% endif %}{% if interface.bridging %}{% for item in interface.bridging_keys -%}
 {% if interface.bridging[item] is string     %}    bridge_{{ item }} {{ interface.bridging[item] }}
 {% elif interface.bridging[item] is iterable %}    bridge_{{ item }} {{ interface.bridging[item]|join(' ') }}
 {% endif %}{% endfor %}{% endif %}{% endif %}{% endif %}{% endfor %}
