Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Feb 2014 22:14:39 +0100
From:      =?ISO-8859-1?Q?Olivier_Cochard=2DLabb=E9?= <olivier@cochard.me>
To:        "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>, Luigi Rizzo <rizzo@iet.unipi.it>
Subject:   netmap's pkt-gen patch for IP and UDP checksum
Message-ID:  <CA%2Bq%2BTcpWBferCzaYYKh2tsQcAz%2Br64TtYvBrcmozzuRH0EMmKw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
I've found the problem with netmap's pkt-gen when using IP srt/dst or UDP
port range:

The function update_addresses() update the IP src/dst and/or the UDP port
but forgot to update the IP and UDP checksum after these changes: Then only
packets that correspond to the first value of the range are correct, all
other have bad checksum.

Some code is missing after the last comment "// update checksum" at the end
of this function.

I've did a dirty copy/past code from the initialize_packet() function for
fixing this behavior and the problem is gone.

Here is an example with this command-line: pkt-gen  -f tx -l 60 -d
2.1.3.1-2.1.3.10 -s 1.1.3.1-1.1.3.10

Before the patch, on the receiving host, we see lot's of packet with bad
checksum:
19:31:28.029702 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46, bad cksum 31ac (->31a1)!)
    1.1.3.9.0 > 2.1.3.4.0: [bad udp cksum 0x2a23 -> 0x2a18!] UDP, length 18
19:31:28.029704 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46, bad cksum 31ac (->31a3)!)
    1.1.3.10.0 > 2.1.3.1.0: [bad udp cksum 0x2a23 -> 0x2a1a!] UDP, length 18
19:31:28.029705 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46, bad cksum 31ac (->31a6)!)
    1.1.3.4.0 > 2.1.3.4.0: [bad udp cksum 0x2a23 -> 0x2a1d!] UDP, length 18
19:31:28.029706 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46, bad cksum 31ac (->31a4)!)
    1.1.3.7.0 > 2.1.3.3.0: [bad udp cksum 0x2a23 -> 0x2a1b!] UDP, length 18
19:31:28.029706 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46, bad cksum 31ac (->31a1)!)
    1.1.3.6.0 > 2.1.3.7.0: [bad udp cksum 0x2a23 -> 0x2a18!] UDP, length 18
19:31:28.029707 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46, bad cksum 31ac (->319f)!)
    1.1.3.5.0 > 2.1.3.10.0: [bad udp cksum 0x2a23 -> 0x2a16!] UDP, length 18

After the patch on the receiving host, no more bad checksum:
19:33:43.824502 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.9.0 > 2.1.3.2.0: [udp sum ok] UDP, length 18
19:33:43.824502 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.9.0 > 2.1.3.1.0: [udp sum ok] UDP, length 18
19:33:43.824505 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.4.0 > 2.1.3.5.0: [udp sum ok] UDP, length 18
19:33:43.824506 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.6.0 > 2.1.3.3.0: [udp sum ok] UDP, length 18
19:33:43.824507 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.4.0 > 2.1.3.7.0: [udp sum ok] UDP, length 18
19:33:43.824508 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.5.0 > 2.1.3.2.0: [udp sum ok] UDP, length 18
19:33:43.824510 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.4.0 > 2.1.3.8.0: [udp sum ok] UDP, length 18
19:33:43.824511 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.10.0 > 2.1.3.3.0: [udp sum ok] UDP, length 18
19:33:43.824512 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.6.0 > 2.1.3.4.0: [udp sum ok] UDP, length 18
19:33:43.824512 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto UDP
(17), length 46)
    1.1.3.9.0 > 2.1.3.4.0: [udp sum ok] UDP, length 18

The patch is here:
http://www.freebsd.org/cgi/query-pr.cgi?pr=187149

Regards,

Olivier



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CA%2Bq%2BTcpWBferCzaYYKh2tsQcAz%2Br64TtYvBrcmozzuRH0EMmKw>