Lines Matching refs:nlk

342 	struct netlink_sock *nlk = nlk_sk(sk);
344 if (!(nlk->flags & NETLINK_F_RECV_NO_ENOBUFS)) {
356 struct netlink_sock *nlk = nlk_sk(sk);
359 clear_bit(NETLINK_S_CONGESTED, &nlk->state);
360 if (!test_bit(NETLINK_S_CONGESTED, &nlk->state))
361 wake_up_interruptible(&nlk->wait);
388 struct netlink_sock *nlk = nlk_sk(sk);
390 if (nlk->cb_running) {
391 if (nlk->cb.done)
392 nlk->cb.done(&nlk->cb);
393 module_put(nlk->cb.module);
394 kfree_skb(nlk->cb.skb);
411 struct netlink_sock *nlk = container_of(work, struct netlink_sock,
414 sk_free(&nlk->sk);
488 const struct netlink_sock *nlk = ptr;
490 return nlk->portid != x->portid ||
491 !net_eq(sock_net(&nlk->sk), read_pnet(&x->pnet));
635 struct netlink_sock *nlk;
645 nlk = nlk_sk(sk);
647 nlk->cb_mutex = cb_mutex;
649 nlk->cb_mutex = &nlk->cb_def_mutex;
650 mutex_init(nlk->cb_mutex);
651 lockdep_set_class_and_name(nlk->cb_mutex,
655 init_waitqueue_head(&nlk->wait);
667 struct netlink_sock *nlk;
710 nlk = nlk_sk(sock->sk);
711 nlk->module = module;
712 nlk->netlink_bind = bind;
713 nlk->netlink_unbind = unbind;
724 struct netlink_sock *nlk = container_of(head, struct netlink_sock, rcu);
725 struct sock *sk = &nlk->sk;
727 kfree(nlk->groups);
728 nlk->groups = NULL;
733 if (nlk->cb_running && nlk->cb.done) {
734 INIT_WORK(&nlk->work, netlink_sock_destruct_work);
735 schedule_work(&nlk->work);
745 struct netlink_sock *nlk;
752 nlk = nlk_sk(sk);
762 if (nlk->netlink_unbind) {
765 for (i = 0; i < nlk->ngroups; i++)
766 if (test_bit(i, nlk->groups))
767 nlk->netlink_unbind(sock_net(sk), i + 1);
774 wake_up_interruptible_all(&nlk->wait);
778 if (nlk->portid && nlk->bound) {
782 .portid = nlk->portid,
788 module_put(nlk->module);
811 call_rcu(&nlk->rcu, deferred_put_nlk_sk);
928 struct netlink_sock *nlk = nlk_sk(sk);
930 if (nlk->subscriptions && !subscriptions)
932 else if (!nlk->subscriptions && subscriptions)
934 nlk->subscriptions = subscriptions;
939 struct netlink_sock *nlk = nlk_sk(sk);
952 if (nlk->ngroups >= groups)
955 new_groups = krealloc(nlk->groups, NLGRPSZ(groups), GFP_ATOMIC);
960 memset((char *)new_groups + NLGRPSZ(nlk->ngroups), 0,
961 NLGRPSZ(groups) - NLGRPSZ(nlk->ngroups));
963 nlk->groups = new_groups;
964 nlk->ngroups = groups;
973 struct netlink_sock *nlk = nlk_sk(sk);
976 if (!nlk->netlink_unbind)
981 nlk->netlink_unbind(sock_net(sk), undo + 1);
989 struct netlink_sock *nlk = nlk_sk(sk);
1011 if (nlk->ngroups < BITS_PER_LONG)
1012 groups &= (1UL << nlk->ngroups) - 1;
1015 bound = READ_ONCE(nlk->bound);
1017 /* Ensure nlk->portid is up-to-date. */
1020 if (nladdr->nl_pid != nlk->portid)
1024 if (nlk->netlink_bind && groups) {
1031 err = nlk->netlink_bind(net, group + 1);
1053 if (!groups && (nlk->groups == NULL || !(u32)nlk->groups[0]))
1058 netlink_update_subscriptions(sk, nlk->subscriptions +
1060 hweight32(nlk->groups[0]));
1061 nlk->groups[0] = (nlk->groups[0] & ~0xffffffffUL) | groups;
1077 struct netlink_sock *nlk = nlk_sk(sk);
1087 WRITE_ONCE(nlk->dst_portid, 0);
1088 WRITE_ONCE(nlk->dst_group, 0);
1105 if (!READ_ONCE(nlk->bound))
1112 WRITE_ONCE(nlk->dst_portid, nladdr->nl_pid);
1113 WRITE_ONCE(nlk->dst_group, ffs(nladdr->nl_groups));
1123 struct netlink_sock *nlk = nlk_sk(sk);
1131 nladdr->nl_pid = READ_ONCE(nlk->dst_portid);
1132 nladdr->nl_groups = netlink_group_mask(READ_ONCE(nlk->dst_group));
1135 nladdr->nl_pid = READ_ONCE(nlk->portid);
1137 nladdr->nl_groups = nlk->groups ? nlk->groups[0] : 0;
1154 struct netlink_sock *nlk;
1161 nlk = nlk_sk(sock);
1164 READ_ONCE(nlk->dst_portid) != nlk_sk(ssk)->portid) {
1225 struct netlink_sock *nlk;
1227 nlk = nlk_sk(sk);
1230 test_bit(NETLINK_S_CONGESTED, &nlk->state))) {
1241 add_wait_queue(&nlk->wait, &wait);
1244 test_bit(NETLINK_S_CONGESTED, &nlk->state)) &&
1249 remove_wait_queue(&nlk->wait, &wait);
1314 struct netlink_sock *nlk = nlk_sk(sk);
1317 if (nlk->netlink_rcv != NULL) {
1322 nlk->netlink_rcv(skb);
1388 const struct netlink_sock *nlk = nlk_sk(NETLINK_CB(skb).sk);
1390 return nlk->flags & NETLINK_F_STRICT_CHK;
1396 struct netlink_sock *nlk = nlk_sk(sk);
1399 !test_bit(NETLINK_S_CONGESTED, &nlk->state)) {
1425 struct netlink_sock *nlk = nlk_sk(sk);
1431 if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups ||
1432 !test_bit(p->group - 1, nlk->groups))
1436 if (!(nlk->flags & NETLINK_F_LISTEN_ALL_NSID))
1469 if (nlk->flags & NETLINK_F_BROADCAST_SEND_ERROR)
1489 if (nlk->flags & NETLINK_F_BROADCAST_SEND_ERROR)
1568 struct netlink_sock *nlk = nlk_sk(sk);
1577 if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups ||
1578 !test_bit(p->group - 1, nlk->groups))
1581 if (p->code == ENOBUFS && nlk->flags & NETLINK_F_RECV_NO_ENOBUFS) {
1626 static void netlink_update_socket_mc(struct netlink_sock *nlk,
1632 old = test_bit(group - 1, nlk->groups);
1633 subscriptions = nlk->subscriptions - old + new;
1635 __set_bit(group - 1, nlk->groups);
1637 __clear_bit(group - 1, nlk->groups);
1638 netlink_update_subscriptions(&nlk->sk, subscriptions);
1639 netlink_update_listeners(&nlk->sk);
1646 struct netlink_sock *nlk = nlk_sk(sk);
1660 nlk->flags |= NETLINK_F_RECV_PKTINFO;
1662 nlk->flags &= ~NETLINK_F_RECV_PKTINFO;
1672 if (!val || val - 1 >= nlk->ngroups)
1674 if (optname == NETLINK_ADD_MEMBERSHIP && nlk->netlink_bind) {
1675 err = nlk->netlink_bind(sock_net(sk), val);
1680 netlink_update_socket_mc(nlk, val,
1683 if (optname == NETLINK_DROP_MEMBERSHIP && nlk->netlink_unbind)
1684 nlk->netlink_unbind(sock_net(sk), val);
1691 nlk->flags |= NETLINK_F_BROADCAST_SEND_ERROR;
1693 nlk->flags &= ~NETLINK_F_BROADCAST_SEND_ERROR;
1698 nlk->flags |= NETLINK_F_RECV_NO_ENOBUFS;
1699 clear_bit(NETLINK_S_CONGESTED, &nlk->state);
1700 wake_up_interruptible(&nlk->wait);
1702 nlk->flags &= ~NETLINK_F_RECV_NO_ENOBUFS;
1711 nlk->flags |= NETLINK_F_LISTEN_ALL_NSID;
1713 nlk->flags &= ~NETLINK_F_LISTEN_ALL_NSID;
1718 nlk->flags |= NETLINK_F_CAP_ACK;
1720 nlk->flags &= ~NETLINK_F_CAP_ACK;
1725 nlk->flags |= NETLINK_F_EXT_ACK;
1727 nlk->flags &= ~NETLINK_F_EXT_ACK;
1732 nlk->flags |= NETLINK_F_STRICT_CHK;
1734 nlk->flags &= ~NETLINK_F_STRICT_CHK;
1747 struct netlink_sock *nlk = nlk_sk(sk);
1773 for (pos = 0; pos * 8 < nlk->ngroups; pos += sizeof(u32)) {
1779 if (put_user((u32)(nlk->groups[idx] >> shift),
1785 if (put_user(ALIGN(BITS_TO_BYTES(nlk->ngroups), sizeof(u32)), optlen))
1807 val = nlk->flags & flag ? 1 : 0;
1837 struct netlink_sock *nlk = nlk_sk(sk);
1873 dst_portid = READ_ONCE(nlk->dst_portid);
1874 dst_group = READ_ONCE(nlk->dst_group);
1878 if (!READ_ONCE(nlk->bound)) {
1883 /* Ensure nlk is hashed and visible. */
1895 NETLINK_CB(skb).portid = nlk->portid;
1928 struct netlink_sock *nlk = nlk_sk(sk);
1963 nlk->max_recvmsg_len = max(nlk->max_recvmsg_len, len);
1964 nlk->max_recvmsg_len = min_t(size_t, nlk->max_recvmsg_len,
1984 if (nlk->flags & NETLINK_F_RECV_PKTINFO)
1986 if (nlk->flags & NETLINK_F_LISTEN_ALL_NSID)
1996 if (READ_ONCE(nlk->cb_running) &&
2028 struct netlink_sock *nlk;
2062 nlk = nlk_sk(sk);
2063 nlk->flags |= NETLINK_F_KERNEL_SOCKET;
2185 static int netlink_dump_done(struct netlink_sock *nlk, struct sk_buff *skb,
2191 nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE, sizeof(nlk->dump_done_errno),
2197 memcpy(nlmsg_data(nlh), &nlk->dump_done_errno, sizeof(nlk->dump_done_errno));
2199 if (extack->_msg && nlk->flags & NETLINK_F_EXT_ACK) {
2210 struct netlink_sock *nlk = nlk_sk(sk);
2219 mutex_lock(nlk->cb_mutex);
2220 if (!nlk->cb_running) {
2233 cb = &nlk->cb;
2236 if (alloc_min_size < nlk->max_recvmsg_len) {
2237 alloc_size = nlk->max_recvmsg_len;
2269 if (nlk->dump_done_errno > 0) {
2271 nlk->dump_done_errno = cb->dump(skb, cb);
2275 if (nlk->dump_done_errno > 0 ||
2276 skb_tailroom(skb) < nlmsg_total_size(sizeof(nlk->dump_done_errno))) {
2277 mutex_unlock(nlk->cb_mutex);
2286 if (netlink_dump_done(nlk, skb, cb, &extack))
2295 if (netlink_dump_done(nlk, skb_shinfo(skb)->frag_list, cb, &extack))
2308 WRITE_ONCE(nlk->cb_running, false);
2311 mutex_unlock(nlk->cb_mutex);
2317 mutex_unlock(nlk->cb_mutex);
2326 struct netlink_sock *nlk, *nlk2;
2339 nlk = nlk_sk(sk);
2340 mutex_lock(nlk->cb_mutex);
2342 if (nlk->cb_running) {
2352 cb = &nlk->cb;
2371 WRITE_ONCE(nlk->cb_running, true);
2372 nlk->dump_done_errno = INT_MAX;
2374 mutex_unlock(nlk->cb_mutex);
2392 mutex_unlock(nlk->cb_mutex);
2407 struct netlink_sock *nlk = nlk_sk(NETLINK_CB(in_skb).sk);
2409 bool nlk_has_extack = nlk->flags & NETLINK_F_EXT_ACK;
2418 if (err && !(nlk->flags & NETLINK_F_CAP_ACK))
2579 struct netlink_sock *nlk;
2583 nlk = rhashtable_walk_next(&iter->hti);
2585 if (IS_ERR(nlk)) {
2586 if (PTR_ERR(nlk) == -EAGAIN)
2589 return nlk;
2592 if (nlk)
2601 } while (sock_net(&nlk->sk) != seq_file_net(seq));
2603 return nlk;
2648 struct netlink_sock *nlk = nlk_sk(s);
2653 nlk->portid,
2654 nlk->groups ? (u32)nlk->groups[0] : 0,
2657 READ_ONCE(nlk->cb_running),
2820 const struct netlink_sock *nlk = data;
2823 netlink_compare_arg_init(&arg, sock_net(&nlk->sk), nlk->portid);