¿Cuál es el significado de los contenidos de / proc / net / unix?

11

En mi dispositivo Android hay un archivo llamado /proc/net/unixcuyo contenido no se ajusta al de ninguna distribución estándar de Linux (que muestra los sockets de dominio de Unix). Primeras líneas:

Num       RefCount Protocol Flags    Type St Inode Path
00000000: 00000002 00000000 00000000 0002 01 5287581 /data/misc/wifi/sockets/wpa_ctrl_789-3189
00000000: 00000003 00000000 00000000 0001 03    6402 /dev/socket/qmux_radio/qmux_client_socket    297
00000000: 00000002 00000000 00010000 0001 01    7180 /dev/.secure_storage/ssd_socket
00000000: 00000002 00000000 00010000 0001 01    6424 /dev/socket/cnd
00000000: 00000002 00000000 00010000 0001 01    6400 @QMulticlient
...

(1) ¿Qué significan estas diferentes columnas?


EDITAR : Ok, he encontrado esto :

Aquí 'Num' es el número de ranura de la tabla del kernel, 'RefCount' es el número de usuarios del socket, 'Protocol' actualmente siempre es 0, 'Flags' representan las banderas internas del kernel que contienen el estado del socket. Actualmente, el tipo es siempre '1' (los sockets de gramo de datos de dominio de Unix aún no son compatibles en el núcleo). 'St' es el estado interno del socket y Path es la ruta enlazada (si existe) del socket.

Sin embargo, eso no está actualizado ya que tenemos typey no aclaramos qué significa "estado interno".

(2) También al final de la ruta, a veces hay un número adicional sin su propio nombre de columna. ¿Que es eso?

Además, ¿en qué parte del código fuente del kernel podría esperar encontrar dónde se crea esto?

EDITAR: 2016-04-27 (Resuelto)

Gracias a la respuesta a continuación, he confirmado lsof |grep qmuxque el número en la última columna para los qmux_client_socketselementos es el PID del proceso que lo usa.

not2qubit
fuente

Respuestas:

6

El código que genera este archivo está en la unix_seq_show()función net/unix/af_unix.cen la fuente del núcleo . Mirar include/net/af_unix.htambién es útil para ver las estructuras de datos en uso.

La ruta del socket siempre es la última columna en la salida, y la fuente del kernel de Android coincide con el kernel de valores a este respecto. Entonces, a menos que me equivoque, ese número que parece una columna no es en realidad una columna separada.

Puede nombrar sockets de dominio UNIX prácticamente cualquier cosa que desee, siempre que la longitud total de la ruta sea inferior a 108 bytes. Por lo tanto, no puede hacer suposiciones sobre cómo se verán estos caminos. Es posible que el código de espacio de usuario que elige esos nombres utilice un carácter de tabulación seguido de un número, o incluso rellene el nombre a una cierta longitud con espacios. Para probar mi teoría, podrías intentar mirar los archivos de socket /dev/socket/qmux_radio/.

Jander
fuente
1
Gracias, eso lo hizo! No se muestran números de socket debajo /dev/socket/qmux_radio/del abridor de socket virtual llamado qmux_client_socket. Pero tu ayuda me hizo comprobar pscuáles son las mismas.
not2qubit