Skip to content

Commit da4171e

Browse files
committed
EthernetFragmentFcs*: Fixed issue #1020, fix provided by HannHank.
The mCRC has to be calculated cumulatively including all bytes up to the current fragment. See the issue for more details.
1 parent ee7ca08 commit da4171e

2 files changed

Lines changed: 2 additions & 4 deletions

File tree

src/inet/linklayer/ethernet/modular/EthernetFragmentFcsChecker.cc

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,9 @@ bool EthernetFragmentFcsChecker::checkComputedChecksum(const Packet *packet, Che
2020
{
2121
auto data = packet->peekDataAsBytes();
2222
auto bytes = data->getBytes();
23-
uint64_t fragmentFcs = ethernetFcs(bytes.data(), packet->getByteLength() - 4);
2423
auto& fragmentTag = packet->getTag<FragmentTag>();
2524
currentFragmentCompleteFcs = ethernetFcs(bytes.data(), packet->getByteLength() - 4, fragmentTag->getFirstFragment() ? 0 : lastFragmentCompleteFcs);
26-
bool lastFragment = receivedFcs != (fragmentFcs ^ 0xFFFF0000);
27-
return !lastFragment || receivedFcs == currentFragmentCompleteFcs;
25+
return receivedFcs == currentFragmentCompleteFcs || receivedFcs == (currentFragmentCompleteFcs ^ 0xFFFF0000);
2826
}
2927

3028
void EthernetFragmentFcsChecker::processPacket(Packet *packet)

src/inet/linklayer/ethernet/modular/EthernetFragmentFcsInserter.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ uint64_t EthernetFragmentFcsInserter::computeComputedChecksum(const Packet *pack
2525
if (fragmentTag->getLastFragment())
2626
return currentFragmentCompleteFcs;
2727
else
28-
return ethernetFcs(bytes.data(), bytes.size()) ^ 0xFFFF0000;
28+
return currentFragmentCompleteFcs ^ 0xFFFF0000;
2929
}
3030

3131
void EthernetFragmentFcsInserter::processPacket(Packet *packet)

0 commit comments

Comments
 (0)