@@ -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 ) {
0 commit comments