]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsfd: use extra information loaded from /proc/net/udplite
authorMasatake YAMATO <yamato@redhat.com>
Tue, 21 Feb 2023 14:56:18 +0000 (23:56 +0900)
committerMasatake YAMATO <yamato@redhat.com>
Sun, 26 Feb 2023 08:26:27 +0000 (17:26 +0900)
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
misc-utils/lsfd-sock-xinfo.c
misc-utils/lsfd.1.adoc
misc-utils/lsfd.c
misc-utils/lsfd.h

index a2ecfef897f058ccdf769dfdfff3c4c0eea2e362..c833f61a65de0e0cbe9e12ecbab9ba2a930ef137 100644 (file)
@@ -43,6 +43,7 @@ static void load_xinfo_from_proc_unix(ino_t netns_inode);
 static void load_xinfo_from_proc_raw(ino_t netns_inode);
 static void load_xinfo_from_proc_tcp(ino_t netns_inode);
 static void load_xinfo_from_proc_udp(ino_t netns_inode);
+static void load_xinfo_from_proc_udplite(ino_t netns_inode);
 static void load_xinfo_from_proc_tcp6(ino_t netns_inode);
 static void load_xinfo_from_proc_udp6(ino_t netns_inode);
 static void load_xinfo_from_proc_raw6(ino_t netns_inode);
@@ -84,6 +85,7 @@ static void load_sock_xinfo_no_nsswitch(ino_t netns)
        load_xinfo_from_proc_unix(netns);
        load_xinfo_from_proc_tcp(netns);
        load_xinfo_from_proc_udp(netns);
+       load_xinfo_from_proc_udplite(netns);
        load_xinfo_from_proc_raw(netns);
        load_xinfo_from_proc_tcp6(netns);
        load_xinfo_from_proc_udp6(netns);
@@ -838,6 +840,45 @@ static void load_xinfo_from_proc_udp(ino_t netns_inode)
                                     &udp_xinfo_class);
 }
 
+/*
+ * UDP-Lite
+ */
+static bool udplite_fill_column(struct proc *proc __attribute__((__unused__)),
+                               struct sock_xinfo *sock_xinfo,
+                               struct sock *sock __attribute__((__unused__)),
+                               struct libscols_line *ln __attribute__((__unused__)),
+                               int column_id,
+                               size_t column_index __attribute__((__unused__)),
+                               char **str)
+{
+       return l3_fill_column_handler(INET, sock_xinfo, column_id, str)
+               || l4_fill_column_handler(UDPLITE, sock_xinfo, column_id, str);
+}
+
+static const struct l4_xinfo_class udplite_xinfo_class = {
+       .sock = {
+               .get_name = udp_get_name,
+               .get_type = udp_get_type,
+               .get_state = tcp_get_state,
+               .get_listening = NULL,
+               .fill_column = udplite_fill_column,
+               .free = NULL,
+       },
+       .scan_line = tcp_xinfo_scan_line,
+       .get_addr = tcp_xinfo_get_addr,
+       .is_any_addr = tcp_xinfo_is_any_addr,
+       .family = AF_INET,
+       .l3_decorator = {"", ""},
+};
+
+static void load_xinfo_from_proc_udplite(ino_t netns_inode)
+{
+       load_xinfo_from_proc_inet_L4(netns_inode,
+                                    "/proc/net/udplite",
+                                    &udplite_xinfo_class);
+}
+
+
 /*
  * RAW
  */
index 96be5526e26baacd594e4f63ddc18e612abb0f46..bef4508af3f88fe4bb611fcdac9918494e922f79 100644 (file)
@@ -227,6 +227,9 @@ UDP:::
 state=_SOCK.STATE_[ laddr=_UDP.LADDR_ [ raddr=_UDP.RADDR_]]
 +
 *lsfd* hides ``raddr=`` if _UDP.RADDR_ is ``0.0.0.0`` and _UDP.RPORT_ is 0.
+
+UDPLITE:::
+state=_SOCK.STATE_[ laddr=_UDPLITE.LADDR_ [ raddr=_UDPLITE.RADDR_]]
 +
 UNIX-STREAM:::
 state=_SOCK.STATE_[ path=_UNIX.PATH_]
@@ -350,6 +353,18 @@ Remote IP address and remote UDP port.
 UDP.RPORT <``integer``>::
 Remote UDP port.
 
+UDPLITE.LADDR <``string``>::
+Local IP address and local UDPLite port.
+
+UDPLITE.LPORT <``integer``>::
+Local UDP port.
+
+UDPLITE.RADDR <``string``>::
+Remote IP address and remote UDPLite port.
+
+UDPLITE.RPORT <``integer``>::
+Remote UDP port.
+
 UID <``number``>::
 User ID number.
 
index 7f6275ee8b172d61a58df5ee7fe4ff5a57244f82..5cb1dc40be05068e898daeb2ec86253130b350a6 100644 (file)
@@ -231,6 +231,14 @@ static const struct colinfo infos[] = {
                N_("local UDP port") },
        [COL_UDP_RPORT]={"UDP.RPORT", 0, SCOLS_FL_RIGHT, SCOLS_JSON_NUMBER,
                N_("remote UDP port") },
+       [COL_UDPLITE_LADDR]={ "UDPLITE.LADDR",0, SCOLS_FL_RIGHT, SCOLS_JSON_STRING,
+               N_("local UDPLite address (INET address:UDPLite port)") },
+       [COL_UDPLITE_RADDR]={"UDPLITE.RADDR", 0, SCOLS_FL_RIGHT, SCOLS_JSON_STRING,
+               N_("remote UDPLite address (INET address:UDPLite port)") },
+       [COL_UDPLITE_LPORT]={"UDPLITE.LPORT", 0, SCOLS_FL_RIGHT, SCOLS_JSON_NUMBER,
+               N_("local UDPLite port") },
+       [COL_UDPLITE_RPORT]={"UDPLITE.RPORT", 0, SCOLS_FL_RIGHT, SCOLS_JSON_NUMBER,
+               N_("remote UDPLite port") },
        [COL_UID]     = { "UID",      0, SCOLS_FL_RIGHT, SCOLS_JSON_NUMBER,
                N_("user ID number of the process") },
        [COL_UNIX_PATH]={ "UNIX.PATH",0.4,SCOLS_FL_TRUNC,SCOLS_JSON_STRING,
index 3023af13b04512efb4ef90259ae73cb3e8e3765a..1166f9fe02793ed3b1caf8e3d9ac5dbe045cbbb5 100644 (file)
@@ -90,6 +90,10 @@ enum {
        COL_UDP_RADDR,
        COL_UDP_LPORT,
        COL_UDP_RPORT,
+       COL_UDPLITE_LADDR,
+       COL_UDPLITE_RADDR,
+       COL_UDPLITE_LPORT,
+       COL_UDPLITE_RPORT,
        COL_UID,                /* process */
        COL_UNIX_PATH,
        COL_USER,               /* process */