|
Bugzilla – Full Text Bug Listing |
| Summary: | TCP Socket Fork() fails to copy some parameters, causing connections to close prematurely on retransmit. | ||
|---|---|---|---|
| Product: | ns-3 | Reporter: | l.salameh |
| Component: | internet | Assignee: | natale.patriciello |
| Status: | RESOLVED FIXED | ||
| Severity: | blocker | CC: | l.salameh, natale.patriciello, ns-bugs, tomh, tommaso.pecorella |
| Priority: | P5 | ||
| Version: | ns-3-dev | ||
| Hardware: | All | ||
| OS: | All | ||
| Attachments: | initialize all members | ||
I agree on the analysis, but... how is it possible that this bug wasn't reported before ? I think maybe the change to add dataRetries has been relatively recent, so maybe not many people have been using the top of tree ns-3 to experience it. Mmmm... it seems that there are more variables not copied. E.g.: Time m_minRto; //!< minimum value of the Retransmit timeout Time m_clockGranularity; //!< Clock Granularity used in RTO calc These as well will cause troubles. Changing the bug topic accordingly and handing it over to Natale (he did the TCP refactoring). I have a patch ready for this, to initialize all members of TcpSocket*. However, with valgrind I have many errors in many simulations; I'm trying to find the source. Nat Created attachment 2204 [details]
initialize all members
Patch which initializes all members
Are the valgrind tests passing ? Can we push this or do you want to add a unit testing for this ? (In reply to natale.patriciello from comment #5) > Created attachment 2204 [details] > initialize all members > > Patch which initializes all members No, they aren't, but I think the problem isn't in such patch. This is my list of VALGR failures under current ns-3-dev; they are the same with and without patch:
List of VALGR failures:
aggregation-wifi
angles
animation-interface
aodv-routing-id-cache
attributes
average
basic-data-calculators
basic-energy-harvester
buffer
build-profile
building-position-allocator
buildings-helper
buildings-pathloss-test
buildings-shadowing-test
callback
codel-queue
command-line
config
cosine-antenna-model
csma-system
degrees-radians
devices-mesh
devices-mesh-dot11s
devices-mesh-dot11s-regression
devices-mesh-flame
devices-mesh-flame-regression
devices-point-to-point
devices-uan
devices-wifi
devices-wifi-dcf
devices-wifi-tx-duration
double-probe
drop-tail-queue
epc-gtpu
epc-s1u-downlink
epc-s1u-uplink
eps-tft-classifier
error-model
event-garbage-collector
examples/energy/energy-model-example
examples/error-model/simple-error-model
examples/ipv6/icmpv6-redirect
examples/ipv6/ping6
examples/ipv6/radvd
examples/ipv6/radvd-two-prefix
examples/ipv6/test-ipv6
examples/naming/object-names
examples/realtime/realtime-udp-echo
examples/routing/dynamic-global-routing
examples/routing/global-injection-slash32
examples/routing/global-routing-slash32
examples/routing/mixed-global-routing
examples/routing/simple-alternate-routing
examples/routing/simple-global-routing
examples/routing/simple-routing-ping6
examples/routing/static-routing-slash32
examples/stats/wifi-example-sim
examples/tcp/star
examples/tcp/tcp-large-transfer
examples/tcp/tcp-star-server
examples/tcp/tcp-variants-comparison
examples/tutorial/fifth
examples/tutorial/first
examples/tutorial/fourth
examples/tutorial/hello-simulator
examples/tutorial/second
examples/tutorial/seventh
examples/tutorial/sixth
examples/tutorial/third
examples/udp/udp-echo
examples/wireless/mixed-wireless
examples/wireless/multirate --totalTime=0.3s --rateManager=ns3::AarfcdWifiManager
examples/wireless/multirate --totalTime=0.3s --rateManager=ns3::AmrrWifiManager
examples/wireless/multirate --totalTime=0.3s --rateManager=ns3::CaraWifiManager
examples/wireless/multirate --totalTime=0.3s --rateManager=ns3::IdealWifiManager
examples/wireless/multirate --totalTime=0.3s --rateManager=ns3::MinstrelWifiManager
examples/wireless/multirate --totalTime=0.3s --rateManager=ns3::OnoeWifiManager
examples/wireless/multirate --totalTime=0.3s --rateManager=ns3::RraaWifiManager
examples/wireless/ofdm-ht-validation
examples/wireless/ofdm-validation
examples/wireless/ofdm-vht-validation
examples/wireless/power-adaptation-distance --manager=ns3::AparfWifiManager --outputFileName=aparf --steps=5 --stepsSize=10
examples/wireless/power-adaptation-distance --manager=ns3::ParfWifiManager --outputFileName=parf --steps=5 --stepsSize=10
examples/wireless/wifi-ap --verbose=0
examples/wireless/wifi-simple-adhoc
examples/wireless/wifi-simple-adhoc-grid
examples/wireless/wifi-simple-infra
examples/wireless/wifi-simple-interference
examples/wireless/wifi-wired-bridging
geo-to-cartesian
global-route-manager-impl
global-value
hash
histogram
int64x64
ipv4-address-generator
ipv4-address-helper
ipv4-forwarding
ipv4-fragmentation
ipv4-global-routing
ipv4-header
ipv4-list-routing
ipv4-packet-info-tag
ipv4-protocol
ipv4-raw
ipv4-static-routing
ipv6-address
ipv6-address-generator
ipv6-address-helper
ipv6-dual-stack
ipv6-extension-header
ipv6-forwarding
ipv6-fragmentation
ipv6-list-routing
ipv6-packet-info-tag
ipv6-protocol
ipv6-raw
ipv6-ripng
isotropic-antenna-model
itu-r-1411-los
itu-r-1411-nlos-over-rooftop
kun-2600-mhz
li-ion-energy-source
lr-wpan-ack
lr-wpan-clear-channel-assessment
lr-wpan-collision
lr-wpan-energy-detection
lr-wpan-error-model
lr-wpan-packet
lr-wpan-plme-pd-sap
lr-wpan-spectrum-value-helper
lte-antenna
lte-cell-selection
lte-cqa-ff-mac-scheduler
lte-cqi-generation
lte-downlink-power-control
lte-downlink-sinr
lte-earfcn
lte-epc-e2e-data
lte-handover-delay
lte-handover-target
lte-harq
lte-interference
lte-interference-fr
lte-link-adaptation
lte-mimo
lte-pathloss-model
lte-phy-error-model
lte-rlc-am-e2e
lte-rlc-am-transmitter
lte-rlc-header
lte-rlc-um-e2e
lte-rlc-um-transmitter
lte-rrc
lte-spectrum-value-helper
lte-tdbet-ff-mac-scheduler
lte-test-deactivate-bearer
lte-ue-measurements
lte-ue-measurements-handover
lte-ue-measurements-piecewise-1
lte-ue-measurements-piecewise-2
lte-uplink-power-control
lte-uplink-sinr
lte-x2-handover
lte-x2-handover-measures
mobility
mobility-ns2-trace-helper
mobility-trace
ns3-tcp-loss
ns3-tcp-no-delay
ns3-tcp-socket
ns3-tcp-state
ns3-wifi-interference
ns3-wifi-msdu-aggregator
object
object-name-service
okumura-hata
packet
packet-metadata
packet-socket-apps
packetbb-test-suite
parabolic-antenna-model
pcap-file
power-rate-adaptation-wifi
propagation-loss-model
ptr
rand-cart-around-geo
random-number-generators
random-variable-stream-generators
red-queue
rocketfuel-topology-reader
routing-aodv
routing-aodv-loopback
routing-aodv-regression
routing-dsdv
routing-dsr
routing-olsr
routing-olsr-header
routing-olsr-regression
rtt-estimator
sample
sequence-number
simulator
sixlowpan-fragmentation
sixlowpan-hc1
sixlowpan-iphc
spectrum-converter
spectrum-ideal-phy
spectrum-interference
spectrum-value
src/aodv/examples/aodv
src/bridge/examples/csma-bridge
src/bridge/examples/csma-bridge-one-hop
src/buildings/examples/buildings-pathloss-profiler
src/core/examples/main-callback
src/core/examples/main-ptr
src/core/examples/sample-random-variable
src/core/examples/sample-simulator
src/csma/examples/csma-broadcast
src/csma/examples/csma-multicast
src/csma/examples/csma-one-subnet
src/csma/examples/csma-packet-socket
src/csma/examples/csma-ping
src/csma/examples/csma-raw-ip-socket
src/energy/examples/li-ion-energy-source
src/energy/examples/rv-battery-model-test
src/fd-net-device/examples/dummy-network
src/fd-net-device/examples/fd2fd-onoff
src/internet/examples/main-simple
src/lr-wpan/examples/lr-wpan-data
src/lr-wpan/examples/lr-wpan-error-distance-plot
src/lr-wpan/examples/lr-wpan-error-model-plot
src/lr-wpan/examples/lr-wpan-packet-print
src/lr-wpan/examples/lr-wpan-phy-test
src/lte/examples/lena-cqi-threshold
src/lte/examples/lena-dual-stripe
src/lte/examples/lena-dual-stripe --epc=1 --fadingTrace=../../src/lte/model/fading-traces/fading_trace_EPA_3kmph.fad --simTime=0.01
src/lte/examples/lena-dual-stripe --epc=1 --simTime=0.0 --nApartmentsX=1 --homeEnbDeploymentRatio=0.5 --nMacroEnbSites=0 --macroUeDensity=0 --nBlocks=1
src/lte/examples/lena-dual-stripe --epc=1 --simTime=0.01
src/lte/examples/lena-dual-stripe --epc=1 --useUdp=0 --simTime=0.01
src/lte/examples/lena-dual-stripe --nBlocks=1 --nMacroEnbSites=0 --macroUeDensity=0 --homeEnbDeploymentRatio=1 --homeEnbActivationRatio=1 --homeUesHomeEnbRatio=2 --macroEnbTxPowerDbm=0 --simTime=0.01
src/lte/examples/lena-dual-stripe --nMacroEnbSites=0 --macroUeDensity=0 --nBlocks=1 --nApartmentsX=4 --nMacroEnbSitesX=0 --homeEnbDeploymentRatio=1 --homeEnbActivationRatio=1 --macroEnbTxPowerDbm=0 --epcDl=1 --epcUl=0 --epc=1 --numBearersPerUe=4 --homeUesHomeEnbRatio=15 --simTime=0.01
src/lte/examples/lena-dual-stripe --simTime=0.0 --nApartmentsX=1 --homeEnbDeploymentRatio=0.5 --nMacroEnbSites=0 --macroUeDensity=0 --nBlocks=1
src/lte/examples/lena-dual-stripe --simTime=0.01
src/lte/examples/lena-fading
src/lte/examples/lena-intercell-interference --simTime=0.1
src/lte/examples/lena-pathloss-traces
src/lte/examples/lena-profiling
src/lte/examples/lena-profiling --simTime=0.1 --nUe=2 --nEnb=5 --nFloors=0
src/lte/examples/lena-profiling --simTime=0.1 --nUe=3 --nEnb=6 --nFloors=1
src/lte/examples/lena-rem
src/lte/examples/lena-rem-sector-antenna
src/lte/examples/lena-rlc-traces
src/lte/examples/lena-simple
src/lte/examples/lena-simple-epc
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::FdBetFfMacScheduler
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::FdMtFfMacScheduler
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::FdTbfqFfMacScheduler
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::PfFfMacScheduler
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::PssFfMacScheduler
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::RrFfMacScheduler
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::TdBetFfMacScheduler
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::TdMtFfMacScheduler
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::TdTbfqFfMacScheduler
src/lte/examples/lena-simple-epc --simTime=1.1 --ns3::LteHelper::Scheduler=ns3::TtaFfMacScheduler
src/lte/examples/lena-x2-handover
src/mesh/examples/mesh
src/mobility/examples/main-grid-topology
src/mobility/examples/main-random-topology
src/mobility/examples/main-random-walk
src/network/examples/main-packet-header
src/network/examples/main-packet-tag
src/network/examples/red-tests
src/nix-vector-routing/examples/nix-simple
src/olsr/examples/simple-point-to-point-olsr
src/spectrum/examples/adhoc-aloha-ideal-phy
src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model
src/spectrum/examples/adhoc-aloha-ideal-phy-with-microwave-oven
src/stats/examples/double-probe-example
src/stats/examples/file-aggregator-example
src/stats/examples/file-helper-example
src/stats/examples/gnuplot-aggregator-example
src/stats/examples/gnuplot-helper-example
src/uan/examples/uan-cw-example
src/uan/examples/uan-rc-example
src/virtual-net-device/examples/virtual-net-device
src/wave/examples/wave-simple-80211p
src/wave/examples/wave-simple-device
src/wimax/examples/wimax-ipv4
src/wimax/examples/wimax-multicast
src/wimax/examples/wimax-simple
steady-state-rwp-mobility-model
tcp
tcp-cong-avoid-test
tcp-endpoint-bug2211-test
tcp-fast-retr-test
tcp-header
tcp-highspeed-test
tcp-hybla-test
tcp-option
tcp-rto-test
tcp-slow-start-test
tcp-timestamp
tcp-wscaling
tcp-zero-window-test
test-asn1-encoding
threaded-simulator
time
timer
traced-callback
traced-callback-typedef
traced-value-callback
tv-helper-distribution
tv-spectrum-transmitter
type-id
type-traits
uan-energy-model
udp
udp-client-server
watchdog
wave-mac-extension
waveform-generator
waypoint-mobility-model
wifi-80211p-ocb
wifi-block-ack
wimax-fragmentation
wimax-mac-messages
wimax-phy-layer
wimax-qos
wimax-service-flow
wimax-ss-mac-layer
wimax-tlv
(In reply to natale.patriciello from comment #8) > This is my list of VALGR failures under current ns-3-dev; they are the same > with and without patch: Basically all of them. Either you changed something else as well, or one of your libraries is generating the errors. happens on some OSes. I checked on a Linux box and all seems to be fine. Pushed in changeset: 11784:72e40787d4c6 (In reply to natale.patriciello from comment #7) > No, they aren't, but I think the problem isn't in such patch. On Linux, make sure that you --disable-gtk at configure time when using valgrind; else all valgrind tests will fail. |
If you have an experiment with a forked TCP socket as a result of an incoming connection on a listening socket, any time you get drops and duplicate ACKs on that connection, the socket immediately closes, and does not perform a retransmit. The culprit is the copy constructor for tcp-socket-base. It turns out when we Fork() a new connection, the copy constructor does not copy the dataRetries parameter. I.e. when we check for its value in the retransmit function, it is zero, causing the connection to terminate. Easy fix: --- a/src/internet/model/tcp-socket-base.cc Mon Dec 07 19:52:59 2015 +0000 +++ b/src/internet/model/tcp-socket-base.cc Mon Dec 07 20:11:11 2015 +0000 @@ -298,6 +298,7 @@ m_delAckMaxCount (sock.m_delAckMaxCount), m_noDelay (sock.m_noDelay), m_synRetries (sock.m_synRetries), + m_dataRetries (sock.m_dataRetries), m_delAckTimeout (sock.m_delAckTimeout), m_persistTimeout (sock.m_persistTimeout), m_cnTimeout (sock.m_cnTimeout),