VCL eventlog - track create/delete
[vpp.git] / src / vcl / vcom.c
index ed52bfa..4f8435f 100644 (file)
@@ -98,19 +98,21 @@ static int is_vcom_init;
  * RETURN: 0 on success -1 on failure
  * */
 static inline int
-vcom_init ()
+vcom_init (void)
 {
   pid_t pid = getpid ();
+  int rv;
 
   if (!is_vcom_init)
     {
-      if (vppcom_app_create (vcom_get_app_name ()) != 0)
+      rv = vppcom_app_create (vcom_get_app_name ());
+      if (rv)
        {
          printf ("\n[%d] vcom_init...failed!\n", pid);
          if (VCOM_DEBUG > 0)
            fprintf (stderr,
                     "[%d] vcom_init: vppcom_app_create failed!\n", pid);
-         return -1;
+         return rv;
        }
       if (vcom_socket_main_init () != 0)
        {
@@ -196,12 +198,10 @@ close (int __fd)
   if (is_vcom_socket_fd (__fd) || is_vcom_epfd (__fd))
     {
       if (VCOM_DEBUG > 0)
-       vcom_socket_main_show ();
+       fprintf (stderr, "[%d] close: fd %d\n", pid, __fd);
       rv = vcom_close (__fd);
       if (VCOM_DEBUG > 0)
-       fprintf (stderr, "[%d] close: " "'%04d'='%04d'\n", pid, rv, __fd);
-      if (VCOM_DEBUG > 0)
-       vcom_socket_main_show ();
+       fprintf (stderr, "[%d] close: vcom_close() returned %d\n", pid, rv);
       if (rv != 0)
        {
          errno = -rv;
@@ -1923,11 +1923,12 @@ getsockname (int __fd, __SOCKADDR_ARG __addr, socklen_t * __restrict __len)
 int
 vcom_connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
 {
-  int rv = -1;
+  int rv;
 
-  if (vcom_init () != 0)
+  rv = vcom_init ();
+  if (rv)
     {
-      return -1;
+      return rv;
     }
 
   /* validate __len */
@@ -1935,15 +1936,15 @@ vcom_connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
     {
     case AF_INET:
       if (__len != INET_ADDRSTRLEN)
-       return -1;
+       return -EINVAL;
       break;
     case AF_INET6:
       if (__len != INET6_ADDRSTRLEN)
-       return -1;
+       return -EINVAL;
       break;
 
     default:
-      return -1;
+      return -EAFNOSUPPORT;
       break;
     }
 
@@ -1956,7 +1957,7 @@ vcom_connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
       break;
 
     default:
-      return -1;
+      return -EPFNOSUPPORT;
       break;
     }
 
@@ -1968,18 +1969,16 @@ connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
 {
   int rv;
   pid_t pid = getpid ();
-  pthread_t tid = pthread_self ();
 
   if (is_vcom_socket_fd (__fd))
     {
       rv = vcom_connect (__fd, __addr, __len);
       if (VCOM_DEBUG > 0)
        fprintf (stderr,
-                "[%d][%lu (0x%lx)] connect: "
+                "[%d] connect: "
                 "'%04d'='%04d', '%p', '%04d'\n",
-                pid, (unsigned long) tid, (unsigned long) tid,
-                rv, __fd, __addr, __len);
-      if (rv != 0)
+                pid, rv, __fd, __addr, __len);
+      if (rv)
        {
          errno = -rv;
          return -1;
@@ -2070,6 +2069,46 @@ send (int __fd, const void *__buf, size_t __n, int __flags)
   return libc_send (__fd, __buf, __n, __flags);
 }
 
+ssize_t
+sendfile (int __out_fd, int __in_fd, off_t * __offset, size_t __len)
+{
+  ssize_t size;
+
+  if (VCOM_DEBUG > 2)
+    clib_warning ("[%d] __out_fd %d, __in_fd %d, __offset %p, __len %ld",
+                 getpid (), __out_fd, __in_fd, __offset, __len);
+
+  if (is_vcom_socket_fd (__out_fd))
+    {
+      /* TBD: refactor this check to be part of is_vcom_socket_fd() */
+      if (vcom_init () != 0)
+       return -1;
+
+      size = vcom_socket_sendfile (__out_fd, __in_fd, __offset, __len);
+      if (VCOM_DEBUG > 2)
+       clib_warning ("[%d] vcom_socket_sendfile (out_fd %d, in_fd %d, "
+                     "offset %p (%ld), len %lu) returned %ld",
+                     getpid (), __out_fd, __in_fd, __offset,
+                     __offset ? *__offset : -1, __len, size);
+      if (size < 0)
+       {
+         errno = -size;
+         return -1;
+       }
+      return size;
+    }
+  if (VCOM_DEBUG > 2)
+    clib_warning ("[%d] calling libc_sendfile!", getpid ());
+  return libc_sendfile (__out_fd, __in_fd, __offset, __len);
+}
+
+ssize_t
+sendfile64 (int __out_fd, int __in_fd, off_t * __offset, size_t __len)
+{
+  return sendfile (__out_fd, __in_fd, __offset, __len);
+}
+
+
 /*
  * Read N bytes into BUF from socket FD.
  * Returns the number read or -1 for errors.
@@ -2829,7 +2868,7 @@ epoll_wait (int __epfd, struct epoll_event *__events,
 
   rv =
     vcom_socket_epoll_pwait (__epfd, __events, __maxevents, __timeout, NULL);
-  if (VCOM_DEBUG > 1)
+  if (VCOM_DEBUG > 2)
     fprintf (stderr,
             "[%d] epoll_wait: "
             "'%04d'='%04d', '%p', "