Repository navigation
common: add: a PACKET_TOO_BIG packet drop reason - #1360
Open
adamgeorge309 wants to merge 1 commit into
Open
adamgeorge309 wants to merge 1 commit into
adamgeorge309 wants to merge 1 commit into
Conversation
PacketDropReason had no value for a datagram that is larger than the Maximum Transmission Unit (MTU) of the next link and may not be fragmented, so Ipv4 (Don't Fragment flag set, no reason set) and Mpls (a labeled datagram with that flag, Request for Comments (RFC) 3032 Section 3.4) reported OTHER_PACKET_DROP, and Ipv4 counted these drops in packetDropUndefined together with every drop that sets no reason. PacketDropReason gains PACKET_TOO_BIG = 16, and ResultFilters registers packetDropReasonIsPacketTooBig. Ipv4::fragmentAndSend() and Mpls report the new reason, and Ipv4.ned records packetDropPacketTooBig like its other per-reason statistics. tests/module/IPv4_dont_fragment_drop_reason.test sends three datagrams with a 1000-byte payload with the Don't Fragment flag through a router whose next link has an MTU of 576 bytes, and checks that the router's packetDropPacketTooBig counts 3 and packetDropUndefined 0; before this commit, packetDropUndefined counted 3. No fingerprint changes. Statistical baselines change: every Ipv4 module records the new scalars, and the drops move from packetDropUndefined to packetDropPacketTooBig in examples/inet/tcp_pmtud and examples/quic/dplpmtud. Change: src.common.PacketDropReason | behavior.add | test statistical whatsnew
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PacketDropReasongainsPACKET_TOO_BIG = 16, for a datagram that is larger than the Maximum Transmission Unit (MTU) of the next link and may not be fragmented.Ipv4andMplsreport it where they reportedOTHER_PACKET_DROP, andIpv4records it in a new statistic,packetDropPacketTooBig.Risk: statistical results change.
Ipv4'spacketDropUndefinedno longer counts these drops, and everyIpv4module records two new scalars (packetDropPacketTooBig:countand:sum(packetBytes)). No fingerprint changes.Closes #1359
One commit:
common: add: a PACKET_TOO_BIG packet drop reason.The problem
On master,
Ipv4::fragmentAndSend()(src/inet/networklayer/ipv4/Ipv4.cc:980-989) drops a datagram with the Don't Fragment (DF) flag that does not fit the MTU, and emitspacketDroppedwithout setting a reason, so the reason isOTHER_PACKET_DROP.Mpls(Multiprotocol Label Switching,src/inet/networklayer/mpls/Mpls.cc:407-418) setsOTHER_PACKET_DROPexplicitly for the same case with a label stack (Request for Comments (RFC) 3032 Section 3.4).Ipv4.nedcounts these drops inpacketDropUndefined, together with every drop that sets no reason.The change
src/inet/common/Simsignals.msg:PACKET_TOO_BIG = 16, appended, so no existing value is renumbered.src/inet/common/ResultFilters.cc:packetDropReasonIsPacketTooBig, registered next to the other reason filters.Ipv4::fragmentAndSend()setsPACKET_TOO_BIG;MplsreplacesOTHER_PACKET_DROPwith it. No test covers theMplssite, andMpls.nedrecords no statistic onpacketDropped.Ipv4.ned:@statistic[packetDropPacketTooBig], with the samerecordandinterpolationmodeas the other per-reason statistics.WHATSNEW: entry 50 under "Notable backward incompatible changes", becausepacketDropUndefinedresults change.PacketDropVisualizerresolves the reason name throughcEnum(PacketDropVisualizerBase.cc), so%sshowsPACKET_TOO_BIGwithout a code change;%rshows16.No C++ interface, Network Description (NED) parameter, message field or feature descriptor changes; the enum gains one value, and
Ipv4.nedone statistic.Not addressed here:
Mpls.neddeclares neither@signal[packetDropped]nor a statistic, althoughMpls.ccemits the signal;Ipv6emits nopacketDroppedfor this case on master (pull request #1284 adds it).Verification
Release build (
make MODE=releasein the root andtests/module/lib), each suite run on masterbba1db4c81and with this change.New module test
tests/module/IPv4_dont_fragment_drop_reason.test:hostA --- router --- hostB, the router's link to hostB has an MTU of 576 bytes (**.router.eth[1].mac.mtu = 576B), and hostA'sUdpBasicAppsends three datagrams with a 1000-byte payload withdontFragment = true. It checks that the router'sipv4.iprecordspacketDropPacketTooBig:count 3andpacketDropUndefined:count 0. On master's source the router recordspacketDropUndefined:count 3and the test fails.tests/fingerprint: ./fingerprinttest -s -F tyftests/module: inet_run_module_tests -m release --no-build -l ERROROf the 289 module failures on master, 274 are
tcp_*tests and 15 areConvolutionalCoder12,ConvolutionalCoder34,DimensionalMediumAnalogModel_PrintAttenuation_1,EtherHost_lifecycle,ExternalProcess_3,Ieee80211BitDomain,Ieee80211BlockAckVariant_1,Ieee80211SymbolDomain,Ieee8021d-Rstp,Ieee8021d-Stp,IPv6_packet_too_big,LogNormalShadowing_Correlated_4,MIPv6_tcp_handover,PacketGate_1,UDPSocket_1. The 5 fingerprint failures are rows ofmipv6-refactoring.csvwhose recorded~tNlbfingerprints are stale on master; the 62 errors are configurations whose optional features are not built.Statistical baselines (statistics repository, origin/master): the routers of
examples/inet/tcp_pmtud(PmtudEnabled15,PmtudProbe30) andexamples/quic/dplpmtud(6 configurations, 1 to 18) record nonzeropacketDropUndefinedcounts. With this change, all eight configurations record the same counts aspacketDropPacketTooBigandpacketDropUndefined0. The other baselines with nonzeropacketDropUndefinedcounts,examples/inet/multicastandexamples/pim/iptv, record other drops and do not change. These baselines, and every baseline with anIpv4module (new scalars), need re-recording after merge.Gates:
check-pull-request.sh --base origin/master(commits, classification, includes, NED parameters, description),check-source-seals.sh --base origin/masterandcheck-architecture.shonsrc/inet/networklayer/ipv4andsrc/inet/networklayer/mplspass.check-architecture.sh src/inet/commonreports include violations inResultFilters.ccand other files; this commit adds no include.Relationship to other pull requests
Ipv6emitpacketDroppedwithOTHER_PACKET_DROPwhen it answers with Packet Too Big. Whichever merges later can switch that site toPACKET_TOO_BIG.WHATSNEW; whichever merges later renumbers.