return strdup(str);
}
+static bool unix_get_listening(struct sock_xinfo *sock_xinfo,
+ struct sock *sock __attribute__((__unused__)))
+{
+ struct unix_xinfo *ux = (struct unix_xinfo *)sock_xinfo;
+
+ return ux->acceptcon;
+}
+
static bool unix_fill_column(struct proc *proc __attribute__((__unused__)),
struct sock_xinfo *sock_xinfo,
struct sock *sock __attribute__((__unused__)),
.get_name = unix_get_name,
.get_type = unix_get_type,
.get_state = unix_get_state,
+ .get_listening = unix_get_listening,
.fill_column = unix_fill_column,
.free = NULL,
};
break;
}
return false;
+ case COL_SOCKLISTENING:
+ str = xstrdup((sock->xinfo
+ && sock->xinfo->class
+ && sock->xinfo->class->get_listening
+ && sock->xinfo->class->get_listening(sock->xinfo, sock))
+ ? "1"
+ : "0");
+ break;
default:
if (sock->xinfo && sock->xinfo->class
&& sock->xinfo->class->fill_column) {
char * (*get_name)(struct sock_xinfo *, struct sock *);
char * (*get_type)(struct sock_xinfo *, struct sock *);
char * (*get_state)(struct sock_xinfo *, struct sock *);
+ bool (*get_listening)(struct sock_xinfo *, struct sock *);
/* Method for class specific columns.
* Return true when the method fills the column. */
bool (*fill_column)(struct proc *,
SIZE <``number``>::
File size.
+SOCKLISTENING <``boolean``>::
+Listening socket.
+
SOCKNETS <``number``>::
Inode identifying network namespace where the socket belogs to.
N_("device ID (if special file)") },
[COL_SIZE] = { "SIZE", 4, SCOLS_FL_RIGHT, SCOLS_JSON_NUMBER,
N_("file size"), },
+ [COL_SOCKLISTENING]={"SOCKLISTENING",0,SCOLS_FL_RIGHT,SCOLS_JSON_BOOLEAN,
+ N_("listening socket") },
[COL_SOCKNETNS]={"SOCKNETNS", 0, SCOLS_FL_RIGHT, SCOLS_JSON_NUMBER,
N_("inode identifying network namespace where the socket belongs to") },
[COL_SOCKSTATE]={"SOCKSTATE", 0, SCOLS_FL_RIGHT, SCOLS_JSON_STRING,
COL_PROTONAME,
COL_RDEV,
COL_SIZE,
+ COL_SOCKLISTENING,
COL_SOCKNETNS,
COL_SOCKSTATE,
COL_SOCKTYPE,
- 3 SOCK state=connected path=test_mkfds-unix-dgram type=dgram connected dgram test_mkfds-unix-dgram
- 4 SOCK state=connected type=dgram connected dgram
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
- 3 SOCK state=connected path=@test_mkfds-unix-dgram type=dgram connected dgram @test_mkfds-unix-dgram
- 4 SOCK state=connected type=dgram connected dgram
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 3 SOCK state=connected path=test_mkfds-unix-dgram type=dgram connected dgram 0 test_mkfds-unix-dgram
+ 4 SOCK state=connected type=dgram connected dgram 0
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
+ 3 SOCK state=connected path=@test_mkfds-unix-dgram type=dgram connected dgram 0 @test_mkfds-unix-dgram
+ 4 SOCK state=connected type=dgram connected dgram 0
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
- 5 SOCK state=listen path=test_mkfds-unix-stream-ns listen stream test_mkfds-unix-stream-ns
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 5 SOCK state=listen path=test_mkfds-unix-stream-ns listen stream 1 test_mkfds-unix-stream-ns
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
the netns for the stream socket is extracted as expectedly
- 5 SOCK state=listen path=@test_mkfds-unix-stream-ns listen stream @test_mkfds-unix-stream-ns
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 5 SOCK state=listen path=@test_mkfds-unix-stream-ns listen stream 1 @test_mkfds-unix-stream-ns
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
the netns for the abstract stream socket is extracted as expectedly
- 5 SOCK state=unconnected path=test_mkfds-unix-dgram-ns type=dgram unconnected dgram test_mkfds-unix-dgram-ns
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 5 SOCK state=unconnected path=test_mkfds-unix-dgram-ns type=dgram unconnected dgram 0 test_mkfds-unix-dgram-ns
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
the netns for the dgram socket is extracted as expectedly
- 5 SOCK state=unconnected path=@test_mkfds-unix-dgram-ns type=dgram unconnected dgram @test_mkfds-unix-dgram-ns
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 5 SOCK state=unconnected path=@test_mkfds-unix-dgram-ns type=dgram unconnected dgram 0 @test_mkfds-unix-dgram-ns
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
the netns for the abstract dgram socket is extracted as expectedly
- 5 SOCK state=listen path=test_mkfds-unix-seqpacket-ns type=seqpacket listen seqpacket test_mkfds-unix-seqpacket-ns
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 5 SOCK state=listen path=test_mkfds-unix-seqpacket-ns type=seqpacket listen seqpacket 1 test_mkfds-unix-seqpacket-ns
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
the netns for the seqpacket socket is extracted as expectedly
- 5 SOCK state=listen path=@test_mkfds-unix-seqpacket-ns type=seqpacket listen seqpacket @test_mkfds-unix-seqpacket-ns
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 5 SOCK state=listen path=@test_mkfds-unix-seqpacket-ns type=seqpacket listen seqpacket 1 @test_mkfds-unix-seqpacket-ns
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
the netns for the abstract seqpacket socket is extracted as expectedly
- 3 SOCK state=listen path=test_mkfds-unix-stream listen stream test_mkfds-unix-stream
- 4 SOCK state=connected connected stream
- 5 SOCK state=connected path=test_mkfds-unix-stream connected stream test_mkfds-unix-stream
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
- 3 SOCK state=listen path=@test_mkfds-unix-stream-abs listen stream @test_mkfds-unix-stream-abs
- 4 SOCK state=connected connected stream
- 5 SOCK state=connected path=@test_mkfds-unix-stream-abs connected stream @test_mkfds-unix-stream-abs
-(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
- 3 SOCK state=listen path=test_mkfds-unix-stream-shutdown listen stream test_mkfds-unix-stream-shutdown
- 4 SOCK state=connected connected stream
- 5 SOCK state=connected path=test_mkfds-unix-stream-shutdown connected stream test_mkfds-unix-stream-shutdown
-(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
- 3 SOCK state=listen path=test_mkfds-unix-seqpacket type=seqpacket listen seqpacket test_mkfds-unix-seqpacket
- 4 SOCK state=connected type=seqpacket connected seqpacket
- 5 SOCK state=connected path=test_mkfds-unix-seqpacket type=seqpacket connected seqpacket test_mkfds-unix-seqpacket
-ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
- 3 SOCK state=listen path=@test_mkfds-unix-seqpacket-abs listen stream @test_mkfds-unix-seqpacket-abs
- 4 SOCK state=connected connected stream
- 5 SOCK state=connected path=@test_mkfds-unix-seqpacket-abs connected stream @test_mkfds-unix-seqpacket-abs
-(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
- 3 SOCK state=listen path=test_mkfds-unix-seqpacket-shutdown type=seqpacket listen seqpacket test_mkfds-unix-seqpacket-shutdown
- 4 SOCK state=connected type=seqpacket connected seqpacket
- 5 SOCK state=connected path=test_mkfds-unix-seqpacket-shutdown type=seqpacket connected seqpacket test_mkfds-unix-seqpacket-shutdown
-(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 3 SOCK state=listen path=test_mkfds-unix-stream listen stream 1 test_mkfds-unix-stream
+ 4 SOCK state=connected connected stream 0
+ 5 SOCK state=connected path=test_mkfds-unix-stream connected stream 0 test_mkfds-unix-stream
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
+ 3 SOCK state=listen path=@test_mkfds-unix-stream-abs listen stream 1 @test_mkfds-unix-stream-abs
+ 4 SOCK state=connected connected stream 0
+ 5 SOCK state=connected path=@test_mkfds-unix-stream-abs connected stream 0 @test_mkfds-unix-stream-abs
+(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
+ 3 SOCK state=listen path=test_mkfds-unix-stream-shutdown listen stream 1 test_mkfds-unix-stream-shutdown
+ 4 SOCK state=connected connected stream 0
+ 5 SOCK state=connected path=test_mkfds-unix-stream-shutdown connected stream 0 test_mkfds-unix-stream-shutdown
+(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
+ 3 SOCK state=listen path=test_mkfds-unix-seqpacket type=seqpacket listen seqpacket 1 test_mkfds-unix-seqpacket
+ 4 SOCK state=connected type=seqpacket connected seqpacket 0
+ 5 SOCK state=connected path=test_mkfds-unix-seqpacket type=seqpacket connected seqpacket 0 test_mkfds-unix-seqpacket
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
+ 3 SOCK state=listen path=@test_mkfds-unix-seqpacket-abs listen stream 1 @test_mkfds-unix-seqpacket-abs
+ 4 SOCK state=connected connected stream 0
+ 5 SOCK state=connected path=@test_mkfds-unix-seqpacket-abs connected stream 0 @test_mkfds-unix-seqpacket-abs
+(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
+ 3 SOCK state=listen path=test_mkfds-unix-seqpacket-shutdown type=seqpacket listen seqpacket 1 test_mkfds-unix-seqpacket-shutdown
+ 4 SOCK state=connected type=seqpacket connected seqpacket 0
+ 5 SOCK state=connected path=test_mkfds-unix-seqpacket-shutdown type=seqpacket connected seqpacket 0 test_mkfds-unix-seqpacket-shutdown
+(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH: 0
path=test_mkfds-unix-dgram ; }
if read -r -u "${MKFDS[0]}" PID; then
${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH \
-p "${PID}" -Q "${EXPR}"
- echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH': $?
kill -CONT "${PID}"
wait "${MKFDS_PID}"
abstract=true ; }
if read -r -u "${MKFDS[0]}" PID; then
${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH \
-p "${PID}" -Q "${EXPR}"
- echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH': $?
kill -CONT "${PID}"
wait "${MKFDS_PID}"
type=$t ; }
if read -r -u "${MKFDS[0]}" PID; then
${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH \
-p "${PID}" -Q "${EXPR}"
- echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH': $?
compare_net_namespaces "$t" "${PID}"
type=$t ; }
if read -r -u "${MKFDS[0]}" PID; then
${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH \
-p "${PID}" -Q "${EXPR}"
- echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH': $?
compare_net_namespaces "abstract $t" "${PID}"
type=$t ; }
if read -r -u "${MKFDS[0]}" PID; then
${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH \
-p "${PID}" -Q "${EXPR}"
- echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH': $?
kill -CONT "${PID}"
wait "${MKFDS_PID}"
abstract=true ; }
if read -r -u "${MKFDS[0]}" PID; then
${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH \
-p "${PID}" -Q "${EXPR}"
- echo '(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ echo '(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH': $?
kill -CONT "${PID}"
wait "${MKFDS_PID}"
type=$t ; }
if read -r -u "${MKFDS[0]}" PID; then
${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH \
-p "${PID}" -Q "${EXPR}"
- echo '(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ echo '(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,SOCKLISTENING,UNIX.PATH': $?
# Surprisingly, the socket status doesn't change at all.
kill -CONT "${PID}"