Lines Matching refs:nlh

216 static int nfnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,  in nfnetlink_rcv_msg()  argument
225 if (nlmsg_len(nlh) < sizeof(struct nfgenmsg)) in nfnetlink_rcv_msg()
228 type = nlh->nlmsg_type; in nfnetlink_rcv_msg()
256 u8 cb_id = NFNL_MSG_TYPE(nlh->nlmsg_type); in nfnetlink_rcv_msg()
258 struct nlattr *attr = (void *)nlh + min_len; in nfnetlink_rcv_msg()
259 int attrlen = nlh->nlmsg_len - min_len; in nfnetlink_rcv_msg()
264 .nlh = nlh, in nfnetlink_rcv_msg()
265 .nfmsg = nlmsg_data(nlh), in nfnetlink_rcv_msg()
318 struct nlmsghdr *nlh; member
323 static int nfnl_err_add(struct list_head *list, struct nlmsghdr *nlh, int err, in nfnl_err_add() argument
332 nfnl_err->nlh = nlh; in nfnl_err_add()
359 netlink_ack(skb, nfnl_err->nlh, nfnl_err->err, in nfnl_err_deliver()
371 static void nfnetlink_rcv_batch(struct sk_buff *skb, struct nlmsghdr *nlh, in nfnetlink_rcv_batch() argument
384 return netlink_ack(skb, nlh, -EINVAL, NULL); in nfnetlink_rcv_batch()
390 return netlink_ack(oskb, nlh, -ENOMEM, NULL); in nfnetlink_rcv_batch()
404 netlink_ack(oskb, nlh, -EOPNOTSUPP, NULL); in nfnetlink_rcv_batch()
411 netlink_ack(oskb, nlh, -EOPNOTSUPP, NULL); in nfnetlink_rcv_batch()
417 netlink_ack(oskb, nlh, -EOPNOTSUPP, NULL); in nfnetlink_rcv_batch()
424 netlink_ack(oskb, nlh, -ERESTART, NULL); in nfnetlink_rcv_batch()
441 nlh = nlmsg_hdr(skb); in nfnetlink_rcv_batch()
444 if (nlh->nlmsg_len < NLMSG_HDRLEN || in nfnetlink_rcv_batch()
445 skb->len < nlh->nlmsg_len || in nfnetlink_rcv_batch()
446 nlmsg_len(nlh) < sizeof(struct nfgenmsg)) { in nfnetlink_rcv_batch()
453 if (!(nlh->nlmsg_flags & NLM_F_REQUEST)) { in nfnetlink_rcv_batch()
458 type = nlh->nlmsg_type; in nfnetlink_rcv_batch()
495 struct nlattr *attr = (void *)nlh + min_len; in nfnetlink_rcv_batch()
496 u8 cb_id = NFNL_MSG_TYPE(nlh->nlmsg_type); in nfnetlink_rcv_batch()
497 int attrlen = nlh->nlmsg_len - min_len; in nfnetlink_rcv_batch()
501 .nlh = nlh, in nfnetlink_rcv_batch()
502 .nfmsg = nlmsg_data(nlh), in nfnetlink_rcv_batch()
531 if (nlh->nlmsg_flags & NLM_F_ACK || err) { in nfnetlink_rcv_batch()
537 nfnl_err_add(&err_list, nlh, err, &extack) < 0) { in nfnetlink_rcv_batch()
556 msglen = NLMSG_ALIGN(nlh->nlmsg_len); in nfnetlink_rcv_batch()
604 static void nfnetlink_rcv_skb_batch(struct sk_buff *skb, struct nlmsghdr *nlh) in nfnetlink_rcv_skb_batch() argument
607 struct nlattr *attr = (void *)nlh + min_len; in nfnetlink_rcv_skb_batch()
609 int attrlen = nlh->nlmsg_len - min_len; in nfnetlink_rcv_skb_batch()
615 msglen = NLMSG_ALIGN(nlh->nlmsg_len); in nfnetlink_rcv_skb_batch()
625 netlink_ack(skb, nlh, err, NULL); in nfnetlink_rcv_skb_batch()
631 nfgenmsg = nlmsg_data(nlh); in nfnetlink_rcv_skb_batch()
639 nfnetlink_rcv_batch(skb, nlh, res_id, gen_id); in nfnetlink_rcv_skb_batch()
644 struct nlmsghdr *nlh = nlmsg_hdr(skb); in nfnetlink_rcv() local
647 nlh->nlmsg_len < NLMSG_HDRLEN || in nfnetlink_rcv()
648 skb->len < nlh->nlmsg_len) in nfnetlink_rcv()
652 netlink_ack(skb, nlh, -EPERM, NULL); in nfnetlink_rcv()
656 if (nlh->nlmsg_type == NFNL_MSG_BATCH_BEGIN) in nfnetlink_rcv()
657 nfnetlink_rcv_skb_batch(skb, nlh); in nfnetlink_rcv()