2009年2月24日星期二

使用Ioctl向Linux内核传递参数的方法

一、应用层

         uint16 data16;

         if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

         {

                   printf("socket failednr");

         }

 

         if(ioctl(fd, SIOCSIFVLAN_PVID_PRI, &data16) < 0)

         {

                   printf("ioctl pvid failednr");

         }

二、linux内核

1 sockios.h中定义

         #define SIOCSIFVLAN_PVID_PRI 0x8985 /* Set 802.1Q VLAN pvid */

2、在af_inet.c中添加:

         extern int VLAN1QEN(unsigned int ,void *arg);

         inet_ioctl()函数中添加

                   case SIOCSIFVLAN_PVID_PRI:

                            return VLAN1QEN(cmd, arg);

3、另外定义:

         static unsigned int VLAN_PVID_PRI = 0;

 

         int VLAN1QEN(unsigned int cmd,void *arg)

         {

                   unsigned int data;

                   if (copy_from_user(&data, arg, sizeof(int)))

                            return -EFAULT;

                   switch (cmd) {

                   case SIOCSIFVLAN_PVID_PRI:

                            VLAN_PVID_PRI = data;

                            break;

                   default:

                            return -EINVAL;

                   }

         }

From: http://soft.zdnet.com.cn/software_zone/2007/1023/574178.shtml

0 评论: