在VxWorks 6.8上获取MAC地址

时间:2014-08-12 17:44:10

标签: c networking microcontroller mac-address vxworks

我试图解决another problem,但我在 VxWorks 6.8上遇到了 MAC地址

muxIoctl()我没有得到正确的结果:

/* Binding the cookie */
PROTO_COOKIE muxCookie = muxBind( ... ); /* Binding network service <-> end */

/*
 * Error handling etc.
 * [...]
 */

/* Getting the the address */
char result[6];
STATUS status = muxIoctl(muxCookie, EIOCGADDR, result); /* ioctl the device address */

if( status != OK )
{
    /* Error handling */
}
else
{
    /* ioctl() was Ok, print 'result' */
}

对我来说看起来不错的事实在现实中失败了。由于muxIoctl(),缓冲区不包含正确的MAC地址,而是看起来像这样(在两个设备上测试):

 Device #1: 00 00 00 00 0A 00
 Device #2: 00 00 00 00 0B 00
                        ^
                        |
 Every byte is 0, with the exception of these

两个设备都有一个有效的MAC地址,这可以通过ifconfig或传输的数据包看到。接口(如上所述)很好并且正常工作。

通过muxDevAcquire()(或 deprcated endFindByName())而不是使用muxBind()直接获取Cookie会产生相同的结果。

此外:muxDevExists()会返回TRUE而另一个&#34; hacky&#34; 代码也不起作用(但是它会将值返回为以上):

const char* devName = ...
int unit = ...

char result[6];
END_OBJ* end = endFindByName(devName, unit);

STATUS status = end->pFuncTable->ioctl(end, EIOCGADDR, result);

顺便说一下。

上述设备使用 dtsec ,它们也正常工作,但有一个例外:muxIoctl()相关案例 - 基础{{ 1}}给dtsecEndIoctl()代表 - 没有设置地址!它只在系统启动时执行一次(否则它会复制上面的字节)!

ioctl() muxIoctl() EIOCGADDR dtsecEndIoctl() bcopy() pDrvCtrl->dtsecAddr pDrvCtrl muxCookie DTSEC_DRV_CTRL* muxCookie muxIoctl() {{1}} {{1}} {{1}} {{1}}这对我来说看起来像{{1}}的问题。然而,cookie每次都在运行正常 - 预计在这里(旁注:尚未在 etsec 上测试)。

冗长的解释,简短的问题:如何解决这个问题,分别如何获取MAC地址?


解决此问题的其他讨论:

(全部无效)


[更新]: etsec {{1}}上使用正确的MAC,在 dtsec 上失败,如上所述。

1 个答案:

答案 0 :(得分:0)

看起来dtsecEndIoctl无法正常工作。 在END驱动程序中,end-> pFuncTable-> ioctl的地址为dtsecEndIoctl。 这意味着如果dtsecEndIoctl的EIOCGADDR正确复制了MAC,则end-> pFuncTable-> ioctl正确复制了MAC。