--
You received this message because you are subscribed to the Google Groups "ns-3-users" group.
To post to this group, send email to ns-3-...@googlegroups.com.
To unsubscribe from this group, send email to ns-3-users+...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/ns-3-users?hl=en.
Ptr <Packet> ShimLayerRmc::ModifyPacketDestination(Ptr<Packet> packet2){//The following code is based from http://polythinking.wordpress.com/2012/05/30/ns-3-network-simulator-how-to-find-a-specific-header-in-packet-in-ns-3/// To get a header from Ptr<Packet> packet first, copy the packetPtr<Packet> q = packet->Copy();// Use indicator to search the packetPacketMetadata::ItemIterator metadataIterator = q->BeginItem();PacketMetadata::Item item;while (metadataIterator.HasNext()){item = metadataIterator.Next();NS_LOG_FUNCTION("item name: " << item.tid.GetName());// If we want to have an ip headerif(item.tid.GetName() == "ns3::Ipv6Header"){Callback<ObjectBase *> constr = item.tid.GetConstructor();NS_ASSERT(!constr.IsNull());// Ptr<> and DynamicCast<> won't work here as all headers are from ObjectBase, not ObjectObjectBase *instance = constr();NS_ASSERT(instance != 0);Ipv6Header* ipv6Header = dynamic_cast<Ipv6Header*> (instance);NS_ASSERT(ipv6Header != 0);ipv6Header->Deserialize(item.current);src_ip = ipv6Header->GetSourceAddress();ipv6Header->SetDestinationAddress(src_ip);ipv6Header->Serialize(item.current); // if this is commented, then original packet - "packet" - is being received at destination.delete ipv6Header;break;}}return q;}
Ptr<Packet> g = ModifyPacketDestination(packet); //Packet g is being returned but not usedret = m_netDevice->Send (packet, dest, protocolNumber);
uint16_t offsetData = 0;uint32_t size = packet->GetSize ();Ptr<Packet> fragment1 = packet->CreateFragment (offsetData, size);Ptr<Packet> g = GetPacketSource(fragment1);ret = m_netDevice->Send (packet, dest, protocolNumber);
Ptr<Packet> ShimLayerRmc::ModifyDestinationAddress (Ptr<Packet> packet){
Ptr<Packet> q = packet->Copy();
Ipv6Header ipHeader;Ipv6Header ipHeader_new;if ( q->PeekHeader (ipHeader) != 0 ){std::cout << "Have entered the Header Modification loop " << '\n';q->RemoveHeader (ipHeader);ipHeader_new.SetTrafficClass (ipHeader.GetTrafficClass ());ipHeader_new.SetFlowLabel (ipHeader.GetFlowLabel ());ipHeader_new.SetPayloadLength (ipHeader.GetPayloadLength());uint8_t nextHeader = ipHeader.GetNextHeader ();ipHeader_new.SetNextHeader (nextHeader);ipHeader_new.SetHopLimit (ipHeader.GetHopLimit());ipHeader_new.SetSourceAddress(ipHeader.GetSourceAddress());// ipHeader_new.SetDestinationAddress(ipHeader.GetDestinationAddress());ipHeader_new.SetDestinationAddress(ipHeader.GetSourceAddress()); //Set Source Address as Destination Address (testing purpose)q->AddHeader (ipHeader_new);}else{std::cout << "Header empty" << '\n';}return q;}
Ptr<Packet> g = ModifyDestinationAddress(packet);
ret = m_netDevice->Send (packet, dest, protocolNumber);