1 / 51

NS-3 를 이용한 Proxy Mobile IPv6 시뮬레이션 구현 및 예제

NS-3 를 이용한 Proxy Mobile IPv6 시뮬레이션 구현 및 예제. 한국기술교육대학교 컴퓨터공학부 - 한연희 교수 yhhan@kut.ac.kr 고려대학교 융합소프트웨어 전문대학원 - 최현영 연구교수 neongas@korea.ac.kr. 2011 년도 한국통신학회 단기강좌. PMIPV6 INTRODUCTION. Goal of PMIPv6. Goal

maxime
Download Presentation

NS-3 를 이용한 Proxy Mobile IPv6 시뮬레이션 구현 및 예제

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. NS-3를 이용한 Proxy Mobile IPv6 시뮬레이션 구현 및 예제 한국기술교육대학교 컴퓨터공학부 - 한연희 교수 yhhan@kut.ac.kr 고려대학교 융합소프트웨어 전문대학원 - 최현영 연구교수 neongas@korea.ac.kr 2011년도 한국통신학회 단기강좌

  2. PMIPV6 INTRODUCTION

  3. Goal of PMIPv6 • Goal • This protocol is for providing mobility support to any IPv6 host within a restricted and topologically localized portion of the network and without requiring the host to participate in any mobility related signaling. registration (being extended) PMIPv6 Scenario PMIPv6 in NS-3

  4. PMIPv6 Overview [IETF RFC 5213, August 2008] LMA: Localized Mobility AgentMAG: Mobile Access Gateway IP Tunnel IP-in-IP tunnel between LMA and MAG LMA Home Network MN’s Home Network (Topological Anchor Point) MAG LMA Address (LMAA) That will be the tunnel entry-point LMM (Localized Mobility Management)Domain MAG movement Proxy Binding Update/Ack. (PBU/PBA) Control messages exchanged by MAG to LMA to establish a binding between MN-HoA and Proxy-CoA MN’s Home Network Prefix (MN-HNP) CAFE:2:/64 MN’ Home Address (MN-HoA) MN continues to use it as long as it roams within a same domain Proxy Care of Address (Proxy-CoA) The address of MAG That will be the tunnel end-point PMIPv6 in NS-3

  5. PMIPv6 Overview • New entities • LMA (Local Mobility Anchor) • Home Agent for the mobile node in the PMIPv6 domain • Assigns MN's home prefix and manages the MN's reachability state • MAG (Mobile Access Gateway) • Manages the mobility related signaling for a mobile node • Tracking the MN’s attachment to the link and for signaling the MN's LMA LMA <MN ID# - Home Network Prefix - Tunnel ID#> PBU PBU 4-to-6 Tunnel 4-to-4 Tunnel 6-to-6 Tunnel 6-to-4 Tunnel PBAck PBAck <MN ID# - Home Network Prefix - Tunnel ID#> MAG MAG <Home Network Prefix – Link-specific (MAC) Address> PMIPv6 in NS-3

  6. PMIPv6 Operation Flow PBU: Proxy Binding UpdatePBA: Proxy Binding Ack. MN MAG AAA&Policy Store LMA CN MN Attachment AAA Query with MN-ID AAA Reply with Profile PBU with MN-ID, Home Network Prefix option(null), Timestamp option RA (Router Advertisement) PBA with MN-ID, Home Network Prefix option(HNP) Tunnel Setup Optional DHCP Server DHCP Request DHCP Request DHCP Response DHCP Response [MN-HoA:CN](data) [Proxy-CoA:LMAA][MN-HoA:CN](data) [MN-HoA:CN](data) PMIPv6 in NS-3

  7. PMIPv6 Features • Proxy Registration • LMA needs to understand the Proxy Registration • RFC 3775 MIPv6 BU/BAck. Reuse PBU (Proxy Binding Update) PBAck. (Proxy Binding Ack.) PMIPv6 in NS-3

  8. PMIPv6 Features • Home in Any Place • MAG sends the RA (Router Advertisement) messages advertising MN’s home network prefix and other parameters • MAG will emulate the home link on its access link. • MN always obtain its “home network prefix”, any where in the network. • It will ensure that MN believes it is at its home. • RA Unicast • RA should be UNICASTed to an MN • It will contain MN’s Home Network Prefix • Per-MN Prefix • M:1 Tunnel • LMA-MAG tunnel is a shared tunnel among many MNs. • One tunnel is associated to multiple MNs’ Binding Caches. PMIPv6 in NS-3

  9. PMIPv6 Features • LMA’s Prefix-based Routing • LMA will add prefix routes to MN’s home network prefix over the tunnel. • MAG establishes IPv6 in IPv6 tunnel with LMA Routing State for a MN stored in LMA Routing State for a MN stored in MAG Source-based Routing PMIPv6 in NS-3

  10. PMIPv6 Features • Any MN is just a IPv6 host • Any MN is just a IPv6 host with its protocol operation consistent with the base IPv6 specification. • All aspects of Neighbor Discovery Protocol will not change. LLA: Link Local Address (e.g., MAC Address) PMIPv6 in NS-3

  11. PMIPv6 in 3GPP LTE/EPC • Proxy Mobile IPv6 over LTE • Vertical handover scenario LMA LMA PMIPv6 in NS-3

  12. H. Y. Choi, S.-G. Min, Y.-H. Han, J. Park and H. Kim "Implementation and Evaluation of Proxy Mobile IPv6 in NS-3 Network Simulator," The 5th International Conference on Ubiquitous Information Technologies & Applications (CUTE 2010), pp. 1-5, Dec. 2010 • H.-Y. Choi, S.-G. Min and Y.-H. Han, "PMIPv6-based Flow Mobility Simulation in NS-3," The 5th International Conference on Innovative Mobile and Internet Services in Ubiquitous Computing, pp. 475-480, June 2011. • T. M. Trung, Y.-H. Han, H.-Y. Choi, Y.-G. Hong, "A Design of Network-based Flow Mobility based on Proxy Mobile IPv6," IEEE INFOCOM Workshop on Mobility Management in the Networks of the Future World, pp. 1-5, April 2011. PMIPV6 IMPLEMENTATION IN NS-3

  13. PMIPv6 Implementation • Overview • Based on NS-3 3.8 • Implements common part of Mobile IPv6 • Mobility header, BU(Binding Update)/BA(Binding Ack.) handler • Link layer support: Wifi, WiMax MIPv6 functionality PMIPv6 IPv6 PMIPv6 in NS-3

  14. Class Diagram PMIPv6 in NS-3

  15. Major Classes • PMIPv6 Agent • Pmipv6Mag, Pmipv6Lma – PBU/PBA processing • BindingUpdateList, BindingCache – Manage binding information • Mobility header process • Ipv6MobilityL4Protocol – Mobility header handler • Ipv6MobilityDemux • Ipv6MobilityBindingUpdate – BU handler • Ipv6MobilityBindingAck – BA handler • Tunneling • TunnelNetDevice – IPv6-in-IPv6 creator (Encapsulator) • Ipv6TunnelL4Protocol – IPv6-in-IPv6 handler (Decapsulator) • Routing • Ipv6StaticSourceRouting – Source address based routing • Helper • MagHelper/ LmaHelper – Create and aggregate objects • Application • UnicastRadvd – MAC Unicast of RA in Wifi network PMIPv6 in NS-3

  16. Header Classes PMIPv6 in NS-3

  17. Header Classes (cont’d) • Major classes • Ipv6MobilityHeader – Common parts of mobility header • Ipv6MobilityBindingUpdateHeader – BU header • Ipv6MobilityBindingAckHeader – BA header • MobilityOptionField – Manage mobility header options and calculate 8-octets-based padding • Ipv6MobilityOptionHeader – Common parts of mobility option header • Ipv6MobilityOptionMobileNodeIdentifierHeader, … – Mobility option header PMIPv6 in NS-3

  18. Header Classes (cont’d) • Header implementation example class Ipv6MobilityHeader : public Header { private: uint8_t m_payload_proto; uint8_t m_header_len; uint8_t m_mh_type; uint8_t m_reserved; uint16_t m_checksum; }; void Ipv6MobilityHeader::Print (std::ostream& os) const { os << "( payload_proto = " << (uint32_t)GetPayloadProto() << " header_len = " << (uint32_t)GetHeaderLen() << " mh_type = " << (uint32_t)GetMhType() << " checksum = " << (uint32_t)GetChecksum() <<")"; } uint32_t Ipv6MobilityHeader::GetSerializedSize () const { return 6; } uint32_t Ipv6MobilityHeader::Deserialize (Buffer::Iterator start) { Buffer::Iterator i = start; m_payload_proto = i.ReadU8(); m_header_len = i.ReadU8(); m_mh_type = i.ReadU8(); m_reserved = i.ReadU8(); m_checksum = i.ReadNtohU16(); return GetSerializedSize (); } void Ipv6MobilityHeader::Serialize (Buffer::Iterator start) const { Buffer::Iterator i = start; i.WriteU8 (m_payload_proto); i.WriteU8 (m_header_len); i.WriteU8 (m_mh_type); i.WriteU8 (m_reserved); i.WriteU16 (0); } PMIPv6 in NS-3

  19. BindingUpdateList & BindingCache PMIPv6 in NS-3

  20. Binding Update Process PMIPv6 in NS-3

  21. Binding Update Process (cont’d) • (1) – MN attachment event trigger • Create binding update list • (2) – Sending PBU • (3)~(5) – IPv6 packet transmission between nodes • PBU packet will be arrived at the LMA • (6) – Received by mobility header handler • (7)~(9) – Demultiplexing mobility header based on MhType field in the packet • (10) – Received by PBU handler • Create/Update binding cache • Setup tunneling & routing PMIPv6 in NS-3

  22. Binding Update Process (cont’d) • (11) – Sending PBA • (12)~(14) – IPv6 packet transmission between nodes • PBA packet will be arrived at the MAG • (15) – Received by mobility header handler • (16)~(18) – Demultiplexing • (19) – Received by PBA handler • Update binding update list • Setup tunneling & routing PMIPv6 in NS-3

  23. Binding Update Process Codes • (1) – MN attachment event trigger Ptr<WifiMac> mac = wDev->GetMac(); mac->SetNewNodeCallback (MakeCallback(&Pmipv6Mag::HandleNewNode, this)); <src/internet-stack/pmipv6-agent.cc> void NqapWifiMac::TxOk (const WifiMacHeader &hdr) { NS_LOG_FUNCTION (this); if (hdr.IsAssocResp () && m_stationManager->IsWaitAssocTxOk (hdr.GetAddr1 ())) { NS_LOG_DEBUG ("associated with sta="<<hdr.GetAddr1 ()); m_stationManager->RecordGotAssocTxOk (hdr.GetAddr1 ()); //Proxy Mobile IPv6 (RFC5213) Implementation in NS3 // CHY { if(!m_newNodeCallback.IsNull()) { m_newNodeCallback(hdr.GetAddr1(), Mac48Address::ConvertFrom(GetAddress()), 4 /* WIFI */); } //} } } <src/devices/wifi/nqap-wifi-mac.cc> PMIPv6 in NS-3

  24. Binding Update Process Codes (cont’d) • (2) – Sending PBU void Pmipv6Mag::HandleNewNode(Mac48Address from, Mac48Address to, uint8_t att) { BindingUpdateList::Entry *bule = m_buList.Lookup(pf->GetMnIdentifier()); if ( bule == 0 ) { bule = m_buList.Add(pf->GetMnIdentifier()); } bule->SetAccessTechnologyType(att); bule->SetMnLinkIdentifier(pf->GetMnLinkIdentifier()); bule->SetLmaAddress(pf->GetLmaAddress()); bule->SetIfIndex (ifindex); //preset header information bule->SetLastBindingUpdateSequence(GetSequence()); bule->SetLastBindingUpdateTime(MicroSeconds(Simulator::Now().GetMicroSeconds())); Ptr<Packet> p = BuildPBU(bule); //save packet bule->SetPBUPacket(p); //reset (for the first registration) bule->ResetRetryCount(); //send PBU SendMessage(p->Copy(), bule->GetLmaAddress(), 64); <src/internet-stack/pmipv6-agent.cc> PMIPv6 in NS-3

  25. Binding Update Process Codes (cont’d) • (6) – Received by mobility header handler enum Ipv6L4Protocol::RxStatus_e Ipv6MobilityL4Protocol::Receive (Ptr<Packet> packet, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface) { NS_LOG_FUNCTION (this << packet << src << dst << interface); Ptr<Packet> p = packet->Copy (); Ptr<Ipv6MobilityDemux> ipv6MobilityDemux = GetObject<Ipv6MobilityDemux>(); Ptr<Ipv6Mobility> ipv6Mobility = 0; Ipv6MobilityHeader mh; p->PeekHeader (mh); ipv6Mobility = ipv6MobilityDemux -> GetMobility ( mh.GetMhType() ); if(ipv6Mobility) { ipv6Mobility -> Process (p, src, dst, interface); } return Ipv6L4Protocol::RX_OK; } <src/internet-stack/ipv6-mobility-l4-protocol.cc> PMIPv6 in NS-3

  26. Binding Update Process Codes (cont’d) • (7)~(9) – Demultiplexing mobility header based on MhType field in the packet class Ipv6MobilityBindingUpdate : public Ipv6Mobility { public: static const uint8_t MOB_NUMBER = 5; uint8_t Ipv6MobilityBindingUpdate::GetMobilityNumber () const { return MOB_NUMBER; } <src/internet-stack/ipv6-mobility.h,cc> Ptr<Ipv6Mobility> Ipv6MobilityDemux::GetMobility (int mobilityNumber) { for (Ipv6MobilityList_t::iterator i = m_mobilities.begin (); i != m_mobilities.end (); ++i) { if ((*i)->GetMobilityNumber () == mobilityNumber) { return *i; } } return 0; } <src/internet-stack/ipv6-mobility-demux.cc> PMIPv6 in NS-3

  27. Binding Update Process Codes (cont’d) • (7)~(9) – Demultiplexing mobility header based on MhType field in the packet uint8_t Ipv6MobilityBindingUpdate::Process (Ptr<Packet> p, Ipv6Address src, Ipv6Address dst, Ptr<Ipv6Interface> interface) { NS_LOG_FUNCTION_NOARGS(); Ptr<Packet> packet = p->Copy(); Ipv6MobilityBindingUpdateHeader buh; Ipv6MobilityOptionBundle bundle; /* Proxy Mobile Ipv6 process routine */ packet->RemoveHeader(buh); if(buh.GetFlagP()) { Ptr<Pmipv6Agent> pmip6 = GetNode()->GetObject<Pmipv6Agent>(); if( pmip6 ) { Simulator::ScheduleNow( &Pmipv6Agent::HandlePBU, pmip6, p, src, dst, interface); return 0; } } <src/internet-stack/ipv6-mobility.cc> PMIPv6 in NS-3

  28. Binding Update Process Codes (cont’d) • (10) – Received by PBU handler/ (11) – Sending PBA uint8_t Pmipv6Lma::HandlePBU(Ptr<Packet> packet, Ipv6Address src, Ipv6Address dst, Ptr<Ipv6Interface> interface) { Ptr<Ipv6Mobility> ipv6Mobility = ipv6MobilityDemux->GetMobility(pbu.GetMhType()); NS_ASSERT( ipv6Mobility ); uint8_t length = ((pbu.GetHeaderLen() + 1 )<<3) - pbu.GetOptionsOffset(); ipv6Mobility->ProcessOptions ( packet, pbu.GetOptionsOffset(), length, bundle); if( pbu.GetLifetime() > 0) { bce = m_bCache.Add(mnId); bce->SetProxyCoa(src); bce->SetMnLinkIdentifier(mnLinkId); bce->SetAccessTechnologyType(bundle.GetAccessTechnologyType()); bce->SetHandoffIndicator(bundle.GetHandoffIndicator()); bce->SetMagLinkAddress(bundle.GetMagLinkAddress()); bce->SetLastBindingUpdateTime(bundle.GetTimestamp()); bce->SetReachableTime(Seconds(pbu.GetLifetime())); bce->SetLastBindingUpdateSequence(pbu.GetSequence()); <src/internet-stack/pmipv6-agent.cc> PMIPv6 in NS-3

  29. Binding Update Codes (cont’d) • (10) – Received by PBU handler/ (11) – Sending PBA //create tunnel SetupTunnelAndRouting (bce); bce->MarkReachable(); //start lifetime timer bce->StartReachableTimer(); } } errStatus = Ipv6MobilityHeader::BA_STATUS_BINDING_UPDATE_ACCEPTED; //send PBA Ptr<Packet> pktPba; if ( bce != 0 ) { pktPba = BuildPBA(bce, errStatus); } else { pktPba = BuildPBA(pbu, bundle, errStatus); } SendMessage ( pktPba, src, 64); <src/internet-stack/pmipv6-agent.cc> PMIPv6 in NS-3

  30. Binding Update Process Codes (cont’d) • (19) – Received by PBA handler uint8_t Pmipv6Mag::HandlePBA(Ptr<Packet> packet, Ipv6Address src, Ipv6Address dst, Ptr<Ipv6Interface> interface) BindingUpdateList::Entry *bule = m_buList.Lookup(bundle.GetMnIdentifier()); switch (pba.GetStatus()) { case Ipv6MobilityHeader::BA_STATUS_BINDING_UPDATE_ACCEPTED: bule->StopRetransTimer(); bule->SetPBUPacket(0); //update information bule->SetHomeNetworkPrefixes(bundle.GetHomeNetworkPrefixes()); bule->SetReachableTime(Seconds(pba.GetLifetime())); if( pba.GetLifetime() > 0 ) { //register radvd interface SetupRadvdInterface(bule); //create tunnel & setup routing SetupTunnelAndRouting(bule); } bule->MarkReachable(); //Setup lifetime bule->StartRefreshTimer(); bule->StartReachableTimer(); <src/internet-stack/pmipv6-agent.cc> PMIPv6 in NS-3

  31. Data Process PMIPv6 in NS-3

  32. Data Process (cont’d) • (1)~(2) – IPv6 packet arrival • Data packet from source node, either CN or MN • (3)~(4) – Incoming packet process in IPv6 • Query to routing module • (3)’~(4)’ – Subsequent routing query (default) • (3)”~(4)” – Source based routing query only in MAG • Source based routing is higher priority than static routing • (5) – Forwarding the packet to the MAG via tunnel device • IPv6-in-IPv6 Encapsulation performed • (6) – Sending encapsulated packet PMIPv6 in NS-3

  33. Data Process (cont’d) • (7)~(9) – IPv6 packet transmission between nodes • (10)~(11) – Incoming packet process in IPv6 • Query to routing module • (12) – Received by IPv6-in-IPv6 packet handler • Decapsulation performed • (13) – Sending decapsulated packet • (14) – Sending Data Packet to the destination node, either CN or MN PMIPv6 in NS-3

  34. Data Process Codes • (0) – Tunnel Device and Routing Setup bool Pmipv6Mag::SetupTunnelAndRouting(BindingUpdateList::Entry *bule) //create tunnel Ptr<Ipv6TunnelL4Protocol> th = GetNode()->GetObject<Ipv6TunnelL4Protocol>(); NS_ASSERT(th); uint16_t tunnelIf = th->AddTunnel(bule->GetLmaAddress()); bule->SetTunnelIfIndex (tunnelIf); <src/internet-stack/pmipv6-agent.cc> PMIPv6 in NS-3

  35. Data Process Codes (cont’d) • (0) – Tunnel Device and Routing Setup //routing setup by static routing protocol Ipv6StaticRoutingHelper staticRoutingHelper; Ipv6StaticSourceRoutingHelper sourceRoutingHelper; Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>(); Ptr<Ipv6StaticRouting> staticRouting = staticRoutingHelper.GetStaticRouting(ipv6); Ptr<Ipv6StaticSourceRouting> sourceRouting = sourceRoutingHelper.GetStaticSourceRouting(ipv6); NS_ASSERT(staticRouting && sourceRouting); std::list<Ipv6Address> hnpList = bule->GetHomeNetworkPrefixes(); for ( std::list<Ipv6Address>::iterator i = hnpList.begin(); i != hnpList.end(); i++ ) { NS_LOG_LOGIC ("Add Route to " << (*i) << "/64 via " << (uint32_t)bule->GetIfIndex()); staticRouting->AddNetworkRouteTo((*i), Ipv6Prefix(64), bule->GetIfIndex()); NS_LOG_LOGIC ("Add Source Route from " << (*i) << "/64 via " << (uint32_t)bule->GetTunnelIfIndex()); sourceRouting->AddNetworkRouteFrom((*i), Ipv6Prefix(64), bule->GetTunnelIfIndex()); } <src/internet-stack/pmipv6-agent.cc> PMIPv6 in NS-3

  36. Data Process Codes (cont’d) • (5) – Forwarding the packet to the MAG via tunnel device/ (6) – Sending encapsulated packet boolTunnelNetDevice::Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber) Ptr<Ipv6L3Protocol> ipv6 = GetNode()->GetObject<Ipv6L3Protocol>(); NS_ASSERT (ipv6 != 0 && ipv6->GetRoutingProtocol () != 0); NS_ASSERT ( !m_remoteAddress.IsAny() ); Ipv6Address src = m_localAddress; Ipv6Address dst = m_remoteAddress; SocketIpTtlTag tag; uint8_t ttl = 64; tag.SetTtl (ttl); packet->AddPacketTag (tag); ipv6->Send (packet, src, dst, 41 /* IPv6-in-IPv6 */, 0); <src/devices/tunnel-net-device.cc> PMIPv6 in NS-3

  37. Data Process Codes (cont’d) • (12) – Received by IPv6-in-IPv6 packet handler/ (13) – Sending decapsulated packet const uint8_t Ipv6TunnelL4Protocol::PROT_NUMBER = 41; /* IPV6-in-IPv6 */ enum Ipv6L4Protocol::RxStatus_e Ipv6TunnelL4Protocol::Receive (Ptr<Packet> packet, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface) Ptr<Packet> p = packet->Copy(); Ipv6Header innerHeader; p->RemoveHeader(innerHeader); Ipv6Address source = innerHeader.GetSourceAddress(); Ipv6Address destination = innerHeader.GetDestinationAddress(); SocketIpTtlTag tag; tag.SetTtl (innerHeader.GetHopLimit() - 1); p->AddPacketTag (tag); ipv6->Send(p, source, destination, innerHeader.GetNextHeader(), 0); <src/internet-stack/ipv6-tunnel-l4-protocol.cc> PMIPv6 in NS-3

  38. Helpers • MagHelper • Install(node) • Create PMIPv6 related objects and aggregate into Node • Register callback for MN attachment trigger to WifiMac in node • Install(node, addr, Ptr<Node> ap_node) • Create PMIPv6 related objects and aggregate into Node • Register callback for MN attachment trigger to WifiMac in ap_node • SetProfileHelper(Pmip6ProfileHelper) • Set profile helper • LmaHelper • Install(node) • Create PMIPv6 related objects and aggregate into Node • SetProfileHelper(Pmip6ProfileHelper) • Set profile helper • SetPrefixPoolBase(prefix, prefix_len) • Set Prefix Pool information PMIPv6 in NS-3

  39. PMIPv6 Simulation Scenario PMIPv6 in NS-3

  40. Simulation Script • Create nodes • Install IPv4/IPv6 networking stack backbone.Create(3); aps.Create(2); cn.Create(1); sta.Create(1); lma.Add(backbone.Get(0)); mags.Add(backbone.Get(1)); mags.Add(backbone.Get(2)); outerNet.Add(lma); outerNet.Add(cn); mag1Net.Add(mags.Get(0)); mag1Net.Add(aps.Get(0)); mag2Net.Add(mags.Get(1)); mag2Net.Add(aps.Get(1)); InternetStackHelper internet; internet.Install (backbone); internet.Install (aps); internet.Install (cn); internet.Install (sta); PMIPv6 in NS-3

  41. Simulation Script (cont’d) • Attach devices & Assign IPv6 Addresses //Link between CN and LMA is 50Mbps and 10ms delay csma1.SetChannelAttribute ("DataRate", DataRateValue (DataRate(50000000))); csma1.SetChannelAttribute ("Delay", TimeValue (MilliSeconds(10))); csma1.SetDeviceAttribute ("Mtu", UintegerValue (1400)); outerDevs = csma1.Install(outerNet); iifc = AssignIpv6Address(outerDevs.Get(0), Ipv6Address("3ffe:2::1"), 64); outerIfs.Add(iifc); iifc = AssignIpv6Address(outerDevs.Get(1), Ipv6Address("3ffe:2::2"), 64); outerIfs.Add(iifc); outerIfs.SetRouter(0, true); //All Link is 50Mbps and 2ms delay csma.SetChannelAttribute ("DataRate", DataRateValue (DataRate(50000000))); csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds(2))); csma.SetDeviceAttribute ("Mtu", UintegerValue (1400)); backboneDevs = csma.Install(backbone); iifc = AssignIpv6Address(backboneDevs.Get(0), Ipv6Address("3ffe:1::1"), 64); backboneIfs.Add(iifc); iifc = AssignIpv6Address(backboneDevs.Get(1), Ipv6Address("3ffe:1::2"), 64); backboneIfs.Add(iifc); iifc = AssignIpv6Address(backboneDevs.Get(2), Ipv6Address("3ffe:1::3"), 64); backboneIfs.Add(iifc); backboneIfs.SetRouter(0, true); PMIPv6 in NS-3

  42. Simulation Script (cont’d) • Setup mobility MobilityHelper mobility; Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> (); positionAlloc->Add (Vector (-100.0, 0.0, 0.0)); //MAG1AP positionAlloc->Add (Vector (100.0, 0.0, 0.0)); //MAG2AP mobility.SetPositionAllocator (positionAlloc); mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); mobility.Install (aps); Ptr<ListPositionAllocator> staPositionAlloc = CreateObject<ListPositionAllocator> (); staPositionAlloc->Add (Vector (-100.0, 100.0, 0.0)); //STA mobility.SetPositionAllocator (staPositionAlloc); mobility.SetMobilityModel ("ns3::ConstantVelocityMobilityModel"); mobility.Install(sta); Ptr<ConstantVelocityMobilityModel> cvm = sta.Get(0)->GetObject<ConstantVelocityMobilityModel>(); cvm->SetVelocity(Vector (20.0, 0, 0)); //move to left to right 20.0m/s PMIPv6 in NS-3

  43. Simulation Script (cont’d) • Setup Wifi Ssid ssid = Ssid("MAG"); YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO); WifiHelper wifi = WifiHelper::Default (); NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); wifiPhy.SetChannel (wifiChannel.Create ()); wifiMac.SetType ("ns3::NqapWifiMac", "Ssid", SsidValue (ssid), "BeaconGeneration", BooleanValue (true), "BeaconInterval", TimeValue (MilliSeconds(100))); mag1ApDev = wifi.Install (wifiPhy, wifiMac, mag1Net.Get(1)); //WLAN interface wifiMac.SetType ("ns3::NqstaWifiMac", "Ssid", SsidValue (ssid), "ActiveProbing", BooleanValue (false)); staDevs.Add( wifi.Install (wifiPhy, wifiMac, sta)); PMIPv6 in NS-3

  44. Simulation Script (cont’d) • Setup PMIPv6 //attach PMIPv6 agents Pmip6ProfileHelper *profile = new Pmip6ProfileHelper(); //adding profile for each station profile->AddProfile(Identifier("pmip1@example.com"), Identifier(Mac48Address::ConvertFrom(staDevs.Get(0)->GetAddress())), backboneIfs.GetAddress(0, 1), std::list<Ipv6Address>()); Pmip6LmaHelper lmahelper; lmahelper.SetPrefixPoolBase(Ipv6Address("3ffe:1:4::"), 48); lmahelper.SetProfileHelper(profile); lmahelper.Install(lma.Get(0)); Pmip6MagHelper maghelper; maghelper.SetProfileHelper(profile); maghelper.Install (mags.Get(0), mag1Ifs.GetAddress(0, 0), aps.Get(0)); maghelper.Install (mags.Get(1), mag2Ifs.GetAddress(0, 0), aps.Get(1)); PMIPv6 in NS-3

  45. Simulation Script (cont’d) • Setup Traffic Udp6ServerHelper udpServer(6000); ApplicationContainer apps = udpServer.Install (sta.Get (0)); apps.Start (Seconds (1.0)); apps.Stop (Seconds (10.0)); uint32_t packetSize = 1024; uint32_t maxPacketCount = 0xffffffff; Time interPacketInterval = MilliSeconds(10); Udp6ClientHelper udpClient(Ipv6Address("3ffe:1:4:1:200:ff:fe00:c"), 6000); udpClient.SetAttribute ("Interval", TimeValue (interPacketInterval)); udpClient.SetAttribute ("PacketSize", UintegerValue (packetSize)); udpClient.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount)); apps = udpClient.Install (cn.Get (0)); apps.Start (Seconds (1.5)); apps.Stop (Seconds (10.0)); PMIPv6 in NS-3

  46. Simulation Results • PCAP Trace of Binding Update in the LMA PMIPv6 in NS-3

  47. Simulation Results (cont’d) • PCAP Trace of Handover in the MN PMIPv6 in NS-3

  48. Simulation Results (cont’d) • PCAP Trace of Tunneling in the LMA PMIPv6 in NS-3

  49. Simulation Results (cont’d) • PCAP Trace of Tunneling after handover in the LMA PMIPv6 in NS-3

  50. Simulation Results (cont’d) • Handover Latency PMIPv6 in NS-3

More Related