Fallback to conntrack-utils if ip_conntrack is not available
authorThomas Perl <m@thp.io>
Sat, 3 Nov 2012 11:50:30 +0000 (3 12:50 +0100)
committerThomas Perl <m@thp.io>
Sat, 3 Nov 2012 11:53:10 +0000 (3 12:53 +0100)
README
bwmon/proc.py

diff --git a/README b/README
index eaf7154..5ddbf52 100644 (file)
--- a/README
+++ b/README
    * Support for SLA violation notification to external services
    * Fully documented source code and user manual
 
+ -- News --
+
+   November 2012:
+   In recent kernels, there's no "ip_conntrack" kernel module. As
+   a replacement, bwmon now supports the "conntrack" command-line
+   utility from the "conntrack-utils" package.
+
+   If you get "KeyError: 'bytes'", this is a known problem, see:
+   http://marc.info/?l=netfilter&m=135194333402321&w=2
+
 
  -- More information --
 
index c82cbf1..4f674e3 100644 (file)
@@ -147,8 +147,15 @@ def parse_ip_conntrack():
     """
     connections = {}
 
+    if not os.path.exists('/proc/net/ip_conntrack'):
+        # conntrack-utils (recent kernels, November 2012)
+        conntrack = os.popen('conntrack -L', 'r')
+    else:
+        # Old "ip_conntrack" kernel module (July 2010)
+        conntrack = open('/proc/net/ip_conntrack', 'r')
+
     # http://www.faqs.org/docs/iptables/theconntrackentries.html
-    for line in open('/proc/net/ip_conntrack'):
+    for line in conntrack:
         parts = line.split()
 
         # We only care about TCP and UDP connections
@@ -169,6 +176,8 @@ def parse_ip_conntrack():
         key = get_key(entry)
         connections[key] = entry
 
+    conntrack.close()
+
     return connections