diff --git a/README.rst b/README.rst
index 9c66374..a8373d3 100644
--- a/README.rst
+++ b/README.rst
@@ -1484,6 +1484,57 @@
                 netmask: 255.255.255.0
                 gateway: 192.168.0.1
 
+Linux networks with implicit routes definition:
+
+- on node 1:
+
+.. code-block:: yaml
+
+    linux:
+      network:
+        enabled: true
+        router:
+          ctl:
+            # router that connects 10.0.1.0/24 and 10.0.2.0/24
+            addresses:
+              - 10.0.1.1/24
+              - 10.0.2.1/24
+          test:
+            addresses:
+              - 10.0.1.2/24
+            networks:
+              - 10.100.0.0/16
+        interface:
+          ctl:
+            name: eth0
+            address: 10.0.1.101
+            netmask: 255.255.255.0
+
+- on node2:
+
+.. code-block:: yaml
+
+    linux:
+      network:
+        enabled: true
+        router:
+          ctl:
+            # equivalent of node1's ctl router with 'implicit_routes = false'
+            options:
+              implicit_routes: false
+            addresses:
+              - 10.0.1.1/24
+              - 10.0.2.1/24
+            networks:
+              - 10.0.1.0/24
+              - 10.0.2.0/24
+        interface:
+          ctl:
+            name: eth0
+            address: 10.0.2.101
+            netmask: 255.255.255.0
+
+
 Native Linux Bridges:
 
 .. code-block:: yaml
diff --git a/_modules/routers.py b/_modules/routers.py
new file mode 100644
index 0000000..dd70414
--- /dev/null
+++ b/_modules/routers.py
@@ -0,0 +1,119 @@
+import netaddr
+import itertools
+
+
+class Route(object):
+    def __init__(self, interface, router, cidr, next_hop):
+        self.interface = interface
+        self.router = router
+        self.cidr = cidr
+        self.next_hop = next_hop
+
+    def __str__(self):
+        return "%s via %s dev %s src %s # router: %s" % (
+            self.cidr,
+            self.next_hop,
+            self.interface.name,
+            self.interface.cidr.ip,
+            self.router.name)
+
+
+class Interface(object):
+    def __init__(self, name, cidr):
+        self.name = name
+        self.cidr = cidr
+
+    def __str__(self):
+        return self.name
+
+    @staticmethod
+    def from_dict(data, default_name=None):
+        try:
+            cidr = netaddr.IPNetwork("%(address)s/%(netmask)s" % data)
+        except KeyError:
+            cidr = None
+        return Interface(
+            name = data.get('name', default_name),
+            cidr = cidr)
+
+
+class Router(object):
+    def __init__(self,
+                 name,
+                 addresses=None,
+                 networks=None,
+                 implicit_routes=True):
+        self.name = name
+        self.addresses = list(addresses or [])
+        self.networks = list(networks or [])
+        if implicit_routes:
+            self.networks.extend(addr.cidr for addr in self.addresses)
+
+        if any(addr.ip == addr.network for addr in self.addresses):
+            raise ValueError("Invalid router address")
+        if any(cidr.ip != cidr.network for cidr in self.networks):
+            raise ValueError("Invalid destination CIDR")
+
+    def __str__(self):
+        return self.name
+
+    @staticmethod
+    def from_dict(data, default_name=None):
+        options = data.get('options', {})
+        return Router(
+            name = data.get('name', default_name),
+            addresses = [
+                netaddr.IPNetwork(router_addr)
+                for router_addr in data.get('addresses', [])
+            ],
+            networks = [
+                netaddr.IPNetwork(dest_cidr).cidr
+                for dest_cidr in data.get('networks', [])
+            ],
+            implicit_routes = options.get('implicit_routes', True)
+        )
+
+    def get_routes(self, interface):
+        next_hops = [addr.ip for addr in self.addresses
+                     if addr.ip in interface.cidr]
+
+        return [
+            Route(interface, self, dest_cidr, next_hop)
+            for next_hop in next_hops
+            for dest_cidr in self.networks if next_hop not in dest_cidr
+        ]
+
+
+def get_routes(interfaces, routers):
+    def sort_key_cidr(route):
+        return route.cidr.sort_key()
+
+    def sort_key_ifname(route):
+        return (route.interface.name, route.cidr.sort_key())
+
+    interfaces = [Interface.from_dict(data, key)
+                  for key, data in interfaces.items()]
+    routers = [Router.from_dict(data, key)
+               for key, data in routers.items()]
+    routes = [route
+              for interface in interfaces if interface.cidr
+              for router in routers
+              for route in router.get_routes(interface)]
+
+    routes_by_cidr = {k: list(g) for k, g in itertools.groupby(
+        sorted(routes, key=sort_key_cidr),
+        lambda route: route.cidr)
+    }
+
+    for cidr, duplicates in routes_by_cidr.items():
+        if len(duplicates) > 1:
+            raise ValueError("Found multiple routes for %s: %s" % (cidr,
+                ["[via %s dev %s]" % (route.next_hop, route.interface)
+                 for route in duplicates]))
+
+    routes_by_ifname = {k: list(g) for k, g in itertools.groupby(
+        sorted(routes, key=sort_key_ifname),
+        lambda route: route.interface.name)
+    }
+
+    return routes_by_ifname
diff --git a/linux/meta/prometheus.yml b/linux/meta/prometheus.yml
index e048881..f3049fa 100644
--- a/linux/meta/prometheus.yml
+++ b/linux/meta/prometheus.yml
@@ -190,31 +190,29 @@
         description: "The {{ $labels.device }} disk on the {{ $labels.host }} node has {{ $value }} 'end-to-end' errors."
     {%- endraw %}
   {%- endif %}
+    {%- raw %}
     SystemMemoryFullWarning:
-      {%- set mem_threshold = monitoring.memory_usage_percentage.warn|float %}
       if: >-
-        mem_used_percent >= {{ mem_threshold }}
+        mem_used_percent > 90 and mem_available < 8 * 2^30
       for: 2m
       labels:
         severity: warning
         service: system
       annotations:
-        summary: "{{ mem_threshold }}{%- raw %}% of memory is used"
+        summary: "More than 90% of memory is used or less than 8 GB of memory is available"
         description: "The {{ $labels.host }} node uses {{ $value }}% of memory for 2 minutes."
     SystemMemoryFullMajor:
-      {%- endraw %}
-      {%- set mem_threshold = monitoring.memory_usage_percentage.major|float %}
       if: >-
-        mem_used_percent >= {{ mem_threshold }}
+        mem_used_percent > 95 and mem_available < 4 * 2^30
       for: 2m
       labels:
         severity: major
         service: system
       annotations:
-        summary: "{{ mem_threshold }}{%- raw %}% of memory is used"
+        summary: "More than 95% of memory is used or less than 4 GB of memory is available"
         description: "The {{ $labels.host }} node uses {{ $value }}% of memory for 2 minutes."
     SystemRxPacketsDroppedTooHigh:
-      {%- endraw %}
+    {%- endraw %}
       {%- set net_rx_dropped_threshold = monitoring.rx_packets_dropped_threshold.warn %}
       if: >-
         increase(net_drop_in[1m]) > {{ net_rx_dropped_threshold }} unless on (host,interface) bond_slave_active == 0
diff --git a/linux/network/interface.sls b/linux/network/interface.sls
index ff8bc6a..e825d4d 100644
--- a/linux/network/interface.sls
+++ b/linux/network/interface.sls
@@ -456,6 +456,21 @@
 
 {%- endfor %}
 
+{%- if network.router is defined and 'routers.get_routes' in salt %}
+{%- for ifname, routes in salt['routers.get_routes'](network.interface, network.router).items() %}
+linux_network_{{ ifname }}_ext_routes:
+  network.routes:
+  - name: {{ ifname }}
+  - routes:
+    {%- for route in routes %}
+    - ipaddr: {{ route.cidr.ip }}
+      netmask: {{ route.cidr.netmask }}
+      gateway: {{ route.next_hop }}
+    {%- endfor %}
+{%- endfor %}
+{%- endif %}
+
+
 {%- if network.bridge != 'none' %}
 
 linux_interfaces_final_include:
