1 #ifndef LINUX_SOCKET_FD_FACTORY_H
2 #define LINUX_SOCKET_FD_FACTORY_H
6 #include "ns3/net-device.h"
7 #include "ns3/random-variable.h"
8 #include <sys/socket.h>
14 #include "linux/types.h"
34 class LinuxDeviceStateListener;
46 void Set (std::string path, std::string value);
47 std::string
Get (std::string path);
59 int Close (
struct SimSocket *socket);
60 ssize_t
Recvmsg (
struct SimSocket *socket,
struct msghdr *msg,
int flags);
61 ssize_t
Sendmsg (
struct SimSocket *socket,
const struct msghdr *msg,
int flags);
62 int Getsockname (
struct SimSocket *socket,
struct sockaddr *name, socklen_t *namelen);
63 int Getpeername (
struct SimSocket *socket,
struct sockaddr *name, socklen_t *namelen);
64 int Bind (
struct SimSocket *socket,
const struct sockaddr *my_addr, socklen_t addrlen);
65 int Connect (
struct SimSocket *socket,
const struct sockaddr *my_addr, socklen_t addrlen,
int flags);
66 int Listen (
struct SimSocket *socket,
int backlog);
67 int Shutdown (
struct SimSocket *socket,
int how);
68 int Accept (
struct SimSocket *socket,
struct sockaddr *my_addr, socklen_t *addrlen);
69 int Ioctl (
struct SimSocket *socket,
int request,
char *argp);
70 int Setsockopt (
struct SimSocket *socket,
int level,
int optname,
71 const void *optval, socklen_t optlen);
72 int Getsockopt (
struct SimSocket *socket,
int level,
int optname,
73 void *optval, socklen_t *optlen);
74 bool CanRecv (
struct SimSocket *socket);
75 bool CanSend (
struct SimSocket *socket);
76 void*
PollWait (
struct SimSocket *socket,
void *ctxt);
77 void FreePoll (
struct SimSocket *socket,
void *ctxt);
82 static int Vprintf (
struct SimKernel *kernel,
const char *str, va_list args);
83 static void *
Malloc (
struct SimKernel *kernel,
unsigned long size);
84 static void Free (
struct SimKernel *kernel,
void *buffer);
85 static void *
Memcpy (
struct SimKernel *kernel,
void *dst,
const void *src,
unsigned long size);
86 static void *
Memset (
struct SimKernel *kernel,
void *dst,
char value,
unsigned long size);
87 static int AtExit (
struct SimKernel *kernel,
void (*
function)(
void));
88 static int Access (
struct SimKernel *kernel,
const char *pathname,
int mode);
89 static char*
Getenv (
struct SimKernel *kernel,
const char *name);
90 static int Mkdir (
struct SimKernel *kernel,
const char *pathname, mode_t mode);
91 static int Open (
struct SimKernel *kernel,
const char *pathname,
int flags);
92 static size_t Fread (
struct SimKernel *kernel,
void *ptr,
size_t size,
size_t nmemb, FILE *stream);
93 static size_t Fwrite (
struct SimKernel *kernel,
const void *ptr,
size_t size,
size_t nmemb, FILE *stream);
94 static FILE*
FdOpen (
struct SimKernel *kernel,
int fd,
const char *mode);
95 static int __Fxstat (
struct SimKernel *kernel,
int ver,
int fd,
void *buf);
96 static int Fseek (
struct SimKernel *kernel, FILE *stream,
long offset,
int whence);
97 static void Setbuf (
struct SimKernel *kernel, FILE *stream,
char *buf);
98 static long Ftell (
struct SimKernel *kernel, FILE *stream);
99 static int Fclose (
struct SimKernel *kernel, FILE *fp);
100 static unsigned long Random (
struct SimKernel *kernel);
101 static void *
EventScheduleNs (
struct SimKernel *kernel, __u64 ns,
void (*fn)(
void *context),
void *context,
102 void (*pre_fn)(
void));
103 static void EventCancel (
struct SimKernel *kernel,
void *ev);
104 static struct SimTask *
TaskStart (
struct SimKernel *kernel,
void (*callback)(
void *),
void *context);
105 static struct SimTask *
TaskCurrent (
struct SimKernel *kernel);
106 static void TaskWait (
struct SimKernel *kernel);
107 static int TaskWakeup (
struct SimKernel *kernel,
struct SimTask *task);
108 static void TaskYield (
struct SimKernel *kernel);
109 static void DevXmit (
struct SimKernel *kernel,
struct SimDevice *dev,
unsigned char *data,
int len);
110 static void SignalRaised (
struct SimKernel *kernel,
struct SimTask *task,
int signalNumber);
111 static void PollEvent (
int flag,
void *context);
123 void RxFromDevice (Ptr<NetDevice> device, Ptr<const Packet> p,
124 uint16_t protocol,
const Address & from,
125 const Address &to, NetDevice::PacketType type);
126 struct SimDevice *
DevToDev (Ptr<NetDevice> dev);
131 std::vector<std::pair<std::string,struct SimSysFile *> >
GetSysFileList (
void);
132 void DoSet (std::string path, std::string value);
133 void SetTask (std::string path, std::string value);
137 void *context,
void (*pre_fn)(
void),
138 Ptr<EventIdHolder> event);
139 static void SendMain (
bool *r, NetDevice *d, Ptr<Packet> packet,
const Address& dest, uint16_t protocolNumber);
141 std::vector<std::pair<Ptr<NetDevice>,
struct SimDevice *> >
m_devices;