我有一个程序可以获取solaris机器(x86和sparc)中的接口列表,包括虚拟接口。
我使用以下代码来获取它。
// create socket
int fd;
if ((fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0)
return 0;
// Get list of interfaces
struct ifconf Ifc;
struct ifreq IfcBuf[MAX_NUM_IFREQ];
struct ifreq* pIfr;
Ifc.ifc_len = sizeof(IfcBuf);
Ifc.ifc_buf = (char*) IfcBuf;
if (ioctl(fd, SIOCGIFCONF, &Ifc) < 0)
return 0;
// loop interfaces
int num_ifreq = Ifc.ifc_len / sizeof(struct ifreq);
int i;
for (pIfr = Ifc.ifc_req, i = 0; i < num_ifreq; pIfr++, i++)
{
// Request the address
if (ioctl(fd, SIOCGIFADDR, pIfr) < 0)
return 0;
// get interfaceName
char* interfaceName= (char*) lstrdup(pIfr->ifr_name);
...
}
在Solaris x86中,程序按预期工作。它可以获得所有接口,包括虚拟接口。 但是,在Solaris Sparc中,虚拟接口的名称不正确。
例如,如果我有以下接口(ifconfig -a): vxx1111111111:1是vxx1111111111的虚拟接口。
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
vxxx11111111111: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 192.168.101.208 netmask ffffff00 broadcast 192.168.101.255
ether 1:1:11:11:11:11
vxxx11111111111:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 192.168.101.220 netmask ffffff00 broadcast 192.168.101.255
程序生成的接口名称为:lo0,vxxx11111111111,vxxx11111111111。 第三个应该是'vxxx11111111111:1'
如果我在Solaris x86上运行相同的代码,我会获得虚拟接口的正确接口名称。
为什么我无法在Solaris Sparc计算机上获得虚拟接口的正确接口名称?
答案 0 :(得分:0)
生成的虚拟接口名称太长。 根据{{3}},最大长度为16个字符。