- 论坛徽章:
- 0
|
__xfrm_init_state 函数中:- if (x->sel.family != AF_UNSPEC) {
- inner_mode = xfrm_get_mode(x->props.mode, x->sel.family);
- if (inner_mode == NULL)
- goto error;
- if (!(inner_mode->flags & XFRM_MODE_FLAG_TUNNEL) &&
- family != x->sel.family) {
- xfrm_put_mode(inner_mode);
- goto error;
- }
- x->inner_mode = inner_mode;
- } else {
- struct xfrm_mode *inner_mode_iaf;
- int iafamily = AF_INET;
- inner_mode = xfrm_get_mode(x->props.mode, x->props.family);
- if (inner_mode == NULL)
- goto error;
- if (!(inner_mode->flags & XFRM_MODE_FLAG_TUNNEL)) {
- xfrm_put_mode(inner_mode);
- goto error;
- }
- x->inner_mode = inner_mode;
- if (x->props.family == AF_INET)
- iafamily = AF_INET6;
- inner_mode_iaf = xfrm_get_mode(x->props.mode, iafamily);
- if (inner_mode_iaf) {
- if (inner_mode_iaf->flags & XFRM_MODE_FLAG_TUNNEL)
- x->inner_mode_iaf = inner_mode_iaf;
- else
- xfrm_put_mode(inner_mode_iaf);
- }
- }
复制代码 其中if (!(inner_mode->flags & XFRM_MODE_FLAG_TUNNEL)) 则该xfrm_state初始化失败退出。这儿比较费解,意味着创建xfrm_state对象时只能创建tunnel模式的xfrm_state对象而其他模式的(比如transport模式)则不能创建? 那位这方面的高人给解下惑,先行感谢了。 |
|