从 SIOCGIFCONF 和 SIOCGIFADDR 获取的 Solaris SPARC 中虚拟接口的接口名称不正确
incorrect interface name obtained from SIOCGIFCONF & SIOCGIFADDR for virtual interface in solaris sparc
我有一个程序,可以获取 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 是 vxx11111111111 的虚拟接口。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、vxxx111111111111。第三个应该是'vxxx11111111111:1'
如果在 Solaris x86 上运行相同的代码,则会获得虚拟接口的正确接口名称。
为什么我无法获得 Solaris Sparc 计算机上虚拟接口的正确接口名称?
生成的虚拟接口名称太长。据此,最大长度为 16 个字符。
相关文章:
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 无法使用 SQL VDI(虚拟设备接口)创建条带化备份
- 我们可以在层次结构中创建多个纯虚拟接口及其实现而不会代码爆炸吗?
- C 接口无虚拟函数
- 从 SIOCGIFCONF 和 SIOCGIFADDR 获取的 Solaris SPARC 中虚拟接口的接口名称不正确
- 通过虚拟接口类导出C 类的可移植性
- Pimpl习惯用法、单独的接口/实现文件和多个虚拟继承.如何
- C++接口的公共虚拟本质与实现的私有继承
- 由于基于接口的编程,遇到 C++ 虚拟模板函数问题
- 可以通过跨二进制边界传递的对象上的接口调用虚拟函数吗?
- C++11接口纯虚拟析构函数
- cpp文件中的纯虚拟接口实现
- 虚拟HID(人接口设备)的代码示例
- 关于C 接口(纯虚拟类)/多重继承/虚拟继承的设计Qustion
- 将纯虚拟接口替换为 lambda
- 具有非虚拟接口和一些私有变量的克隆方法
- VDS(虚拟磁盘服务)COM接口通知-仅在注销期间调用回调(接收器)(Unadvise)
- GotW建议不要使用公共虚拟函数,但是Java的接口呢?
- 非虚拟接口?(需要一个非常高性能的低级抽象)
- 编译器要求接口虚拟构造函数