青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Netfilter框架分析

nf_register_hook() -->
int nf_register_hook(struct nf_hook_ops *reg)
{
 struct list_head *i;
 spin_lock_bh(&nf_hook_lock);
 list_for_each(i, &nf_hooks[reg->pf][reg->hooknum]) {
  if (reg->priority < ((struct nf_hook_ops *)i)->priority)
   break;
 }
 list_add_rcu(&reg->list, i->prev);
 spin_unlock_bh(&nf_hook_lock);
 synchronize_net();
 return 0;
}
struct list_head nf_hooks[NPROTO][NF_MAX_HOOKS];
#define NPROTO  32  /* should be enough for now.. */
/* Largest hook number + 1 */
#define NF_MAX_HOOKS 8
reg->hooknum
/* IP Hooks */
/* After promisc drops, checksum checks. */
#define NF_IP_PRE_ROUTING 0
/* If the packet is destined for this box. */
#define NF_IP_LOCAL_IN  1
/* If the packet is destined for another interface. */
#define NF_IP_FORWARD  2
/* Packets coming from a local process. */
#define NF_IP_LOCAL_OUT  3
/* Packets about to hit the wire. */
#define NF_IP_POST_ROUTING 4
#define NF_IP_NUMHOOKS  5
reg->priority
enum nf_ip_hook_priorities {
 NF_IP_PRI_FIRST = INT_MIN,
 NF_IP_PRI_CONNTRACK_DEFRAG = -400,
 NF_IP_PRI_RAW = -300,
 NF_IP_PRI_SELINUX_FIRST = -225,
 NF_IP_PRI_CONNTRACK = -200,
 NF_IP_PRI_BRIDGE_SABOTAGE_FORWARD = -175,
 NF_IP_PRI_MANGLE = -150,
 NF_IP_PRI_NAT_DST = -100,
 NF_IP_PRI_BRIDGE_SABOTAGE_LOCAL_OUT = -50,
 NF_IP_PRI_FILTER = 0,
 NF_IP_PRI_NAT_SRC = 100,
 NF_IP_PRI_SELINUX_LAST = 225,
 NF_IP_PRI_LAST = INT_MAX,
};
 
在來看一下NF_HOOK宏
ip_forward() return NF_HOOK(PF_INET, NF_IP_FORWARD, skb, skb->dev, rt->u.dst.dev,
         ip_forward_finish);
#define NF_HOOK(pf, hook, skb, indev, outdev, okfn)   \
(list_empty(&nf_hooks[(pf)][(hook)])     \
 ? (okfn)(skb)        \
 : nf_hook_slow((pf), (hook), (skb), (indev), (outdev), (okfn), INT_MIN))
int nf_hook_slow(int pf, unsigned int hook, struct sk_buff *skb,
   struct net_device *indev,
   struct net_device *outdev,
   int (*okfn)(struct sk_buff *),
   int hook_thresh){
struct list_head *elem;
elem = &nf_hooks[pf][hook];
next_hook:
 verdict = nf_iterate(&nf_hooks[pf][hook], &skb, hook, indev,
        outdev, &elem, okfn, hook_thresh);
 if (verdict == NF_QUEUE) {
  NFDEBUG("nf_hook: Verdict = QUEUE.\n");
  if (!nf_queue(skb, elem, pf, hook, indev, outdev, okfn))
   goto next_hook;
 }
 switch (verdict) {
 case NF_ACCEPT:
  ret = okfn(skb);
  break;
 case NF_DROP:
  kfree_skb(skb);
  ret = -EPERM;
  break;
 }
 rcu_read_unlock();
 return ret;
}
static unsigned int nf_iterate(struct list_head *head,
          struct sk_buff **skb,
          int hook,
          const struct net_device *indev,
          const struct net_device *outdev,
          struct list_head **i,
          int (*okfn)(struct sk_buff *),
          int hook_thresh)
{
 /*
  * The caller must not block between calls to this
  * function because of risk of continuing from deleted element.
  */
 list_for_each_continue_rcu(*i, head) {
  struct nf_hook_ops *elem = (struct nf_hook_ops *)*i;
  if (hook_thresh > elem->priority)
   continue;
  /* Optimization: we don't need to hold module
                   reference here, since function can't sleep. --RR */
  switch (elem->hook(hook, skb, indev, outdev, okfn)) {
  case NF_QUEUE:
   return NF_QUEUE;
  case NF_STOLEN:
   return NF_STOLEN;
  case NF_DROP:
   return NF_DROP;
  case NF_REPEAT:
   *i = (*i)->prev;
   break;
#ifdef CONFIG_NETFILTER_DEBUG
  case NF_ACCEPT:
   break;
  default:
   NFDEBUG("Evil return from %p(%u).\n",
    elem->hook, hook);
#endif
  }
 }
 return NF_ACCEPT;
}
源碼net\ipv4目錄下 grep NF_HOOK *.c 可以看到內核使用了如下HOOK點
arp.c:  NF_HOOK(NF_ARP, NF_ARP_OUT, skb, NULL, skb->dev, dev_queue_xmit);
arp.c:  return NF_HOOK(NF_ARP, NF_ARP_IN, skb, dev, NULL, arp_process);
igmp.c: return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, skb->dev,
igmp.c: return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
ip_forward.c:   return NF_HOOK(PF_INET, NF_IP_FORWARD, skb, skb->dev, rt->u.dst.dev,
ip_input.c:     return NF_HOOK(PF_INET, NF_IP_LOCAL_IN, skb, skb->dev, NULL,
ip_input.c:     return NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, dev, NULL,
ipmr.c: NF_HOOK(PF_INET, NF_IP_FORWARD, skb, skb->dev, dev,
ip_output.c:    return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
ip_output.c:    return NF_HOOK(PF_INET, NF_IP_POST_ROUTING, skb, NULL, dev,
ip_output.c:                            NF_HOOK(PF_INET, NF_IP_POST_ROUTING, newskb, NULL,
ip_output.c:                    NF_HOOK(PF_INET, NF_IP_POST_ROUTING, newskb, NULL,
ip_output.c:    return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
ip_output.c:    err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL,
raw.c:  err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
 

posted on 2010-12-14 16:13 lstar 閱讀(466) 評論(0)  編輯 收藏 引用

導航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統計

常用鏈接

留言簿

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产欧美一区二区视频| 亚洲欧美制服中文字幕| 激情久久影院| 亚洲女ⅴideoshd黑人| 欧美国产91| 久久精品视频在线看| 国产日韩视频一区二区三区| 亚洲小说欧美另类婷婷| 亚洲精品乱码久久久久久按摩观| 午夜精品久久久久| 欧美日韩一区二区在线观看视频| 91久久中文| 欧美国产日韩在线| 久久婷婷丁香| 激情久久五月天| 蜜臀久久99精品久久久久久9 | 欧美乱人伦中文字幕在线| 在线日韩成人| 欧美成在线视频| 免费日韩成人| 日韩亚洲欧美在线观看| 亚洲精品在线免费| 欧美日韩一区二区三区免费看| 一区二区激情| 美女爽到呻吟久久久久| 久久久综合香蕉尹人综合网| 亚洲国产精品一区二区第四页av | 日韩午夜电影| 一本到12不卡视频在线dvd| 国产精品成人免费| 午夜精品久久久久久久99黑人| 亚洲欧美日韩区| 伊人成人网在线看| 亚洲韩国青草视频| 欧美视频在线一区二区三区| 欧美一区永久视频免费观看| 久久黄金**| 欧美精品导航| 亚洲自拍高清| 久久久久国产精品一区三寸| 亚洲精品国精品久久99热一| 一区二区久久久久久| 国产在线观看一区| 亚洲高清不卡一区| 欧美性大战久久久久| 一本色道久久综合亚洲精品婷婷 | 亚洲综合色视频| 伊人精品成人久久综合软件| 亚洲电影第1页| 欧美午夜精品理论片a级按摩 | 欧美亚洲视频在线观看| 亚洲大胆在线| 中国日韩欧美久久久久久久久| 国产一区二区电影在线观看| 亚洲国产精品成人| 欧美一区不卡| 99视频+国产日韩欧美| 亚洲视频碰碰| 亚洲人成人99网站| 另类av导航| 日韩亚洲欧美综合| 欧美在线一区二区| 中文一区二区在线观看| 亚洲午夜一区二区| 欧美国产日产韩国视频| 国产乱码精品1区2区3区| 亚洲高清视频一区| 国产伦精品一区二区三区视频黑人| 欧美国产1区2区| 国产资源精品在线观看| 在线亚洲成人| 亚洲伦理一区| 久久综合电影| 久久久久久久久岛国免费| 欧美三级电影网| 亚洲国产精品ⅴa在线观看| 国产嫩草一区二区三区在线观看 | 久久爱www久久做| 欧美色欧美亚洲高清在线视频| 91久久久在线| 久久综合给合| 久久综合精品国产一区二区三区| 欧美亚洲第一页| 日韩网站在线| 中文精品一区二区三区| 欧美理论视频| 91久久久在线| 亚洲欧洲日产国产网站| 亚洲精品国产品国语在线app| 亚洲午夜未删减在线观看| 亚洲一区二区三区三| 欧美精品日本| 日韩亚洲在线观看| 在线亚洲+欧美+日本专区| 欧美巨乳在线| 在线视频欧美日韩| 午夜欧美精品| 国产手机视频一区二区| 亚洲欧美日韩综合aⅴ视频| 欧美一区二区三区视频| 国产日韩欧美在线看| 欧美在线一二三区| 美女在线一区二区| 亚洲国产精品免费| 欧美激情精品久久久久久免费印度| 亚洲第一精品电影| 日韩一级二级三级| 国产精品ⅴa在线观看h| 欧美xart系列高清| 欧美影院视频| 美女诱惑一区| 日韩视频免费观看高清完整版| 亚洲桃色在线一区| 国产精品美女www爽爽爽| 欧美伊人久久| 欧美肥婆bbw| 亚洲一区二区动漫| 国产日韩在线一区| 久久免费视频这里只有精品| 久久九九精品99国产精品| 欧美福利一区| 亚洲午夜成aⅴ人片| 国产日韩欧美三区| 麻豆成人在线| 亚洲私人影院在线观看| 久久香蕉国产线看观看网| 亚洲精品视频啊美女在线直播| 欧美日韩国产一区精品一区| 亚洲欧美在线一区| 亚洲国产成人久久综合| 亚洲欧美在线x视频| 一区二区三区在线不卡| 欧美精品色综合| 欧美有码在线观看视频| 欧美激情视频在线免费观看 欧美视频免费一 | 久久久久久久91| 亚洲国产一区二区三区高清| 国产精品v欧美精品v日韩精品 | 亚洲美女黄网| 国产视频欧美视频| 欧美日韩国产在线| 久久一二三区| 亚洲女同在线| 欧美破处大片在线视频| 一区二区三区国产| 欧美国产日韩在线| 久久久久在线观看| 亚洲欧美久久| 亚洲精品一区二区三区婷婷月| 国产日韩欧美在线播放| 欧美日韩在线电影| 欧美粗暴jizz性欧美20| 久久精品导航| 亚洲欧美激情在线视频| 日韩午夜电影| 91久久香蕉国产日韩欧美9色| 久久精彩免费视频| 欧美一二区视频| 亚洲色图自拍| 99人久久精品视频最新地址| 亚洲福利视频网站| 国产偷自视频区视频一区二区| 欧美日韩在线精品| 欧美福利视频| 亚洲第一天堂av| 欧美99在线视频观看| 久久精品视频亚洲| 欧美一区二区三区喷汁尤物| 亚洲欧美激情视频在线观看一区二区三区| 亚洲欧洲综合| 亚洲三级影院| 亚洲精选久久| 夜夜嗨av一区二区三区| 亚洲视频电影图片偷拍一区| 香蕉av福利精品导航| 亚洲欧美中日韩| 午夜在线成人av| 性亚洲最疯狂xxxx高清| 亚洲欧美日韩第一区| 性欧美暴力猛交另类hd| 午夜天堂精品久久久久| 欧美一级淫片播放口| 欧美专区福利在线| 久久天堂成人| 模特精品在线| 亚洲激情视频| 一区二区福利| 午夜精品久久久久久久99樱桃| 午夜久久电影网| 久久精品国产96久久久香蕉| 久久久久久综合| 免费在线一区二区| 欧美精品在线免费播放| 欧美性感一类影片在线播放 | 国产有码一区二区| 亚洲国产成人在线| 欧美成人午夜| 欧美视频久久| 国内精品视频久久| 91久久久久久久久久久久久|