Linux内核IP Queue机制的分析(三)——ip_queue内核模块的分析(3)

2020-05-25 00:00:00 函数 消息 结构 报文 数据包

(三)ip_queue报文入队处理函数的注册
   在上面分析的模块注册代码中,IP Queue的报文入队处理函数的注册是通过调用nf_register_queue_handler()来实现的。因此,有必要了解一下该函数的源码,源码位于nf_queue.c中:

  1. /* return EBUSY when somebody else is registered, return EEXIST if the
  2. * same handler is registered, return 0 in case of success. */
  3. int nf_register_queue_handler(int pf, struct nf_queue_handler *qh)
  4. {      
  5.         int ret;
  6.         /*IP协议族的值必须在当前指定的范围内*/
  7.         if (pf >= NPROTO)
  8.                 return -EINVAL;

  9.         write_lock_bh(&queue_handler_lock);
  10.         /*该queue handler已经被注册过了*/
  11.         if (queue_handler[pf] == qh)
  12.                 ret = -EEXIST;
  13.         /*该协议族已经被注册了handler了*/
  14.         else if (queue_handler[pf])
  15.                 ret = -EBUSY;
  16.         /*将该协议的queue hanler指向参数qh*/
  17.         else {
  18.                 queue_handler[pf] = qh;
  19.                 ret = 0;
  20.         }
  21.         write_unlock_bh(&queue_handler_lock);

  22.         return ret;
  23. }

相关文章