FreeBSD以太网操作

时间:2011-12-29 19:01:34

标签: c perl networking freebsd ethernet

我需要一种方法来执行以下任务,假设我的计算机具有k(k为大)数量的以太网接口。我想有一种方法来识别哪个标识符(em0)被分配给哪个物理接口。

我提出的唯一“简单”方法是使物理接口上的LED灯闪烁。

例如

etherblink em0

将闪烁分配给em0的物理以太网接口上的链接或活动指示灯。

我知道linux上有ethertool,但这对FreeBSD不起作用。除了FreeBSD上有LED驱动程序外,它只支持有限数量的以太网模块。

有什么想法吗?我想过将套接字绑定到接口并写入套接字,但这不起作用。

C或Perl

3 个答案:

答案 0 :(得分:2)

我还没有这样做,但是,根据FreeBSD手册,可以使用内核配置提示将特定的驱动程序节点绑定到特定的硬件IRQ。请参阅device.hints(5)和FreeBSD network setup以了解如何定位每个以太网设备IRQ。

答案 1 :(得分:1)

假设有问题的界面是fxp0 ...以root身份运行

use strict; 
my $intf = "fxp0";
while (1) { 
    foreach my $state (qw/up down/) {
        system("ifconfig $intf $state\n");
        sleep 3;
    }
}

我假设你不关心在界面闪烁时转移数据...

答案 2 :(得分:0)

遗憾的是,我没有从我的研究中找到这个问题的一般解决方案(通过阅读FreeBSD 8.2和论坛的更改日志)似乎:

"some cards blink the LEDs on access, so pings could make a repeated pattern. 
The LEDs might even go off if the card is downed with ifconfig(8)." 

特别是em和igb接口,如:

所述
"The em(4) and igb(4) drivers now support the led(4) interface via /dev/led/emN and 
/dev/led/igbN for identification LED control. The following command line makes the 
LED blink on em0:[r211241]" (FreeBSD 8.2 Release changelog)

但是我没有硬件来测试它。我最终做的是重写了用于支持LED硬件功能的接口的以太网驱动程序。