netlink用户层到内核——一步一步

android 层以上比较简单,有空补上。从JNI开始

 

   static jstring android_net_ethernet_waitForEvent(JNIEnv *env,

                                                     jobject clazz)
    {
            if((len = recvmsg(nl_socket_poll, &msg, 0))>= 0)
  }

static jint android_net_ethernet_initEthernetNative(JNIEnv *env,
                                                        jobject clazz)
    {     
        /*
         *Create connection to netlink socket
         */
        nl_socket_msg = socket(AF_NETLINK,SOCK_RAW,NETLINK_ROUTE);

   }

 

内核部分:

SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
{
      retval = sock_create(family, type, protocol, &sock);

}

static int __sock_create(struct net *net, int family, int type, int protocol,
             struct socket **res, int kern)
{

    pf = rcu_dereference(net_families[family]);
      /*
     * We will call the ->create function, that possibly is in a loadable
     * module, so we have to bump that loadable module refcnt first.
     */
    err = pf->create(net, sock, protocol, kern);

}

net_families哪里来的??look here

static int __init netlink_proto_init(void)
{
    sock_register(&netlink_family_ops);

}

int sock_register(const struct net_proto_family *ops)
{
       spin_lock(&net_family_lock);
    if (net_families[ops->family])
        err = -EEXIST;
    else {
        net_families[ops->family] = ops;
        err = 0;
    }
 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值