|
@@ -36,6 +36,8 @@ MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
|
|
|
|
|
|
#define GENEVE_VER 0
|
|
|
#define GENEVE_BASE_HLEN (sizeof(struct udphdr) + sizeof(struct genevehdr))
|
|
|
+#define GENEVE_IPV4_HLEN (ETH_HLEN + sizeof(struct iphdr) + GENEVE_BASE_HLEN)
|
|
|
+#define GENEVE_IPV6_HLEN (ETH_HLEN + sizeof(struct ipv6hdr) + GENEVE_BASE_HLEN)
|
|
|
|
|
|
/* per-network namespace private data for this module */
|
|
|
struct geneve_net {
|
|
@@ -826,8 +828,8 @@ static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev,
|
|
|
return PTR_ERR(rt);
|
|
|
|
|
|
if (skb_dst(skb)) {
|
|
|
- int mtu = dst_mtu(&rt->dst) - sizeof(struct iphdr) -
|
|
|
- GENEVE_BASE_HLEN - info->options_len - 14;
|
|
|
+ int mtu = dst_mtu(&rt->dst) - GENEVE_IPV4_HLEN -
|
|
|
+ info->options_len;
|
|
|
|
|
|
skb_dst_update_pmtu(skb, mtu);
|
|
|
}
|
|
@@ -872,8 +874,7 @@ static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev,
|
|
|
return PTR_ERR(dst);
|
|
|
|
|
|
if (skb_dst(skb)) {
|
|
|
- int mtu = dst_mtu(dst) - sizeof(struct ipv6hdr) -
|
|
|
- GENEVE_BASE_HLEN - info->options_len - 14;
|
|
|
+ int mtu = dst_mtu(dst) - GENEVE_IPV6_HLEN - info->options_len;
|
|
|
|
|
|
skb_dst_update_pmtu(skb, mtu);
|
|
|
}
|