aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarno Rajahalme <jarno.rajahalme@nsn.com>2013-03-25 21:03:37 +0200
committerJesse Gross <jesse@nicira.com>2013-03-26 18:26:46 -0700
commitbe8b93b0bcfdd91a34f6aee575cd608d9c2bff9e (patch)
treea8142445fc3b6b4d4e42b638963e583e14188353
parent74a3c102eaf45a39e145a2a8707cde30ed500951 (diff)
datapath: Factor out common code from *_build_header() to ovs_tnl_send().
Signed-off-by: Jarno Rajahalme <jarno.rajahalme@nsn.com> Signed-off-by: Jesse Gross <jesse@nicira.com> Conflicts: datapath/vport-lisp.c
-rw-r--r--datapath/tunnel.c9
-rw-r--r--datapath/vport-gre.c10
-rw-r--r--datapath/vport-vxlan.c9
3 files changed, 9 insertions, 19 deletions
diff --git a/datapath/tunnel.c b/datapath/tunnel.c
index 0f44b825..1003bc70 100644
--- a/datapath/tunnel.c
+++ b/datapath/tunnel.c
@@ -280,6 +280,15 @@ int ovs_tnl_send(struct vport *vport, struct sk_buff *skb)
/* Push Tunnel header. */
tnl_vport->tnl_ops->build_header(vport, skb, tunnel_hlen);
+ /*
+ * Allow our local IP stack to fragment the outer packet even
+ * if the DF bit is set as a last resort. We also need to
+ * force selection of an IP ID here because Linux will
+ * otherwise leave it at 0 if the packet originally had DF set.
+ */
+ skb->local_df = 1;
+ __ip_select_ident(ip_hdr(skb), skb_dst(skb), 0);
+
/* Push IP header. */
iph = ip_hdr(skb);
iph->version = 4;
diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c
index c252dcfd..40b96cf6 100644
--- a/datapath/vport-gre.c
+++ b/datapath/vport-gre.c
@@ -95,8 +95,6 @@ static void __gre_build_header(struct sk_buff *skb,
__be32 *options = (__be32 *)(skb_network_header(skb) + tunnel_hlen
- GRE_HEADER_SECTION);
struct gre_base_hdr *greh = (struct gre_base_hdr *) skb_transport_header(skb);
- struct dst_entry *dst = skb_dst(skb);
-
greh->protocol = htons(ETH_P_TEB);
greh->flags = 0;
@@ -121,14 +119,6 @@ static void __gre_build_header(struct sk_buff *skb,
skb->len - skb_transport_offset(skb),
0));
}
- /*
- * Allow our local IP stack to fragment the outer packet even if the
- * DF bit is set as a last resort. We also need to force selection of
- * an IP ID here because Linux will otherwise leave it at 0 if the
- * packet originally had DF set.
- */
- skb->local_df = 1;
- __ip_select_ident(ip_hdr(skb), dst, 0);
}
static void gre_build_header(const struct vport *vport,
diff --git a/datapath/vport-vxlan.c b/datapath/vport-vxlan.c
index 9f8874ad..1850fc29 100644
--- a/datapath/vport-vxlan.c
+++ b/datapath/vport-vxlan.c
@@ -106,15 +106,6 @@ static void vxlan_build_header(const struct vport *vport,
vxh->vx_flags = htonl(VXLAN_FLAGS);
vxh->vx_vni = htonl(be64_to_cpu(tun_key->tun_id) << 8);
-
- /*
- * Allow our local IP stack to fragment the outer packet even if the
- * DF bit is set as a last resort. We also need to force selection of
- * an IP ID here because Linux will otherwise leave it at 0 if the
- * packet originally had DF set.
- */
- skb->local_df = 1;
- __ip_select_ident(ip_hdr(skb), skb_dst(skb), 0);
}
/* Called with rcu_read_lock and BH disabled. */