"Bodireddy, Bhanuprakash" <bhanuprakash.bodire...@intel.com> writes:

>>Aaron Conole <acon...@redhat.com> writes:
>>
>>> Hi Bhanu,
>>>
>>> "Bodireddy, Bhanuprakash" <bhanuprakash.bodire...@intel.com> 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.
>
> Hi Aaron,
>
> I am on fedora and applied the patch but couldn't verify the fix as I get the 
> below error.
>
> Traceback (most recent call last):
>   File "./utilities/ovs-tcpdump", line 21, in <module>
>     import random.randint
> ImportError: No module named randint
>
> When I slightly change the code to
>
> -import random.randint
> + from random import randint
> ...
> -return "ovsmi%06d" % random.randint(1, 999999)
> +return "ovsmi%06d" % randint(1, 999999)
>
> I get below error
> Traceback (most recent call last):
>   File "./utilities/ovs-tcpdump", line 478, in <module>
>     main()
>   File "./utilities/ovs-tcpdump", line 419, in main
>     mirror_interface = mirror_interface or _make_mirror_name(interface)
> TypeError: 'dict' object is not callable
>
> Why is this so?
>
> - Bhanuprakash.
>

Ugh.  Last time I try to be a hero and write python code without at
least a single try.  I'll just submit it formally after quick testing.
Standby.

>>---
>>
>>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
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to