+ -
当前位置:首页 → 问答吧 → 如何为netlink_kernel_create注册的接收函数传递多个参数

如何为netlink_kernel_create注册的接收函数传递多个参数

时间:2010-06-18

来源:互联网

netlink_kernel_create注册的接收函数只有一个参数(在2.6.29的代码里,只有struct sk_buff* 这个参数),
但是我想传递别的参数给这个接收函数,请问该怎么办?

作者: jinxinxin163   发布时间: 2010-06-18

基于什么需求,为什么你觉得参数会不够用呢。

作者: Godbach   发布时间: 2010-06-18

回复 Godbach


    我想在接收函数里边根据用户层的命令来操作串口,所以需要得到struct tty_struct结构!

作者: jinxinxin163   发布时间: 2010-06-18

回复 Godbach


    最近在作一个项目,问题多多,只能一点一点解了

作者: jinxinxin163   发布时间: 2010-06-18



QUOTE:
回复  Godbach


    我想在接收函数里边根据用户层的命令来操作串口,所以需要得到struct tty_struct结 ...
jinxinxin163 发表于 2010-06-18 16:06




你不能把 struct tty_struct 的内容放到 netlink 传输的报文里传输吗?
那你还要 netlink 干嘛?

作者: platinum   发布时间: 2010-06-18

是啊。你用netlink本来就是用来传递命令和数据的,为什么还需要单独的传递。

作者: Godbach   发布时间: 2010-06-18

回复 platinum

       你误解我的意思了,我是想得到内核中的tty_struct结构,这个是不能从用户空见传过来的!
       具体的想法是:通过用户态传过来的命令,在接收函数里边根据用户态的命令,对串口进行一些设置,而要达到这个目的,需要得到串口的tty_struct结构!所以,这个参数必须是在内核态中的!

作者: jinxinxin163   发布时间: 2010-06-18

回复 Godbach


    你误解我的意思了,我是想得到内核中的tty_struct结构,这个是不能从用户空见传过来的!
       具体的想法是:通过用户态传过来的命令,在接收函数里边根据用户态的命令,对串口进行一些设置,而要达到这个目的,需要得到串口的tty_struct结构!所以,这个参数必须是在内核态中的!

作者: jinxinxin163   发布时间: 2010-06-18

那你就在函数里面直接获取就行了,为什么需要添加参数呢。用户的命令不是通过netlink传进来了吗

作者: Godbach   发布时间: 2010-06-18

内核将 tty_struct 传给用户
用户根据 tty_struct 现状进行修改和调整,回传给内核
内核根据新的 tty_struct 设置串口

这样不可以吗?

作者: platinum   发布时间: 2010-06-18

回复 Godbach


        接收函数只有一个参数struct sk_buff *,在接收函数里边得不到的

作者: jinxinxin163   发布时间: 2010-06-18

回复 platinum

   这样有点麻烦阿,没有更方便的方法么?

作者: jinxinxin163   发布时间: 2010-06-18

从skb中可以解析出来netlink的消息结构体。这样一切从用户空间下发的数据,你都可以获取到了。

作者: Godbach   发布时间: 2010-06-18



QUOTE:
回复  platinum

   这样有点麻烦阿,没有更方便的方法么?
jinxinxin163 发表于 2010-06-18 16:51




如果内核直接支持 ioctl 信令,你也可以直接使用这个来实现,或者自己写 ioctl 信令,或者自己写系统调用,或者利用 procfs 等等……
总之
kernel => user
user => kernel
这是省不了的,除非 user 之前就知道该发送什么给 kernel

另外好奇想问一下,你用 netlink 的目的又是什么呢?

作者: platinum   发布时间: 2010-06-18



QUOTE:
另外好奇想问一下,你用 netlink 的目的又是什么呢?


偶也有点好奇。

作者: Godbach   发布时间: 2010-06-18

回复 platinum


    传输数据,但是传输数据以前,有一些用户空间和内核空间的命令的交互过程。

作者: jinxinxin163   发布时间: 2010-06-18



QUOTE:
回复  platinum


    传输数据,但是传输数据以前,有一些用户空间和内核空间的命令的交互过程。
jinxinxin163 发表于 2010-06-18 17:28


那就在传输数据之前先传输控制信令不就行了吗
就好比 TCP 协议一样,开始先握手,然后再传输

作者: platinum   发布时间: 2010-06-18

一切皆数据。

作者: Godbach   发布时间: 2010-06-18

通信是用来干什么的,就是传递信息啊。信息就是数据。无所谓什么控制命令,什么批量数据,本质上都是数据而已。至于收到之后怎么使用,那只是接收端需要区分的。

作者: Godbach   发布时间: 2010-06-18

作者: wmy0308   发布时间: 2010-06-19

只能说,一切困惑程序员的问题,都是程序员本身的问题。哈哈!!

作者: platinum:   发布时间: 2010-11-22