- 论坛徽章:
- 1
|
本帖最后由 jiufei19 于 2014-09-29 10:51 编辑
在连接跟踪代码对扩展进行注册时,有如下函数处理
static void update_alloc_size(struct nf_ct_ext_type *type)
{
int i, j;
struct nf_ct_ext_type *t1, *t2;
enum nf_ct_ext_id min = 0, max = NF_CT_EXT_NUM - 1;
/* unnecessary to update all types */
if ((type->flags & NF_CT_EXT_F_PREALLOC) == 0) {
min = type->id;
max = type->id;
}
/* This assumes that extended areas in conntrack for the types
whose NF_CT_EXT_F_PREALLOC bit set are allocated in order */
for (i = min; i <= max; i++) {
t1 = nf_ct_ext_types;
if (!t1)
continue;
t1->alloc_size = sizeof(struct nf_ct_ext)
+ ALIGN(sizeof(struct nf_ct_ext), t1->align)
+ t1->len;
上面红色字体就是我的问题,即这里为什么要多加个sizeof(struct nf_ct_ext)呢?在该函数的上级调用函数nf_ct_extend_register中,已经明明有如下语句了:
type->alloc_size = ALIGN(sizeof(struct nf_ct_ext),
type->align) + type->len;
PS:
这个问题lunixwh在“论坛›程序设计›C/C++›”中也提出了这一问题,参见“netfilter扩展字段 注册的时候alloc_size 字段问题”,但是没有得到解答 |
|