linux 更改netdev的ifindex

xlpyo6sf  于 2023-01-12  发布在  Linux
关注(0)|答案(1)|浏览(130)

我有以下要求。我想用一个内核模块来改变我选择的一个netdev的ifindex。我知道它作为一个键,不能在运行时改变。创建的接口基于英特尔e1000驱动程序。为了实现改变,考虑了以下几点:
1.取消注册_netdev(设备);
1.//修改dev-〉ifindex
1.//以某种方式将网络设备恢复到操作状态,尝试register_netdev,但这当然会导致内核死机
你能告诉我这是否可能吗?我对linux内核驱动程序很陌生。
谢谢大家!

tsm1rwdh

tsm1rwdh1#

我想我已经找到了解决这个问题的窍门/方法:
1.创建虚拟网络名称空间
1.使用dev_change_net_namespace(struct net_device *dev, struct net *net, const char *pat)移动设备到这个名称空间
1.然后使用__dev_change_net_namespace(struct net_device *dev, struct net *net, const char *pat, int new_ifindex)dev移动到具有所需new_ifindexinit_net
1.删除虚拟网络名称空间
在我的内核中,__dev_change_net_namespace(struct net_device *dev, struct net *net, const char *pat, int new_ifindex)并不存在,但是创建它并不困难,因为它只在没有提供new_ifindex的情况下才会拾取它,或者检查提供的new_ifindex是否当前在命名空间中使用
还没有测试,但很快就会了。

相关问题