model/dce-fd.cc
author Hajime Tazaki <tazaki@sfc.wide.ad.jp>
Wed, 25 Sep 2013 16:02:32 +0900
changeset 515 98f8c21e069f
parent 412 b6d3dc1d6def
child 520 905320ec0959
permissions -rw-r--r--
Bug 1759 - dce httpd example stops working with big files (~1MB)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#define _LARGEFILE64_SOURCE 1
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#include "dce-manager.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
#include "process.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
#include "utils.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
#include "unix-fd.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
#include "unix-file-fd.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
#include "socket-fd-factory.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
#include "waiter.h"
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
     9
#include "dce-fcntl.h"
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
    10
#include "dce-unistd.h"
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
    11
#include "dce-poll.h"
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
    12
#include "dce-stdio.h"
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
    13
#include "sys/dce-socket.h"
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
    14
#include "sys/dce-ioctl.h"
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
    15
#include "sys/dce-stat.h"
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
    16
#include "sys/dce-mman.h"
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
    17
#include "sys/dce-select.h"
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
#include "ns3/log.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
#include "ns3/event-id.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#include "ns3/simulator.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include "ns3/nstime.h"
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include <fcntl.h>
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include <errno.h>
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include <linux/netlink.h>
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include <linux/rtnetlink.h>
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include <sys/mman.h>
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#include <sys/types.h>
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
#include "ns3/node.h"
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
    29
#include "local-socket-fd-factory.h"
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    30
#include "ns3-socket-fd-factory.h"
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
    31
#include "file-usage.h"
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
    32
#include "dce-stdlib.h"
190
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
    33
#include "pipe-fd.h"
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
NS_LOG_COMPONENT_DEFINE ("SimuFd");
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
#ifdef _K_SS_MAXSIZE
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
#define SOCK_MAX_ADDRESS_SIZE _K_SS_MAXSIZE
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
#else
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
#define SOCK_MAX_ADDRESS_SIZE 128
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
#endif
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    44
#define DEFINE_FORWARDER_PATH(name, pathname, ...)                      \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    45
  {                                                                     \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    46
    Thread *current = Current ();                                       \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    47
    NS_LOG_FUNCTION (Current () << UtilsGetNodeId () << pathname);      \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    48
    NS_ASSERT (Current () != 0);                                                \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    49
                                                                        \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    50
    if (std::string (pathname) == std::string (""))                      \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    51
      {                                                                 \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    52
        current->err = ENOENT;                                          \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    53
        return -1;                                                      \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    54
      }                                                                 \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    55
    std::string fullpath = UtilsGetRealFilePath (pathname);     \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    56
    int status = ::name (fullpath.c_str (), ## __VA_ARGS__);             \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    57
    if (status == -1)                                                   \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    58
      {                                                                 \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    59
        current->err = errno;                                           \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    60
        return -1;                                                      \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    61
      }                                                                 \
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
    62
    return status;                                                      \
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
  }
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
using namespace ns3;
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    67
int dce_open64 (const char *path, int flags, ...)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    68
{
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    69
  va_list vl;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    70
  va_start (vl, flags);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    71
  // hope this trick actually works...
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    72
  int status = dce_open (path, flags, vl);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    73
  va_end (vl);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    75
  return status;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    76
}
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    77
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    78
int dce_open (const char *path, int flags, ...)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
{
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    80
  va_list vl;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    81
  va_start (vl, flags);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    82
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    83
  mode_t mode = 0;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    84
  if (flags & O_CREAT)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    85
    {
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    86
      mode = va_arg (vl, mode_t);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
    87
    }
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    88
  va_end (vl);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << path << flags);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
  NS_ASSERT (current != 0);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
  if (std::string (path) == "")
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
    {
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
      current->err = ENOENT;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
      return -1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
    }
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
  int fd = UtilsAllocateFd ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
  if (fd == -1)
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
    {
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
      current->err = EMFILE;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
      return -1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
    }
126
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   105
  UnixFd *unixFd = 0;
98
320dda6c27eb Add simple emulation of /dev/randon, /dev/urandom and /dev/srandom mapping to real one devices.
frederic.urbani@inria.fr
parents: 91
diff changeset
   106
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   107
  if ((std::string (path) == "/dev/random") || (std::string (path) == "/dev/urandom")
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   108
      || (std::string (path) == "/dev/srandom"))
98
320dda6c27eb Add simple emulation of /dev/randon, /dev/urandom and /dev/srandom mapping to real one devices.
frederic.urbani@inria.fr
parents: 91
diff changeset
   109
    {
126
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   110
      unixFd = new UnixRandomFd (path);
98
320dda6c27eb Add simple emulation of /dev/randon, /dev/urandom and /dev/srandom mapping to real one devices.
frederic.urbani@inria.fr
parents: 91
diff changeset
   111
    }
320dda6c27eb Add simple emulation of /dev/randon, /dev/urandom and /dev/srandom mapping to real one devices.
frederic.urbani@inria.fr
parents: 91
diff changeset
   112
  else
320dda6c27eb Add simple emulation of /dev/randon, /dev/urandom and /dev/srandom mapping to real one devices.
frederic.urbani@inria.fr
parents: 91
diff changeset
   113
    {
126
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   114
      std::string fullpath = UtilsGetRealFilePath (path);
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   115
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   116
      int realFd = ::open (fullpath.c_str (), flags, mode);
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   117
      if (realFd == -1)
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   118
        {
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   119
          current->err = errno;
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   120
          return -1;
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   121
        }
100
c359682a503f dce_open : trim heading spaces of filename.
frederic.urbani@inria.fr
parents: 98
diff changeset
   122
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   123
      if (((2 == fd) || (1 == fd)) && (Current ()->process->minimizeFiles))
126
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   124
        {
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   125
          unixFd = new UnixFileFdLight (fullpath);
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   126
          close (realFd);
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   127
        }
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   128
      else
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   129
        {
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   130
          unixFd = new UnixFileFd (realFd);
55babd7c381e Update /dev/xrandom emulation: use NS3 random generator.
frederic.urbani@inria.fr
parents: 123
diff changeset
   131
        }
123
05f58de33cb9 Add option ns3::DceManager::MinimizeOpenFiles in order to close stdout and stderr between writes in order to have less opened file at same time.
frederic.urbani@inria.fr
parents: 108
diff changeset
   132
    }
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   133
  unixFd->IncFdCount ();
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   134
  current->process->openFiles[fd] = new FileUsage (fd, unixFd);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
  return fd;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
}
123
05f58de33cb9 Add option ns3::DceManager::MinimizeOpenFiles in order to close stdout and stderr between writes in order to have less opened file at same time.
frederic.urbani@inria.fr
parents: 108
diff changeset
   137
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   138
int dce_creat (const char *path, mode_t mode)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
{
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   140
  return dce_open (path, O_CREAT | O_WRONLY | O_TRUNC, mode);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
}
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   143
int dce_unlink_real (const char *pathname)
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   144
{
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   145
  DEFINE_FORWARDER_PATH (unlink, pathname);
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   146
}
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   147
199
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   148
void unlink_notify (std::string fullpath)
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   149
{
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   150
  NS_LOG_FUNCTION ("UNLINK FULL PATH " << fullpath);
199
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   151
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   152
  Ptr<SocketFdFactory> factory = Current ()->process->manager->GetObject<LocalSocketFdFactory> ();
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   153
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   154
  if (0 != factory)
199
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   155
    {
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   156
      factory->UnlinkNotify (fullpath);
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   157
    }
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   158
  factory = Current ()->process->manager->GetObject<SocketFdFactory> ();
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   159
  if (0 != factory)
199
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   160
    {
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   161
      factory->UnlinkNotify (fullpath);
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   162
    }
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   163
}
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   164
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   165
int dce_unlink (const char *pathname)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
{
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   167
  NS_LOG_FUNCTION (pathname);
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   168
  int ret = dce_unlink_real (pathname);
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   169
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   170
  if (0 == ret)
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   171
    {
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   172
      std::string fullpath = UtilsGetRealFilePath (pathname);
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   173
199
458fa0e6a08c add fchdir, unlinkat, __fxstatat .
frederic.urbani@inria.fr
parents: 195
diff changeset
   174
      unlink_notify (fullpath);
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   175
    }
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   176
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   177
  return ret;
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   178
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   179
int dce_mkdir (const char *pathname, mode_t mode)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
{
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   181
  mode_t m =  (mode & ~(Current ()->process->uMask));
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   182
  DEFINE_FORWARDER_PATH (mkdir, pathname, m);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   184
int dce_rmdir (const char *pathname)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   185
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
  DEFINE_FORWARDER_PATH (rmdir, pathname);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
}
412
b6d3dc1d6def Bug 1594 - gcov coverage test support for applications over DCE
Hajime Tazaki <tazaki@nict.go.jp>
parents: 387
diff changeset
   188
int dce_access (const char *pathname, int mode)
b6d3dc1d6def Bug 1594 - gcov coverage test support for applications over DCE
Hajime Tazaki <tazaki@nict.go.jp>
parents: 387
diff changeset
   189
{
b6d3dc1d6def Bug 1594 - gcov coverage test support for applications over DCE
Hajime Tazaki <tazaki@nict.go.jp>
parents: 387
diff changeset
   190
  DEFINE_FORWARDER_PATH (access, pathname, mode);
b6d3dc1d6def Bug 1594 - gcov coverage test support for applications over DCE
Hajime Tazaki <tazaki@nict.go.jp>
parents: 387
diff changeset
   191
}
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   192
int dce_close (int fd)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
{
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   194
  int retval = 0;
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
  NS_LOG_FUNCTION (Current () << UtilsGetNodeId () << fd);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
  NS_ASSERT (Current () != 0);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
  Thread *current = Current ();
176
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   198
  std::map<int,FileUsage *>::iterator it =  current->process->openFiles.find (fd);
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   199
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   200
  if (it == current->process->openFiles.end ())
176
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   201
    {
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   202
      current->err = EBADF;
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   203
      return -1;
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   204
    }
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   205
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   206
  FileUsage *fu = current->process->openFiles[fd];
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   207
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   208
  if (fu->GetFile () && (1 == fu->GetFile ()->GetFdCount ()))
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   209
    {
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   210
      // If only one process point to file we can really close it
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   211
      // else we be closed while the last process close it
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   212
      retval = fu->GetFile ()->Close ();
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   213
    }
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   214
  if (fu->CanForget ())
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
    {
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   216
      // If no thread of this process is using it we can free the corresponding fd entry
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   217
      // else we be freed by last thread renoncing of using it
176
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   218
      current->process->openFiles.erase (fd);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   219
      delete fu;
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   220
      fu = 0;
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
    }
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   222
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
  return retval;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   224
}
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   225
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   226
int dce_isatty (int fd)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   231
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   232
  OPENED_FD_METHOD (int, Isatty ());
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
}
190
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   234
char* dce_ttyname (int fd)
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   235
{
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   236
  Thread *current = Current ();
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   237
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd);
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   238
  NS_ASSERT (current != 0);
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   239
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   240
  OPENED_FD_METHOD (char*, Ttyname ());
190
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   241
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   242
ssize_t dce_send (int fd, const void *buf, size_t len, int flags)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
  NS_LOG_FUNCTION (fd << buf << len << flags);
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   245
  return dce_sendto (fd, buf, len, flags, 0, 0);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   247
ssize_t dce_sendto (int fd, const void *buf, size_t len, int flags,
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   248
                    const struct sockaddr *to, socklen_t tolen)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
  NS_LOG_FUNCTION (Current () << fd << buf << len << flags << to << tolen);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
  NS_ASSERT (Current () != 0);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   252
  struct msghdr msg;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
  struct iovec iov;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
  msg.msg_control = 0;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
  msg.msg_controllen = 0;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
  msg.msg_iovlen = 1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
  msg.msg_iov = &iov;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
  iov.iov_len = len;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   259
  iov.iov_base = (void *)buf;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
  msg.msg_name = (void *)to;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
  msg.msg_namelen = tolen;
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   262
  ssize_t retval = dce_sendmsg (fd, &msg, flags);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
  return retval;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
}
176
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   265
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   266
ssize_t dce_sendmsg (int fd, const struct msghdr *msg, int flags)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << msg << flags);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   271
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   272
  OPENED_FD_METHOD (ssize_t, Sendmsg (msg, flags))
176
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   273
}
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   274
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   275
int dce_ioctl (int fd, long unsigned int request, ...)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
{
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   277
  va_list vl;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   278
  va_start (vl, request);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   279
  char *argp = va_arg (vl, char*);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   280
  va_end (vl);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   281
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   283
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << request << argp);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   285
176
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   286
  OPENED_FD_METHOD (int, Ioctl (request, argp))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
}
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   288
ssize_t dce_write (int fd, const void *buf, size_t count)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
  NS_LOG_FUNCTION (Current () << UtilsGetNodeId () << fd << buf << count);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   293
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   294
  OPENED_FD_METHOD (int, Write (buf, count))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
}
195
30a796abb0ac Fix some memory faults.
frederic.urbani@inria.fr
parents: 193
diff changeset
   296
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   297
ssize_t dce_writev (int fd, const struct iovec *iov, int iovcnt)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << iov << iovcnt);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   302
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   303
  if (!CheckFdExists (current->process, fd, true))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
    {
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   305
      NS_LOG_DEBUG ("write error");
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
      current->err = EBADF;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
      return -1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
    }
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
  size_t count = 0;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
  for (int i = 0; i < iovcnt; ++i)
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   312
    {
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   313
      count += iov[i].iov_len;
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   314
    }
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   316
  if (count == 0)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
    {
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
      current->err = EINVAL;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
      return -1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
    }
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
515
98f8c21e069f Bug 1759 - dce httpd example stops working with big files (~1MB)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 412
diff changeset
   322
  void *buf = malloc (count);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
  for (int i = 0; i < iovcnt; ++i)
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
    {
515
98f8c21e069f Bug 1759 - dce httpd example stops working with big files (~1MB)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 412
diff changeset
   325
      memcpy (buf, iov[i].iov_base, iov[i].iov_len);
98f8c21e069f Bug 1759 - dce httpd example stops working with big files (~1MB)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 412
diff changeset
   326
      buf += iov[i].iov_len;
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
    }
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   329
  UnixFd *unixFd = current->process->openFiles[fd]->GetFileInc ();
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   330
  int retval = unixFd->Write (buf, count);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   331
  FdDecUsage (fd);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   332
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
  return retval;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   334
}
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   336
ssize_t dce_read (int fd, void *buf, size_t count)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   339
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << buf << count);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   341
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   342
  OPENED_FD_METHOD (int, Read (buf, count))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   343
}
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   344
int dce_socket (int domain, int type, int protocol)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
  DceManager *manager = current->process->manager;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << domain << type << protocol);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
  NS_ASSERT (current != 0);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
  NS_ASSERT (manager != 0);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   352
  Ptr<SocketFdFactory>  factory = 0;
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   353
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   354
  if (domain != AF_UNIX)
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   355
    {
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   356
      factory = manager->GetObject<SocketFdFactory> ();
87
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   357
    }
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   358
  else
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   359
    {
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   360
      if (type != SOCK_DGRAM && type != SOCK_STREAM)
87
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   361
        {
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   362
          current->err = EINVAL;
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   363
          return -1;
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   364
        }
156
08557806d46e Move 2 CreateObject to better place.
frederic.urbani@inria.fr
parents: 155
diff changeset
   365
      factory = manager->GetObject<LocalSocketFdFactory> ();
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   366
    }
255
c1679ed514fb Fix a crash when trying to create an IPV6 socket.
frederic.urbani@inria.fr
parents: 247
diff changeset
   367
  UnixFd *socket = factory->CreateSocket (domain, type, protocol);
c1679ed514fb Fix a crash when trying to create an IPV6 socket.
frederic.urbani@inria.fr
parents: 247
diff changeset
   368
  if (!socket)
c1679ed514fb Fix a crash when trying to create an IPV6 socket.
frederic.urbani@inria.fr
parents: 247
diff changeset
   369
    {
c1679ed514fb Fix a crash when trying to create an IPV6 socket.
frederic.urbani@inria.fr
parents: 247
diff changeset
   370
c1679ed514fb Fix a crash when trying to create an IPV6 socket.
frederic.urbani@inria.fr
parents: 247
diff changeset
   371
      current->err = EINVAL;
c1679ed514fb Fix a crash when trying to create an IPV6 socket.
frederic.urbani@inria.fr
parents: 247
diff changeset
   372
      return -1;
c1679ed514fb Fix a crash when trying to create an IPV6 socket.
frederic.urbani@inria.fr
parents: 247
diff changeset
   373
    }
87
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   374
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   375
  int fd = UtilsAllocateFd ();
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   376
  if (fd == -1)
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   377
    {
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   378
      current->err = EMFILE;
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   379
      return -1;
77f277cef341 Add Unix Socket Datagram Implementation.
frederic.urbani@inria.fr
parents: 80
diff changeset
   380
    }
251
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   381
  if (!socket)
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   382
    {
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   383
      return -1;
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   384
    }
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   385
  socket->IncFdCount ();
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   386
  current->process->openFiles[fd] = new FileUsage (fd, socket);
75
9c15a394a814 add support of socket of domain AF_UNIX in libc emulation
frederic.urbani@inria.fr
parents: 31
diff changeset
   387
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   388
  return fd;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   389
}
300
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   390
ssize_t dce_readv (int fd, const struct iovec *iov, int iovcnt)
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   391
{
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   392
  Thread *current = Current ();
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   393
  ssize_t ret = 0;
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   394
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   395
  if ((0 == iov)||(iovcnt < 0))
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   396
    {
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   397
      current->err = EINVAL;
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   398
      return -1;
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   399
    }
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   400
  for (int b = 0; b < iovcnt; b++)
300
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   401
    {
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   402
      ssize_t r = dce_read (fd, iov[b].iov_base, iov[b].iov_len);
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   403
      if (r >= 0)
300
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   404
        {
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   405
          ret += r;
387
342489bc9ac5 remove warning/error messages
Hajime Tazaki <tazaki@nict.go.jp>
parents: 367
diff changeset
   406
          if (!r || (r < (ssize_t)iov[b].iov_len))
300
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   407
            {
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   408
              return ret;
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   409
            }
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   410
        }
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   411
      else
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   412
        {
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   413
          return -1;
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   414
        }
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   415
    }
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   416
  return ret;
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 258
diff changeset
   417
}
251
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   418
int dce_socketpair (int domain, int type, int protocol, int sv[2])
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   419
{
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   420
  sv[0] = dce_socket (domain, type, protocol);
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   421
  if (sv[0] < 0)
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   422
    {
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   423
      return -1;
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   424
    }
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   425
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   426
  sv[1] = dce_socket (domain, type, protocol);
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   427
  if (sv[1] < 0)
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   428
    {
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   429
      return -1;
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   430
    }
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   431
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   432
  return 0;
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   433
}
5df5053d47ad support umip(mip6d) with ns-3-linux for NEMO/MIP6
Hajime Tazaki <tazaki@nict.go.jp>
parents: 247
diff changeset
   434
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   435
int dce_bind (int fd, const struct sockaddr *my_addr, socklen_t addrlen)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   436
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   437
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   438
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << my_addr << addrlen);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   439
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   440
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   441
  OPENED_FD_METHOD (int, Bind (my_addr, addrlen))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   442
}
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   443
int dce_connect (int fd, const struct sockaddr *my_addr, socklen_t addrlen)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   444
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   445
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   446
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << my_addr << addrlen);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   447
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   448
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   449
  OPENED_FD_METHOD (int, Connect (my_addr, addrlen))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   450
}
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   451
int dce_listen (int fd, int backlog)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   452
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   453
  Thread *current = Current ();
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   454
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << backlog);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   455
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   456
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   457
  OPENED_FD_METHOD (int, Listen (backlog))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   458
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   459
int dce_accept (int fd, struct sockaddr *addr, socklen_t *addrlen)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   460
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   461
  Thread *current = Current ();
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   462
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << addr << addrlen);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   463
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   464
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   465
  OPENED_FD_METHOD (int, Accept (addr, addrlen))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   466
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   467
int dce_shutdown (int fd, int how)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   468
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   469
  Thread *current = Current ();
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   470
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << how);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   471
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   472
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   473
  OPENED_FD_METHOD (int, Shutdown (how))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   474
}
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   475
ssize_t dce_recv (int fd, void *buf, size_t count, int flags)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   476
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   477
  NS_LOG_FUNCTION (fd << buf << count << flags);
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   478
  return dce_recvfrom (fd, buf, count, flags, 0, 0);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   479
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   480
ssize_t dce_recvfrom (int fd, void *buf, size_t len, int flags,
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   481
                      struct sockaddr *from, socklen_t *fromlen)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   482
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   483
  NS_LOG_FUNCTION (fd << buf << len << flags << from << fromlen);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   484
  uint8_t address[SOCK_MAX_ADDRESS_SIZE];
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   485
  struct msghdr msg;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   486
  struct iovec iov;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   487
  msg.msg_control = 0;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   488
  msg.msg_controllen = 0;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   489
  msg.msg_iovlen = 1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   490
  msg.msg_iov = &iov;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   491
  iov.iov_len = len;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   492
  iov.iov_base = buf;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   493
  msg.msg_name = address;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   494
  msg.msg_namelen = SOCK_MAX_ADDRESS_SIZE;
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   495
  ssize_t retval = dce_recvmsg (fd, &msg, flags);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   496
  if (retval != -1 && from != 0)
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   497
    {
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   498
      if (*fromlen < msg.msg_namelen)
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   499
        {
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   500
          Thread *current = Current ();
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   501
          current->err = EINVAL;
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   502
          return -1;
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   503
        }
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   504
      else
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   505
        {
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   506
          *fromlen = msg.msg_namelen;
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   507
          memcpy (from, msg.msg_name, msg.msg_namelen);
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   508
        }
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   509
    }
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   510
  return retval;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   511
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   512
ssize_t dce_recvmsg (int fd, struct msghdr *msg, int flags)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   513
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   514
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   515
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << msg << flags);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   516
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   517
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   518
  OPENED_FD_METHOD (ssize_t, Recvmsg (msg, flags))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   519
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   520
int dce_setsockopt (int fd, int level, int optname,
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   521
                    const void *optval, socklen_t optlen)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   522
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   523
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   524
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << level << optname << optval << optlen);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   525
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   526
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   527
  OPENED_FD_METHOD (int, Setsockopt (level, optname, optval, optlen))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   528
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   529
int dce_getsockopt (int fd, int level, int optname,
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   530
                    void *optval, socklen_t *optlen)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   531
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   532
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   533
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << level << optname << optval << optlen);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   534
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   535
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   536
  OPENED_FD_METHOD (int, Getsockopt (level, optname, optval, optlen))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   537
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   538
int dce_getsockname (int fd, struct sockaddr *name, socklen_t *namelen)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   539
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   540
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   541
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << name << namelen);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   542
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   543
176
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   544
  OPENED_FD_METHOD (int, Getsockname (name, namelen))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   545
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   546
int dce_getpeername (int fd, struct sockaddr *name, socklen_t *namelen)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   547
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   548
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   549
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << name << namelen);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   550
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   551
176
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   552
  OPENED_FD_METHOD (int, Getpeername (name, namelen))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   553
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   554
int dce_dup (int oldfd)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   555
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   556
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   557
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << oldfd);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   558
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   559
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   560
  if (!CheckFdExists (current->process, oldfd, true))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   561
    {
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   562
      current->err = EBADF;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   563
      return -1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   564
    }
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   565
  int fd = UtilsAllocateFd ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   566
  if (fd == -1)
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   567
    {
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   568
      current->err = EMFILE;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   569
      return -1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   570
    }
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   571
192
fbcaaef13149 Fix dup and dup2.
frederic.urbani@inria.fr
parents: 190
diff changeset
   572
  UnixFd *unixFd = current->process->openFiles[oldfd]->GetFile ();
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   573
  unixFd->IncFdCount ();
192
fbcaaef13149 Fix dup and dup2.
frederic.urbani@inria.fr
parents: 190
diff changeset
   574
  unixFd->Ref ();
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   575
  current->process->openFiles[fd] = new FileUsage (fd, unixFd);
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   576
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   577
  return fd;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   578
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   579
int dce_dup2 (int oldfd, int newfd)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   580
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   581
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   582
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << oldfd << newfd);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   583
  NS_ASSERT (current != 0);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   584
  if (!CheckFdExists (current->process, oldfd, true) || (newfd > MAX_FDS))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   585
    {
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   586
      current->err = EBADF;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   587
      return -1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   588
    }
176
c6d150068894 Improve map usage. ( I forgot that mymap[x] create the element ! ).
frederic.urbani@inria.fr
parents: 169
diff changeset
   589
193
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   590
  if (oldfd == newfd)
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   591
    {
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   592
      return newfd;
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   593
    }
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   594
  if (CheckFdExists (current->process, newfd, true))
193
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   595
    {
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   596
      if (dce_close (newfd))
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   597
        {
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   598
          current->err = EBADF;
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   599
          return -1;
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   600
        }
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   601
    }
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   602
  if (CheckFdExists (current->process, newfd, false))
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   603
    {
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   604
      current->err = EBADF;
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   605
      return -1;
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   606
    }
192
fbcaaef13149 Fix dup and dup2.
frederic.urbani@inria.fr
parents: 190
diff changeset
   607
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   608
  UnixFd *unixFd = current->process->openFiles[oldfd]->GetFile ();
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   609
  unixFd->IncFdCount ();
192
fbcaaef13149 Fix dup and dup2.
frederic.urbani@inria.fr
parents: 190
diff changeset
   610
  unixFd->Ref ();
fbcaaef13149 Fix dup and dup2.
frederic.urbani@inria.fr
parents: 190
diff changeset
   611
  current->process->openFiles[newfd] = new FileUsage (newfd, unixFd);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   612
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   613
  return newfd;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   614
}
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   615
void * dce_mmap (void *addr, size_t length, int prot, int flags,
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   616
                 int fd, off_t offset)
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   617
{
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   618
  return dce_mmap64 (addr, length, prot, flags, fd, offset);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   619
}
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   620
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   621
void * dce_mmap64 (void *start, size_t length, int prot, int flags,
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   622
                   int fd, off64_t offset)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   623
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   624
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   625
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << start << length << prot << flags << fd << offset);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   626
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   627
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   628
  OPENED_FD_METHOD_ERR (MAP_FAILED, void *, Mmap (start, length, prot, flags, offset))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   629
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   630
int dce_munmap (void *start, size_t length)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   631
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   632
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   633
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << start << length);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   634
  NS_ASSERT (current != 0);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   635
  int retval = ::munmap (start, length);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   636
  if (retval == -1)
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   637
    {
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   638
      current->err = errno;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   639
      return -1;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   640
    }
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   641
  return 0;
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   642
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   643
off_t dce_lseek (int fildes, off_t offset, int whence)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   644
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   645
  NS_LOG_FUNCTION (Current () << UtilsGetNodeId () << fildes << offset << whence);
1
96d7044fd324 simu->dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 0
diff changeset
   646
  return dce_lseek64 (fildes, offset, whence);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   647
}
164
6522058328b4 check style ...
frederic.urbani@inria.fr
parents: 157
diff changeset
   648
off64_t dce_lseek64 (int fd, off64_t offset, int whence)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   649
{
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   650
  Thread *current = Current ();
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   651
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << offset << whence);
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   652
  NS_ASSERT (current != 0);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   653
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   654
  OPENED_FD_METHOD (int, Lseek (offset, whence))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   655
}
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   656
int dce_fcntl (int fd, int cmd, ... /*unsigned long arg*/)
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   657
{
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   658
  va_list vl;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   659
  va_start (vl, cmd);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   660
  unsigned long arg = va_arg (vl, unsigned long);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   661
  va_end (vl);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   662
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   663
  NS_LOG_FUNCTION (Current () << UtilsGetNodeId () << fd << cmd << arg);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   664
  NS_ASSERT (Current () != 0);
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   665
  Thread *current = Current ();
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   666
  // XXX: we should handle specially some fcntl commands.
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   667
  // For example, FD_DUP, etc.
193
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   668
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   669
  switch (cmd)
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   670
    {
193
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   671
    case F_DUPFD:
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   672
      {
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   673
        return dce_dup (fd);
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   674
      }
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   675
    }
193
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   676
2f4779397ec1 Add dirent.
frederic.urbani@inria.fr
parents: 192
diff changeset
   677
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   678
  OPENED_FD_METHOD (int, Fcntl (cmd, arg))
0
0a55bed4c895 process -> dce
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   679
}
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   680
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   681
int dce_truncate (const char *path, off_t length)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   682
{
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   683
  Thread *current = Current ();
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   684
  NS_ASSERT (current != 0);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   685
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << path << length);
157
ed52e89aa2db New Poll/select implementation, without kernel support.
frederic.urbani@inria.fr
parents: 156
diff changeset
   686
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   687
  int fd = dce_open (path, O_WRONLY, 0);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   688
  if (fd == -1)
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   689
    {
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   690
      current->err = errno;
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   691
      return -1;
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   692
    }
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   693
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   694
  return dce_ftruncate (fd, length);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   695
}
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   696
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   697
int dce_ftruncate (int fd, off_t length)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   698
{
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   699
  Thread *current = Current ();
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   700
  NS_ASSERT (current != 0);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   701
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << length);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   702
  /*
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   703
  int index = UtilsSearchOpenFd (fildes);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   704
  if (index == -1)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   705
    {
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   706
      current->err = EBADF;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   707
      return -1;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   708
    }
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   709
  UnixFd *unixFd = current->process->openFiles[index].second;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   710
  int retval = unixFd->Ftruncate (length);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   711
  return retval;
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   712
  */
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   713
  OPENED_FD_METHOD (int, Ftruncate (length))
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents: 176
diff changeset
   714
}
247
b0b3fe29a840 add ftruncate64
Hajime Tazaki <tazaki@nict.go.jp>
parents: 241
diff changeset
   715
int dce_ftruncate64 (int fd, off_t length)
b0b3fe29a840 add ftruncate64
Hajime Tazaki <tazaki@nict.go.jp>
parents: 241
diff changeset
   716
{
b0b3fe29a840 add ftruncate64
Hajime Tazaki <tazaki@nict.go.jp>
parents: 241
diff changeset
   717
  Thread *current = Current ();
b0b3fe29a840 add ftruncate64
Hajime Tazaki <tazaki@nict.go.jp>
parents: 241
diff changeset
   718
  NS_ASSERT (current != 0);
b0b3fe29a840 add ftruncate64
Hajime Tazaki <tazaki@nict.go.jp>
parents: 241
diff changeset
   719
  NS_LOG_FUNCTION (current << UtilsGetNodeId () << fd << length);
b0b3fe29a840 add ftruncate64
Hajime Tazaki <tazaki@nict.go.jp>
parents: 241
diff changeset
   720
  return dce_ftruncate (fd, length);
b0b3fe29a840 add ftruncate64
Hajime Tazaki <tazaki@nict.go.jp>
parents: 241
diff changeset
   721
}
b0b3fe29a840 add ftruncate64
Hajime Tazaki <tazaki@nict.go.jp>
parents: 241
diff changeset
   722
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   723
int dce_pipe (int pipefd[2])
190
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   724
{
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   725
  Thread *current = Current ();
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   726
  NS_ASSERT (current != 0);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   727
  NS_LOG_FUNCTION (current << UtilsGetNodeId ());
190
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   728
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   729
  if (0 == pipefd)
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   730
    {
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   731
      current->err = EFAULT;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   732
      return -1;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   733
    }
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   734
  int fdRead =  UtilsAllocateFd ();
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   735
  if (fdRead == -1)
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   736
    {
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   737
      current->err = EMFILE;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   738
      return -1;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   739
    }
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   740
  PipeFd *reader = new PipeFd ();
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   741
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   742
  if (!reader)
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   743
    {
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   744
      current->err = EMFILE;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   745
      return -1;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   746
    }
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   747
  current->process->openFiles[fdRead] = new FileUsage (fdRead, reader);
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   748
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   749
  int fdWrite =  UtilsAllocateFd ();
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   750
  if (fdWrite == -1)
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   751
    {
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   752
      delete current->process->openFiles[fdRead];
195
30a796abb0ac Fix some memory faults.
frederic.urbani@inria.fr
parents: 193
diff changeset
   753
      current->process->openFiles.erase (fdRead);
190
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   754
      delete reader;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   755
      current->err = EMFILE;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   756
      return -1;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   757
    }
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   758
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   759
  PipeFd *writer = new PipeFd (reader);
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   760
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   761
  if (!writer)
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   762
    {
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   763
      delete current->process->openFiles[fdRead];
195
30a796abb0ac Fix some memory faults.
frederic.urbani@inria.fr
parents: 193
diff changeset
   764
      current->process->openFiles.erase (fdRead);
190
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   765
      delete reader;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   766
      current->err = EMFILE;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   767
      return -1;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   768
    }
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   769
  current->process->openFiles[fdWrite] = new FileUsage (fdWrite, writer);
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   770
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   771
//  writer->m_peer = reader;
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   772
  reader->IncFdCount ();
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   773
  writer->IncFdCount ();
190
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   774
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   775
  pipefd [0] = fdRead;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   776
  pipefd [1] = fdWrite;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   777
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   778
  return 0;
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   779
}
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   780
ssize_t dce_pread (int fd, void *buf, size_t count, off_t offset)
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   781
{
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   782
  Thread *current = Current ();
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   783
  NS_ASSERT (current != 0);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   784
  NS_LOG_FUNCTION (current << UtilsGetNodeId ());
190
63d1cec0cd39 Add pipe support.
frederic.urbani@inria.fr
parents: 181
diff changeset
   785
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   786
  off_t currentOffset = dce_lseek (fd, 0, SEEK_CUR);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   787
  if (-1 == currentOffset)
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   788
    {
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   789
      return (ssize_t) -1;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   790
    }
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   791
  off_t res = dce_lseek (fd, offset, SEEK_SET);
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   792
  if (res != offset)
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   793
    {
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   794
      current->err = EINVAL;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   795
      return (ssize_t) -1;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   796
    }
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   797
  ssize_t ret = dce_read (fd, buf, count);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   798
  if (-1 == ret)
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   799
    {
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   800
      return ret;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   801
    }
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   802
  // Return to original offset.
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   803
  res = dce_lseek (fd, currentOffset, SEEK_SET);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   804
  if (res != currentOffset)
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   805
    {
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   806
      return (ssize_t) -1;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   807
    }
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   808
  return ret;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   809
}
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   810
ssize_t dce_pwrite (int fd, const void *buf, size_t count, off_t offset)
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   811
{
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   812
  Thread *current = Current ();
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   813
  NS_ASSERT (current != 0);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   814
  NS_LOG_FUNCTION (current << UtilsGetNodeId ());
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   815
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   816
  off_t currentOffset = dce_lseek (fd, 0, SEEK_CUR);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   817
  if (-1 == currentOffset)
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   818
    {
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   819
      return (ssize_t) -1;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   820
    }
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   821
  off_t res = dce_lseek (fd, offset, SEEK_SET);
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   822
  if (res != offset)
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   823
    {
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   824
      current->err = EINVAL;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   825
      return (ssize_t) -1;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   826
    }
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   827
  ssize_t ret = dce_write (fd, buf, count);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   828
  if (-1 == ret)
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   829
    {
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   830
      return ret;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   831
    }
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   832
  // Return to original offset.
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   833
  res = dce_lseek (fd, currentOffset, SEEK_SET);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   834
  if (res != currentOffset)
218
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   835
    {
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   836
      return (ssize_t) -1;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   837
    }
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   838
  return ret;
9cff9cf73c75 Add pread and pwrite support.
frederic.urbani@inria.fr
parents: 199
diff changeset
   839
}