merge new RLC tests with ns-3-lena-dev
This commit is contained in:
10
CHANGES.html
10
CHANGES.html
@@ -43,6 +43,16 @@ the cracks, unfortunately. If you, as a user, can suggest improvements
|
||||
to this file based on your experience, please contribute a patch or drop
|
||||
us a note on ns-developers mailing list. </p>
|
||||
|
||||
<hr>
|
||||
<h1>Changes from ns-3.13 to ns-3-dev</h1>
|
||||
|
||||
<h2>Changes to existing API:</h2>
|
||||
<ul>
|
||||
<li> The Ipv6RawSocketImpl "IcmpFilter" attribute has been removed. Six
|
||||
new member functions have been added to enable the same functionality.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<h1>Changes from ns-3.12 to ns-3.13</h1>
|
||||
|
||||
|
||||
@@ -9,6 +9,29 @@ http://www.nsnam.org including tutorials: http://www.nsnam.org/tutorials.html
|
||||
Consult the file CHANGES.html for more detailed information about changed
|
||||
API and behavior across ns-3 releases.
|
||||
|
||||
Release 3-dev
|
||||
==============
|
||||
|
||||
Availability
|
||||
------------
|
||||
This release is available from:
|
||||
|
||||
Supported platforms
|
||||
-------------------
|
||||
|
||||
New user-visible features
|
||||
-------------------------
|
||||
|
||||
Bugs fixed
|
||||
----------
|
||||
- bug 1319 - Fix Ipv6RawSocketImpl Icmpv6 filter
|
||||
- bug 1318 - Asserts for IPv6 malformed packets
|
||||
|
||||
Known issues
|
||||
------------
|
||||
In general, known issues are tracked on the project tracker available
|
||||
at http://www.nsnam.org/bugzilla/
|
||||
|
||||
Release 3.13
|
||||
==============
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@ Ipv4ClickRouting::SetIpv4 (Ptr<Ipv4> ipv4)
|
||||
void
|
||||
Ipv4ClickRouting::DoDispose ()
|
||||
{
|
||||
simclick_click_kill (m_simNode);
|
||||
m_ipv4 = 0;
|
||||
delete m_simNode;
|
||||
Ipv4RoutingProtocol::DoDispose ();
|
||||
@@ -416,8 +417,15 @@ Ipv4ClickRouting::Receive (Ptr<Packet> p, Mac48Address receiverAddr, Mac48Addres
|
||||
std::string
|
||||
Ipv4ClickRouting::ReadHandler (std::string elementName, std::string handlerName)
|
||||
{
|
||||
std::string s = simclick_click_read_handler (m_simNode, elementName.c_str (), handlerName.c_str (), 0, 0);
|
||||
return s;
|
||||
char *handle = simclick_click_read_handler (m_simNode, elementName.c_str (), handlerName.c_str (), 0, 0);
|
||||
std::string ret (handle);
|
||||
|
||||
// This is required because Click does not free
|
||||
// the memory allocated to the return string
|
||||
// from simclick_click_read_handler()
|
||||
free(handle);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -476,8 +476,8 @@ EmuNetDevice::CreateSocket (void)
|
||||
//
|
||||
// Execute the socket creation process image.
|
||||
//
|
||||
status = ::execlp ("emu-sock-creator",
|
||||
"emu-sock-creator", // argv[0] (filename)
|
||||
status = ::execlp (EMU_SOCK_CREATOR,
|
||||
EMU_SOCK_CREATOR, // argv[0] (filename)
|
||||
oss.str ().c_str (), // argv[1] (-p<path?
|
||||
(char *)NULL);
|
||||
|
||||
|
||||
@@ -43,12 +43,14 @@ def build(bld):
|
||||
'helper/emu-helper.h',
|
||||
]
|
||||
|
||||
obj = bld.create_suid_program('emu-sock-creator')
|
||||
obj.source = [
|
||||
creator = bld.create_suid_program('emu-sock-creator')
|
||||
creator.source = [
|
||||
'model/emu-sock-creator.cc',
|
||||
'model/emu-encode-decode.cc',
|
||||
]
|
||||
|
||||
module.env.append_value("DEFINES", "EMU_SOCK_CREATOR=\"%s\"" % (creator.target,))
|
||||
|
||||
if bld.env['ENABLE_EXAMPLES']:
|
||||
bld.add_subdirs('examples')
|
||||
|
||||
|
||||
@@ -127,6 +127,16 @@ paired with an IPv4 representation of such device. In Linux, this class
|
||||
main purpose is to provide address-family specific information (addresses) about
|
||||
an interface.
|
||||
|
||||
All the classes have appropriate traces in order to track sent, received and lost packets.
|
||||
The users is encouraged to use them so to find out if (and where) a packet is dropped. A
|
||||
common mistake is to forget the effects of local queues when sending packets, e.g., the ARP
|
||||
queue. This can be particularly puzzling when sending jumbo packets or packet bursts using UDP.
|
||||
The ARP cache pending queue is limited (3 datagrams) and IP packets might be fragmented, easily
|
||||
overfilling the ARP cache queue size. In those cases it is useful to increase the ARP cache
|
||||
pending size to a proper value, e.g.:::
|
||||
|
||||
Config::SetDefault ("ns3::ArpCache::PendingQueueSize", UintegerValue (MAX_BURST_SIZE/L2MTU*3));
|
||||
|
||||
The IPv6 implementation follows a similar architecture.
|
||||
|
||||
Layer-4 protocols and sockets
|
||||
|
||||
@@ -29,7 +29,7 @@ Ipv4RawSocketImpl::GetTypeId (void)
|
||||
MakeUintegerAccessor (&Ipv4RawSocketImpl::m_protocol),
|
||||
MakeUintegerChecker<uint16_t> ())
|
||||
.AddAttribute ("IcmpFilter",
|
||||
"Any icmp header whose type field matches a bit in this filter is dropped.",
|
||||
"Any icmp header whose type field matches a bit in this filter is dropped. Type must be less than 32.",
|
||||
UintegerValue (0),
|
||||
MakeUintegerAccessor (&Ipv4RawSocketImpl::m_icmpFilter),
|
||||
MakeUintegerChecker<uint32_t> ())
|
||||
@@ -326,7 +326,7 @@ Ipv4RawSocketImpl::ForwardUp (Ptr<const Packet> p, Ipv4Header ipHeader, Ptr<Ipv4
|
||||
copy->PeekHeader (icmpHeader);
|
||||
uint8_t type = icmpHeader.GetType ();
|
||||
if (type < 32 &&
|
||||
((1 << type) & m_icmpFilter))
|
||||
((uint32_t(1) << type) & m_icmpFilter))
|
||||
{
|
||||
// filter out icmp packet.
|
||||
return false;
|
||||
|
||||
@@ -51,10 +51,6 @@ TypeId Ipv6RawSocketImpl::GetTypeId ()
|
||||
UintegerValue (0),
|
||||
MakeUintegerAccessor (&Ipv6RawSocketImpl::m_protocol),
|
||||
MakeUintegerChecker<uint16_t> ())
|
||||
.AddAttribute ("IcmpFilter", "Any ICMPv6 header whose type field matches a bit in this filter is dropped.",
|
||||
UintegerValue (0),
|
||||
MakeUintegerAccessor (&Ipv6RawSocketImpl::m_icmpFilter),
|
||||
MakeUintegerChecker<uint32_t> ())
|
||||
;
|
||||
return tid;
|
||||
}
|
||||
@@ -69,6 +65,7 @@ Ipv6RawSocketImpl::Ipv6RawSocketImpl ()
|
||||
m_protocol = 0;
|
||||
m_shutdownSend = false;
|
||||
m_shutdownRecv = false;
|
||||
Icmpv6FilterSetPassAll();
|
||||
}
|
||||
|
||||
Ipv6RawSocketImpl::~Ipv6RawSocketImpl ()
|
||||
@@ -328,7 +325,7 @@ bool Ipv6RawSocketImpl::ForwardUp (Ptr<const Packet> p, Ipv6Header hdr, Ptr<NetD
|
||||
copy->PeekHeader (icmpHeader);
|
||||
uint8_t type = icmpHeader.GetType ();
|
||||
|
||||
if ((1 << type) & m_icmpFilter)
|
||||
if (Icmpv6FilterWillBlock(type))
|
||||
{
|
||||
/* packet filtered */
|
||||
return false;
|
||||
@@ -372,5 +369,41 @@ Ipv6RawSocketImpl::GetAllowBroadcast () const
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
Ipv6RawSocketImpl::Icmpv6FilterSetPassAll()
|
||||
{
|
||||
memset(&m_icmpFilter, 0xff, sizeof(icmpv6Filter));
|
||||
}
|
||||
|
||||
void
|
||||
Ipv6RawSocketImpl::Icmpv6FilterSetBlockAll()
|
||||
{
|
||||
memset(&m_icmpFilter, 0x00, sizeof(icmpv6Filter));
|
||||
}
|
||||
|
||||
void
|
||||
Ipv6RawSocketImpl::Icmpv6FilterSetPass(uint8_t type)
|
||||
{
|
||||
(m_icmpFilter.icmpv6Filt[(type) >> 5]) |= (uint32_t(1) << ((type) & 31));
|
||||
}
|
||||
|
||||
void
|
||||
Ipv6RawSocketImpl::Icmpv6FilterSetBlock(uint8_t type)
|
||||
{
|
||||
(m_icmpFilter.icmpv6Filt[(type) >> 5]) &= ~(uint32_t(1) << ((type) & 31));
|
||||
}
|
||||
|
||||
bool
|
||||
Ipv6RawSocketImpl::Icmpv6FilterWillPass(uint8_t type)
|
||||
{
|
||||
return (((m_icmpFilter.icmpv6Filt[(type) >> 5]) & (uint32_t(1) << ((type) & 31))) != 0);
|
||||
}
|
||||
|
||||
bool
|
||||
Ipv6RawSocketImpl::Icmpv6FilterWillBlock(uint8_t type)
|
||||
{
|
||||
return (((m_icmpFilter.icmpv6Filt[(type) >> 5]) & (uint32_t(1) << ((type) & 31))) == 0);
|
||||
}
|
||||
|
||||
} /* namespace ns3 */
|
||||
|
||||
|
||||
@@ -219,10 +219,47 @@ public:
|
||||
virtual bool SetAllowBroadcast (bool allowBroadcast);
|
||||
virtual bool GetAllowBroadcast () const;
|
||||
|
||||
/**
|
||||
* \brief Clean the ICMPv6 filter structure
|
||||
*/
|
||||
void Icmpv6FilterSetPassAll();
|
||||
|
||||
/**
|
||||
* \brief Set the filter to block all the ICMPv6 types
|
||||
*/
|
||||
void Icmpv6FilterSetBlockAll();
|
||||
|
||||
/**
|
||||
* \brief Set the filter to pass one ICMPv6 type
|
||||
* \param the ICMPv6 type to pass
|
||||
*/
|
||||
void Icmpv6FilterSetPass(uint8_t type);
|
||||
|
||||
/**
|
||||
* \brief Set the filter to block one ICMPv6 type
|
||||
* \param the ICMPv6 type to block
|
||||
*/
|
||||
void Icmpv6FilterSetBlock(uint8_t type);
|
||||
|
||||
/**
|
||||
* \brief Ask the filter about the status of one ICMPv6 type
|
||||
* \param the ICMPv6 type
|
||||
* \return true if the ICMP type is passing through
|
||||
*/
|
||||
bool Icmpv6FilterWillPass(uint8_t type);
|
||||
|
||||
/**
|
||||
* \brief Ask the filter about the status of one ICMPv6 type
|
||||
* \param the ICMPv6 type
|
||||
* \return true if the ICMP type is being blocked
|
||||
*/
|
||||
bool Icmpv6FilterWillBlock(uint8_t type);
|
||||
|
||||
|
||||
private:
|
||||
/**
|
||||
* \struct Data
|
||||
* \brief IPv6 raw data and additionnal information.
|
||||
* \brief IPv6 raw data and additional information.
|
||||
*/
|
||||
struct Data
|
||||
{
|
||||
@@ -276,10 +313,18 @@ private:
|
||||
*/
|
||||
bool m_shutdownRecv;
|
||||
|
||||
/**
|
||||
* \brief Struct to hold the ICMPv6 filter
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t icmpv6Filt[8];
|
||||
} icmpv6Filter;
|
||||
|
||||
/**
|
||||
* \brief ICMPv6 filter.
|
||||
*/
|
||||
uint32_t m_icmpFilter;
|
||||
icmpv6Filter m_icmpFilter;
|
||||
};
|
||||
|
||||
} /* namespace ns3 */
|
||||
|
||||
@@ -108,7 +108,7 @@ main (int argc, char *argv[])
|
||||
Vector v (roomLength * (column + 0.5), roomLength * (row + 0.5), nodeHeight);
|
||||
positionAlloc->Add (v);
|
||||
enbPosition.push_back (v);
|
||||
mobility.Install (ueNodes[plantedEnb]);
|
||||
mobility.Install (ueNodes.at(plantedEnb));
|
||||
}
|
||||
}
|
||||
mobility.SetPositionAllocator (positionAlloc);
|
||||
@@ -117,17 +117,17 @@ main (int argc, char *argv[])
|
||||
// Position of UEs attached to eNB
|
||||
for (uint32_t i = 0; i < nEnb; i++)
|
||||
{
|
||||
UniformVariable posX (enbPosition[i].x - roomLength * 0.5,
|
||||
enbPosition[i].x + roomLength * 0.5);
|
||||
UniformVariable posY (enbPosition[i].y - roomLength * 0.5,
|
||||
enbPosition[i].y + roomLength * 0.5);
|
||||
UniformVariable posX (enbPosition.at(i).x - roomLength * 0.5,
|
||||
enbPosition.at(i).x + roomLength * 0.5);
|
||||
UniformVariable posY (enbPosition.at(i).y - roomLength * 0.5,
|
||||
enbPosition.at(i).y + roomLength * 0.5);
|
||||
positionAlloc = CreateObject<ListPositionAllocator> ();
|
||||
for (uint32_t j = 0; j < nUe; j++)
|
||||
{
|
||||
positionAlloc->Add (Vector (posX.GetValue (), posY.GetValue (), nodeHeight));
|
||||
mobility.SetPositionAllocator (positionAlloc);
|
||||
}
|
||||
mobility.Install (ueNodes[i]);
|
||||
mobility.Install (ueNodes.at(i));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -164,10 +164,10 @@ main (int argc, char *argv[])
|
||||
mmEnb->SetRoomNumberY (column);
|
||||
|
||||
// Positioning UEs attached to eNB
|
||||
mobility.Install (ueNodes[plantedEnb]);
|
||||
mobility.Install (ueNodes.at(plantedEnb));
|
||||
for (uint32_t ue = 0; ue < nUe; ue++)
|
||||
{
|
||||
Ptr<BuildingsMobilityModel> mmUe = ueNodes[plantedEnb].Get (ue)->GetObject<BuildingsMobilityModel> ();
|
||||
Ptr<BuildingsMobilityModel> mmUe = ueNodes.at(plantedEnb).Get (ue)->GetObject<BuildingsMobilityModel> ();
|
||||
Vector vUe (v.x, v.y, v.z);
|
||||
mmUe->SetPosition (vUe);
|
||||
mmUe->SetIndoor (building);
|
||||
@@ -191,7 +191,7 @@ main (int argc, char *argv[])
|
||||
enbDevs = lteHelper->InstallEnbDevice (enbNodes);
|
||||
for (uint32_t i = 0; i < nEnb; i++)
|
||||
{
|
||||
NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes[i]);
|
||||
NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at(i));
|
||||
ueDevs.push_back (ueDev);
|
||||
lteHelper->Attach (ueDev, enbDevs.Get (i));
|
||||
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
|
||||
|
||||
@@ -47,8 +47,6 @@ main (int argc, char *argv[])
|
||||
|
||||
cmd.Parse (argc, argv);
|
||||
|
||||
Config::SetDefault ("ns3::LteSpectrumPhy::PemEnabled", BooleanValue (false));
|
||||
|
||||
// Geometry of the scenario (in meters)
|
||||
// Assume squared building
|
||||
double nodeHeight = 1.5;
|
||||
@@ -61,7 +59,7 @@ main (int argc, char *argv[])
|
||||
|
||||
Ptr < LteHelper > lteHelper = CreateObject<LteHelper> ();
|
||||
//lteHelper->EnableLogComponents ();
|
||||
lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::BuildingsPropagationLossModel"));
|
||||
lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisPropagationLossModel"));
|
||||
|
||||
// Create Nodes: eNodeB and UE
|
||||
NodeContainer enbNodes;
|
||||
@@ -114,10 +112,10 @@ main (int argc, char *argv[])
|
||||
mmEnb->SetRoomNumberY (column);
|
||||
|
||||
// Positioning UEs attached to eNB
|
||||
mobility.Install (ueNodes.at (plantedEnb));
|
||||
mobility.Install (ueNodes.at(plantedEnb));
|
||||
for (uint32_t ue = 0; ue < nUe; ue++)
|
||||
{
|
||||
Ptr<BuildingsMobilityModel> mmUe = ueNodes.at (plantedEnb).Get (ue)->GetObject<BuildingsMobilityModel> ();
|
||||
Ptr<BuildingsMobilityModel> mmUe = ueNodes.at(plantedEnb).Get (ue)->GetObject<BuildingsMobilityModel> ();
|
||||
Vector vUe (v.x, v.y, v.z);
|
||||
mmUe->SetPosition (vUe);
|
||||
mmUe->SetIndoor (building);
|
||||
@@ -132,7 +130,7 @@ main (int argc, char *argv[])
|
||||
Vector v (500, 3000, nodeHeight);
|
||||
positionAlloc->Add (v);
|
||||
enbPosition.push_back (v);
|
||||
mobility.Install (ueNodes.at (plantedEnb));
|
||||
mobility.Install (ueNodes.at(plantedEnb));
|
||||
plantedEnb++;
|
||||
|
||||
// Add the 3-sector site
|
||||
@@ -141,7 +139,7 @@ main (int argc, char *argv[])
|
||||
Vector v (500, 2000, nodeHeight);
|
||||
positionAlloc->Add (v);
|
||||
enbPosition.push_back (v);
|
||||
mobility.Install (ueNodes.at (plantedEnb));
|
||||
mobility.Install (ueNodes.at(plantedEnb));
|
||||
}
|
||||
|
||||
|
||||
@@ -151,24 +149,24 @@ main (int argc, char *argv[])
|
||||
// Position of UEs attached to eNB
|
||||
for (uint32_t i = 0; i < nEnb; i++)
|
||||
{
|
||||
UniformVariable posX (enbPosition.at (i).x - roomLength * 0,
|
||||
enbPosition.at (i).x + roomLength * 0);
|
||||
UniformVariable posY (enbPosition.at (i).y - roomLength * 0,
|
||||
enbPosition.at (i).y + roomLength * 0);
|
||||
UniformVariable posX (enbPosition.at(i).x - roomLength * 0,
|
||||
enbPosition.at(i).x + roomLength * 0);
|
||||
UniformVariable posY (enbPosition.at(i).y - roomLength * 0,
|
||||
enbPosition.at(i).y + roomLength * 0);
|
||||
positionAlloc = CreateObject<ListPositionAllocator> ();
|
||||
for (uint32_t j = 0; j < nUe; j++)
|
||||
{
|
||||
if ( i == nEnb - 3 )
|
||||
{
|
||||
positionAlloc->Add (Vector (enbPosition.at (i).x + 10, enbPosition.at (i).y, nodeHeight));
|
||||
positionAlloc->Add (Vector (enbPosition.at(i).x + 10, enbPosition.at(i).y, nodeHeight));
|
||||
}
|
||||
else if ( i == nEnb - 2 )
|
||||
{
|
||||
positionAlloc->Add (Vector (enbPosition.at (i).x - sqrt (10), enbPosition.at (i).y + sqrt (10), nodeHeight));
|
||||
positionAlloc->Add (Vector (enbPosition.at(i).x - sqrt (10), enbPosition.at(i).y + sqrt (10), nodeHeight));
|
||||
}
|
||||
else if ( i == nEnb - 1 )
|
||||
{
|
||||
positionAlloc->Add (Vector (enbPosition.at (i).x - sqrt (10), enbPosition.at (i).y - sqrt (10), nodeHeight));
|
||||
positionAlloc->Add (Vector (enbPosition.at(i).x - sqrt (10), enbPosition.at(i).y - sqrt (10), nodeHeight));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -176,7 +174,7 @@ main (int argc, char *argv[])
|
||||
}
|
||||
mobility.SetPositionAllocator (positionAlloc);
|
||||
}
|
||||
mobility.Install (ueNodes.at (i));
|
||||
mobility.Install (ueNodes.at(i));
|
||||
}
|
||||
BuildingsHelper::MakeMobilityModelConsistent ();
|
||||
|
||||
@@ -208,7 +206,7 @@ main (int argc, char *argv[])
|
||||
|
||||
for (uint32_t i = 0; i < nEnb; i++)
|
||||
{
|
||||
NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at (i));
|
||||
NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ueNodes.at(i));
|
||||
ueDevs.push_back (ueDev);
|
||||
lteHelper->Attach (ueDev, enbDevs.Get (i));
|
||||
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
|
||||
@@ -217,19 +215,17 @@ main (int argc, char *argv[])
|
||||
}
|
||||
|
||||
Simulator::Stop (Seconds (simTime));
|
||||
|
||||
// better to leave traces disabled
|
||||
//lteHelper->EnableTraces ();
|
||||
lteHelper->EnableTraces ();
|
||||
|
||||
Ptr<RadioEnvironmentMapHelper> remHelper = CreateObject<RadioEnvironmentMapHelper> ();
|
||||
remHelper->SetAttribute ("ChannelPath", StringValue ("/ChannelList/0"));
|
||||
remHelper->SetAttribute ("OutputFile", StringValue ("rem.out"));
|
||||
remHelper->SetAttribute ("XMin", DoubleValue (-200.0));
|
||||
remHelper->SetAttribute ("XMax", DoubleValue (1200.0));
|
||||
remHelper->SetAttribute ("XRes", UintegerValue (300));
|
||||
remHelper->SetAttribute ("YMin", DoubleValue (-300.0));
|
||||
remHelper->SetAttribute ("XMin", DoubleValue (-2000.0));
|
||||
remHelper->SetAttribute ("XMax", DoubleValue (+2000.0));
|
||||
remHelper->SetAttribute ("XRes", UintegerValue (100));
|
||||
remHelper->SetAttribute ("YMin", DoubleValue (-500.0));
|
||||
remHelper->SetAttribute ("YMax", DoubleValue (+3500.0));
|
||||
remHelper->SetAttribute ("YRes", UintegerValue (300));
|
||||
remHelper->SetAttribute ("YRes", UintegerValue (100));
|
||||
remHelper->SetAttribute ("Z", DoubleValue (1.5));
|
||||
remHelper->Install ();
|
||||
// Recall the buildings helper to place the REM nodes in its position
|
||||
|
||||
@@ -238,7 +238,7 @@ LteAmc::GetCqiFromSpectralEfficiency (double s)
|
||||
{
|
||||
++cqi;
|
||||
}
|
||||
NS_LOG_FUNCTION (s << cqi);
|
||||
NS_LOG_LOGIC ("cqi = " << cqi);
|
||||
return cqi;
|
||||
}
|
||||
|
||||
@@ -254,7 +254,7 @@ LteAmc::GetMcsFromCqi (int cqi)
|
||||
{
|
||||
++mcs;
|
||||
}
|
||||
NS_LOG_FUNCTION (cqi << mcs);
|
||||
NS_LOG_LOGIC ("mcs = " << mcs);
|
||||
return mcs;
|
||||
}
|
||||
|
||||
@@ -274,8 +274,9 @@ LteAmc::GetTbSizeFromMcs (int mcs, int nprb)
|
||||
double
|
||||
LteAmc::GetSpectralEfficiencyFromCqi (int cqi)
|
||||
{
|
||||
NS_LOG_FUNCTION (cqi);
|
||||
NS_ASSERT_MSG (cqi >= 0 && cqi <= 15, "CQI must be in [0..15] = " << cqi);
|
||||
NS_LOG_FUNCTION (cqi << SpectralEfficiencyForCqi[cqi]);
|
||||
NS_LOG_LOGIC ("Spectral efficiency = " << SpectralEfficiencyForCqi[cqi]);
|
||||
return SpectralEfficiencyForCqi[cqi];
|
||||
}
|
||||
|
||||
@@ -283,7 +284,7 @@ LteAmc::GetSpectralEfficiencyFromCqi (int cqi)
|
||||
std::vector<int>
|
||||
LteAmc::CreateCqiFeedbacks (const SpectrumValue& sinr)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
NS_LOG_FUNCTION (this);
|
||||
|
||||
std::vector<int> cqi;
|
||||
Values::const_iterator it;
|
||||
|
||||
@@ -480,7 +480,7 @@ LteEnbMac::DoReceiveIdealControlMessage (Ptr<IdealControlMessage> msg)
|
||||
}
|
||||
else
|
||||
{
|
||||
NS_LOG_FUNCTION (this << " IdealControlMessage not recognized");
|
||||
NS_LOG_LOGIC (this << " IdealControlMessage not recognized");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -501,10 +501,9 @@ void
|
||||
LteEnbMac::ReceiveDlCqiIdealControlMessage (Ptr<DlCqiIdealControlMessage> msg)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << msg);
|
||||
// NS_LOG_FUNCTION (this << msg->GetSourceDevice () << msg->GetDestinationDevice ());
|
||||
|
||||
CqiListElement_s dlcqi = msg->GetDlCqi ();
|
||||
NS_LOG_FUNCTION (this << "Enb Received DL-CQI rnti" << dlcqi.m_rnti);
|
||||
NS_LOG_LOGIC (this << "Enb Received DL-CQI rnti" << dlcqi.m_rnti);
|
||||
m_dlCqiReceived.push_back (dlcqi);
|
||||
|
||||
}
|
||||
@@ -753,7 +752,6 @@ LteEnbMac::DoSchedDlConfigInd (FfMacSchedSapUser::SchedDlConfigIndParameters ind
|
||||
void
|
||||
LteEnbMac::DoSchedUlConfigInd (FfMacSchedSapUser::SchedUlConfigIndParameters ind)
|
||||
{
|
||||
|
||||
NS_LOG_FUNCTION (this);
|
||||
|
||||
for (unsigned int i = 0; i < ind.m_dciList.size (); i++)
|
||||
|
||||
@@ -238,8 +238,7 @@ LteNetDevice::IsBridge (void) const
|
||||
Address
|
||||
LteNetDevice::GetMulticast (Ipv4Address multicastGroup) const
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
NS_LOG_FUNCTION (multicastGroup);
|
||||
NS_LOG_FUNCTION (this << multicastGroup);
|
||||
|
||||
Mac48Address ad = Mac48Address::GetMulticast (multicastGroup);
|
||||
|
||||
|
||||
@@ -202,7 +202,10 @@ LteRlcSm::DoReceivePdu (Ptr<Packet> p)
|
||||
{
|
||||
delay = Simulator::Now() - rlcTag.GetSenderTimestamp ();
|
||||
}
|
||||
NS_LOG_FUNCTION (this << m_rnti << (uint32_t) m_lcid << p->GetSize () << delay.GetNanoSeconds ());
|
||||
NS_LOG_LOGIC (" RNTI=" << m_rnti
|
||||
<< " LCID=" << (uint32_t) m_lcid
|
||||
<< " size=" << p->GetSize ()
|
||||
<< " delay=" << delay.GetNanoSeconds ());
|
||||
m_rxPdu(m_rnti, m_lcid, p->GetSize (), delay.GetNanoSeconds () );
|
||||
}
|
||||
|
||||
@@ -218,7 +221,9 @@ LteRlcSm::DoNotifyTxOpportunity (uint32_t bytes)
|
||||
// RLC Performance evaluation
|
||||
RlcTag tag (Simulator::Now());
|
||||
params.pdu->AddByteTag (tag);
|
||||
NS_LOG_FUNCTION (this << m_rnti << (uint32_t) m_lcid << bytes);
|
||||
NS_LOG_LOGIC (" RNTI=" << m_rnti
|
||||
<< " LCID=" << (uint32_t) m_lcid
|
||||
<< " size=" << bytes);
|
||||
m_txPdu(m_rnti, m_lcid, bytes);
|
||||
|
||||
m_macSapProvider->TransmitPdu (params);
|
||||
|
||||
@@ -170,7 +170,7 @@ TraceFadingLossModel::DoCalcRxPowerSpectralDensity (
|
||||
|
||||
//double speed = sqrt (pow (aSpeedVector.x-bSpeedVector.x,2) + pow (aSpeedVector.y-bSpeedVector.y,2));
|
||||
|
||||
NS_LOG_FUNCTION (this << *rxPsd);
|
||||
NS_LOG_LOGIC (this << *rxPsd);
|
||||
|
||||
int now_ms = static_cast<int> (Simulator::Now ().GetMilliSeconds () * m_timeGranularity);
|
||||
int lastUpdate_ms = static_cast<int> (m_lastWindowUpdate.GetMilliSeconds () * m_timeGranularity);
|
||||
@@ -186,11 +186,11 @@ TraceFadingLossModel::DoCalcRxPowerSpectralDensity (
|
||||
double power = *vit; // in Watt/Hz
|
||||
power = 10 * log10 (180000 * power); // in dB
|
||||
|
||||
NS_LOG_FUNCTION (this << subChannel << *vit << power << fading);
|
||||
NS_LOG_LOGIC (this << subChannel << *vit << power << fading);
|
||||
|
||||
*vit = pow (10., ((power + fading) / 10)) / 180000; // in Watt
|
||||
|
||||
NS_LOG_FUNCTION (this << subChannel << *vit);
|
||||
NS_LOG_LOGIC (this << subChannel << *vit);
|
||||
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ TraceFadingLossModel::DoCalcRxPowerSpectralDensity (
|
||||
|
||||
}
|
||||
|
||||
NS_LOG_FUNCTION (this << *rxPsd);
|
||||
NS_LOG_LOGIC (this << *rxPsd);
|
||||
return rxPsd;
|
||||
}
|
||||
|
||||
@@ -215,10 +215,7 @@ TraceFadingLossModel::CreateFadingChannelRealization (Ptr<const MobilityModel> e
|
||||
m_lastWindowUpdate = Simulator::Now ();
|
||||
}
|
||||
|
||||
|
||||
NS_LOG_FUNCTION (this <<
|
||||
"insert new channel realization, m_windowOffsetMap.size () = "
|
||||
<< m_windowOffsetsMap.size ());
|
||||
NS_LOG_LOGIC (this << "insert new channel realization, m_windowOffsetMap.size () = " << m_windowOffsetsMap.size ());
|
||||
UniformVariable* startV = new UniformVariable (1, (m_traceLength.GetSeconds () - m_windowSize.GetSeconds ()) * 1000.0);
|
||||
ChannelRealizationId_t mobilityPair = std::make_pair (enbMobility,ueMobility);
|
||||
m_startVariableMap.insert (std::pair<ChannelRealizationId_t,UniformVariable* > (mobilityPair, startV));
|
||||
|
||||
@@ -524,8 +524,8 @@ TapBridge::CreateTap (void)
|
||||
//
|
||||
// Execute the socket creation process image.
|
||||
//
|
||||
status = ::execlp ("tap-creator",
|
||||
"tap-creator", // argv[0] (filename)
|
||||
status = ::execlp (TAP_CREATOR,
|
||||
TAP_CREATOR, // argv[0] (filename)
|
||||
ossDeviceName.str ().c_str (), // argv[1] (-d<device name>)
|
||||
ossGateway.str ().c_str (), // argv[2] (-g<gateway>)
|
||||
ossIp.str ().c_str (), // argv[3] (-i<IP address>)
|
||||
|
||||
@@ -43,12 +43,14 @@ def build(bld):
|
||||
]
|
||||
|
||||
if not bld.env['PLATFORM'].startswith('freebsd'):
|
||||
obj = bld.create_suid_program('tap-creator')
|
||||
obj.source = [
|
||||
tap_creator = bld.create_suid_program('tap-creator')
|
||||
tap_creator.source = [
|
||||
'model/tap-creator.cc',
|
||||
'model/tap-encode-decode.cc',
|
||||
]
|
||||
|
||||
module.env.append_value("DEFINES", "TAP_CREATOR=\"%s\"" % (tap_creator.target,))
|
||||
|
||||
if bld.env['ENABLE_EXAMPLES']:
|
||||
bld.add_subdirs('examples')
|
||||
|
||||
|
||||
7
wscript
7
wscript
@@ -541,7 +541,7 @@ class SuidBuild_task(Task.TaskBase):
|
||||
super(SuidBuild_task, self).__init__(*args, **kwargs)
|
||||
self.m_display = 'build-suid'
|
||||
try:
|
||||
program_obj = wutils.find_program(self.generator.target, self.generator.env)
|
||||
program_obj = wutils.find_program(self.generator.name, self.generator.env)
|
||||
except ValueError, ex:
|
||||
raise WafError(str(ex))
|
||||
program_node = program_obj.path.find_or_declare(program_obj.target)
|
||||
@@ -558,7 +558,10 @@ class SuidBuild_task(Task.TaskBase):
|
||||
|
||||
def runnable_status(self):
|
||||
"RUN_ME SKIP_ME or ASK_LATER"
|
||||
st = os.stat(self.filename)
|
||||
try:
|
||||
st = os.stat(self.filename)
|
||||
except OSError:
|
||||
return Task.ASK_LATER
|
||||
if st.st_uid == 0:
|
||||
return Task.SKIP_ME
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user