[br-KernelNewbies] Compartilhamento de memória entre o kernelland e o userland
Fabrício Barros Cabral
fxcabral em yahoo.com.br
Quarta Maio 30 16:43:53 BRT 2007
On Wed, 2007-05-30 at 13:25 -0300, Beraldo Leal wrote:
> Olá Frabicio,
Olá Beraldo! :)
> para isso, se entendi direito, creio que vc vá precisar registrar uma função para
> uma hook no framework netfilter.
Esta, ao meu ver, seria uma das opções. A outra seria pegar os frames
ethernet *diretamente* da placa de rede, mas não sei como fazer isso.
Vamos deixar essa segunda opção em off por enquanto! ;)
> O netfilter irá passar pra sua função a estrutura sk_buf, definida em linux/sk_buff.h e sua função
> precisa retornar para o netfilter, algo definido em linux/netfilter.h que pode ser
>
> /NF_DROP(0),
> NF_ACCEPT(1),
> NF_STOLEN(2),
> NF_QUEUE(3)/e/
> NF_REPEAT(4).
>
> /
>
> Procure por nf_register_hook.
Eu sei que vou precisar fazer um hook do netfilter. E conforme eu falei
no e-mail, eu já estou fazendo isso e mais especificamente ainda, meu
hook se encontra no subsistema bridge do netfilter.
A minha questão, é: dado que eu recebo um sk_buff do netfilter, como
passá-lo "diretamente" para a aplicação? Pensei em utilizar uma área de
memória compartilhada (via mmap()), na qual eu implementaria um ring
buffer, onde meu módulo escreveria os sk_buff e minha aplicação os
leria, no bom e velho estilo produtor-consumidor, mas não sei como
fazê-lo e também não sei se seria uma boa solução.
Se você ou alguém mais da lista puder me ajudar neste problema, ficaria
muito agradecido! :)
[]'s
--fx
Mais detalhes sobre a lista de discussão Kernelnewbies