summaryrefslogtreecommitdiffstats
path: root/misc-utils/lsfd.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 19:33:32 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 19:33:32 +0000
commit8bb05ac73a5b448b339ce0bc8d396c82c459b47f (patch)
tree1fdda006866bca20d41cb206767ea5241e36852f /misc-utils/lsfd.h
parentAdding debian version 2.39.3-11. (diff)
downloadutil-linux-8bb05ac73a5b448b339ce0bc8d396c82c459b47f.tar.xz
util-linux-8bb05ac73a5b448b339ce0bc8d396c82c459b47f.zip
Merging upstream version 2.40.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--misc-utils/lsfd.h80
1 files changed, 64 insertions, 16 deletions
diff --git a/misc-utils/lsfd.h b/misc-utils/lsfd.h
index ea1c342..1859dc7 100644
--- a/misc-utils/lsfd.h
+++ b/misc-utils/lsfd.h
@@ -29,9 +29,12 @@
#include <dirent.h>
#include <inttypes.h>
+#include "libsmartcols.h"
#include "list.h"
+#include "nls.h"
#include "path.h"
#include "strutils.h"
+#include "xalloc.h"
/*
* column IDs
@@ -40,19 +43,31 @@ enum {
COL_AINODECLASS,
COL_ASSOC,
COL_BLKDRV,
+ COL_BPF_MAP_ID,
+ COL_BPF_MAP_TYPE,
+ COL_BPF_MAP_TYPE_RAW,
+ COL_BPF_NAME,
+ COL_BPF_PROG_ID,
+ COL_BPF_PROG_TYPE,
+ COL_BPF_PROG_TYPE_RAW,
COL_CHRDRV,
COL_COMMAND,
COL_DELETED,
COL_DEV,
COL_DEVTYPE,
COL_ENDPOINTS,
+ COL_EVENTFD_ID,
+ COL_EVENTPOLL_TFDS,
COL_FD,
COL_FLAGS,
- COL_INODE,
+ COL_FUID, /* file */
COL_INET_LADDR,
COL_INET_RADDR,
COL_INET6_LADDR,
COL_INET6_RADDR,
+ COL_INODE,
+ COL_INOTIFY_INODES,
+ COL_INOTIFY_INODES_RAW,
COL_KNAME,
COL_KTHREAD,
COL_MAJMIN,
@@ -67,6 +82,7 @@ enum {
COL_NLINK,
COL_NS_NAME,
COL_NS_TYPE,
+ COL_OWNER, /* file */
COL_PACKET_IFACE,
COL_PACKET_PROTOCOL,
COL_PARTITION,
@@ -76,12 +92,15 @@ enum {
COL_PIDFD_PID,
COL_PING_ID,
COL_POS,
+ COL_PTMX_TTY_INDEX,
COL_RAW_PROTOCOL,
COL_RDEV,
+ COL_SIGNALFD_MASK,
COL_SIZE,
COL_SOCK_LISTENING,
COL_SOCK_NETNS,
COL_SOCK_PROTONAME,
+ COL_SOCK_SHUTDOWN,
COL_SOCK_STATE,
COL_SOCK_TYPE,
COL_SOURCE,
@@ -91,6 +110,10 @@ enum {
COL_TCP_LPORT,
COL_TCP_RPORT,
COL_TID,
+ COL_TIMERFD_CLOCKID,
+ COL_TIMERFD_INTERVAL,
+ COL_TIMERFD_REMAINING,
+ COL_TUN_IFACE,
COL_TYPE,
COL_UDP_LADDR,
COL_UDP_RADDR,
@@ -103,8 +126,7 @@ enum {
COL_UID, /* process */
COL_UNIX_PATH,
COL_USER, /* process */
- COL_FUID, /* file */
- COL_OWNER, /* file */
+ COL_XMODE,
LSFD_N_COLS /* This must be at last. */
};
@@ -139,6 +161,7 @@ struct proc {
struct list_head procs;
struct list_head files;
unsigned int kthread: 1;
+ struct list_head eventpolls;
};
struct proc *get_proc(pid_t pid);
@@ -161,6 +184,11 @@ struct file {
unsigned int sys_flags;
unsigned int mnt_id;
+
+ struct {
+ uint8_t read:1, write:1;
+ } locked;
+ uint8_t multiplexed;
};
#define is_opened_file(_f) ((_f)->association >= 0)
@@ -185,7 +213,7 @@ struct file_class {
};
extern const struct file_class file_class, cdev_class, bdev_class, sock_class, unkn_class, fifo_class,
- nsfs_file_class;
+ nsfs_file_class, mqueue_file_class;
/*
* IPC
@@ -202,14 +230,34 @@ struct ipc_endpoint {
};
struct ipc_class {
+ size_t size;
unsigned int (*get_hash)(struct file *file);
bool (*is_suitable_ipc)(struct ipc *ipc, struct file *file);
void (*free)(struct ipc *ipc);
};
+struct ipc *new_ipc(const struct ipc_class *class);
struct ipc *get_ipc(struct file *file);
void add_ipc(struct ipc *ipc, unsigned int hash);
+void init_endpoint(struct ipc_endpoint *endpoint);
+void add_endpoint(struct ipc_endpoint *endpoint, struct ipc *ipc);
+#define foreach_endpoint(E,ENDPOINT) list_for_each_backwardly(E, &((ENDPOINT).ipc->endpoints))
+
+enum decode_source_bit {
+ DECODE_SOURCE_MAJMIN_BIT = 1 << 0,
+ DECODE_SOURCE_PARTITION_BIT = 1 << 1,
+ DECODE_SOURCE_FILESYS_BIT = 1 << 2,
+};
+enum decode_source_level {
+ DECODE_SOURCE_MAJMIN = DECODE_SOURCE_MAJMIN_BIT,
+ DECODE_SOURCE_PARTITION = DECODE_SOURCE_PARTITION_BIT | DECODE_SOURCE_MAJMIN,
+ DECODE_SOURCE_FILESYS = DECODE_SOURCE_FILESYS_BIT | DECODE_SOURCE_PARTITION,
+ DECODE_SOURCE_FULL = DECODE_SOURCE_FILESYS,
+};
+
+void decode_source(char *buf, size_t bufsize, unsigned int dev_major, unsigned int dev_minor,
+ enum decode_source_level level);
/*
* Name managing
*/
@@ -225,18 +273,7 @@ const char *get_blkdrv(unsigned long major);
const char *get_chrdrv(unsigned long major);
const char *get_miscdev(unsigned long minor);
const char *get_nodev_filesystem(unsigned long minor);
-
-static inline void xstrappend(char **a, const char *b)
-{
- if (strappend(a, b) < 0)
- err(XALLOC_EXIT_CODE, _("failed to allocate memory for string"));
-}
-
-static inline void xstrputc(char **a, char c)
-{
- char b[] = {c, '\0'};
- xstrappend(a, b);
-}
+void add_nodev(unsigned long minor, const char *filesystem);
/*
* Net namespace
@@ -244,4 +281,15 @@ static inline void xstrputc(char **a, char c)
void load_sock_xinfo(struct path_cxt *pc, const char *name, ino_t netns);
bool is_nsfs_dev(dev_t dev);
+/*
+ * POSIX Mqueue
+ */
+/* 0 is assumed as the major dev for DEV. */
+bool is_mqueue_dev(dev_t dev);
+
+/*
+ * Eventpoll
+ */
+bool is_multiplexed_by_eventpoll(int fd, struct list_head *eventpolls);
+
#endif /* UTIL_LINUX_LSFD_H */