[ovs-dev] [PATCH] datapath: set skb->pkt_type to PACKET_OUTGOING when sending encapsulated skb
Isaku Yamahata
yamahata at valinux.co.jp
Wed Jul 17 03:20:47 UTC 2013
set the type of skb to outgoing when encapsulating a packet,
since it changes from the original type to an outgoing packet.
When two tunnel ports created on two OVS bridges on same host and
two ports are the end point of the tunnel, packets are dropped as below.
If a packet has pkt_type of PACKET_OTHERHOST when coming to ovs bridge,
the packet is dropped by ip_rcv() if rules are installed and skb are
forwarded by loopback device.
Packet isn't dropped if flow rule isn't installed in kernel datapath,
OVS_ACTION_ATTR_OUTPUT is used to send the packet.
netns A | root netns | netns B
veth<->veth=ovs bridge=gre<-loop back->gre=ovs bridge=veth<->veth
arp packet ->
pkt_type
BROADCAST------------>ip_rcv()------------------------>
<- arp reply
pkt_type
rule exists
ip_rcv()<-----------------OTHERHOST
drop
<--------------------ip_rcv()<--- PACKET_HOST rule doesn't exists
pass ^ |
| |upcall
| V
OVS_ACTION_ATTR_OUTPUT
ovs-switchd
Cc: Murphy McCauley <murphy.mccauley at gmail.com>
Cc: Jesse Gross <jesse at nicira.com>
Signed-off-by: Isaku Yamahata <yamahata at valinux.co.jp>
---
datapath/tunnel.c | 1 +
datapath/vport-gre.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/datapath/tunnel.c b/datapath/tunnel.c
index ef46a69..b955384 100644
--- a/datapath/tunnel.c
+++ b/datapath/tunnel.c
@@ -298,6 +298,7 @@ int ovs_tnl_send(struct vport *vport, struct sk_buff *skb,
memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
+ skb->pkt_type = PACKET_OUTGOING;
err = ip_local_out(skb);
if (unlikely(net_xmit_eval(err)))
goto next;
diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c
index c74f5fc..604fe94 100644
--- a/datapath/vport-gre.c
+++ b/datapath/vport-gre.c
@@ -175,6 +175,7 @@ static int __send(struct vport *vport, struct sk_buff *skb,
skb->local_df = 1;
+ skb->pkt_type = PACKET_OUTGOING;
return iptunnel_xmit(net, rt, skb, saddr,
OVS_CB(skb)->tun_key->ipv4_dst, IPPROTO_GRE,
OVS_CB(skb)->tun_key->ipv4_tos,
--
1.7.10.4
More information about the dev
mailing list