您的位置:首页 > 其它

driver上添加获取dev获取到ip之后通知cp的command功能

2014-11-05 10:54 381 查看
定义网络子系统内核通知回调函数:
static struct notifier_block itm_inetaddr_cb = {
.notifier_call = wlan_inetaddr_event,
};

在module_init上注册该内核通知notifier_block:

ret = register_inetaddr_notifier(&itm_inetaddr_cb);
if (ret) {
printke("Couldn't register inetaddr notifier \n");
}


编写该回调函数:

static int wlan_inetaddr_event(struct notifier_block *this,
unsigned long event, void *ptr)
{
unsigned  char      vif_id;
wlan_vif_t          *vif;
struct net_device   *dev;
printkd("inetaddr callback is comming in !\n");

struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;

dev = ifa->ifa_dev ? ifa->ifa_dev->dev : NULL;

if((dev != (id_to_vif(0)->ndev)) && (dev != (id_to_vif(1)->ndev)))
{
printke("dev id not equal to 0 or 1!\n");
goto done;
}

if (dev == NULL)
goto done;
printkd(" inetaddr dev not equal to null !\n");

vif = ndev_to_vif(dev);
vif_id = vif->id;

if (!vif)
goto done;
printkd("inetaddr vif not equal to null !\n");

switch (event) {
case NETDEV_UP:
printkd("inetaddr UP event is comming in !\n");
wlan_cmd_get_ip(vif_id, (u8 *) & ifa->ifa_address);
break;
case NETDEV_DOWN:
printkd("inetaddr DOWN event is comming in  !\n");
break;
default:
printkd("inetaddr defaut is comming in !\n");
break;
}


添加该命令函数

int wlan_cmd_get_ip(unsigned char vif_id, u8 *ip)
{
int dataLen;
struct wlan_cmd_get_ip *ptr;

dataLen = sizeof(struct wlan_cmd_get_ip);
ptr = kmalloc( dataLen, GFP_KERNEL);
memcpy(&(ptr->ip[0]),  ip,  4);
hex_dump("inetaddr ip", strlen("inetaddr ip"), ip, 4);

wlan_cmd_send_recv(vif_id, (unsigned char *)ptr, dataLen, WIFI_CMD_GET_IP, CMD_WAIT_TIMEOUT);
return 0;
}


 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐