[ovs-dev] [PATCH] ovs-tcpdump: handle large interface names on linux
Aaron Conole
aconole at redhat.com
Fri Nov 10 22:33:20 UTC 2017
Linux has a fixed size interface name, which will not change. This means
that attempts to dump interfaces whose names are larger than the max size
will result in an error making the tap device.
This commit brings a new function. When the generated name would be too
large, use a random number prefixed by 'ovsmi' instead.
Reported-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy at intel.com>
Signed-off-by: Aaron Conole <aconole at redhat.com>
---
utilities/ovs-tcpdump.in | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/utilities/ovs-tcpdump.in b/utilities/ovs-tcpdump.in
index 6718c77..91fa14e 100755
--- a/utilities/ovs-tcpdump.in
+++ b/utilities/ovs-tcpdump.in
@@ -18,6 +18,7 @@ import fcntl
import os
import pwd
+from random import randint
import struct
import subprocess
import sys
@@ -39,6 +40,8 @@ except Exception:
tapdev_fd = None
_make_taps = {}
+_make_mirror_name = {}
+IFNAMSIZ_LINUX = 15 # this is the max name size, excluding the null byte.
def _doexec(*args, **kwargs):
@@ -76,8 +79,16 @@ def _install_tap_linux(tap_name, mtu_value=None):
pipe.wait()
+def _make_linux_mirror_name(interface_name):
+ if len(interface_name) > IFNAMSIZ_LINUX - 2:
+ return "ovsmi%06d" % randint(1, 999999)
+ return "mi%s" % interface_name
+
+
_make_taps['linux'] = _install_tap_linux
_make_taps['linux2'] = _install_tap_linux
+_make_mirror_name['linux'] = _make_linux_mirror_name
+_make_mirror_name['linux2'] = _make_linux_mirror_name
def username():
@@ -406,7 +417,10 @@ def main():
print("TCPDUMP Args: %s" % ' '.join(tcpdargs))
ovsdb = OVSDB(db_sock)
- mirror_interface = mirror_interface or "mi%s" % interface
+ if mirror_interface is None:
+ mirror_interface = "mi%s" % interface
+ if sys.platform in _make_mirror_name:
+ mirror_interface = _make_mirror_name[sys.platform](interface)
if sys.platform in _make_taps and \
mirror_interface not in netifaces.interfaces():
--
2.9.5
More information about the dev
mailing list