|
|
| 498 |
return DoNeedFragmentation (station, packet, normally); |
498 |
return DoNeedFragmentation (station, packet, normally); |
| 499 |
} |
499 |
} |
| 500 |
uint32_t |
500 |
uint32_t |
| 501 |
WifiRemoteStationManager::GetNFragments (Ptr<const Packet> packet) |
501 |
WifiRemoteStationManager::GetNFragments (const WifiMacHeader *header, Ptr<const Packet> packet) |
| 502 |
{ |
502 |
{ |
| 503 |
uint32_t nFragments = packet->GetSize () / GetFragmentationThreshold () + 1; |
503 |
uint32_t nFragments = (packet->GetSize () / (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH)); |
|
|
504 |
if ((packet->GetSize () % (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH)) > 0) |
| 505 |
{ |
| 506 |
nFragments++; |
| 507 |
} |
| 504 |
return nFragments; |
508 |
return nFragments; |
| 505 |
} |
509 |
} |
| 506 |
|
510 |
|
|
|
| 509 |
Ptr<const Packet> packet, uint32_t fragmentNumber) |
513 |
Ptr<const Packet> packet, uint32_t fragmentNumber) |
| 510 |
{ |
514 |
{ |
| 511 |
NS_ASSERT (!address.IsGroup ()); |
515 |
NS_ASSERT (!address.IsGroup ()); |
| 512 |
uint32_t nFragment = GetNFragments (packet); |
516 |
uint32_t nFragment = GetNFragments (header, packet); |
| 513 |
if (fragmentNumber >= nFragment) |
517 |
if (fragmentNumber >= nFragment) |
| 514 |
{ |
518 |
{ |
| 515 |
return 0; |
519 |
return 0; |
| 516 |
} |
520 |
} |
| 517 |
if (fragmentNumber == nFragment - 1) |
521 |
if (fragmentNumber == nFragment - 1) |
| 518 |
{ |
522 |
{ |
| 519 |
uint32_t lastFragmentSize = packet->GetSize () % GetFragmentationThreshold (); |
523 |
uint32_t lastFragmentSize = packet->GetSize () % (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH); |
| 520 |
return lastFragmentSize; |
524 |
return lastFragmentSize; |
| 521 |
} |
525 |
} |
| 522 |
else |
526 |
else |
| 523 |
{ |
527 |
{ |
| 524 |
return GetFragmentationThreshold (); |
528 |
return GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH; |
| 525 |
} |
529 |
} |
| 526 |
} |
530 |
} |
| 527 |
uint32_t |
531 |
uint32_t |
|
|
| 529 |
Ptr<const Packet> packet, uint32_t fragmentNumber) |
533 |
Ptr<const Packet> packet, uint32_t fragmentNumber) |
| 530 |
{ |
534 |
{ |
| 531 |
NS_ASSERT (!address.IsGroup ()); |
535 |
NS_ASSERT (!address.IsGroup ()); |
| 532 |
NS_ASSERT (fragmentNumber < GetNFragments (packet)); |
536 |
NS_ASSERT (fragmentNumber < GetNFragments (header, packet)); |
| 533 |
uint32_t fragmentOffset = fragmentNumber * GetFragmentationThreshold (); |
537 |
uint32_t fragmentOffset = fragmentNumber * (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH); |
| 534 |
return fragmentOffset; |
538 |
return fragmentOffset; |
| 535 |
} |
539 |
} |
| 536 |
bool |
540 |
bool |
|
|
| 538 |
Ptr<const Packet> packet, uint32_t fragmentNumber) |
542 |
Ptr<const Packet> packet, uint32_t fragmentNumber) |
| 539 |
{ |
543 |
{ |
| 540 |
NS_ASSERT (!address.IsGroup ()); |
544 |
NS_ASSERT (!address.IsGroup ()); |
| 541 |
bool isLast = fragmentNumber == (GetNFragments (packet) - 1); |
545 |
bool isLast = fragmentNumber == (GetNFragments (header, packet) - 1); |
| 542 |
return isLast; |
546 |
return isLast; |
| 543 |
} |
547 |
} |
| 544 |
WifiMode |
548 |
WifiMode |