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...