Skip to content

Commit f3a9886

Browse files
committed
TCP/UDP checksum in imported PCAP fix
1 parent e09290d commit f3a9886

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

src/main/java/com/exalttech/trex/ui/views/importPcap/PacketUpdater.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,32 @@ public Packet updatePacketSrcDst(Packet packet) {
7373
}
7474
packet = updateSrcAddress(packet);
7575
packet = updateDstAddress(packet);
76+
packet = fixL3L4Checksums(packet);
7677
}
7778

7879
return packet;
7980
}
8081

82+
private Packet fixL3L4Checksums(Packet packet) {
83+
Packet.Builder builder = packet.getBuilder();
84+
builder.get(IpV4Packet.Builder.class).correctChecksumAtBuild(true);
85+
86+
TcpPacket.Builder tcpBuilder = builder.get(TcpPacket.Builder.class);
87+
if (tcpBuilder != null) {
88+
tcpBuilder.srcAddr(packet.get(IpV4Packet.class).getHeader().getSrcAddr());
89+
tcpBuilder.dstAddr(packet.get(IpV4Packet.class).getHeader().getDstAddr());
90+
tcpBuilder.correctChecksumAtBuild(true);
91+
}
92+
93+
UdpPacket.Builder udpBuilder = builder.get(UdpPacket.Builder.class);
94+
if (udpBuilder != null) {
95+
udpBuilder.srcAddr(packet.get(IpV4Packet.class).getHeader().getSrcAddr());
96+
udpBuilder.dstAddr(packet.get(IpV4Packet.class).getHeader().getDstAddr());
97+
udpBuilder.correctChecksumAtBuild(true);
98+
}
99+
return builder.build();
100+
}
101+
81102
/**
82103
* Initialize default source/destination address according to first packet
83104
*
@@ -164,7 +185,6 @@ private Packet updateSrcAddress(Packet packet) {
164185
} else {
165186
builder.get(IpV4Packet.Builder.class).dstAddr(modifiedAddress);
166187
}
167-
builder.get(IpV4Packet.Builder.class).correctChecksumAtBuild(true);
168188
packet = builder.build();
169189
}
170190

@@ -187,7 +207,6 @@ private Packet updateDstAddress(Packet packet) {
187207
} else {
188208
builder.get(IpV4Packet.Builder.class).srcAddr(modifiedAddress);
189209
}
190-
builder.get(IpV4Packet.Builder.class).correctChecksumAtBuild(true);
191210
packet = builder.build();
192211
}
193212
} catch (Exception ex) {

src/main/java/com/exalttech/trex/ui/views/streams/builder/VMInstructionBuilder.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,20 @@
2626
* @author Georgekh
2727
*/
2828
public class VMInstructionBuilder {
29+
public enum ChecksumFixHwCs {
30+
L4_TYPE_UDP(11),
31+
L4_TYPE_TCP(13),
32+
L4_TYPE_IP(17);
33+
34+
private int code;
35+
ChecksumFixHwCs(int code) {
36+
this.code = code;
37+
}
2938

39+
public int getCode() {
40+
return this.code;
41+
}
42+
}
3043
boolean isAddFixIPV4Checksum = false;
3144
String splitByVar = "";
3245
int vmCacheSize = 0;
@@ -142,8 +155,12 @@ private void updateVMCacheSize(String count) {
142155
public List<Object> addChecksumInstruction() {
143156
ArrayList<Object> vmInstructionList = new ArrayList<>();
144157
LinkedHashMap<String, Object> checksumInstruction = new LinkedHashMap<>();
145-
checksumInstruction.put("pkt_offset", isTaggedVlan ? 18 : 14);
146-
checksumInstruction.put("type", "fix_checksum_ipv4");
158+
int l3Offset = isTaggedVlan ? 18 : 14;
159+
int l4Offset = l3Offset + 20;
160+
checksumInstruction.put("type", "fix_checksum_hw");
161+
checksumInstruction.put("l2_len", l3Offset);
162+
checksumInstruction.put("l3_len", l4Offset);
163+
checksumInstruction.put("l4_type", ChecksumFixHwCs.L4_TYPE_IP.getCode());
147164
vmInstructionList.add(checksumInstruction);
148165

149166
return vmInstructionList;

0 commit comments

Comments
 (0)