linux网络编程关于nf_hookfn的形参问题

在阅读源码时尝试了解nf_hookfn函数,但是却发现不一样的原型定义,
第一种

unsigned int nf_hookfn(void *priv,  
        struct sk_buff *skb,  
            const struct nf_hook_state *state); 

第二种

typedef unsigned int nf_hookfn(const struct nf_hook_ops *ops,
                   struct sk_buff *skb,
                   const struct net_device *in,
                   const struct net_device *out,
#ifndef __GENKSYMS__
                   const struct nf_hook_state *state
#else
                   int (*okfn)(struct sk_buff *)
#endif
                   );

在linux系统中能找到第二种的代码,第一种却找不到,但用第一种写的程序可以运行,请问下为什么第一种和第二种形参都不对应,为什么用第一种写的程序可以运行?这两种定义方式有啥区别?