发布网友 发布时间:2022-04-26 12:09
共1个回答
热心网友 时间:2022-06-28 04:39
google出来的,这个网址应该对你有用...是解释这个函数的...追答恩,不好意思,好像很多都是说这个函数的bug的....
下面这个是我从2.6.36.2源码里面给你拷贝出来的..估计你也看过了
我安装过kernel man pages,但是里面也没有这个函数...
看申明,第一个参数是指向sk_buff的指针,看名字大概是缓冲区;第二个是个函数指针,作为回调函数用的,后面代码里面有调用...
好像是用在处理ack之前的预处理,不很清楚具体是干啥的..
int netlink_rcv_skb(struct sk_buff *skb, int (*cb)(struct sk_buff *,
struct nlmsghdr *))
{
struct nlmsghdr *nlh;
int err;
while (skb->len >= nlmsg_total_size(0)) {
int msglen;
nlh = nlmsg_hdr(skb);
err = 0;
if (nlh->nlmsg_len len nlmsg_len)
return 0;
/* Only requests are handled by the kernel */
if (!(nlh->nlmsg_flags & NLM_F_REQUEST))
goto ack;
/* Skip control messages */
if (nlh->nlmsg_type nlmsg_flags & NLM_F_ACK || err)
netlink_ack(skb, nlh, err);
skip:
msglen = NLMSG_ALIGN(nlh->nlmsg_len);
if (msglen > skb->len)
msglen = skb->len;
skb_pull(skb, msglen);
}
return 0;
}