/ / Obtener ID de socket de socket en sk_buff - linux, sockets, kernel

Obtención del ID de socket de socket en sk_buff - linux, sockets, kernel

¿Es posible obtener el zócalo ID en el kernel de Linux en sk_buff estructura? Sé que podría obtener socket usando este código:

const struct tcphdr *th = tcp_hdr(skb);
struct sock *sk = __inet_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest);
if (sk)
struct socket* = sk->sk_socket;

¿Dónde puedo encontrar la identificación y qué valor máximo de esta identificación?

Respuestas

0 para la respuesta № 1

Un socket es un archivo.

Usted encontrará, dentro del struct socket, un struct file *file miembro.

Te recomiendo mira esta pregunta, específicamente el enlace "cosas que nunca deberías hacer en el Kernel" en la respuesta aceptada, porque estoy preocupado por la razón por la que está tratando de recuperar el descriptor de archivo de una estructura de socket en el núcleo (generalmente, desea hacer exactamente lo contrario).

Para recuperar el descriptor de archivo de un archivo determinado en el núcleo, deberá iterar el fdtable (buscar files_fdtable()) ... esta es una gran cantidad de trabajo que hacer, especialmente si hay una gran cantidad de archivos abiertos.

El valor máximo para un valor de descriptor de archivo será el número máximo de archivos permitidos en el sistema, y ​​se puede recuperar con algo como:

files_fdtable(current->files)->max_fds;