vxworks 设置mac地址drv实现

9925阅读 0评论2012-03-12 gududesiling
分类:嵌入式

vxworks 网卡驱动提供了一个ioctl函数接口。

里面有一段如下,是用来得到和设置网卡的物理mac地址的,但是这个并不是真正写入到网卡的真实mac寄存器里面的,而只是一个临时的保存。虽然说设置过后,你使用ifconfig确实可以看到网卡的mac地址已经改变过来了,但是寄存器里面的地址还没有改变,所以你用改编后的mac来进行ping测试,你发现你ping不同,原因就在这,代码如下:


  1. case EIOCSADDR:   //这条是设置mac地址
  2.             //DRV_LOG (DRV_DEBUG_LOAD, "EIOICSADDR\n", 1, 2, 3, 4, 5, 6);
  3.             printf("\n\n\nset the mac addr is:\n");
  4.             if (data == NULL)
  5.                 return (EINVAL);
  6.             bcopy ((char *)data, (char *)END_HADDR(&pDrvCtrl->end),
  7.             END_HADDR_LEN(&pDrvCtrl->end));
/*下面这两句是我自己添加上的,目的是使mac写进寄存器里面,这样的话,就能够ping通了*/
  1.             //bcopy ((char *)data, (char *)(pDrvCtrl->enetAddr),
  2.             //END_HADDR_LEN(&pDrvCtrl->end));
  3.             //dm9000_hash_table(pDrvCtrl);
  4.             
  5.             printf("\n\n\nset the mac addr is:\n");
  6.             pch =(char *)data;
  7.             for(i=0;i<6; i++,pch++)
  8.                 printf("0x%c ",*pch);
  9.             
  10.             break;
  11.         case EIOCGADDR:    //这条是获取mac地址
  12.         DRV_LOG (DRV_DEBUG_LOAD, "EIOCGADDR\n", 1, 2, 3, 4, 5, 6);
  13.             if (data == NULL)
  14.                 return (EINVAL);
  15.             bcopy ((char *)END_HADDR(&pDrvCtrl->end), (char *)data,
  16.             END_HADDR_LEN(&pDrvCtrl->end));
  17.             break;

而设置mac地址的vxworks地址的命令是:
ifconfig "eth0 lladdr 00:14:68:39:ff:5d"


上一篇:兔子买房问题
下一篇:ping指定包大小的命令格式(windows linux vxworks)