mirror of
https://github.com/openvswitch/ovs
synced 2025-10-19 14:37:21 +00:00
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>
This commit is contained in:
committed by
Jesse Gross
parent
c25ea53406
commit
26fd9d16d3
@@ -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;
|
||||
|
@@ -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,
|
||||
|
@@ -207,15 +207,6 @@ static void lisp_build_header(const struct vport *vport,
|
||||
|
||||
tunnel_id_to_instance_id(tun_key->tun_id, &lisph->u2.word2.instance_id[0]);
|
||||
lisph->u2.word2.locator_status_bits = 1;
|
||||
|
||||
/*
|
||||
* 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. */
|
||||
|
@@ -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. */
|
||||
|
Reference in New Issue
Block a user