Linux的ifIndex持久性

我们使用OpManager来监控远程 linux机器上的接口设备.这些框具有VLAN,我们用它来收集有关正在中继到框中的网络的信息.例如,我们有eth0.2,eth0.3,eth0.12,eth0.13,eth0.22,eth0.23(分别与vlans 2,3,12,13,22,23相对应).

我们在管理IP地址上使用SNMP来检查并确保接口已启动.但是,如果我们必须重新启动网络服务,我们就会遇到接口索引发生变化的问题.我们会收到如下错误消息:

接口’eth0.23 – eth0.23’已关闭.接口描述为’eth0.23′,索引为11.电路ID未配置.

即使界面已启动并正在运行.

如何通过重新启动将索引值更改为持久性.如果我们将接口从静态IP更改为动态,我们已经看到了这一点.

解决方法

简而言之,SNMP RFC不需要在网络管理器重新初始化之间使用ifIndex持久性. net-snmp不提供任何特殊功能来提供此功能.

来自RFC 2863:

The requirement for constancy (between
re-initializations) of an interface’s
ifIndex value is met by requiring that
after an interface is dynamically
removed,its ifIndex value is not
re-used by a different dynamically
added interface until after the
following re-initialization of the
network management system.

需要注意的是,当系统重新初始化(即重新启动)时,明确允许ifIndex条目用于任何接口.

Linux内核(net / core / dev.c):

static int dev_new_index(struct net *net)
{
    static int ifindex;
    for (;;) {
        if (++ifindex <= 0)
            ifindex = 1;
        if (!__dev_get_by_index(net,ifindex))
            return ifindex;
    }
}

内核中的ifindex分配使用简单的递增算法.这是相关的,因为在net-snmp(agent / mibgroup / if-mib / data_access / interface_ioctl.c)中:

oid
netsnmp_access_interface_ioctl_ifindex_get(int fd,const char *name)
{
#ifndef SIOCGIFINDEX
    return 0;
#else
    struct ifreq    ifrq;
    int rc = 0;

    DEBUGMSGTL(("access:interface:ioctl","ifindex_get\n"));

    rc = _ioctl_get(fd,SIOCGIFINDEX,&ifrq,name);
    if (rc < 0) {
        DEBUGMSGTL(("access:interface:ioctl","ifindex_get error on inerface '%s'\n",name));
        return 0;
    }

    return ifrq.ifr_ifindex;
#endif /* SIOCGIFINDEX */
}

该函数最终被调用以填充ifindex,它只是使用IOCTL接口从Linux内核中检索SIOCGIFINDEX值.

当我使用基于SNMP的监控系统遇到这种性质的问题时,我最终使用另一种方法来引用网络接口.特别是,我使用接口名称而不是接口索引号(即“eth0”,“eth1”,“vlan150”等).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


查找全部容器的日志文件 $ sudo find /var/lib/docker/containers -name *.log 查看日志位置 $ docker inspect --format=&#39;{{.LogPath}}&#39; &lt;container_name&gt; 实时查询内容 $
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型
评估Linux系统性能的ttyload工具使用效果
分享在Linux系统中检测SSH版本的方法
介绍Linux平台上的数据加密工具EncryptPad
在Linux系统中,如何查看和诊断块设备信息?
在Linux环境下如何查看块设备信息?
探索Linux操作系统下的数据加密工具EncryptPad
学会在Linux系统中查看硬盘信息
分析SELinux:原理与实践
掌握SELinux策略类别
技巧:有效解读和管理Linux日志文件
查看Linux系统中的所有用户
了解Linux系统中各种不同类型的日志文件
深入理解Linux PS命令
方法:在Linux操作系统中查看用户