Основы 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
© Copyright 2022 DropDoc