分类: LINUX
2010-04-11 18:44:53
chinaunix网友2010-08-28 15:45:01
现在已经看明白nf_ct_ext_types[]在哪里初始化的了,是在nf_ct_extend_register()里面的rcu_assign_pointer(nf_ct_ext_types[type->id], type)来完成赋值的。
chinaunix网友2010-08-28 11:28:58
谢谢lz的好文章,我正在学习这方面的东东,你的文章对我起了非常大的帮助! 不过,我这里对你的文章的一个细节有点疑问,说出来,望指教。在3章2节中提到“函数会判断ct->ext是否为NULL,若为NULL则证明这是第一个,所以调用nf_ct_ext_create(),它分配一个扩展的size并且返回它的起始地址;对于扩展的管理是先来的放前面。所以nf_ct_ext::offset[id]会是添加id对应的扩展之前nf_ct_ext的对齐后的连同以前添加的扩展数据在内的长度。”我对此处的理解是,在nf_ct_ext_create()函数中offset[id]时添加id对应的扩展之前nf_ct_ext的对齐后的长度,而在nf_ct_ext_add()函数中的其他情况下nf_ct_ext::offset[id]应该是添加id对应的扩展之前nf_ct_ext和以前添加的扩展数据在内的对齐后的长度。不知道理解正确与否,望指点。 在此处,我还有点疑惑的是,源码中经常出现 t = rcu_dereference(nf_ct_ext_types[id]),可是我一直没有发现n