+ #
+ # Send checksum offload frames
+ #
+ p40 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
+ IP(src=self.pg2.remote_ip4, dst=self.pg0.remote_ip4,
+ flags='DF') /
+ TCP(sport=1234, dport=1234) /
+ Raw(b'\xa5' * 1460))
+
+ rxs = self.send_and_expect(self.pg2, 100*[p40], self.pg0)
+
+ for rx in rxs:
+ self.assertEqual(rx[Ether].src, self.pg0.local_mac)
+ self.assertEqual(rx[Ether].dst, self.pg0.remote_mac)
+ self.assertEqual(rx[IP].src, self.pg2.remote_ip4)
+ self.assertEqual(rx[IP].dst, self.pg0.remote_ip4)
+ payload_len = rx[IP].len - 20 - 20
+ self.assert_ip_checksum_valid(rx)
+ self.assert_tcp_checksum_valid(rx)
+ self.assertEqual(payload_len, len(rx[Raw]))
+
+ p60 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
+ IPv6(src=self.pg2.remote_ip6, dst=self.pg0.remote_ip6) /
+ TCP(sport=1234, dport=1234) /
+ Raw(b'\xa5' * 1440))
+
+ rxs = self.send_and_expect(self.pg2, 100*[p60], self.pg0)
+
+ for rx in rxs:
+ self.assertEqual(rx[Ether].src, self.pg0.local_mac)
+ self.assertEqual(rx[Ether].dst, self.pg0.remote_mac)
+ self.assertEqual(rx[IPv6].src, self.pg2.remote_ip6)
+ self.assertEqual(rx[IPv6].dst, self.pg0.remote_ip6)
+ payload_len = rx[IPv6].plen - 20
+ self.assert_tcp_checksum_valid(rx)
+ self.assertEqual(payload_len, len(rx[Raw]))
+