--- a/model/ns3-socket-fd-factory.cc Tue Apr 19 23:13:50 2011 +0200
+++ b/model/ns3-socket-fd-factory.cc Thu May 05 09:28:21 2011 +0200
@@ -3,7 +3,7 @@
#include "unix-socket-fd.h"
#include "unix-datagram-socket-fd.h"
#include "unix-stream-socket-fd.h"
-#include "netlink-socket-factory.h"
+#include "ns3/netlink-socket-factory.h"
#include "ns3/socket-factory.h"
#include "ns3/socket.h"
#include "ns3/uinteger.h"
@@ -29,36 +29,52 @@
UnixFd *
Ns3SocketFdFactory::CreateSocket (int domain, int type, int protocol)
{
- NS_ASSERT (domain == PF_INET || domain == PF_NETLINK || domain == PF_INET6);
-
UnixSocketFd *socket = 0;
Ptr<Socket> sock;
- switch (type) {
- case SOCK_DGRAM: {
- TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
- Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
- sock = factory->CreateSocket ();
- socket = new UnixDatagramSocketFd (sock);
- } break;
- case SOCK_RAW: {
- TypeId tid = TypeId::LookupByName ("ns3::Ipv4RawSocketFactory");
- Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
- sock = factory->CreateSocket ();
- sock->SetAttribute ("Protocol", UintegerValue (protocol));
- socket = new UnixDatagramSocketFd (sock);
- } break;
- case SOCK_STREAM: {
- TypeId tid = TypeId::LookupByName ("ns3::TcpSocketFactory");
- Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
- sock = factory->CreateSocket ();
- socket = new UnixStreamSocketFd (sock);
- } break;
- default:
- // XXX insert netlink creation here.
- NS_FATAL_ERROR ("missing socket type");
- break;
- }
+ if (domain == PF_INET)
+ {
+ switch (type) {
+ case SOCK_DGRAM: {
+ TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+ Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
+ sock = factory->CreateSocket ();
+ socket = new UnixDatagramSocketFd (sock);
+ } break;
+ case SOCK_RAW: {
+ TypeId tid = TypeId::LookupByName ("ns3::Ipv4RawSocketFactory");
+ Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
+ sock = factory->CreateSocket ();
+ sock->SetAttribute ("Protocol", UintegerValue (protocol));
+ socket = new UnixDatagramSocketFd (sock);
+ } break;
+ case SOCK_STREAM: {
+ TypeId tid = TypeId::LookupByName ("ns3::TcpSocketFactory");
+ Ptr<SocketFactory> factory = GetObject<SocketFactory> (tid);
+ sock = factory->CreateSocket ();
+ socket = new UnixStreamSocketFd (sock);
+ } break;
+ default:
+ NS_FATAL_ERROR ("missing socket type");
+ break;
+ }
+ }
+ else if (domain == PF_NETLINK)
+ {
+ switch (type) {
+ case SOCK_DGRAM: {
+ sock = m_netlink->CreateSocket ();
+ socket = new UnixDatagramSocketFd (sock);
+ } break;
+ default:
+ NS_FATAL_ERROR ("missing socket type");
+ break;
+ }
+ }
+ else
+ {
+ NS_FATAL_ERROR ("unsupported domain");
+ }
return socket;
}