sock_net() 做什么?

What sock_net() does?

我正在通过阅读执行此操作的内核模块来研究 user-space 和内核之间的通信,但是在代码中有对函数 sock_net() 的调用,我没有明白。我搜索了很多,但我没有找到任何关于这个特定功能的文档,那么这个功能实际上是做什么的?

它 returns 套接字所属的网络堆栈对象,如果启用了网络命名空间(容器通常有自己的网络)。

参见https://elixir.bootlin.com/linux/latest/source/include/net/sock.h#L2503

static inline
struct net *sock_net(const struct sock *sk)
{
    return read_pnet(&sk->sk_net);
}

其中 read_pnet 是:

static inline struct net *read_pnet(const possible_net_t *pnet)
{
#ifdef CONFIG_NET_NS
    return pnet->net;
#else
    return &init_net;
#endif
}