Print this page
12046 Provide /proc/<PID>/fdinfo/

@@ -24,10 +24,11 @@
  * Use is subject to license terms.
  */
 /*
  * Copyright 2012 DEY Storage Systems, Inc.  All rights reserved.
  * Copyright 2018 Joyent, Inc.
+ * Copyright 2019 OmniOS Community Edition (OmniOSce) Association.
  */
 
 #ifndef _SYS_PROCFS_H
 #define _SYS_PROCFS_H
 

@@ -511,11 +512,11 @@
  * just define our own structure with types that are not sensitive to this
  * difference.  Also, it turns out that pfiles omits a lot of info from the
  * struct stat (e.g. times, device sizes, etc.) so we don't bother adding those
  * here.
  */
-typedef struct prfdinfo {
+typedef struct prfdinfov1 {
         int             pr_fd;
         mode_t          pr_mode;
 
         uid_t           pr_uid;
         gid_t           pr_gid;

@@ -532,12 +533,89 @@
 
         int             pr_fileflags;   /* fcntl(F_GETXFL), etc */
         int             pr_fdflags;     /* fcntl(F_GETFD), etc. */
 
         char            pr_path[MAXPATHLEN];
-} prfdinfo_t;
+} prfdinfov1_t;
 
+typedef prfdinfov1_t prfdinfo_t;
+
+typedef struct prfdinfov2 {
+        int             pr_fd;          /* file descriptor number */
+        mode_t          pr_mode;        /* (see st_mode in stat(2)) */
+        ino64_t         pr_ino;         /* inode number */
+        off64_t         pr_size;        /* file size */
+        off64_t         pr_offset;      /* current offset of file descriptor */
+        uid_t           pr_uid;         /* owner's user id */
+        gid_t           pr_gid;         /* owner's group id */
+        major_t         pr_major;       /* major number of device */
+        minor_t         pr_minor;       /* minor number of device */
+        major_t         pr_rmajor;      /* major number (if special file) */
+        minor_t         pr_rminor;      /* minor number (if special file) */
+        int             pr_fileflags;   /* (see F_GETXFL in fcntl(2)) */
+        int             pr_fdflags;     /* (see F_GETFD in fcntl(2)) */
+        short           pr_locktype;    /* (see F_GETLK in fcntl(2)) */
+        pid_t           pr_lockpid;     /* process holding file lock */
+                                        /* (see F_GETLK) */
+        int             pr_locksysid;   /* sysid of locking process */
+                                        /* (see F_GETLK) */
+        pid_t           pr_peerpid;     /* peer process (socket, door) */
+        int             pr_filler[25];  /* reserved for future use */
+        char            pr_peername[PRFNSZ];    /* peer process name */
+#if     __STDC_VERSION__ >= 199901L
+        char    pr_misc[];      /* self describing structures */
+#else
+        char    pr_misc[1];
+#endif
+} prfdinfov2_t;
+
+typedef struct pr_misc_header {
+        uint_t          pr_misc_size;
+        uint_t          pr_misc_type;
+} pr_misc_header_t;
+
+enum PR_MISC_TYPES
+{
+        PR_PATHNAME,
+        PR_SOCKETNAME,
+        PR_PEERSOCKNAME,
+        PR_SOCKOPTS_BOOL_OPTS,
+        PR_SOCKOPT_LINGER,
+        PR_SOCKOPT_SNDBUF,
+        PR_SOCKOPT_RCVBUF,
+        PR_SOCKOPT_IP_NEXTHOP,
+        PR_SOCKOPT_IPV6_NEXTHOP,
+        PR_SOCKOPT_TYPE,
+        __UNIMPL_PR_SOCKOPT_LISTENQLIMIT,
+        PR_SOCKOPT_TCP_CONGESTION,
+        __UNIMPL_PR_SOCKOPT_FLOW_NAME,
+        __UNIMPL_PR_SOCKOPTS_PRIV,
+        PR_SOCKFILTERS_PRIV,
+        PR_MISC_TYPES_MAX
+};
+
+typedef struct prsockopts_bool_opts {
+        unsigned int prsock_bool_opts;
+} prsockopts_bool_opts_t;
+
+#define PR_SO_DEBUG             (1 << 0)
+#define PR_SO_REUSEADDR         (1 << 1)
+#define PR_SO_REUSEPORT         (1 << 2)
+#define PR_SO_KEEPALIVE         (1 << 3)
+#define PR_SO_DONTROUTE         (1 << 4)
+#define PR_SO_BROADCAST         (1 << 5)
+#define PR_SO_OOBINLINE         (1 << 7)
+#define PR_SO_DGRAM_ERRIND      (1 << 8)
+#define PR_SO_ALLZONES          (1 << 9)
+#define PR_SO_MAC_EXEMPT        (1 << 10)
+#define PR_SO_EXCLBIND          (1 << 11)
+#define PR_SO_PASSIVE_CONNECT   (1 << 12)
+#define PR_SO_ACCEPTCONN        (1 << 13)
+#define PR_UDP_NAT_T_ENDPOINT   (1 << 14)
+#define PR_SO_VRRP              (1 << 15)
+#define PR_SO_MAC_IMPLICIT      (1 << 16)
+
 /*
  * Representation of LWP name in core files.  In /proc, we use a simple char
  * array, but in core files we need to make it easy to correlate the note back
  * to the right LWP.  For simplicity, we'll use 32/64 consistent types.
  */