25 #include "ns3/netlink-socket-factory.h"
26 #include "ns3/socket-factory.h"
27 #include "ns3/socket.h"
30 #include "ns3/uinteger.h"
31 #include "ns3/packet-socket-address.h"
32 #include <netpacket/packet.h>
33 #include <net/ethernet.h>
44 static TypeId tid = TypeId (
"ns3::Ns3SocketFdFactory")
46 .AddConstructor<Ns3SocketFdFactory> ()
60 Ptr<Node> node = this->GetObject<Node> ();
63 m_netlink = CreateObject<NetlinkSocketFactory> ();
74 if (domain == PF_INET)
80 TypeId tid = TypeId::LookupByName (
"ns3::UdpSocketFactory");
81 Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
82 sock = factory->CreateSocket ();
87 TypeId tid = TypeId::LookupByName (
"ns3::Ipv4RawSocketFactory");
88 Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
89 sock = factory->CreateSocket ();
90 sock->SetAttribute (
"Protocol", UintegerValue (protocol));
95 TypeId tid = TypeId::LookupByName (
"ns3::TcpSocketFactory");
96 Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
97 sock = factory->CreateSocket ();
101 NS_FATAL_ERROR (
"missing socket type");
105 else if (domain == PF_INET6)
111 TypeId tid = TypeId::LookupByName (
"ns3::Ipv6RawSocketFactory");
112 Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
113 sock = factory->CreateSocket ();
114 sock->SetAttribute (
"Protocol", UintegerValue (protocol));
122 TypeId tid = TypeId::LookupByName (
"ns3::TcpSocketFactory");
123 Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
124 sock = factory->CreateSocket ();
128 NS_FATAL_ERROR (
"missing socket type");
132 else if (domain == PF_NETLINK)
139 NS_LOG_INFO (
"Requesting for PF_NETLINK");
144 NS_FATAL_ERROR (
"missing socket type");
148 else if (domain == AF_PACKET)
154 TypeId tid = TypeId::LookupByName (
"ns3::PacketSocketFactory");
155 Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
156 sock = factory->CreateSocket ();
158 PacketSocketAddress a;
160 if (protocol == htons (ETH_P_ALL))
166 a.SetProtocol (ntohs (protocol));
174 NS_FATAL_ERROR (
"missing socket type");
180 NS_FATAL_ERROR (
"unsupported domain");