Use ETH_HLEN instead and introduce two new macros: GENEVE_IPV4_HLEN
and GENEVE_IPV6_HLEN that include Ethernet header length, corresponded
IP header length and GENEVE_BASE_HLEN.

Signed-off-by: Alexey Kodanev <[email protected]>
---
 drivers/net/geneve.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index 45acdc9..b650f84 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -36,6 +36,8 @@
 
 #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);
        }
-- 
1.8.3.1

Reply via email to