806PacketSocketTest

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2014 Universita' di Firenze
  * 
  * 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
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
  
 #include "ns3/test.h"
 #include "ns3/simulator.h"
 #include "ns3/uinteger.h"
 #include "ns3/traced-callback.h"
 #include "ns3/packet.h"
 #include "ns3/packet-socket-helper.h"
 #include "ns3/packet-socket-client.h"
 #include "ns3/packet-socket-server.h"
 #include "ns3/simple-net-device.h"
 #include "ns3/simple-channel.h"
 #include "ns3/netanim-module.h"
 #include "ns3/csma-module.h"
 #include <string>
  
 using namespace ns3;

 using namespace std;


  
 class PacketSocketAppsTest : public TestCase
 {
   uint32_t m_receivedPacketSize;    
   uint32_t m_receivedPacketNumber;  
  
 public:
   virtual void DoRun (void);
   PacketSocketAppsTest ();
   void ReceivePkt (Ptr<const Packet> packet, const Address &from);
 };
  
 PacketSocketAppsTest::PacketSocketAppsTest ()
   : TestCase ("Packet Socket Apps test")
 {
   m_receivedPacketSize = 0;
   m_receivedPacketNumber = 0;
 }
  
 void PacketSocketAppsTest::ReceivePkt (Ptr<const Packet> packet, const Address &from)
 {
    
   if (packet)
     {
       m_receivedPacketSize = packet->GetSize ();
       m_receivedPacketNumber++;
     }
 }
  
  
 void
 PacketSocketAppsTest::DoRun (void)
 {
    ns3::PacketMetadata::Enable () ;
   // Create topology
  
   NodeContainer nodes;
   nodes.Create (2);
//    ns3::PacketMetadata::Enable();
  
   PacketSocketHelper packetSocket;
  
   // give packet socket powers to nodes.
   packetSocket.Install (nodes);


  
  /* Ptr<SimpleNetDevice> txDev;
   txDev = CreateObject<SimpleNetDevice> ();
   nodes.Get (0)->AddDevice (txDev);
  
   Ptr<SimpleNetDevice> rxDev;
   rxDev = CreateObject<SimpleNetDevice> ();
   nodes.Get (1)->AddDevice (rxDev);
  
   Ptr<SimpleChannel> channel = CreateObject<SimpleChannel> ();
   txDev->SetChannel (channel);
   rxDev->SetChannel (channel);
   txDev->SetNode (nodes.Get (0));
   rxDev->SetNode (nodes.Get (1));
  
  
   PacketSocketAddress socketAddr;
   socketAddr.SetSingleDevice (txDev->GetIfIndex ());
   socketAddr.SetPhysicalAddress (rxDev->GetAddress ());
   socketAddr.SetProtocol (1);
   */

  //modify
   CsmaHelper csma;
   csma.SetChannelAttribute ("DataRate", DataRateValue (DataRate (5000000)));
   csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
   NetDeviceContainer devs = csma.Install (nodes);
  

   PacketSocketAddress socketAddr;
   socketAddr.SetSingleDevice (devs.Get(0) ->GetIfIndex ());
   socketAddr.SetPhysicalAddress (devs.Get(1)->GetAddress ());
   // Arbitrary protocol type.
   // Note: PacketSocket doesn't have any L4 multiplexing or demultiplexing
   //       The only mux/demux is based on the protocol field
   socketAddr.SetProtocol (1);
 
//    Ptr<PacketSocketClient> client = CreateObject<PacketSocketClient> ();
//    client->SetRemote (socketAddr);
//    nodes.Get (0)->AddApplication (client);
 
//    Ptr<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
//    server->SetLocal (socketAddr);
//    nodes.Get (1)->AddApplication (server);
//    client->StartApplication();
  
   Ptr<PacketSocketClient> client = CreateObject<PacketSocketClient> ();
   client->SetRemote (socketAddr);
   client->SetAttribute ("PacketSize", UintegerValue (1000));
   client->SetAttribute ("MaxPackets", UintegerValue (3));
   nodes.Get (0)->AddApplication (client);
  
   Ptr<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
   server->TraceConnectWithoutContext ("Rx", MakeCallback (&PacketSocketAppsTest::ReceivePkt, this));
   server->SetLocal (socketAddr);
   nodes.Get (1)->AddApplication (server);

   //add......................................................
   string str="hello ns3 !";
   uint8_t buffer[255] ;
   uint32_t len = str.length();
    for(uint32_t i=0;i<len;i++)
        {
         buffer[i]=str[i];//char 与 uint_8逐个赋值
        }
    buffer[len]='\0';
    Ptr<const Packet>  packet = Create<Packet>(buffer,sizeof(buffer));//把buffer写入到包内

    //send packet
    // client->Send(packet);



    PacketSocketAppsTest::ReceivePkt(packet,socketAddr);
    AsciiTraceHelper ascii;
    csma.EnableAsciiAll (ascii.CreateFileStream ("806packet-socket-apps-test-suite.pcap"));
    csma.EnablePcapAll ("806packet-socket-apps-test-suite");
    AnimationInterface anim("806packet-socket-apps-test-suite.xml");
  

  
   Simulator::Run ();
   Simulator::Destroy ();
  
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacketNumber, 3, "Number of packet received");
   NS_TEST_EXPECT_MSG_EQ (m_receivedPacketSize, 1000, "Size of packet received");
 }
  
  
 class PacketSocketAppsTestSuite : public TestSuite
 {
 public:
   PacketSocketAppsTestSuite () : TestSuite ("packet-socket-apps", UNIT)
   {
     AddTestCase (new PacketSocketAppsTest, TestCase::QUICK);
   }
 };

 //new.............................................................
int main (int argc, char *argv[]){
  
    PacketSocketAppsTest packetSocketAppsCase;
    packetSocketAppsCase.DoRun();
    return 0;
   
}
  
 static PacketSocketAppsTestSuite g_packetSocketAppsTestSuite; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值