Aaron Conole <[email protected]> writes:
> Hi Bhanu,
>
> "Bodireddy, Bhanuprakash" <[email protected]> writes:
>
>> Hi,
>>
>>
>>
>> ovs-tcpdump throws the below error when trying to capture packets on one of
>> the
>> vhostuserports.
>>
>>
>>
>> $ ovs-tcpdump -i dpdkvhostuser0
>>
>> ERROR: Please create an interface called `midpdkvhostuser0`
>>
>> See your OS guide for how to do this.
>>
>> Ex: ip link add midpdkvhostuser0 type veth peer name midpdkvhostuser02
>>
>>
>>
>> $ ip link add midpdkvhostuser0 type veth peer name midpdkvhostuser02
>>
>> Error: argument "midpdkvhostuser0" is wrong: "name" too long
>>
>>
>>
>> To get around this issue, I have to pass ‘—mirror-to’ option as below.
>>
>>
>>
>> $ ovs-tcpdump -i dpdkvhostuser0 -XX --mirror-to vh0
>>
>>
>>
>> Is this due to the length of the port name? Would be nice to fix this issue.
>
> Thanks for the detailed write up.
>
> It is related to the mirror port name length. The mirror port is bound
> by IFNAMSIZ restriction, so it must be 15 characters + nul, and
> midpdkvhostuser0 would be 16 + nul. This is a linux specific
> restriction, and it won't be changed because it is very much a well
> established UAPI (and changing it will have implications on code not
> able to deal with larger sized name buffers).
>
> I'm not sure how best to fix it. My concession was the mirror-to
> option. Perhaps there's a better way?
Hi Bhanu, I've been thinking about this a bit more. How about something
like the following patch?
If you think it's acceptable, I'll submit it formally.
---
diff --git a/utilities/ovs-tcpdump.in b/utilities/ovs-tcpdump.in
index 6718c77..76e8a7b 100755
--- a/utilities/ovs-tcpdump.in
+++ b/utilities/ovs-tcpdump.in
@@ -18,6 +18,7 @@ import fcntl
import os
import pwd
+import random.randint
import struct
import subprocess
import sys
@@ -39,6 +40,7 @@ except Exception:
tapdev_fd = None
_make_taps = {}
+_make_mirror_name = {}
def _doexec(*args, **kwargs):
@@ -76,8 +78,16 @@ def _install_tap_linux(tap_name, mtu_value=None):
pipe.wait()
+def _make_linux_mirror_name(interface_name):
+ if interface_name.length() > 13:
+ return "ovsmi%06d" % random.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 +416,7 @@ def main():
print("TCPDUMP Args: %s" % ' '.join(tcpdargs))
ovsdb = OVSDB(db_sock)
- mirror_interface = mirror_interface or "mi%s" % interface
+ mirror_interface = mirror_interface or _make_mirror_name(interface)
if sys.platform in _make_taps and \
mirror_interface not in netifaces.interfaces():
---
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev