static int __nfulnl_send(struct nfulnl_instance *inst) { int status; if (timer_pending(&inst->timer)) del_timer(&inst->timer); if (!inst->skb) return 0; if (inst->qlen > 1) inst->lastnlh->nlmsg_type = NLMSG_DONE; status = nfnetlink_unicast(inst->skb, inst->peer_pid, MSG_DONTWAIT); if (status < 0) { UDEBUG("netlink_unicast() failed\n"); /* FIXME: statistics */ } inst->qlen = 0; inst->skb = NULL; inst->lastnlh = NULL; return status; }
static int __nfulnl_send(struct nfulnl_instance *inst) { int status = -1; if (inst->qlen > 1) NLMSG_PUT(inst->skb, 0, 0, NLMSG_DONE, sizeof(struct nfgenmsg)); status = nfnetlink_unicast(inst->skb, inst->peer_pid, MSG_DONTWAIT); inst->qlen = 0; inst->skb = NULL; nlmsg_failure: return status; }
static void __nfulnl_send(struct nfulnl_instance *inst) { if (inst->qlen > 1) { struct nlmsghdr *nlh = nlmsg_put(inst->skb, 0, 0, NLMSG_DONE, sizeof(struct nfgenmsg), 0); if (WARN_ONCE(!nlh, "bad nlskb size: %u, tailroom %d\n", inst->skb->len, skb_tailroom(inst->skb))) { kfree_skb(inst->skb); goto out; } } nfnetlink_unicast(inst->skb, inst->net, inst->peer_portid, MSG_DONTWAIT); out: inst->qlen = 0; inst->skb = NULL; }
static int __nfulnl_send(struct nfulnl_instance *inst) { int status = -1; if (inst->qlen > 1) { struct nlmsghdr *nlh = nlmsg_put(inst->skb, 0, 0, NLMSG_DONE, sizeof(struct nfgenmsg), 0); if (!nlh) goto out; } status = nfnetlink_unicast(inst->skb, &init_net, inst->peer_portid, MSG_DONTWAIT); inst->qlen = 0; inst->skb = NULL; out: return status; }