diff options
author | Jarno Rajahalme <jarno.rajahalme@nsn.com> | 2013-03-25 21:03:37 +0200 |
---|---|---|
committer | Jesse Gross <jesse@nicira.com> | 2013-03-26 18:26:46 -0700 |
commit | be8b93b0bcfdd91a34f6aee575cd608d9c2bff9e (patch) | |
tree | a8142445fc3b6b4d4e42b638963e583e14188353 | |
parent | 74a3c102eaf45a39e145a2a8707cde30ed500951 (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.c | 9 | ||||
-rw-r--r-- | datapath/vport-gre.c | 10 | ||||
-rw-r--r-- | datapath/vport-vxlan.c | 9 |
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. */ |