Linux 5.10.147 xfrm_nlmsg_put_compat 函数执行过程详解
在 Linux 内核 5.10.147 版本中,`xfrm_nlmsg_put_compat` 函数用于向 Netlink 消息中添加兼容的 XFRM 扩展头部。\n\n下面是 `xfrm_nlmsg_put_compat` 函数的执行过程:\n\n1. 首先,该函数会检查提供的 `ext_len` 参数是否大于 0,以及是否小于等于 `XFRMA_MAX`。如果不是,则返回一个负值错误。\n\n2. 接下来,函数会根据 `ext_len` 参数计算需要的总长度,并检查是否超过了 Netlink 消息的最大长度(`XFRM_MSG_ALIGN(XFRM_ALIGN_TO(NLMSG_HDRLEN) + ext_len)`)。如果超过了最大长度,则返回一个负值错误。\n\n3. 然后,函数会调用 `nlmsg_reserve` 函数为 Netlink 消息保留足够的空间。如果失败,则返回一个负值错误。\n\n4. 接着,函数会将提供的 `ext_len` 参数存储在消息头部的 `nlmsg_len` 字段中。\n\n5. 然后,函数会将消息类型设置为 `XFRM_MSG_NEWSA`。\n\n6. 接着,函数会在消息中添加一个兼容的 XFRM 扩展头部。首先,它会调用 `nla_reserve` 函数为扩展头部保留足够的空间。然后,它会将扩展头部的类型设置为 `XFRMA_ALG_CRYPT`,并将其存储在消息中。\n\n7. 最后,函数会返回一个指向扩展头部的指针,供调用者使用。\n\n总结起来,`xfrm_nlmsg_put_compat` 函数的执行过程主要包括计算总长度、保留空间、设置消息类型和添加扩展头部。
原文地址: https://www.cveoy.top/t/topic/p7Sd 著作权归作者所有。请勿转载和采集!