que indica o nome da interface sua declaracao e: char name[IFNAMSIZ];O ultimo argumento da funcao de hooking e o:int (*okfn)(struct sk_buff *)Nao mexeremos com esta funcao, mas para nao deixar algo nebuloso vou tentar explicar para que serve esta funcao, dei uma pesquisada na net e descobri que as hooks do netfilter pode descancar(sleep), em momentos como por exemplo o pacote e passado para o espaco do usuario, neste caso, nao seria muito inteligente manter o processo trancado, ou rodando esperando a hook retornar, entao as funcoes de tratamento do netfilter foram divididas em duas, a segunda parte do tratamento, ocorre quando o pacote retorna do espaco do usuario, esta parte e a okfn :), teve uma thread lista do netfilter explicando isto, muito melhor do que eu posso explicar(o proprio rusty que explica hehehehe):http://lists.netfilter.org/pipermail/netfilter/2000-January/003173.htmlDe qualquer forma isto nao e importante dentro deste documento, ja que nao utilizaremos nada relativo a esta funcao :).Como vc pode ver esta funcao retorna um inteiro, este retorno decide o que vai ser feito com o pacote.Seria no iptables o -j, ou o que a hook fara com o pacote.Vamos dar uma olhada no que nossa funcao pode retornar:Estas definicoes estao em ~/linux/netfilter.h :#define NF_DROP 0#define NF_ACCEPT 1#define NF_STOLEN 2#define NF_QUEUE 3#define NF_REPEAT 4NF_DROP: obvio faz com que o pacote seja descartado.NF_ACCEPT: Nem um pouco menos obvio retornando NF_ACCEPT fazemos com que nosso pacote seja aceito.NF_STOLEN: Bom este nao e tao obvio hehehe NF_STOLEN faz com que o pacote morra dentro da nossa hook, ou melhor, que ele seja esquecido pelas hooks subsequentes.NF_QUEUE: Coloca o pacote num fila(nao tenho certeza, mas acredito que isto seja para usar o conceito da libipq( http://www.cs.princeton.edu/~nakao/libipq.htm ), ou seja vc coloca o pacote numa fila para um processo no espaco do usuario, trata este pacote, e retorna para o modo kernel(ativa okfn), ou retorna um drop no bixin.Agora temos sabemos quase tudo que precisamos para avancar e desenvolver nosso primeiro modulo para o netfilter, mas ainda carece saber de uma coisa.Bom registramos hooks dentro do netfilter, esta hook, sao structs (estruturas) que contem, a nossa funcao que estudamos acima( e retorna um dos valores que acabamos de ver), uma prioridade que vou falar mais a frente, e uma familia(no nosso caso PF_INET).Vamos ver esta estrutura, conforme sua declaracao em ~/linux/netfilter.h :struct nf_hook_ops{ struct list_head list; /* User fills in from here down. */ nf_hookfn *hook; int pf; int hooknum; /* Hooks are ordered in ascending priority. */ int priority;};Primeira coisa que notamos ela faz parte de uma lista de hooks, nem se preocupem novamente, nao vamos manipular esta lista(hoje hehehe).struct list_head list;Esta ai a funcao que estudamos a pouco, este membro apontaremos para nossa funcao de hooking :Dnf_hookfn *hook;Bom pf = protocol family, como estaremos lidando com o PF_INET, vamos atribuir este valor para este membro.int pf;Se lembram das hooks que conhecemos lah no comeco do texto?? Bom aqui vamos preencher com elas (relembrando poderia ser NF_IP_PRE_ROUTING, para pacotes que ainda nao foram roteados).int hooknum;Blz quase terminada nossa hook vamos ao membro que ainda nao vimos neste texto oint priority;Como