From d0c5c14ad8ad262c4be57b7fd845654b2dd281d8 Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Fri, 29 Mar 2013 12:50:57 +0900 Subject: lib/packet/packet_utils: improve checksum padding IP checksum needs padding. Move padding logic into checksum from caller. Signed-off-by: Isaku Yamahata Signed-off-by: FUJITA Tomonori --- ryu/lib/packet/icmp.py | 2 -- ryu/lib/packet/icmpv6.py | 2 -- ryu/lib/packet/packet_utils.py | 3 +++ ryu/lib/packet/tcp.py | 2 -- ryu/lib/packet/udp.py | 2 -- 5 files changed, 3 insertions(+), 8 deletions(-) diff --git a/ryu/lib/packet/icmp.py b/ryu/lib/packet/icmp.py index a7d7656e..6fb7ebfa 100644 --- a/ryu/lib/packet/icmp.py +++ b/ryu/lib/packet/icmp.py @@ -72,8 +72,6 @@ class icmp(packet_base.PacketBase): hdr += self.data if self.csum == 0: - if len(hdr) % 2: - hdr += '\0' self.csum = socket.htons(packet_utils.checksum(hdr)) struct.pack_into('!H', hdr, 2, self.csum) diff --git a/ryu/lib/packet/icmpv6.py b/ryu/lib/packet/icmpv6.py index f143662f..f0aef163 100644 --- a/ryu/lib/packet/icmpv6.py +++ b/ryu/lib/packet/icmpv6.py @@ -107,8 +107,6 @@ class icmpv6(packet_base.PacketBase): ph = struct.pack('!16s16sBBH', prev.src, prev.dst, 0, prev.nxt, length) f = ph + hdr + payload - if len(f) % 2: - f += '\x00' self.csum = socket.htons(packet_utils.checksum(f)) struct.pack_into('!H', hdr, 2, self.csum) diff --git a/ryu/lib/packet/packet_utils.py b/ryu/lib/packet/packet_utils.py index d9714f0d..6584caa3 100644 --- a/ryu/lib/packet/packet_utils.py +++ b/ryu/lib/packet/packet_utils.py @@ -20,6 +20,9 @@ def carry_around_add(a, b): def checksum(data): + if len(data) % 2: + data += '\x00' + s = 0 for i in range(0, len(data), 2): w = data[i] + (data[i + 1] << 8) diff --git a/ryu/lib/packet/tcp.py b/ryu/lib/packet/tcp.py index bd3442d7..99182c39 100644 --- a/ryu/lib/packet/tcp.py +++ b/ryu/lib/packet/tcp.py @@ -72,8 +72,6 @@ class tcp(packet_base.PacketBase): ph = struct.pack('!16s16sBBH', prev.src, prev.dst, 0, 6, length) f = ph + h + payload - if len(f) % 2: - f += '\x00' self.csum = socket.htons(packet_utils.checksum(f)) struct.pack_into('!H', h, 16, self.csum) return h diff --git a/ryu/lib/packet/udp.py b/ryu/lib/packet/udp.py index c4fe5297..addf436b 100644 --- a/ryu/lib/packet/udp.py +++ b/ryu/lib/packet/udp.py @@ -48,8 +48,6 @@ class udp(packet_base.PacketBase): ph = struct.pack('!IIBBH', prev.src, prev.dst, 0, 17, self.total_length) f = ph + h + payload - if len(f) % 2: - f += '\x00' self.csum = socket.htons(packet_utils.checksum(f)) h = struct.pack(udp._PACK_STR, self.src_port, self.dst_port, self.total_length, self.csum) -- cgit v1.2.3