两种写代码的风格(从简而一)
来源:互联网 发布:网络摄像机排行榜 编辑:程序博客网 时间:2024/05/21 22:43
#include "ns3/core-module.h"///直接一个个建立,先建立好节点#include "ns3/network-module.h"#include "ns3/csma-module.h"#include "ns3/internet-module.h"#include "ns3/point-to-point-module.h"#include "ns3/applications-module.h"#include "ns3/ipv4-global-routing-helper.h"using namespace ns3;NS_LOG_COMPONENT_DEFINE ("Project1");NodeContainer coreNode, aggNodes, torNodes, serverNodes;NodeContainer l1Nodes[2], l2Nodes[2], l3Nodes[4];NetDeviceContainer l1Devices[2], l2Devices[2], l3Devices[4];Ipv4InterfaceContainer l1Interfaces[2], l2Interfaces[2], l3Interfaces[4];PointToPointHelper pointToPoint;CsmaHelper csma;void addNodes(NodeContainer *targetContainer, NodeContainer *sourceContainer, int startIndex, int count){ for(int i = 0; i < count ; i++) targetContainer->Add(sourceContainer->Get(startIndex + i));}void createTopogy(){ coreNode.Create(1); aggNodes.Create(2); torNodes.Create(4); serverNodes.Create(8); pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("1.5Mbps")); pointToPoint.SetChannelAttribute ("Delay", TimeValue(NanoSeconds(500))); for(int i = 0; i < 2; i++) { addNodes(&l1Nodes[i], &coreNode, 0, 1); addNodes(&l1Nodes[i], &aggNodes, i, 1); l1Devices[i] = pointToPoint.Install(l1Nodes[i]); } csma.SetChannelAttribute ("DataRate", StringValue ("1Mbps")); csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (500))); for(int i = 0; i < 2; i++) { addNodes(&l2Nodes[i], &aggNodes, i, 1); addNodes(&l2Nodes[i], &torNodes, i*2, 2); l2Devices[i] = csma.Install(l2Nodes[i]); } for(int i = 0; i < 4; i++) { addNodes(&l3Nodes[i], &torNodes, i, 1); addNodes(&l3Nodes[i], &serverNodes, i*2, 2); l3Devices[i] = csma.Install(l3Nodes[i]); }}void internetStackInstall(){ InternetStackHelper stack; stack.Install(coreNode); stack.Install(aggNodes); stack.Install(torNodes); stack.Install(serverNodes);}void setIP(){ for(int i = 0; i < 2; i++) { Ipv4AddressHelper address; char ip[16] = "192.168.i.0"; ip[8] = i + 1 + '0'; address.SetBase (ip, "255.255.255.0"); l1Interfaces[i] = address.Assign (l1Devices[i]); } for(int i = 0; i < 2; i++) { Ipv4AddressHelper address; char ip[16] = "10.i.0.0"; ip[3] = i + 1 + '0'; address.SetBase (ip, "255.255.255.0"); l2Interfaces[i] = address.Assign (l2Devices[i]); } for(int i = 0; i < 4; i++) { Ipv4AddressHelper address; char ip[16] = "10.0.i.0"; ip[5] = i + 1 + '0'; address.SetBase (ip, "255.255.255.0"); l3Interfaces[i] = address.Assign (l3Devices[i]); }}int main(int argc, char *argv[]){ bool verbose = true; int pattern = 1; CommandLine cmd; cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose); cmd.AddValue ("pattern", "Choose a pattern for simulation", pattern); cmd.Parse (argc,argv); LogComponentEnable("Project1", LOG_LEVEL_INFO); if (verbose) { LogComponentEnable ("PacketSink", LOG_LEVEL_INFO); LogComponentEnable ("OnOffApplication", LOG_LEVEL_INFO); } createTopogy(); internetStackInstall(); setIP(); if(pattern == 1) { int16_t sinkPort = 8080; PacketSinkHelper packetSinkHelper("ns3::TcpSocketFactory",InetSocketAddress(Ipv4Address::GetAny(),sinkPort)); ApplicationContainer sinkApps[4]; ApplicationContainer clientApps[4]; for(int i = 0; i < 4; i++) { sinkApps[i] = packetSinkHelper.Install(serverNodes.Get(i)); sinkApps[i].Start(Seconds(0)); sinkApps[i].Stop(Seconds(50)); OnOffHelper client("ns3::TcpSocketFactory", InetSocketAddress(l3Interfaces[i/2].GetAddress (i%2 + 1), sinkPort)); client.SetAttribute ("OnTime", StringValue("ns3::ConstantRandomVariable[Constant=50]")); client.SetAttribute ("OffTime", StringValue("ns3::ConstantRandomVariable[Constant=0]")); client.SetAttribute ("DataRate", DataRateValue (DataRate ("1.5Mbps"))); client.SetAttribute ("PacketSize", UintegerValue (2000)); clientApps[i] = client.Install (serverNodes.Get (i+4)); clientApps[i].Start(Seconds (1.0 )); clientApps[i].Stop (Seconds (51.0)); } pointToPoint.EnablePcapAll ("p1p2p"); csma.EnablePcapAll("p1csma"); Simulator::Stop (Seconds(50)); } else if(pattern == 2) { int16_t sinkPort = 8080; PacketSinkHelper packetSinkHelper("ns3::TcpSocketFactory",InetSocketAddress(Ipv4Address::GetAny(),sinkPort)); ApplicationContainer sinkApps; sinkApps = packetSinkHelper.Install(serverNodes.Get(0)); sinkApps.Start(Seconds(0)); sinkApps.Stop(Seconds(50)); ApplicationContainer clientApps[7]; for(int i = 0; i < 7; i++) { OnOffHelper client("ns3::TcpSocketFactory", InetSocketAddress(l3Interfaces[0].GetAddress(1), sinkPort)); client.SetAttribute ("OnTime", StringValue("ns3::ConstantRandomVariable[Constant=50]")); client.SetAttribute ("OffTime", StringValue("ns3::ConstantRandomVariable[Constant=0]")); client.SetAttribute ("DataRate", DataRateValue (DataRate ("1.5Mbps"))); client.SetAttribute ("PacketSize", UintegerValue (2000)); clientApps[i] = client.Install (serverNodes.Get (i + 1)); clientApps[i].Start(Seconds (1.0 )); clientApps[i].Stop (Seconds (51.0)); } pointToPoint.EnablePcapAll ("p2p2p"); csma.EnablePcapAll("p2csma"); Simulator::Stop (Seconds(50)); } else NS_LOG_INFO("This project only contains pattern 1 and pattern 2!!!"); Ipv4GlobalRoutingHelper::PopulateRoutingTables (); Simulator::Run (); Simulator::Destroy (); return 0;}
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- *//* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation; * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#include "ns3/core-module.h"//先从建立一个子树开始逐渐建立整个拓扑#include "ns3/network-module.h"#include "ns3/csma-module.h"#include "ns3/internet-module.h"#include "ns3/point-to-point-module.h"#include "ns3/applications-module.h"#include "ns3/ipv4-global-routing-helper.h"#include <string>#include <sstream>#include <iostream>using namespace ns3;using namespace std;NS_LOG_COMPONENT_DEFINE ("ProjectScript");// This registers ProjectScript as a log component.int main (int argc, char *argv[]){ bool verbose = true; uint32_t nCsma = 2; CommandLine cmd; cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma); cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose); cmd.Parse (argc,argv); if (verbose) { //LogComponentEnable ("OnOffApplication", LOG_LEVEL_INFO); // LogComponentEnable ("PacketSink", LOG_LEVEL_INFO); } // if (verbose) // { // LogComponentEnable ("ProjectScript", LOG_LEVEL_INFO); // } nCsma = nCsma == 0 ? 1 : nCsma; NodeContainer rootNode; rootNode.Create (1); NodeContainer leafNodes; Ipv4InterfaceContainer leafNodeIpv4Container; PointToPointHelper * ptrP2P[2]; for (int iAggNode=0;iAggNode<2;iAggNode++) { NodeContainer aggregationNode;//Will have one aggregationNode and one root node aggregationNode.Create (1); NodeContainer toRNodesContainer;//Will have one aggregationNode and two ToR Nodes toRNodesContainer.Add(aggregationNode.Get(0)); aggregationNode.Add(rootNode.Get(0)); //need for two toRNodes per aggregationNode for (int iToR=0;iToR<2;iToR++) { NodeContainer toRNode; toRNode.Create (1); toRNodesContainer.Add (toRNode.Get (0)); NodeContainer csmaNodesLeafToR;//Will have two leafNodes and one ToR node csmaNodesLeafToR.Create (nCsma); csmaNodesLeafToR.Add (toRNode.Get (0)); leafNodes.Add(csmaNodesLeafToR.Get(0));//Will have all leafNodes leafNodes.Add(csmaNodesLeafToR.Get(1)); CsmaHelper csma; csma.SetChannelAttribute ("DataRate", StringValue ("1Mbps")); csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (500))); NetDeviceContainer csmaDevicesLeafToR; csmaDevicesLeafToR = csma.Install (csmaNodesLeafToR);//install csma InternetStackHelper stack; stack.Install (csmaNodesLeafToR);//Every node can only be installed once(two two leafNodes and one ToR node) int count=-1; if(0==iAggNode) { count=1; } if(1==iAggNode) { count=2; } string ipv4BaseString="10.0."; stringstream stream; string strNum=""; stream<<(iToR+iAggNode+count); stream>>strNum; stream.clear(); ipv4BaseString=ipv4BaseString+strNum+".0"; char const * cIpv4Base=ipv4BaseString.c_str(); cout<<"iAggNode: "<<iAggNode<<" iToR: "<<iToR<<" cIpv4StringBase:"<<cIpv4Base<<endl; Ipv4AddressHelper addressLeafToR; addressLeafToR.SetBase (cIpv4Base, "255.255.255.0");//assign one ToR and two nodes ip Ipv4InterfaceContainer leafToRInterfaces; leafToRInterfaces = addressLeafToR.Assign (csmaDevicesLeafToR); leafNodeIpv4Container.Add(leafToRInterfaces.Get(0)); leafNodeIpv4Container.Add(leafToRInterfaces.Get(1)); } //********************************************************************//two ToRs and one aggregationNode assign ip CsmaHelper csmaAT; csmaAT.SetChannelAttribute ("DataRate", StringValue ("1Mbps")); csmaAT.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (500))); NetDeviceContainer csmaDevicesAT; csmaDevicesAT = csmaAT.Install (toRNodesContainer); InternetStackHelper stack; stack.Install (aggregationNode.Get(0)); string aggBaseIpStr="10."; stringstream stream; string strNum=""; stream<<(iAggNode+1); stream>>strNum; //cout<<"strNum1"<<strNum<<endl; stream.clear(); aggBaseIpStr=aggBaseIpStr+strNum+".1.0"; char const * cAggIpv4Base=aggBaseIpStr.c_str(); cout<<"iAggNode: "<<iAggNode<<" aggBaseIpStr:"<<aggBaseIpStr<<endl; Ipv4AddressHelper address; address.SetBase (cAggIpv4Base, "255.255.255.0");//assign one ToR and two nodes ip Ipv4InterfaceContainer csmaInterfaces; csmaInterfaces = address.Assign (csmaDevicesAT); //****************************************************************************************** //******************************************************//P2P:one aggregationNode and one RootNode PointToPointHelper * pointToPoint=new PointToPointHelper() ; pointToPoint->SetDeviceAttribute ("DataRate", StringValue ("1.5Mbps")); pointToPoint->SetChannelAttribute ("Delay", TimeValue (NanoSeconds (500))); NetDeviceContainer devicesP2p; devicesP2p = pointToPoint->Install (aggregationNode);//mac //cout<<devicesP2p<<endl; if(0==iAggNode) { InternetStackHelper stackRoot; stackRoot.Install (rootNode.Get(0)); } string rootBaseIpStr="192.168."; rootBaseIpStr=rootBaseIpStr+strNum+".0"; char const * cRootIpv4Base=rootBaseIpStr.c_str(); cout<<"iAggNode: "<<iAggNode<<" rootBaseIpStr:"<<rootBaseIpStr<<endl; Ipv4AddressHelper addressRoot; addressRoot.SetBase (cRootIpv4Base, "255.255.255.0"); Ipv4InterfaceContainer interfacesP2p = addressRoot.Assign (devicesP2p); //******************************************************************* // if(iAggNode==1) // { // cout<<"strNum"<<strNum<<endl; // pointToPoint.EnablePcapAll (strNum+"Root"); // } ptrP2P[iAggNode]=pointToPoint; } //network has been established! now choose connection pattern //**************************************Pattern 1******************************************* //*Pattern 1: inter-cluster traffic //*Each server communicates using TCP with another server that comes from different cluster //*For example, 1-5, 6-2, 3-7, 8-4 //******************************************************************************************* //const int pairs=4; int i=0; //for(int i=0;i<pairs;i++) { uint16_t sinkPort = 8080; Address sinkAddress (InetSocketAddress (leafNodeIpv4Container.GetAddress (i+4), sinkPort)); PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), sinkPort)); ApplicationContainer sinkApps = packetSinkHelper.Install (leafNodes.Get (i+4)); sinkApps.Start (Seconds (0.));//All Applications need to be provided with a starting simulation time and a stopping simulation time. The ApplicationContainer is a convenient place for allowing all of the contained Applications to be told to shut down and stop doing their thing (Stop) at a common time. sinkApps.Stop (Seconds (50.)); OnOffHelper client("ns3::TcpSocketFactory", InetSocketAddress(leafNodeIpv4Container.GetAddress (i+4), sinkPort)); client.SetAttribute ("OnTime", StringValue("ns3::ConstantRandomVariable[Constant=50]")); client.SetAttribute ("OffTime", StringValue("ns3::ConstantRandomVariable[Constant=0]")); client.SetAttribute ("DataRate", DataRateValue (DataRate ("1Mbps"))); client.SetAttribute ("PacketSize", UintegerValue (2000)); ApplicationContainer clientApp = client.Install (leafNodes.Get (i)); clientApp.Start(Seconds (1.0)); clientApp.Stop (Seconds (51.0)); } //implement here: Ipv4GlobalRoutingHelper::PopulateRoutingTables (); ptrP2P[0]->EnablePcapAll ("InRoot"); for(int i=0;i<2;i++) { delete ptrP2P[i]; } Simulator::Run (); Simulator::Destroy (); return 0;}//********************************//install// net driver install// tcp/ip protocol install// what proctocol use (tcp? udp?) // //**************************************Pattern 2******************************************* //*Pattern 2: inter-cluster traffic //*Each server communicates using TCP with another server that comes from different cluster //*For example, 1-5, 6-2, 3-7, 8-4 //******************************************************************************************* // UdpEchoServerHelper echoServer (9); // ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (nCsma)); // serverApps.Start (Seconds (1.0)); // serverApps.Stop (Seconds (10.0)); // UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9); // echoClient.SetAttribute ("MaxPackets", UintegerValue (1)); // echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0))); // echoClient.SetAttribute ("PacketSize", UintegerValue (1024)); // ApplicationContainer clientApps = echoClient.Install (p2pNodes.Get (0)); // clientApps.Start (Seconds (2.0)); // clientApps.Stop (Seconds (10.0)); //Pattern 1: inter-cluster traffic//Each server communicates using TCP with another server that comes from different cluster//For example, 1-5, 6-2, 3-7, 8-4
0 0
- 两种写代码的风格(从简而一)
- NS3的代码风格(一)
- VLC代码分析(一)代码风格
- 代码布局与风格(一)
- 代码覆盖率 (Code Coverage)从简到繁 (一)
- 代码覆盖率 (Code Coverage)从简到繁 (一)
- 代码覆盖率 (Code Coverage)从简到繁 (一)
- 理解神经网络,从简单的例子开始(1)7行python代码构建神经网络
- Python 代码风格学习一
- 感受大师的代码风格_opencv源代码结构分析一
- JMS入门(一)从简单示例开始
- 从简单实例开始,学会写Makefile(一)
- Unity3D 学习从简单开始-GUI探索(一)
- Vue +Node +Mysql 从简至全(一)
- 代码风格(一)注释、头文件、宏定义
- C++代码风格养成之路(一)
- PEP 8 —Python代码风格指南(一)
- 编程的一些代码风格(JAVA)
- 最小割
- 查看手机是UFS还是emmc
- 1.Python基础要点(一)
- 关于srand()函数与rand()函数的问题
- LeetCode-43. Multiply Strings (JAVA)大整数乘法
- 两种写代码的风格(从简而一)
- LeetCode#268. Missing Number
- Week Training: 406 Queue Reconstruction by Height
- Sass在win7环境中的安装
- redis集群——删除节点
- 仿美团登录界面
- Android中带你开发一款自动爆破签名校验工具kstools
- strcpy函数的实现
- VIM快捷(二):插入