28 #include <sys/socket.h>    30 #include <sys/ioctl.h>    31 #include <net/ethernet.h>    33 #include <netinet/in.h>    34 #include <arpa/inet.h>    54 SendSocket (
const char *path, 
int fd, 
const int magic_number)
    60   LOG (
"Create Unix socket");
    61   int sock = socket (PF_UNIX, SOCK_DGRAM, 0);
    62   ABORT_IF (sock == -1, 
"Unable to open socket", 1);
    71   socklen_t clientAddrLen;
    72   struct sockaddr_un clientAddr;
    74   LOG (
"Decode address " << path);
    76   ABORT_IF (rc == 
false, 
"Unable to decode path", 0);
    79   int status = connect (sock, (
struct sockaddr*)&clientAddr, clientAddrLen);
    80   ABORT_IF (status == -1, 
"Unable to connect to emu device", 1);
   101   uint32_t magic = magic_number;
   102   iov.iov_base = &magic;
   103   iov.iov_len = 
sizeof(magic);
   116   size_t msg_size = 
sizeof(int);
   117   char control[CMSG_SPACE (msg_size)];
   135   msg.msg_control = control;
   136   msg.msg_controllen = 
sizeof (control);
   150   struct cmsghdr *cmsg;
   151   cmsg = CMSG_FIRSTHDR (&msg);
   152   cmsg->cmsg_level = SOL_SOCKET;
   153   cmsg->cmsg_type = SCM_RIGHTS;
   154   cmsg->cmsg_len = CMSG_LEN (msg_size);
   159   msg.msg_controllen = cmsg->cmsg_len;
   165   int *fdptr = (
int*)(CMSG_DATA (cmsg));
   171   ssize_t len = sendmsg (sock, &msg, 0);
   172   ABORT_IF (len == -1, 
"Could not send socket back to emu net device", 1);
   174   LOG (
"sendmsg complete");
 void SendSocket(const char *path, int fd, const int magic_number)
Send the file descriptor back to the code that invoked the creation. 
#define ABORT_IF(cond, msg, printErrno)
int gVerbose
Flag to enable / disable verbose log mode. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
bool StringToBuffer(std::string s, uint8_t *buffer, uint32_t *len)
Convert string encoded by the inverse function (TapBufferToString) back into a byte buffer...