Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2237725
  • 博文数量: 395
  • 博客积分: 10994
  • 博客等级: 上将
  • 技术积分: 5586
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 19:49
文章存档

2014年(1)

2013年(10)

2012年(74)

2011年(303)

2010年(7)

分类: 嵌入式

2012-03-12 18:15:21

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"


阅读(8753) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~