Lines Matching refs:nlk

339 	struct netlink_sock *nlk = nlk_sk(sk);  in netlink_overrun()  local
341 if (!(nlk->flags & NETLINK_F_RECV_NO_ENOBUFS)) { in netlink_overrun()
353 struct netlink_sock *nlk = nlk_sk(sk); in netlink_rcv_wake() local
356 clear_bit(NETLINK_S_CONGESTED, &nlk->state); in netlink_rcv_wake()
357 if (!test_bit(NETLINK_S_CONGESTED, &nlk->state)) in netlink_rcv_wake()
358 wake_up_interruptible(&nlk->wait); in netlink_rcv_wake()
385 struct netlink_sock *nlk = nlk_sk(sk); in netlink_sock_destruct() local
387 if (nlk->cb_running) { in netlink_sock_destruct()
388 if (nlk->cb.done) in netlink_sock_destruct()
389 nlk->cb.done(&nlk->cb); in netlink_sock_destruct()
390 module_put(nlk->cb.module); in netlink_sock_destruct()
391 kfree_skb(nlk->cb.skb); in netlink_sock_destruct()
408 struct netlink_sock *nlk = container_of(work, struct netlink_sock, in netlink_sock_destruct_work() local
411 sk_free(&nlk->sk); in netlink_sock_destruct_work()
483 const struct netlink_sock *nlk = ptr; in netlink_compare() local
485 return nlk->portid != x->portid || in netlink_compare()
486 !net_eq(sock_net(&nlk->sk), read_pnet(&x->pnet)); in netlink_compare()
625 struct netlink_sock *nlk; in __netlink_create() local
635 nlk = nlk_sk(sk); in __netlink_create()
637 nlk->cb_mutex = cb_mutex; in __netlink_create()
639 nlk->cb_mutex = &nlk->cb_def_mutex; in __netlink_create()
640 mutex_init(nlk->cb_mutex); in __netlink_create()
641 lockdep_set_class_and_name(nlk->cb_mutex, in __netlink_create()
645 init_waitqueue_head(&nlk->wait); in __netlink_create()
657 struct netlink_sock *nlk; in netlink_create() local
700 nlk = nlk_sk(sock->sk); in netlink_create()
701 nlk->module = module; in netlink_create()
702 nlk->netlink_bind = bind; in netlink_create()
703 nlk->netlink_unbind = unbind; in netlink_create()
714 struct netlink_sock *nlk = container_of(head, struct netlink_sock, rcu); in deferred_put_nlk_sk() local
715 struct sock *sk = &nlk->sk; in deferred_put_nlk_sk()
717 kfree(nlk->groups); in deferred_put_nlk_sk()
718 nlk->groups = NULL; in deferred_put_nlk_sk()
723 if (nlk->cb_running && nlk->cb.done) { in deferred_put_nlk_sk()
724 INIT_WORK(&nlk->work, netlink_sock_destruct_work); in deferred_put_nlk_sk()
725 schedule_work(&nlk->work); in deferred_put_nlk_sk()
735 struct netlink_sock *nlk; in netlink_release() local
742 nlk = nlk_sk(sk); in netlink_release()
752 if (nlk->netlink_unbind) { in netlink_release()
755 for (i = 0; i < nlk->ngroups; i++) in netlink_release()
756 if (test_bit(i, nlk->groups)) in netlink_release()
757 nlk->netlink_unbind(sock_net(sk), i + 1); in netlink_release()
764 wake_up_interruptible_all(&nlk->wait); in netlink_release()
768 if (nlk->portid && nlk->bound) { in netlink_release()
772 .portid = nlk->portid, in netlink_release()
778 module_put(nlk->module); in netlink_release()
801 call_rcu(&nlk->rcu, deferred_put_nlk_sk); in netlink_release()
918 struct netlink_sock *nlk = nlk_sk(sk); in netlink_update_subscriptions() local
920 if (nlk->subscriptions && !subscriptions) in netlink_update_subscriptions()
922 else if (!nlk->subscriptions && subscriptions) in netlink_update_subscriptions()
924 nlk->subscriptions = subscriptions; in netlink_update_subscriptions()
929 struct netlink_sock *nlk = nlk_sk(sk); in netlink_realloc_groups() local
942 if (nlk->ngroups >= groups) in netlink_realloc_groups()
945 new_groups = krealloc(nlk->groups, NLGRPSZ(groups), GFP_ATOMIC); in netlink_realloc_groups()
950 memset((char *)new_groups + NLGRPSZ(nlk->ngroups), 0, in netlink_realloc_groups()
951 NLGRPSZ(groups) - NLGRPSZ(nlk->ngroups)); in netlink_realloc_groups()
953 nlk->groups = new_groups; in netlink_realloc_groups()
954 nlk->ngroups = groups; in netlink_realloc_groups()
963 struct netlink_sock *nlk = nlk_sk(sk); in netlink_undo_bind() local
966 if (!nlk->netlink_unbind) in netlink_undo_bind()
971 nlk->netlink_unbind(sock_net(sk), undo + 1); in netlink_undo_bind()
979 struct netlink_sock *nlk = nlk_sk(sk); in netlink_bind() local
1001 if (nlk->ngroups < BITS_PER_LONG) in netlink_bind()
1002 groups &= (1UL << nlk->ngroups) - 1; in netlink_bind()
1004 bound = nlk->bound; in netlink_bind()
1009 if (nladdr->nl_pid != nlk->portid) in netlink_bind()
1014 if (nlk->netlink_bind && groups) { in netlink_bind()
1017 for (group = 0; group < nlk->ngroups; group++) { in netlink_bind()
1020 err = nlk->netlink_bind(net, group + 1); in netlink_bind()
1036 netlink_undo_bind(nlk->ngroups, groups, sk); in netlink_bind()
1041 if (!groups && (nlk->groups == NULL || !(u32)nlk->groups[0])) in netlink_bind()
1046 netlink_update_subscriptions(sk, nlk->subscriptions + in netlink_bind()
1048 hweight32(nlk->groups[0])); in netlink_bind()
1049 nlk->groups[0] = (nlk->groups[0] & ~0xffffffffUL) | groups; in netlink_bind()
1065 struct netlink_sock *nlk = nlk_sk(sk); in netlink_connect() local
1073 nlk->dst_portid = 0; in netlink_connect()
1074 nlk->dst_group = 0; in netlink_connect()
1090 if (!nlk->bound) in netlink_connect()
1095 nlk->dst_portid = nladdr->nl_pid; in netlink_connect()
1096 nlk->dst_group = ffs(nladdr->nl_groups); in netlink_connect()
1106 struct netlink_sock *nlk = nlk_sk(sk); in netlink_getname() local
1113 nladdr->nl_pid = nlk->dst_portid; in netlink_getname()
1114 nladdr->nl_groups = netlink_group_mask(nlk->dst_group); in netlink_getname()
1116 nladdr->nl_pid = nlk->portid; in netlink_getname()
1118 nladdr->nl_groups = nlk->groups ? nlk->groups[0] : 0; in netlink_getname()
1135 struct netlink_sock *nlk; in netlink_getsockbyportid() local
1142 nlk = nlk_sk(sock); in netlink_getsockbyportid()
1144 nlk->dst_portid != nlk_sk(ssk)->portid) { in netlink_getsockbyportid()
1205 struct netlink_sock *nlk; in netlink_attachskb() local
1207 nlk = nlk_sk(sk); in netlink_attachskb()
1210 test_bit(NETLINK_S_CONGESTED, &nlk->state))) { in netlink_attachskb()
1221 add_wait_queue(&nlk->wait, &wait); in netlink_attachskb()
1224 test_bit(NETLINK_S_CONGESTED, &nlk->state)) && in netlink_attachskb()
1229 remove_wait_queue(&nlk->wait, &wait); in netlink_attachskb()
1294 struct netlink_sock *nlk = nlk_sk(sk); in netlink_unicast_kernel() local
1297 if (nlk->netlink_rcv != NULL) { in netlink_unicast_kernel()
1302 nlk->netlink_rcv(skb); in netlink_unicast_kernel()
1368 const struct netlink_sock *nlk = nlk_sk(NETLINK_CB(skb).sk); in netlink_strict_get_check() local
1370 return nlk->flags & NETLINK_F_STRICT_CHK; in netlink_strict_get_check()
1376 struct netlink_sock *nlk = nlk_sk(sk); in netlink_broadcast_deliver() local
1379 !test_bit(NETLINK_S_CONGESTED, &nlk->state)) { in netlink_broadcast_deliver()
1405 struct netlink_sock *nlk = nlk_sk(sk); in do_one_broadcast() local
1411 if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups || in do_one_broadcast()
1412 !test_bit(p->group - 1, nlk->groups)) in do_one_broadcast()
1416 if (!(nlk->flags & NETLINK_F_LISTEN_ALL_NSID)) in do_one_broadcast()
1449 if (nlk->flags & NETLINK_F_BROADCAST_SEND_ERROR) in do_one_broadcast()
1469 if (nlk->flags & NETLINK_F_BROADCAST_SEND_ERROR) in do_one_broadcast()
1548 struct netlink_sock *nlk = nlk_sk(sk); in do_one_set_err() local
1557 if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups || in do_one_set_err()
1558 !test_bit(p->group - 1, nlk->groups)) in do_one_set_err()
1561 if (p->code == ENOBUFS && nlk->flags & NETLINK_F_RECV_NO_ENOBUFS) { in do_one_set_err()
1605 static void netlink_update_socket_mc(struct netlink_sock *nlk, in netlink_update_socket_mc() argument
1611 old = test_bit(group - 1, nlk->groups); in netlink_update_socket_mc()
1612 subscriptions = nlk->subscriptions - old + new; in netlink_update_socket_mc()
1614 __set_bit(group - 1, nlk->groups); in netlink_update_socket_mc()
1616 __clear_bit(group - 1, nlk->groups); in netlink_update_socket_mc()
1617 netlink_update_subscriptions(&nlk->sk, subscriptions); in netlink_update_socket_mc()
1618 netlink_update_listeners(&nlk->sk); in netlink_update_socket_mc()
1625 struct netlink_sock *nlk = nlk_sk(sk); in netlink_setsockopt() local
1639 nlk->flags |= NETLINK_F_RECV_PKTINFO; in netlink_setsockopt()
1641 nlk->flags &= ~NETLINK_F_RECV_PKTINFO; in netlink_setsockopt()
1651 if (!val || val - 1 >= nlk->ngroups) in netlink_setsockopt()
1653 if (optname == NETLINK_ADD_MEMBERSHIP && nlk->netlink_bind) { in netlink_setsockopt()
1654 err = nlk->netlink_bind(sock_net(sk), val); in netlink_setsockopt()
1659 netlink_update_socket_mc(nlk, val, in netlink_setsockopt()
1662 if (optname == NETLINK_DROP_MEMBERSHIP && nlk->netlink_unbind) in netlink_setsockopt()
1663 nlk->netlink_unbind(sock_net(sk), val); in netlink_setsockopt()
1670 nlk->flags |= NETLINK_F_BROADCAST_SEND_ERROR; in netlink_setsockopt()
1672 nlk->flags &= ~NETLINK_F_BROADCAST_SEND_ERROR; in netlink_setsockopt()
1677 nlk->flags |= NETLINK_F_RECV_NO_ENOBUFS; in netlink_setsockopt()
1678 clear_bit(NETLINK_S_CONGESTED, &nlk->state); in netlink_setsockopt()
1679 wake_up_interruptible(&nlk->wait); in netlink_setsockopt()
1681 nlk->flags &= ~NETLINK_F_RECV_NO_ENOBUFS; in netlink_setsockopt()
1690 nlk->flags |= NETLINK_F_LISTEN_ALL_NSID; in netlink_setsockopt()
1692 nlk->flags &= ~NETLINK_F_LISTEN_ALL_NSID; in netlink_setsockopt()
1697 nlk->flags |= NETLINK_F_CAP_ACK; in netlink_setsockopt()
1699 nlk->flags &= ~NETLINK_F_CAP_ACK; in netlink_setsockopt()
1704 nlk->flags |= NETLINK_F_EXT_ACK; in netlink_setsockopt()
1706 nlk->flags &= ~NETLINK_F_EXT_ACK; in netlink_setsockopt()
1711 nlk->flags |= NETLINK_F_STRICT_CHK; in netlink_setsockopt()
1713 nlk->flags &= ~NETLINK_F_STRICT_CHK; in netlink_setsockopt()
1726 struct netlink_sock *nlk = nlk_sk(sk); in netlink_getsockopt() local
1742 val = nlk->flags & NETLINK_F_RECV_PKTINFO ? 1 : 0; in netlink_getsockopt()
1752 val = nlk->flags & NETLINK_F_BROADCAST_SEND_ERROR ? 1 : 0; in netlink_getsockopt()
1762 val = nlk->flags & NETLINK_F_RECV_NO_ENOBUFS ? 1 : 0; in netlink_getsockopt()
1773 for (pos = 0; pos * 8 < nlk->ngroups; pos += sizeof(u32)) { in netlink_getsockopt()
1779 if (put_user((u32)(nlk->groups[idx] >> shift), in netlink_getsockopt()
1785 if (put_user(ALIGN(nlk->ngroups / 8, sizeof(u32)), optlen)) in netlink_getsockopt()
1794 val = nlk->flags & NETLINK_F_CAP_ACK ? 1 : 0; in netlink_getsockopt()
1804 val = nlk->flags & NETLINK_F_EXT_ACK ? 1 : 0; in netlink_getsockopt()
1813 val = nlk->flags & NETLINK_F_STRICT_CHK ? 1 : 0; in netlink_getsockopt()
1845 struct netlink_sock *nlk = nlk_sk(sk); in netlink_sendmsg() local
1875 dst_portid = nlk->dst_portid; in netlink_sendmsg()
1876 dst_group = nlk->dst_group; in netlink_sendmsg()
1879 if (!nlk->bound) { in netlink_sendmsg()
1896 NETLINK_CB(skb).portid = nlk->portid; in netlink_sendmsg()
1929 struct netlink_sock *nlk = nlk_sk(sk); in netlink_recvmsg() local
1964 nlk->max_recvmsg_len = max(nlk->max_recvmsg_len, len); in netlink_recvmsg()
1965 nlk->max_recvmsg_len = min_t(size_t, nlk->max_recvmsg_len, in netlink_recvmsg()
1986 if (nlk->flags & NETLINK_F_RECV_PKTINFO) in netlink_recvmsg()
1988 if (nlk->flags & NETLINK_F_LISTEN_ALL_NSID) in netlink_recvmsg()
1998 if (nlk->cb_running && in netlink_recvmsg()
2030 struct netlink_sock *nlk; in __netlink_kernel_create() local
2064 nlk = nlk_sk(sk); in __netlink_kernel_create()
2065 nlk->flags |= NETLINK_F_KERNEL_SOCKET; in __netlink_kernel_create()
2189 struct netlink_sock *nlk = nlk_sk(sk); in netlink_dump() local
2199 mutex_lock(nlk->cb_mutex); in netlink_dump()
2200 if (!nlk->cb_running) { in netlink_dump()
2213 cb = &nlk->cb; in netlink_dump()
2216 if (alloc_min_size < nlk->max_recvmsg_len) { in netlink_dump()
2217 alloc_size = nlk->max_recvmsg_len; in netlink_dump()
2242 if (nlk->dump_done_errno > 0) { in netlink_dump()
2244 nlk->dump_done_errno = cb->dump(skb, cb); in netlink_dump()
2248 if (nlk->dump_done_errno > 0 || in netlink_dump()
2249 skb_tailroom(skb) < nlmsg_total_size(sizeof(nlk->dump_done_errno))) { in netlink_dump()
2250 mutex_unlock(nlk->cb_mutex); in netlink_dump()
2260 sizeof(nlk->dump_done_errno), in netlink_dump()
2267 memcpy(nlmsg_data(nlh), &nlk->dump_done_errno, in netlink_dump()
2268 sizeof(nlk->dump_done_errno)); in netlink_dump()
2270 if (extack._msg && nlk->flags & NETLINK_F_EXT_ACK) { in netlink_dump()
2284 nlk->cb_running = false; in netlink_dump()
2287 mutex_unlock(nlk->cb_mutex); in netlink_dump()
2293 mutex_unlock(nlk->cb_mutex); in netlink_dump()
2302 struct netlink_sock *nlk, *nlk2; in __netlink_dump_start() local
2315 nlk = nlk_sk(sk); in __netlink_dump_start()
2316 mutex_lock(nlk->cb_mutex); in __netlink_dump_start()
2318 if (nlk->cb_running) { in __netlink_dump_start()
2328 cb = &nlk->cb; in __netlink_dump_start()
2347 nlk->cb_running = true; in __netlink_dump_start()
2348 nlk->dump_done_errno = INT_MAX; in __netlink_dump_start()
2350 mutex_unlock(nlk->cb_mutex); in __netlink_dump_start()
2368 mutex_unlock(nlk->cb_mutex); in __netlink_dump_start()
2383 struct netlink_sock *nlk = nlk_sk(NETLINK_CB(in_skb).sk); in netlink_ack() local
2385 bool nlk_has_extack = nlk->flags & NETLINK_F_EXT_ACK; in netlink_ack()
2395 if (!(nlk->flags & NETLINK_F_CAP_ACK)) in netlink_ack()
2557 struct netlink_sock *nlk; in __netlink_seq_next() local
2561 nlk = rhashtable_walk_next(&iter->hti); in __netlink_seq_next()
2563 if (IS_ERR(nlk)) { in __netlink_seq_next()
2564 if (PTR_ERR(nlk) == -EAGAIN) in __netlink_seq_next()
2567 return nlk; in __netlink_seq_next()
2570 if (nlk) in __netlink_seq_next()
2579 } while (sock_net(&nlk->sk) != seq_file_net(seq)); in __netlink_seq_next()
2581 return nlk; in __netlink_seq_next()
2625 struct netlink_sock *nlk = nlk_sk(s); in netlink_seq_show() local
2630 nlk->portid, in netlink_seq_show()
2631 nlk->groups ? (u32)nlk->groups[0] : 0, in netlink_seq_show()
2634 nlk->cb_running, in netlink_seq_show()
2735 const struct netlink_sock *nlk = data; in netlink_hash() local
2738 netlink_compare_arg_init(&arg, sock_net(&nlk->sk), nlk->portid); in netlink_hash()