目前我正在使用 lxc 运行多个容器,每个容器都绑定到物理接口;比如说 eth1-c1、eth2-c2、eth3-c3,其中 ethX 是物理接口,cX 是容器;
每个容器都运行一个用户空间应用程序,该应用程序使用 NetLink 注册到 Linux 内核;现在,当一些数据包进入接口说 eth2 时,我需要通过 NetLink 将该数据包发送到在 c2 中运行的用户空间应用程序,因为 eth2 现在已绑定到 c2。
如果 eth4 绑定到 c3,那么内核在 eth4 上接收到的数据包应该通过 netlink 将数据包发送到在 c3 上运行的用户空间应用程序。
我们怎样才能做到这一点?我知道 skb_buff 包含开发名称(skb_buff->dev->name),这将帮助我获取接口名称(比如 eth2 或 eth3),但是如何将其重定向到在容器中运行的注册用户应用程序,因为我没有其他详细信息pid 号以外的用户应用程序。