更改内核中虚拟接口的最大数量

Change maximum number of Virtual interfaces in Kernel

我是运行Ubuntu服务器14.04.3.

我安装了 smcroute - 版本 0.95,内部版本 130523。当我尝试启动守护程序时,我收到错误消息:ERRO: addVIF, out of VIF space;,它在尝试添加我机器的第 33 个网络接口后发生。

查看 /usr/include/linux/ 文件夹中的 mroute.h,我看到一个 MAXVIFS 定义为 32,所以我将其升级为 100 并保存文件.

重新启动后,我仍然可以看到 32 限制被强加,但文件仍然显示 100。如何强制 OS 读取此文件?

您需要使用修改后的配置重建(并重新安装)内核。有Ubuntu-specific条指令here

首先,您需要了解为什么这个数字是 32。它来自下面定义 MAXVIFS 的行:

typedef unsigned long vifbitmap_t;      /* User mode code depends on this lot */

在 32 位机器上(这是这个古老的废话开始的地方),这将是一个 32 位寄存器。当你想要一个比寄存器大的位图时,事情就会变得一团糟。 (另请参阅:FD_SET() 宏)64 在 64 位机器上是安全的。

要增加接口数量,您需要更改用户空间定义(您更改的文件)AND 中的定义内核(内核源代码中的include/linux/mroute.h。)然后,重建内核和每个 与多播混淆的用户空间应用程序。

** 更改该定义会改变 ioctl 数据结构。 **

我来晚了,但仅仅因为你有很多接口,你就不必重新编译你的内核。请尝试使用 newer version of SMCRoute。您可以使用 -N 启动它,并在 smcroute.conf 中指定您打算使用 phyint 指令在哪些接口之间进行路由。请参阅手册页以获取更多帮助。