On 7/30/13 1:47 AM, Pravin B Shelar wrote:
CC: Lori Jakab <loja...@cisco.com>
Signed-off-by: Pravin B Shelar <pshe...@nicira.com>
---
datapath/vport-lisp.c | 48 ++----------------------------------------------
1 files changed, 2 insertions(+), 46 deletions(-)
diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c
index 6e37b2f..847cb39 100644
--- a/datapath/vport-lisp.c
+++ b/datapath/vport-lisp.c
@@ -206,48 +206,6 @@ static void lisp_build_header(const struct vport *vport,
lisph->u2.word2.locator_status_bits = 1;
}
-/**
- * ovs_tnl_rcv - ingress point for generic tunnel code
- *
- * @vport: port this packet was received on
- * @skb: received packet
- * @tos: ToS from encapsulating IP packet, used to copy ECN bits
- *
- * Must be called with rcu_read_lock.
- *
- * Packets received by this function are in the following state:
- * - skb->data points to the inner Ethernet header.
- * - The inner Ethernet header is in the linear data area.
- * - skb->csum does not include the inner Ethernet header.
- * - The layer pointers are undefined.
- */
-static void ovs_tnl_rcv(struct vport *vport, struct sk_buff *skb,
- struct ovs_key_ipv4_tunnel *tun_key)
-{
- struct ethhdr *eh;
-
- skb_reset_mac_header(skb);
- eh = eth_hdr(skb);
-
- if (likely(ntohs(eh->h_proto) >= ETH_P_802_3_MIN))
- skb->protocol = eh->h_proto;
- else
- skb->protocol = htons(ETH_P_802_2);
-
- skb_dst_drop(skb);
- nf_reset(skb);
- skb_clear_rxhash(skb);
- secpath_reset(skb);
- vlan_set_tci(skb, 0);
-
- if (unlikely(compute_ip_summed(skb, false))) {
- kfree_skb(skb);
- return;
- }
-
- ovs_vport_receive(vport, skb, tun_key);
-}
-
/* Called with rcu_read_lock and BH disabled. */
static int lisp_rcv(struct sock *sk, struct sk_buff *skb)
{
@@ -263,13 +221,11 @@ static int lisp_rcv(struct sock *sk, struct sk_buff *skb)
if (unlikely(!lisp_port))
goto error;
- if (unlikely(!pskb_may_pull(skb, LISP_HLEN)))
+ if (iptunnel_pull_header(skb, LISP_HLEN, htons(ETH_P_TEB)))
Why use ETH_P_TEB for the inner_proto ? That will make
iptunnel_pull_header() assume there is an Ethernet header after the LISP
header and try to extract the inner Ethertype. It does not affect
functionality, since we explicitly determine and set it later on, but if
we use an arbitrary value here, we might as well use ETH_P_IP. The
other option would be to determine the inner Ethertype before the
iptunnel_pull_header() call, and use the correct one.
goto error;
lisph = lisp_hdr(skb);
- skb_pull_rcsum(skb, LISP_HLEN);
-
if (lisph->instance_id_present != 1)
key = 0;
else
@@ -301,7 +257,7 @@ static int lisp_rcv(struct sock *sk, struct sk_buff *skb)
ovs_skb_postpush_rcsum(skb, skb->data, ETH_HLEN);
- ovs_tnl_rcv(vport_from_priv(lisp_port), skb, &tun_key);
+ ovs_vport_receive(vport_from_priv(lisp_port), skb, &tun_key);
goto out;
error:
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev