> On 5 May 2015, at 02:25, Ben Pfaff <b...@nicira.com> wrote:
> 
> CC: 张伟 <zhang...@126.com>
> Signed-off-by: Ben Pfaff <b...@nicira.com>
> ---
> AUTHORS |  1 +
> FAQ.md  | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 81 insertions(+)
> 
> diff --git a/AUTHORS b/AUTHORS
> index cff99e6..9db112d 100644
> --- a/AUTHORS
> +++ b/AUTHORS
> @@ -360,6 +360,7 @@ likunyun                kunyu...@hotmail.com
> rahim entezari          rahim.entez...@gmail.com
> 冯全树(Crab)            fqs...@126.com
> 胡靖飞                  hujingfei...@msn.com
> +张伟                     zhang...@126.com
> 
> Thanks to all Open vSwitch contributors.  If you are not listed above
> but believe that you should be, please write to dev@openvswitch.org.
> diff --git a/FAQ.md b/FAQ.md
> index 21d4e7a..3d4ce6f 100644
> --- a/FAQ.md
> +++ b/FAQ.md
> @@ -823,6 +823,86 @@ A: Open vSwitch wasn't able to create the port.  Check 
> the
>    ovs-vsctl will immediately report when there is an issue creating a
>    port.
> 
> +### Q: I created a tap device tap0, configured an IP address on it, and
> +    added it to a bridge, like this:
> +
> +        tunctl -t tap0
> +     ifconfig tap0 192.168.0.123
> +     ovs-vsctl add-br br0
> +     ovs-vsctl add-port br0 tap0
> +
> +    I expected that I could then use this IP address to contact other
> +    hosts on the network, but it doesn't work.  Why not?
> +
> +A: The short answer is that this is a misuse of a "tap" device.  Use
> +   an "internal" device implemented by Open vSwitch, which works
> +   differently and is designed for this use.  To solve this problem
> +   with an internal device, instead run:
> +
> +       ovs-vsctl add-br br0
> +       ovs-vsctl add-port br0 int0 -- set Interface int0 type=internal
> +       ifconfig int0 192.168.0.123
> +
> +   Even more simply, you can take advantage of the internal port that
> +   every bridge has under the name of the bridge:
> +
> +       ovs-vsctl add-br br0
> +       ifconfig br0 192.168.0.123
> +
> +   In more detail, a "tap" device is an interface between the Linux
> +   (or *BSD) network stack and a user program that opens it as a
> +   socket.  When the "tap" device transmits a packet, it appears in
> +   the socket opened by the userspace program.  Conversely, when the
> +   userspace program writes to the "tap" socket, the kernel TCP/IP
> +   stack processes the packet as if it had been received by the "tap"
> +   device.
> +
> +   Consider the configuration above.  Given this configuration, if you
> +   "ping" an IP address in the 192.168.0.x subnet, the Linux kernel
> +   routing stack will transmit an ARP on the tap0 device.  Open
> +   vSwitch userspace treats "tap" devices just like any other network
> +   device; that is, it doesn't open them as "tap" sockets.  That means
> +   that the ARP packet will simply get dropped.
> +
> +   You might wonder why the Open vSwitch kernel module doesn't
> +   intercept the ARP packet and bridge it.  After all, Open vSwitch
> +   intercepts packets on other devices.  The answer is that Open
> +   vSwitch only intercepts *received* packets, but this is a packet
> +   being transmitted.  The same thing happens for all other types of
> +   network devices, except for Open vSwitch "internal" ports.  If you,
> +   for example, add a physical Ethernet port to an OVS bridge,
> +   configure an IP address on a physical Ethernet port, and then issue
> +   a "ping" to an address in that subnet, the same thing happens: an
> +   ARP gets transmitted on the physical Ethernet port and Open vSwitch
> +   never sees it.  (You should not do that, as documented at the
> +   beginning of this section.)
> +
> +   It can make sense to add a "tap" device to an Open vSwitch bridge,
> +   if some userspace program (other than Open vSwitch) has opened the
> +   tap socket.  This is the case, for example, if the "tap" device was
> +   created by KVM (or QEMU) to simulate a virtual NIC.  In such a
> +   case, when OVS bridges a packet to the "tap" device, the kernel
> +   forwards that packet to KVM in userspace, which passes it along to
> +   the VM, and in the other direction, when the VM sends a packet, KVM
> +   writes it to the "tap" socket, which causes OVS to receive it and
> +   bridge it to the other OVS ports.  Please note that in such a case
> +   no IP address is configured on the "tap" device (there is normally
> +   an IP address configured in the virtual NIC inside the VM, but this
> +   is not visible to the host Linux kernel or to Open vSwitch).

I would also add that, in the above case, the interface type in OVS
should be "system" and not "tap" (please, correct me if I'm wrong).
I believe this confusion led to Debian bug #764843 and #764847.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=764843
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=764847

What do you think?

Daniele

> +
> +   There is one special case in which Open vSwitch does directly read
> +   and write "tap" sockets.  This is an implementation detail of the
> +   Open vSwitch userspace switch, which implements its "internal"
> +   ports as Linux (or *BSD) "tap" sockets.  In such a userspace
> +   switch, OVS receives packets sent on the "tap" device used to
> +   implement an "internal" port by reading the associated "tap"
> +   socket, and bridges them to the rest of the switch.  In the other
> +   direction, OVS transmits packets bridged to the "internal" port by
> +   writing them to the "tap" socket, causing them to be processed by
> +   the kernel TCP/IP stack as if they had been received on the "tap"
> +   device.  Users should not need to be concerned with this
> +   implementation detail.
> +
> 
> Quality of Service (QoS)
> ------------------------
> -- 
> 2.1.3
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailman_listinfo_dev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=SmB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=WdtOHAf129der9a9Xr2sRo9YZN5hhfYvHd_jR3oRDn4&s=-PMMwW3lqO0roNz-IfIm4dKscWrMVwGbBvVzbDmq5_U&e=
>  

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to