BuildHeader added + support of raw socket in ipv4-l3-protol added
This commit is contained in:
@@ -141,6 +141,21 @@ Ipv4L3Protocol::CreateRawSocket2 (void)
|
||||
|
||||
|
||||
void
|
||||
Ipv4L3Protocol::DeleteRawSocket2 (Ptr<Socket> socket)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << socket);
|
||||
for (RawSocketList::iterator i = m_rawSocket.begin (); i != m_rawSocket.end (); ++i)
|
||||
{
|
||||
if ((*i) == socket)
|
||||
{
|
||||
m_rawSocket.erase (i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
Ipv4L3Protocol::DeleteRawSocket (Ptr<Socket> socket)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << socket);
|
||||
@@ -154,6 +169,7 @@ Ipv4L3Protocol::DeleteRawSocket (Ptr<Socket> socket)
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* This method is called by AddAgregate and completes the aggregation
|
||||
* by setting the node in the ipv4 stack
|
||||
@@ -424,6 +440,14 @@ Ipv4L3Protocol::Receive( Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t pr
|
||||
socket->ForwardUp (packet, ipHeader, device);
|
||||
}
|
||||
|
||||
NS_LOG_UNCOND(m_rawSocket.size());
|
||||
for (RawSocketList::iterator i = m_rawSocket.begin (); i != m_rawSocket.end (); ++i)
|
||||
{
|
||||
NS_LOG_UNCOND ("Forwarding to raw socket");
|
||||
Ptr<RawSocketImpl> socket = *i;
|
||||
socket->ForwardUp (p, device);
|
||||
}
|
||||
NS_LOG_UNCOND("in route input");
|
||||
m_routingProtocol->RouteInput (packet, ipHeader, device,
|
||||
MakeCallback (&Ipv4L3Protocol::IpForward, this),
|
||||
MakeCallback (&Ipv4L3Protocol::IpMulticastForward, this),
|
||||
|
||||
@@ -75,6 +75,8 @@ public:
|
||||
Ptr<Socket> CreateRawSocket (void);
|
||||
Ptr<Socket> CreateRawSocket2 (void);
|
||||
void DeleteRawSocket (Ptr<Socket> socket);
|
||||
void DeleteRawSocket2 (Ptr<Socket> socket);
|
||||
|
||||
|
||||
/**
|
||||
* \param protocol a template for the protocol to add to this L4 Demux.
|
||||
|
||||
@@ -144,14 +144,14 @@ RawSocketImpl::GetTxAvailable (void) const
|
||||
int
|
||||
RawSocketImpl::Send (Ptr<Packet> p, uint32_t flags)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << p << flags);
|
||||
NS_LOG_FUNCTION (this << " packet " << p << flags);
|
||||
InetSocketAddress to = InetSocketAddress (m_dst, m_protocol);
|
||||
return SendTo (p, flags, to);
|
||||
}
|
||||
int
|
||||
RawSocketImpl::SendTo (Ptr<Packet> packet, uint32_t flags, const Address &toAddress)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << packet << flags << toAddress);
|
||||
|
||||
if (!InetSocketAddress::IsMatchingType (toAddress))
|
||||
{
|
||||
m_err = Socket::ERROR_INVAL;
|
||||
@@ -163,7 +163,9 @@ RawSocketImpl::SendTo (Ptr<Packet> packet, uint32_t flags, const Address &toAddr
|
||||
}
|
||||
InetSocketAddress ad = InetSocketAddress::ConvertFrom (toAddress);
|
||||
Ptr<Ipv4L3Protocol> ipv4 = m_node->GetObject<Ipv4L3Protocol> ();
|
||||
NS_ASSERT(ipv4 != 0);
|
||||
Ipv4Address dst = ad.GetIpv4 ();
|
||||
NS_LOG_LOGIC ("RawSocketImpl::SendTo packet uid " << packet->GetUid() << " address " << dst);
|
||||
if (ipv4->GetRoutingProtocol ())
|
||||
{
|
||||
Ipv4Header header;
|
||||
@@ -262,13 +264,16 @@ RawSocketImpl::SetProtocol (uint16_t protocol)
|
||||
}
|
||||
|
||||
bool
|
||||
RawSocketImpl::ForwardUp (Ptr<const Packet> p, Ipv4Header ipHeader, Ptr<NetDevice> device)
|
||||
RawSocketImpl::ForwardUp (Ptr<const Packet> p, Ptr<NetDevice> device)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << *p << ipHeader << device);
|
||||
NS_LOG_FUNCTION (this << *p << device);
|
||||
if (m_shutdownRecv)
|
||||
{
|
||||
return false;
|
||||
} NS_LOG_LOGIC ("src = " << m_src << " dst = " << m_dst);
|
||||
Ptr<Packet> copy = p->Copy ();
|
||||
Ipv4Header ipHeader;
|
||||
copy->RemoveHeader (ipHeader);
|
||||
if ((m_src == Ipv4Address::GetAny () || ipHeader.GetDestination () == m_src) && (m_dst == Ipv4Address::GetAny () || ipHeader.GetSource () == m_dst)
|
||||
&& ipHeader.GetProtocol () == m_protocol)
|
||||
{
|
||||
@@ -284,7 +289,6 @@ RawSocketImpl::ForwardUp (Ptr<const Packet> p, Ipv4Header ipHeader, Ptr<NetDevic
|
||||
return false;
|
||||
}
|
||||
}
|
||||
copy->AddHeader (ipHeader);
|
||||
struct Data data;
|
||||
data.packet = copy;
|
||||
data.fromIp = ipHeader.GetSource ();
|
||||
|
||||
@@ -40,7 +40,7 @@ public:
|
||||
Address &fromAddress);
|
||||
|
||||
void SetProtocol (uint16_t protocol);
|
||||
bool ForwardUp (Ptr<const Packet> p, Ipv4Header ipHeader, Ptr<NetDevice> device);
|
||||
bool ForwardUp (Ptr<const Packet> p, Ptr<NetDevice> device);
|
||||
private:
|
||||
virtual void DoDispose (void);
|
||||
|
||||
@@ -63,4 +63,4 @@ private:
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
#endif /* IPV4_RAW_SOCKET_IMPL_H */
|
||||
#endif /* RAW_SOCKET_IMPL_H */
|
||||
|
||||
Reference in New Issue
Block a user