当前位置:  技术问答>linux和unix

struct sock *sk和 struct sk_buff *skb之间的关系

    来源: 互联网  发布时间:2016-09-08

    本文导语:  函数struct sock *netlink_kernel_create原型里,有一个回调函数:在FC6的内核下是void (*input)(struct sock *sk, int len),新的回调函数是void (*input)(struct sk_buff *skb), 这个是FC6下的代码 void input( struct sock *sk, int len ) {     ...

函数struct sock *netlink_kernel_create原型里,有一个回调函数:在FC6的内核下是void (*input)(struct sock *sk, int len),新的回调函数是void (*input)(struct sk_buff *skb),
这个是FC6下的代码
void input( struct sock *sk, int len )
{
    do
    {
        struct sk_buff *skb;

        if(down_trylock(&receive_sem))
            return;

        while((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL)
        {
            {
                struct nlmsghdr *nlh = NULL;

                if(skb->len >= sizeof(struct nlmsghdr))
                {
                    nlh = (struct nlmsghdr *)skb->data;
                    if((nlh->nlmsg_len >= sizeof(struct nlmsghdr)) && (skb->len >= nlh->nlmsg_len))
                    {
                        if(nlh->nlmsg_type == IB_U_PID)
                        {
                            write_lock_bh(&user_proc.lock);
                            user_proc.pid = nlh->nlmsg_pid;
    usersk = sk;
                            printk("user pid=%d , size of recv buff : %dn",user_proc.pid, sk->sk_rcvbuf);
                            write_unlock_bh(&user_proc.lock);
                        }
                    }
                }
            }
            kfree_skb(skb);
        }
        up(&receive_sem);
    }while(nlfd && nlfd->sk_receive_queue.qlen);
}
我要怎么改,才能改到接口函数是void (*input)(struct sk_buff *skb)
不懂驱动的人来改驱动,就是累,希望各路大虾帮忙,在此先谢了

|
看错了,把sk堪称skb了,哈哈。。那就不用adapter了,新接口直接用skb,这个skb从代码上看应该是socket的recveiv queue来的,查查内核怎么掉input,说不定他已经帮你拿到这个skb了(所不定连取包的循环也在内核处理了),如果是,那你只要保留对单个skb的操作就行了。

    
 
 

您可能感兴趣的文章:

  • typedef_struct与struct之间的区别
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: struct定义及介绍
  • linux 下结构struct ethhdr,struct iphdr在那个头文件下;谢谢!!
  • java命名空间java.sql接口struct的类成员方法: getsqltypename定义及介绍
  • java开发知识 iis7站长之家
  • java命名空间java.sql接口struct的类成员方法: getattributes定义及介绍
  • struct task_struct * get_current(void)函数的解释--help!!
  • 任意struct問題
  • Linux内核中work_struct的定义
  • struct 也有构造器吗?
  • struct dirent的问题
  • 关于struct timespec的一个问题
  • 没有名字的struct
  • struct in_addr 和 unsigned long的转换
  • 求解struct的大小
  • Python struct.unpack
  • 请教struct sembuf的结构是怎样,急!急!急!!!!!!!!
  • 请问:从哪个header文件中看struct tty_driver的定义
  • 用g++开发,怎么设置结构(struct)1字节对齐?
  • struct timeval结构体的作用是什么呢?谢谢
  • 如何由pid获得task_struct?
  • 在Qt中,不知道如何定义结构变量-struct?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3