Основы Network Simulator-3

Основы Network Simulator-3
1. Доступные ресурсы
2. Компиляция и сборка
3. Обзор исходных текстов
Основные модули в ns-3
1.
2.
3.
4.
5.
6.
7.
8.
Core – основы ДСМ
Основные абстракции в ns-3
Network – модуль для сетевых моделей
Mobility – основа беспроводных узлов сети
Propagation – набор моделей распространения
WiFi – модель протоколов IEEE 802.11
Internet – реализация сетевого стека TCP/IP в ns-3
Application – разработка приложений для ns-3
«Умные указатели»
• Каждый класс хранит в себе ссылок на себя
(класс SimpleRefCount – базовый)
• Класс Ptr<T> работает с классами,
поддерживающими методы Ref и Unref
• Когда счетчик ссылок становится равным
нулю – объект удаляется
(src/core/model/ptr.h:460)
Управление памятью
/**
* Increment the reference count. This method should not be called
* by user code. SimpleRefCount instances are expected to be used in
* conjunction with the Ptr template which would make calling Ref
* unnecessary and dangerous.
*/
inline void Ref (void) const
{
NS_ASSERT (m_count < std::numeric_limits<uint32_t>::max());
m_count++;
}
/**
* Decrement the reference count. This method should not be called
* by user code. SimpleRefCount instances are expected to be used in
* conjunction with the Ptr template which would make calling Ref
* unnecessary and dangerous.
*/
inline void Unref (void) const
{
m_count--;
if (m_count == 0)
{
DELETER::Delete (static_cast<T*> (const_cast<SimpleRefCount *> (this)));
}
}
Пример (scratch/memory-mgt.cc)
#include "ns3/core-module.h"
class A : public ns3::SimpleRefCount<A>
{
public:
A (unsigned int a) :
m_a (a)
{
std::cout << "A is created! parameter = " << m_a << std::endl;
}
~A ()
{
std::cout << "A is destroyed!" << std::endl;
};
private:
unsigned int m_a;
};
int main ()
{
std::cout << "Create a:" << std::endl;
ns3::Ptr<A> a = ns3::Create<A> (2);
std::cout << "Assign b = a:" << std::endl;
ns3::Ptr<A> b = a;
std::cout << "Destroy b:" << std::endl;
b = 0;
std::cout << "Destroy a:" << std::endl;
a = 0;
return 0;
}
Указатели на функции: Callback
• Демонстрационный пример
(scratch/callback-example.cc)
• Указатель на одиночную функцию
• Указатель на метод класса
• Пример использования Callback:
– Наличие асинхронного интерфейса
– Модульность
Объектная система в ns-3
• Система атрибутов (AddAttribute)
• Механизмы агрегации объектов
(AggregateObject)
• Система сбора статистики (TraceSource)
• Абстрактная фабрика объектов
Создание объектов и атрибуты
• Создание объекта с помощью
Ptr<T> t = CreateObject<T> ();
• Возможность создавать объекты с
заданными свойствами:
Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy> ();
phy->SetAttribute ("RxGain", DoubleValue (50));
DoubleValue gain; // Inherited from the attribute value
phy->GetAttribute ("RxGain", gain);
std::cout << "The value of rx gain is " << gain.Get () << std::endl;
Значения по умолчанию
Ptr<Ipv4AddressAllocator> ipAddrs = CreateObject<Ipv4AddressAllocator> ();
C++ Smart Pointer
ns3::Object
Config::SetDefault (“OnOffApplication::DataRate”, StringValue(“448kb/s”));
Config::SetDefault (“/NodeList/*/DeviceList/*/Phy/TxGain”, Double(10.0));
Attribute namespace
Конфигурационные файлы (xml)
< ns3>
< default name ="ns3::TcpSocket::InitialCwnd" name ="2" / >
< default name ="ns3::TcpSocket::ConnTimeout" name ="3s" / >
< default name ="ns3::TcpSocket::DelAckTimeout" name ="200ms" / >
< default name ="ns3::MyClass::DataRate" name =“460KB/s"/ >
< default name ="ns3::MyClass::SomeStringParameter" name =“mystring" / >
< default name ="ns3::MyClass::SomeEnumParameter" name =“ENUM" / >
< default name ="ns3::MyClass::SomeRandom" name =“Uniform:0:1"/ >
< /ns3>
1.
Установка числовых значений (Doublevalue)
2.
Установка значений типа ns3::Time (TimeValue)
3.
Установка строковых констант (StringValue)
4.
Установка значений из перечисления (EnumValue)
5.
Задание входных распределений (Randomvariable) src/core/model/random-variable.cc:1931
Config::SetDefault ("ns3::ConfigStore::Mode", EnumValue (ConfigStore::LOAD));
Config ::SetDefault ("ns3::ConfigStore::FileFormat", EnumValue (ConfigStore::XML));
Config ::SetDefault ("ns3::ConfigStore::Filename", StringValue (config));
ConfigStore cnf;
cnf.ConfigureDefaults ();
Фабрика объектов
•
•
•
•
Фабрика объектов – создание экземпляров классов с заданными свойствами
Пример работы объектной фабрики
ObjectFactory factory;
factory.SetTypeId (“ns3::MyProtocol”);
factory.Set (“myDoubleAttribute”, DoubleValue (2));
Ptr<MyProtocol> protocol = factory.Create<Object> ();
Установка значений по умолчанию должна осуществляться до создания
какого либо объекта
Config::SetDefault ("ns3::YansWifiPhy::TxPowerStart", DoubleValue (50));
Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy> ();
Наоборот – нельзя
Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy> ();
Config::SetDefault ("ns3::YansWifiPhy::TxPowerStart", DoubleValue (50));
GetTypeId и
NS_OBJECT_ENSURE_REGISTERED ()
.AddAttribute ("EnergyDetectionThreshold",
"The energy of a received signal should be higher than “
"this threshold (dbm) to allow the PHY layer to detect the signal.",
DoubleValue (-96.0),
MakeDoubleAccessor (&YansWifiPhy::SetEdThreshold,
&YansWifiPhy::GetEdThreshold),
MakeDoubleChecker<double> ())
.AddAttribute ("State", "The state of the PHY layer",
PointerValue (),
MakePointerAccessor (&YansWifiPhy::m_state),
MakePointerChecker<WifiPhyStateHelper> ())
.AddAttribute ("EncapsulationMode",
"The link-layer encapsulation type to use.",
EnumValue (DIX),
MakeEnumAccessor (&EmuNetDevice::SetEncapsulationMode),
MakeEnumChecker (DIX, "Dix",
LLC, "Llc"))
;
Агрегация объектов
• Объединение объектов внутри некоторой абстракции (internet-stack
helper):
CreateAndAggregateObjectFromTypeId (node, "ns3::ArpL3Protocol");
CreateAndAggregateObjectFromTypeId (node, "ns3::Ipv4L3Protocol");
CreateAndAggregateObjectFromTypeId (node, "ns3::Icmpv4L4Protocol");
CreateAndAggregateObjectFromTypeId (node, "ns3::UdpL4Protocol");
node->AggregateObject (m_tcpFactory.Create<Object> ());
Ptr<PacketSocketFactory> factory = CreateObject<PacketSocketFactory> ();
node->AggregateObject (factory);
• Получение доступного API (хотим создать сокет внутри протокола):
Ptr<Node> node = GetObject<Node> ();
Ptr<SocketFactory> sf;
sf = node->GetObject<SocketFactory> (UdpSocketFactory::GetTypeId ());
m_socket = socketFactory->CreateSocket ();
• http://www.nsnam.org/docs/release/3.6/doxygen/classns3_1_1_object.ht
ml#ab3f15dd8982af7513164f65b7d675055 + многочисленное
использование в helper классах
Tracing System
• Внешнее слежение за состоянием объекта:
– Объект должен иметь внутри себя TracedCallback:
TracedCallback<Ptr<const Packet> > m_macTxDropTrace;
– Должен быть определен TraceSourceAccessor с помощью
GetTypeId:
.AddTraceSource ("MacTxDrop",
"Trace source indicating a packet has been dropped by the device before transmission",
MakeTraceSourceAccessor (&PointToPointNetDevice::m_macTxDropTrace))
• Подключение к Trace source:
– Объявляем функцию, которая вызывается при выполнении
TracedCallbackTraceConnect (With/Without Context)
– Контекст – это строка вида (“NodeList/1/DeviceList/2/RxDrop”)
static void RxDrop (/*std::string context, */Ptr<const Packet> p)
{
NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
}
– Соединяем с TracedCallback
devices.Get (1)->TraceConnectWithoutContext ("PhyRxDrop", MakeCallback (&RxDrop));
Именование объектов
• Создать Node: Ptr<Node> node = CreateObject<Node> ();
• Добавить ей имя: Names::Add ("BaseStation", node);
• Найти ее по имени: node = Names::Find<Node>
("BaseStation");
ОСНОВЫ ДИСКРЕТНО-СОБЫТИЙНОГО
МОДЕЛИРОВАНИЯ
Модельное время:
• Реализация со 128 битной точностью
• Удобное представление:
– Различные единицы:
• Seconds (1), MilliSeconds (100) и т.д.
• t.GetSeconds (), t.GetMilliSeconds ();
– Операторы умножения и деления на число:
• Time (Seconds (2) * 2.0)
Планировщик событий
• Планирование события: EventId event =
Simulator::Schedule (Seconds (12),
&SocketWriter::Write, socketWriter, 10);
• Отменв события: event.Cancel (); или
Simulator::Cancel (event);
Генерация случайных величин
• Обзор исходных кодов
1.
2.
3.
4.
Каналы передачи данных
Сетевые устройства
Узлы сети
Приложения
ОСНОВНЫЕ АБСТРАКЦИИ В NS-3
Каналы передачи и устройства
WifiChannel
WifiNetDevice
Понятие узла сети
Application
Application
Application
“DTN”
Основные абстракции ns-3
Application
Application
Application
Application
Sockets-like
API
Protocol
stack
Protocol
stack
Packet(s)‫‏‬
Node
NetDevice
NetDevice
Node
Channel
Channel
NetDevice
NetDevice
Основные абстракции ns-3
• Интерфейсы:
– Сетевое устройство (NetDevice)
– Сокет (Socket)
• Абстракции:
– Пакет (Packet)
– Узел сети (Node)
– Приложение (Application)
Обзор исходных кодов
• Network
• Internet
• Mobility