From 12d9d9434bfbd375c518d5b1f0397905d900d5d4 Mon Sep 17 00:00:00 2001
From: Guillaume Valadon <guillaume@valadon.net>
Date: Mon, 11 May 2015 16:00:37 +0200
Subject: [PATCH] IPv6 - when the UDP checksum is 0, set it to 0xffff

--HG--
branch : Issue #5116 - IPv6 & UDP.chksum == 0
---
 scapy/layers/inet.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py
index 16471254..8a82dc7a 100644
--- a/scapy/layers/inet.py
+++ b/scapy/layers/inet.py
@@ -517,6 +517,9 @@ class UDP(Packet):
                 p = p[:6]+struct.pack("!H", ck)+p[8:]
             elif isinstance(self.underlayer, scapy.layers.inet6.IPv6) or isinstance(self.underlayer, scapy.layers.inet6._IPv6ExtHdr):
                 ck = scapy.layers.inet6.in6_chksum(socket.IPPROTO_UDP, self.underlayer, p)
+                # According to RFC2460 if the result checksum is 0, it should be set to 0xFFFF
+                if ck == 0:
+                    ck = 0xFFFF
                 p = p[:6]+struct.pack("!H", ck)+p[8:]
             else:
                 warning("No IP underlayer to compute checksum. Leaving null.")
-- 
GitLab