Marshall Asch (21703458) at 19 Apr 15:35
fix: update the ascii art year
Marshall Asch (1ac0fb38) at 19 Apr 15:32
feat: add HELLO_FROM variable in the deploy step for level2
Marshall Asch (b8a9096e) at 19 Apr 15:22
feat: add the variable for level1
okay thanks, I'll run that when I get a chance, it might not be for a little while, I found an unrelated bug in my code so I have to rerun all my simulations so I'll have to wait until they complete. (I am so so close to getting this masters done). I will update this when I get to it. I appreciate your assistance in figuring this out.
That would be the same as:
./waf configure --enable-tests --enable-examples --disable-gtk --disable-python
CXX='-fsanitize=address,leak' ./waf
CXX='-fsanitize=address,leak' ./waf --run "rhpman-example \
...
--optionalCheckBuffer=False --optionalNoEmptyTransfers=False --RngRun=1634" > log_sanitize.out 2>log_sanitize.err
correct? or would that be different? (that is here #503 (comment 791960837))
I ran it again last week with only the sanitizers and nothing different seemed to happen, it seem to give no additional output when it was run normally and the same stack trace when run using gdb.
I ran it again in a arch vm (archlinux/archlinux in Vagrant) and I got the same errors:
pacman -Syu --noconfirm
pacman -Syu protobuf git base-devel python ccache gsl libgcrypt gtk3 boost valgrind --noconfirm
git clone --depth 1 -b ns-3.32 https://gitlab.com/nsnam/ns-3-dev.git
cd ns-3-dev/contrib
git clone --depth 1 https://github.com/MarshallAsch/rhpman.git
cd ..
chown -R vagrant:vagrant .
./waf configure --enable-tests --enable-examples --disable-gtk --disable-python
CXX='-fsanitize=address,leak' ./waf
./waf --valgrind --run "rhpman-example \
--runTime=2400 --waitTime=600 --lookupTime=30 --updateTime=120 \
--dataSize=512 --profileUpdateDelay=6 --totalNodes=160 \
--storageSpace=160 --bufferSpace=160 --wcdc=0.5 --wcol=0.5 --hops=2 \
--replicationHops=4 --carryingThreshold=0.7 --forwardingThreshold=0.6 \
--percentDataOwners=10 --areaWidth=1000 --areaLength=1000 --gridRows=4 \
--gridCols=4 --wifiRadius=100 --partitionNodes=8 --travellerVelocity=20 \
--travellerWalkMode=time --travellerWalkTime=100 --pbnVelocityMin=1 \
--pbnVelocityMax=10 --pbnVelocityChangeAfter=100 --routing=dsdv \
--travellerWalkDist=0 --requestTimeout=0 --peerTimeout=12 \
--electionPeriod=6 --electionCooldown=6 --storageWeight=0.5 \
--energyWeight=0.5 --processingWeight=0 --lowPowerThreshold=0.4 \
--staggeredStart=False --optionCarrierForwarding=False \
--optionalCheckBuffer=False --optionalNoEmptyTransfers=False --RngRun=1634" > log.out 2>log.err
The last one is repeated over and over again with some slightly different sources.
==22827== Memcheck, a memory error detector
==22827== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==22827== Using Valgrind-3.17.0 and LibVEX; rerun with -h for copyright info
==22827== Command: /home/vagrant/ns-3-dev/build/contrib/rhpman/examples/ns3.32-rhpman-example-debug --runTime=2400 --waitTime=600 --lookupTime=30 --updateTime=120 --dataSize=512 --profileUpdateDelay=6 --totalNodes=160 --storageSpace=160 --bufferSpace=160 --wcdc=0.5 --wcol=0.5 --hops=2 --replicationHops=4 --carryingThreshold=0.7 --forwardingThreshold=0.6 --percentDataOwners=10 --areaWidth=1000 --areaLength=1000 --gridRows=4 --gridCols=4 --wifiRadius=100 --partitionNodes=8 --travellerVelocity=20 --travellerWalkMode=time --travellerWalkTime=100 --pbnVelocityMin=1 --pbnVelocityMax=10 --pbnVelocityChangeAfter=100 --routing=dsdv --travellerWalkDist=0 --requestTimeout=0 --peerTimeout=12 --electionPeriod=6 --electionCooldown=6 --storageWeight=0.5 --energyWeight=0.5 --processingWeight=0 --lowPowerThreshold=0.4 --staggeredStart=False --optionCarrierForwarding=False --optionalCheckBuffer=False --optionalNoEmptyTransfers=False --RngRun=1634
==22827==
Setting up traveller node mobility models...
Setting up partition-bound node mobility models...
Setting up wireless devices for all nodes...
Assigning MAC addresses in ad-hoc mode...
Assigning energy model...
Setting up Internet stacks...
Running simulation for 2400 seconds...
assert failed. cond="interface >= 0", +1554.937308222s 7 file=../src/internet/model/ipv4-l3-protocol.cc, line=972
terminate called without an active exception
==22827==
==22827== Process terminating with default action of signal 6 (SIGABRT): dumping core
==22827== at 0x8F7DD22: raise (in /usr/lib/libc-2.33.so)
==22827== by 0x8F67861: abort (in /usr/lib/libc-2.33.so)
==22827== by 0x8C65801: __gnu_cxx::__verbose_terminate_handler() [clone .cold] (vterminate.cc:95)
==22827== by 0x8C71C89: __cxxabiv1::__terminate(void (*)()) (eh_terminate.cc:48)
==22827== by 0x8C71CF6: std::terminate() (eh_terminate.cc:58)
==22827== by 0x6385E78: ns3::Ipv4L3Protocol::SendRealOut(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet>, ns3::Ipv4Header const&) (ipv4-l3-protocol.cc:972)
==22827== by 0x63883A2: ns3::Ipv4L3Protocol::IpForward(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&) (ipv4-l3-protocol.cc:1084)
==22827== by 0x63B2E96: ns3::MemPtrCallbackImpl<ns3::Ipv4L3Protocol*, void (ns3::Ipv4L3Protocol::*)(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&), void, ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>::operator()(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&) (callback.h:646)
==22827== by 0x49F4CF5: ns3::Callback<void, ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>::operator()(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&) const (callback.h:1430)
==22827== by 0x4A889AD: ns3::dsdv::RoutingProtocol::SendPacketFromQueue(ns3::Ipv4Address, ns3::Ptr<ns3::Ipv4Route>) (dsdv-routing-protocol.cc:1175)
==22827== by 0x4A88054: ns3::dsdv::RoutingProtocol::LookForQueuedPackets() (dsdv-routing-protocol.cc:1148)
==22827== by 0x4A78155: ns3::dsdv::RoutingProtocol::RouteOutput(ns3::Ptr<ns3::Packet>, ns3::Ipv4Header const&, ns3::Ptr<ns3::NetDevice>, ns3::Socket::SocketErrno&) (dsdv-routing-protocol.cc:307)
==22827==
==22827== HEAP SUMMARY:
==22827== in use at exit: 667,246,207 bytes in 12,718,294 blocks
==22827== total heap usage: 1,355,854,511 allocs, 1,343,136,217 frees, 143,635,745,182 bytes allocated
==22827==
==22827== 8 bytes in 1 blocks are still reachable in loss record 1 of 9,941
==22827== at 0x483EF3F: operator new(unsigned long) (vg_replace_malloc.c:417)
==22827== by 0x689EB13: __gnu_cxx::new_allocator<ns3::Ptr<ns3::Channel> >::allocate(unsigned long, void const*) (new_allocator.h:121)
==22827== by 0x689E98E: std::allocator_traits<std::allocator<ns3::Ptr<ns3::Channel> > >::allocate(std::allocator<ns3::Ptr<ns3::Channel> >&, unsigned long) (alloc_traits.h:460)
==22827== by 0x689E7DF: std::_Vector_base<ns3::Ptr<ns3::Channel>, std::allocator<ns3::Ptr<ns3::Channel> > >::_M_allocate(unsigned long) (stl_vector.h:346)
==22827== by 0x689E32A: void std::vector<ns3::Ptr<ns3::Channel>, std::allocator<ns3::Ptr<ns3::Channel> > >::_M_realloc_insert<ns3::Ptr<ns3::Channel> const&>(__gnu_cxx::__normal_iterator<ns3::Ptr<ns3::Channel>*, std::vector<ns3::Ptr<ns3::Channel>, std::allocator<ns3::Ptr<ns3::Channel> > > >, ns3::Ptr<ns3::Channel> const&) (vector.tcc:440)
==22827== by 0x689DE01: std::vector<ns3::Ptr<ns3::Channel>, std::allocator<ns3::Ptr<ns3::Channel> > >::push_back(ns3::Ptr<ns3::Channel> const&) (stl_vector.h:1198)
==22827== by 0x7D51A54: ns3::ChannelListPriv::Add(ns3::Ptr<ns3::Channel>) (channel-list.cc:178)
==22827== by 0x7D524FA: ns3::ChannelList::Add(ns3::Ptr<ns3::Channel>) (channel-list.cc:217)
==22827== by 0x7D4F98D: ns3::Channel::Channel() (channel.cc:50)
==22827== by 0x6E08683: ns3::YansWifiChannel::YansWifiChannel() (yans-wifi-channel.cc:60)
==22827== by 0x7063E51: ns3::Ptr<ns3::YansWifiChannel> ns3::CreateObject<ns3::YansWifiChannel>() (object.h:565)
==22827== by 0x7062A11: ns3::YansWifiChannelHelper::Create() const (yans-wifi-helper.cc:100)
==22827==
==22827== 8 bytes in 1 blocks are still reachable in loss record 2 of 9,941
==22827== at 0x483EF3F: operator new(unsigned long) (vg_replace_malloc.c:417)
==22827== by 0x6653158: ns3::Ipv6StaticRoutingHelper::Copy() const (ipv6-static-routing-helper.cc:49)
==22827== by 0x66A281E: ns3::InternetStackHelper::SetRoutingHelper(ns3::Ipv6RoutingHelper const&) (internet-stack-helper.cc:185)
==22827== by 0x66A22DD: ns3::InternetStackHelper::Initialize() (internet-stack-helper.cc:128)
==22827== by 0x66A2174: ns3::InternetStackHelper::InternetStackHelper() (internet-stack-helper.cc:113)
==22827== by 0x121B79: main (rhpman-example.cc:216)
==22827==
==22827== 16 bytes in 1 blocks are still reachable in loss record 3 of 9,941
==22827== at 0x483EF3F: operator new(unsigned long) (vg_replace_malloc.c:417)
==22827== by 0x81E405D: ns3::Ptr<ns3::BooleanValue> ns3::Create<ns3::BooleanValue, ns3::BooleanValue>(ns3::BooleanValue) (ptr.h:407)
==22827== by 0x81E35EF: ns3::BooleanValue::Copy() const (boolean.cc:79)
==22827== by 0x8185B6B: ns3::TypeId::AddAttribute(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, ns3::AttributeValue const&, ns3::Ptr<ns3::AttributeAccessor const>, ns3::Ptr<ns3::AttributeChecker const>, ns3::TypeId::SupportLevel, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (type-id.cc:1045)
==22827== by 0x815D7CF: ns3::CalendarScheduler::GetTypeId() (calendar-scheduler.cc:56)
==22827== by 0x8161837: ns3::ObjectCalendarSchedulerRegistrationClass::ObjectCalendarSchedulerRegistrationClass() (calendar-scheduler.cc:42)
==22827== by 0x816173D: __static_initialization_and_destruction_0(int, int) (calendar-scheduler.cc:42)
==22827== by 0x81617B4: _GLOBAL__sub_I_calendar_scheduler.cc (calendar-scheduler.cc:431)
==22827== by 0x400FE2D: call_init (in /usr/lib/ld-2.33.so)
==22827== by 0x400FF1B: _dl_init (in /usr/lib/ld-2.33.so)
==22827== by 0x40010C9: ??? (in /usr/lib/ld-2.33.so)
==22827== by 0x2B: ???
Oops, that definitely is a mistake (and there were unit tests for that block of code
Use ns-3-dev Is there a difference between ns-3-dev and ns-allinone? I know my code does not compile against ns3 versions newer than 3.32 (I could change it its because of a single function call if I remember correctly)
Make sure that your module does not have memory issues
I have tested a number of test cases with valgrind (albeit not recently since I started getting that error) and there were not any memory warnings or errors as a result of my code, there were a number of warnings that come from the protocol buffer library which I was unable to remove.
I also noticed when looking through the release notes that there have been some mentions of the IPv4Address classes in the newer ns-3 versions. Could this have been something that could have been coincidentally fixed in one of those versions (I have not looked too closely at the specific fixes)?
ns-3 version: 3.32
System: Fedora33
no modifications to the ns3-core
The only modification is adding the https://github.com/MarshallAsch/rhpman module to the contrib directory
Description:
In some situations ns-3 simulations crash with an invalid read error. It does not seem to occur every time or with any particular set of configurations. The error occurs roughly 0.27% of the time (of 7800 runs). (not very many I know). The error in the stack trace shown below occurred roughly 15 hours into a debug simulation run (an optimized run generally takes about 20 minutes) so its not the easiest thing to test for.
Expected behaviour For the simulation to not crash unexpectedly
Reproduction
The issue does not seem to happen with every input set, but when the same set of flags is used it will happen every time. If any value is changed, including the RngRun option the error might not occur.
The module is a MANET storage scheme module that is based on DSDV, a IPv4 wifi ad hoc network, and UDP network transmissions. Destination addresses of nodes are selected by converting the nodes src addresses to an int32 then back into an IPv4Address (this is done for separate mapping purposes).
Repeating the issue A prebuilt docker container showing the issue can be found here:
$ docker run -it --rm marshallasch/rhpman:debug
# apt-get update && apt-get install gdb valgrind -y
# ./waf --gdb --run "rhpman-example \
--runTime=2400 --waitTime=600 --lookupTime=30 --updateTime=120 \
--dataSize=512 --profileUpdateDelay=6 --totalNodes=160 \
--storageSpace=160 --bufferSpace=160 --wcdc=0.5 --wcol=0.5 --hops=2 \
--replicationHops=4 --carryingThreshold=0.7 --forwardingThreshold=0.6 \
--percentDataOwners=10 --areaWidth=1000 --areaLength=1000 --gridRows=4 \
--gridCols=4 --wifiRadius=100 --partitionNodes=8 --travellerVelocity=20 \
--travellerWalkMode=time --travellerWalkTime=100 --pbnVelocityMin=1 \
--pbnVelocityMax=10 --pbnVelocityChangeAfter=100 --routing=dsdv \
--travellerWalkDist=0 --requestTimeout=0 --peerTimeout=12 \
--electionPeriod=6 --electionCooldown=6 --storageWeight=0.5 \
--energyWeight=0.5 --processingWeight=0 --lowPowerThreshold=0.4 \
--staggeredStart=False --optionCarrierForwarding=False \
--optionalCheckBuffer=False --optionalNoEmptyTransfers=False --RngRun=1634"
Issue can be seen in this project: https://github.com/MarshallAsch/rhpman/issues/15
Valgrind stack trace:
==410235== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==410235== Command: ns-3-allinone/ns-3.32/build/optimized/contrib/rhpman/examples/ns3.32-rhpman-example-optimized --runTime=2400 --waitTime=600 --lookupTime=30 --updateTime=120 --dataSize=512 --profileUpdateDelay=6 --totalNodes=200 --storageSpace=200 --bufferSpace=200 --wcdc=0.5 --wcol=0.5 --carryingThreshold=0.6 --forwardingThreshold=0.3 -
-hops=2 --replicationHops=4 --percentDataOwners=10 --areaWidth=1000 --areaLength=1000 --gridRows=4 --gridCols=4 --wifiRadius=100 --partitionNodes=8 --travellerVelocity=20 --travellerWalkMode=time --travellerWalkTime=100 --pbnVelocityMin=1 --pbnVelocityMax=10 --pbnVelocityChangeAfter=100 --routing=dsdv --travellerWalkDist=0 --RngRun=951
==410235==
==410235== Invalid read of size 1
==410235== at 0x53C2760: ns3::Ipv4Interface::IsUp() const (ipv4-interface.cc:174)
==410235== by 0x53C9974: ns3::Ipv4L3Protocol::SendRealOut(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet>, ns3::Ipv4Header const&) (ipv4-l3-protocol.cc:989)
==410235== by 0x53CACAD: ns3::Ipv4L3Protocol::IpForward(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&) (ipv4-l3-protocol.cc:1084)
==410235== by 0x53D83BB: ns3::MemPtrCallbackImpl<ns3::Ipv4L3Protocol*, void (ns3::Ipv4L3Protocol::*)(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&), void, ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>::operator()(ns3::Ptr<ns3::Ipv4Route>, ns
3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&) (callback.h:646)
==410235== by 0x4922140: operator() (callback.h:1430)
==410235== by 0x4922140: ns3::dsdv::RoutingProtocol::SendPacketFromQueue(ns3::Ipv4Address, ns3::Ptr<ns3::Ipv4Route>) (dsdv-routing-protocol.cc:1175)
==410235== by 0x49228C6: ns3::dsdv::RoutingProtocol::LookForQueuedPackets() (dsdv-routing-protocol.cc:1148)
==410235== by 0x49234A7: ns3::dsdv::RoutingProtocol::RouteOutput(ns3::Ptr<ns3::Packet>, ns3::Ipv4Header const&, ns3::Ptr<ns3::NetDevice>, ns3::Socket::SocketErrno&) (dsdv-routing-protocol.cc:307)
==410235== by 0x540B668: ns3::UdpSocketImpl::DoSendTo(ns3::Ptr<ns3::Packet>, ns3::Ipv4Address, unsigned short, unsigned char) (udp-socket-impl.cc:621)
==410235== by 0x540D38F: ns3::UdpSocketImpl::SendTo(ns3::Ptr<ns3::Packet>, unsigned int, ns3::Address const&) (udp-socket-impl.cc:810)
==410235== by 0x4928BF5: ns3::dsdv::RoutingProtocol::SendTriggeredUpdate() (dsdv-routing-protocol.cc:861)
==410235== by 0x6223329: ns3::DefaultSimulatorImpl::ProcessOneEvent() (default-simulator-impl.cc:151)
==410235== by 0x622337D: ns3::DefaultSimulatorImpl::Run() (default-simulator-impl.cc:204)
==410235== Address 0x1c is not stack'd, malloc'd or (recently) free'd
==410235==
==410235==
==410235== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==410235== Access not within mapped region at address 0x1C
==410235== at 0x53C2760: ns3::Ipv4Interface::IsUp() const (ipv4-interface.cc:174)
==410235== by 0x53C9974: ns3::Ipv4L3Protocol::SendRealOut(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet>, ns3::Ipv4Header const&) (ipv4-l3-protocol.cc:989)
==410235== by 0x53CACAD: ns3::Ipv4L3Protocol::IpForward(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&) (ipv4-l3-protocol.cc:1084)
==410235== by 0x53D83BB: ns3::MemPtrCallbackImpl<ns3::Ipv4L3Protocol*, void (ns3::Ipv4L3Protocol::*)(ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&), void, ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>::operator()(ns3::Ptr<ns3::Ipv4Route>, ns
3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&) (callback.h:646)
==410235== by 0x4922140: operator() (callback.h:1430)
==410235== by 0x4922140: ns3::dsdv::RoutingProtocol::SendPacketFromQueue(ns3::Ipv4Address, ns3::Ptr<ns3::Ipv4Route>) (dsdv-routing-protocol.cc:1175)
==410235== by 0x49228C6: ns3::dsdv::RoutingProtocol::LookForQueuedPackets() (dsdv-routing-protocol.cc:1148)
==410235== by 0x49234A7: ns3::dsdv::RoutingProtocol::RouteOutput(ns3::Ptr<ns3::Packet>, ns3::Ipv4Header const&, ns3::Ptr<ns3::NetDevice>, ns3::Socket::SocketErrno&) (dsdv-routing-protocol.cc:307)
==410235== by 0x540B668: ns3::UdpSocketImpl::DoSendTo(ns3::Ptr<ns3::Packet>, ns3::Ipv4Address, unsigned short, unsigned char) (udp-socket-impl.cc:621)
==410235== by 0x540D38F: ns3::UdpSocketImpl::SendTo(ns3::Ptr<ns3::Packet>, unsigned int, ns3::Address const&) (udp-socket-impl.cc:810)
==410235== by 0x4928BF5: ns3::dsdv::RoutingProtocol::SendTriggeredUpdate() (dsdv-routing-protocol.cc:861)
==410235== by 0x6223329: ns3::DefaultSimulatorImpl::ProcessOneEvent() (default-simulator-impl.cc:151)
==410235== by 0x622337D: ns3::DefaultSimulatorImpl::Run() (default-simulator-impl.cc:204)
==410235== If you believe this happened as a result of a stack
==410235== overflow in your program's main thread (unlikely but
==410235== possible), you can try to increase the size of the
==410235== main thread stack using the --main-stacksize= flag.
==410235== The main thread stack size used in this run was 8388608.
==410235==
This stack trace was generated with this version of the module, but it happens with all later versions as well.
@philiprbrenan I have been working on stuff that sounds similar to what you are talking about for my thesis. Would this Github action do what you are trying to do?
I primarily use github for my work and I made that so that I can make sure that my code will both compile and not have runtime exceptions when I run my simulations to hopefully validate that they work correctly. It is designed to put your module in either the scratch or contrib folders and run some ns-3 experiment. I have designed it to work on multiple versions of ns-3, and I am planning on maintaining it for future versions.
I am also planning on reaching out to @tommypec or @tomhenderson to see if some of the tools created for my thesis might be useful for the larger community for this project.
The libspotify library is missing, but can be installed with yum libspotify