Lines Matching refs:sk
168 static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
216 static void packet_flush_mclist(struct sock *sk);
243 static void __fanout_unlink(struct sock *sk, struct packet_sock *po);
244 static void __fanout_link(struct sock *sk, struct packet_sock *po);
337 static void register_prot_hook(struct sock *sk) in register_prot_hook() argument
339 struct packet_sock *po = pkt_sk(sk); in register_prot_hook()
343 __fanout_link(sk, po); in register_prot_hook()
347 sock_hold(sk); in register_prot_hook()
359 static void __unregister_prot_hook(struct sock *sk, bool sync) in __unregister_prot_hook() argument
361 struct packet_sock *po = pkt_sk(sk); in __unregister_prot_hook()
366 __fanout_unlink(sk, po); in __unregister_prot_hook()
370 __sock_put(sk); in __unregister_prot_hook()
379 static void unregister_prot_hook(struct sock *sk, bool sync) in unregister_prot_hook() argument
381 struct packet_sock *po = pkt_sk(sk); in unregister_prot_hook()
384 __unregister_prot_hook(sk, sync); in unregister_prot_hook()
568 dev = __dev_get_by_index(sock_net(&po->sk), po->ifindex); in prb_calc_retire_blk_tmo()
681 spin_lock(&po->sk.sk_receive_queue.lock); in prb_retire_rx_blk_timer_expired()
744 spin_unlock(&po->sk.sk_receive_queue.lock); in prb_retire_rx_blk_timer_expired()
798 struct sock *sk = &po->sk; in prb_close_block() local
827 sk->sk_data_ready(sk); in prb_close_block()
1239 struct sock *sk = &po->sk; in packet_rcv_has_room() local
1243 return (atomic_read(&sk->sk_rmem_alloc) + skb->truesize) in packet_rcv_has_room()
1244 <= sk->sk_rcvbuf; in packet_rcv_has_room()
1246 spin_lock(&sk->sk_receive_queue.lock); in packet_rcv_has_room()
1255 spin_unlock(&sk->sk_receive_queue.lock); in packet_rcv_has_room()
1260 static void packet_sock_destruct(struct sock *sk) in packet_sock_destruct() argument
1262 skb_queue_purge(&sk->sk_error_queue); in packet_sock_destruct()
1264 WARN_ON(atomic_read(&sk->sk_rmem_alloc)); in packet_sock_destruct()
1265 WARN_ON(atomic_read(&sk->sk_wmem_alloc)); in packet_sock_destruct()
1267 if (!sock_flag(sk, SOCK_DEAD)) { in packet_sock_destruct()
1268 pr_err("Attempt to release alive packet socket: %p\n", sk); in packet_sock_destruct()
1272 sk_refcnt_debug_dec(sk); in packet_sock_destruct()
1393 static void __fanout_link(struct sock *sk, struct packet_sock *po) in __fanout_link() argument
1398 f->arr[f->num_members] = sk; in __fanout_link()
1404 static void __fanout_unlink(struct sock *sk, struct packet_sock *po) in __fanout_unlink() argument
1411 if (f->arr[i] == sk) in __fanout_unlink()
1420 static bool match_fanout_group(struct packet_type *ptype, struct sock *sk) in match_fanout_group() argument
1422 if (ptype->af_packet_priv == (void *)((struct packet_sock *)sk)->fanout) in match_fanout_group()
1428 static int fanout_add(struct sock *sk, u16 id, u16 type_flags) in fanout_add() argument
1430 struct packet_sock *po = pkt_sk(sk); in fanout_add()
1460 read_pnet(&f->net) == sock_net(sk)) { in fanout_add()
1473 write_pnet(&match->net, sock_net(sk)); in fanout_add()
1498 __fanout_link(sk, po); in fanout_add()
1507 static void fanout_release(struct sock *sk) in fanout_release() argument
1509 struct packet_sock *po = pkt_sk(sk); in fanout_release()
1548 struct sock *sk; in packet_rcv_spkt() local
1556 sk = pt->af_packet_priv; in packet_rcv_spkt()
1572 if (!net_eq(dev_net(dev), sock_net(sk))) in packet_rcv_spkt()
1602 if (sock_queue_rcv_skb(sk, skb) == 0) in packet_rcv_spkt()
1620 struct sock *sk = sock->sk; in packet_sendmsg_spkt() local
1647 dev = dev_get_by_name_rcu(sock_net(sk), saddr->spkt_device); in packet_sendmsg_spkt()
1661 if (unlikely(sock_flag(sk, SOCK_NOFCS))) { in packet_sendmsg_spkt()
1679 skb = sock_wmalloc(sk, len + reserved + tlen, 0, GFP_KERNEL); in packet_sendmsg_spkt()
1710 skb->priority = sk->sk_priority; in packet_sendmsg_spkt()
1711 skb->mark = sk->sk_mark; in packet_sendmsg_spkt()
1713 sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags); in packet_sendmsg_spkt()
1732 const struct sock *sk, in run_filter() argument
1738 filter = rcu_dereference(sk->sk_filter); in run_filter()
1761 struct sock *sk; in packet_rcv() local
1771 sk = pt->af_packet_priv; in packet_rcv()
1772 po = pkt_sk(sk); in packet_rcv()
1774 if (!net_eq(dev_net(dev), sock_net(sk))) in packet_rcv()
1787 if (sk->sk_type != SOCK_DGRAM) in packet_rcv()
1797 res = run_filter(skb, sk, snaplen); in packet_rcv()
1803 if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) in packet_rcv()
1839 skb_set_owner_r(skb, sk); in packet_rcv()
1846 spin_lock(&sk->sk_receive_queue.lock); in packet_rcv()
1848 sock_skb_set_dropcount(sk, skb); in packet_rcv()
1849 __skb_queue_tail(&sk->sk_receive_queue, skb); in packet_rcv()
1850 spin_unlock(&sk->sk_receive_queue.lock); in packet_rcv()
1851 sk->sk_data_ready(sk); in packet_rcv()
1855 spin_lock(&sk->sk_receive_queue.lock); in packet_rcv()
1857 atomic_inc(&sk->sk_drops); in packet_rcv()
1858 spin_unlock(&sk->sk_receive_queue.lock); in packet_rcv()
1873 struct sock *sk; in tpacket_rcv() local
1896 sk = pt->af_packet_priv; in tpacket_rcv()
1897 po = pkt_sk(sk); in tpacket_rcv()
1899 if (!net_eq(dev_net(dev), sock_net(sk))) in tpacket_rcv()
1903 if (sk->sk_type != SOCK_DGRAM) in tpacket_rcv()
1913 res = run_filter(skb, sk, snaplen); in tpacket_rcv()
1927 if (sk->sk_type == SOCK_DGRAM) { in tpacket_rcv()
1940 atomic_read(&sk->sk_rmem_alloc) < sk->sk_rcvbuf) { in tpacket_rcv()
1948 skb_set_owner_r(copy_skb, sk); in tpacket_rcv()
1967 spin_lock(&sk->sk_receive_queue.lock); in tpacket_rcv()
1986 __skb_queue_tail(&sk->sk_receive_queue, copy_skb); in tpacket_rcv()
1988 spin_unlock(&sk->sk_receive_queue.lock); in tpacket_rcv()
2071 sk->sk_data_ready(sk); in tpacket_rcv()
2087 spin_unlock(&sk->sk_receive_queue.lock); in tpacket_rcv()
2089 sk->sk_data_ready(sk); in tpacket_rcv()
2096 struct packet_sock *po = pkt_sk(skb->sk); in tpacket_destruct_skb()
2139 struct socket *sock = po->sk.sk_socket; in tpacket_fill_skb()
2148 skb->priority = po->sk.sk_priority; in tpacket_fill_skb()
2149 skb->mark = po->sk.sk_mark; in tpacket_fill_skb()
2150 sock_tx_timestamp(&po->sk, &skb_shinfo(skb)->tx_flags); in tpacket_fill_skb()
2228 atomic_add(to_write, &po->sk.sk_wmem_alloc); in tpacket_fill_skb()
2286 dev = dev_get_by_index(sock_net(&po->sk), saddr->sll_ifindex); in tpacket_snd()
2296 if (po->sk.sk_socket->type == SOCK_RAW) in tpacket_snd()
2316 skb = sock_alloc_send_skb(&po->sk, in tpacket_snd()
2393 static struct sk_buff *packet_alloc_skb(struct sock *sk, size_t prepad, in packet_alloc_skb() argument
2404 skb = sock_alloc_send_pskb(sk, prepad + linear, len - linear, noblock, in packet_alloc_skb()
2419 struct sock *sk = sock->sk; in packet_snd() local
2429 struct packet_sock *po = pkt_sk(sk); in packet_snd()
2451 dev = dev_get_by_index(sock_net(sk), saddr->sll_ifindex); in packet_snd()
2513 if (unlikely(sock_flag(sk, SOCK_NOFCS))) { in packet_snd()
2528 skb = packet_alloc_skb(sk, hlen + tlen, hlen, len, in packet_snd()
2551 sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags); in packet_snd()
2561 skb->priority = sk->sk_priority; in packet_snd()
2562 skb->mark = sk->sk_mark; in packet_snd()
2611 struct sock *sk = sock->sk; in packet_sendmsg() local
2612 struct packet_sock *po = pkt_sk(sk); in packet_sendmsg()
2627 struct sock *sk = sock->sk; in packet_release() local
2632 if (!sk) in packet_release()
2635 net = sock_net(sk); in packet_release()
2636 po = pkt_sk(sk); in packet_release()
2639 sk_del_node_init_rcu(sk); in packet_release()
2643 sock_prot_inuse_add(net, sk->sk_prot, -1); in packet_release()
2647 unregister_prot_hook(sk, false); in packet_release()
2656 packet_flush_mclist(sk); in packet_release()
2660 packet_set_ring(sk, &req_u, 1, 0); in packet_release()
2665 packet_set_ring(sk, &req_u, 1, 1); in packet_release()
2668 fanout_release(sk); in packet_release()
2674 sock_orphan(sk); in packet_release()
2675 sock->sk = NULL; in packet_release()
2679 skb_queue_purge(&sk->sk_receive_queue); in packet_release()
2681 sk_refcnt_debug_release(sk); in packet_release()
2683 sock_put(sk); in packet_release()
2691 static int packet_do_bind(struct sock *sk, const char *name, int ifindex, in packet_do_bind() argument
2694 struct packet_sock *po = pkt_sk(sk); in packet_do_bind()
2705 lock_sock(sk); in packet_do_bind()
2710 dev = dev_get_by_name_rcu(sock_net(sk), name); in packet_do_bind()
2716 dev = dev_get_by_index_rcu(sock_net(sk), ifindex); in packet_do_bind()
2734 __unregister_prot_hook(sk, true); in packet_do_bind()
2738 unlisted = !dev_get_by_index_rcu(sock_net(sk), in packet_do_bind()
2763 register_prot_hook(sk); in packet_do_bind()
2765 sk->sk_err = ENETDOWN; in packet_do_bind()
2766 if (!sock_flag(sk, SOCK_DEAD)) in packet_do_bind()
2767 sk->sk_error_report(sk); in packet_do_bind()
2773 release_sock(sk); in packet_do_bind()
2784 struct sock *sk = sock->sk; in packet_bind_spkt() local
2795 return packet_do_bind(sk, name, 0, pkt_sk(sk)->num); in packet_bind_spkt()
2801 struct sock *sk = sock->sk; in packet_bind() local
2812 return packet_do_bind(sk, NULL, sll->sll_ifindex, in packet_bind()
2813 sll->sll_protocol ? : pkt_sk(sk)->num); in packet_bind()
2829 struct sock *sk; in packet_create() local
2843 sk = sk_alloc(net, PF_PACKET, GFP_KERNEL, &packet_proto); in packet_create()
2844 if (sk == NULL) in packet_create()
2851 sock_init_data(sock, sk); in packet_create()
2853 po = pkt_sk(sk); in packet_create()
2854 sk->sk_family = PF_PACKET; in packet_create()
2864 sk->sk_destruct = packet_sock_destruct; in packet_create()
2865 sk_refcnt_debug_inc(sk); in packet_create()
2878 po->prot_hook.af_packet_priv = sk; in packet_create()
2882 register_prot_hook(sk); in packet_create()
2886 sk_add_node_rcu(sk, &net->packet.sklist); in packet_create()
2895 sk_free(sk); in packet_create()
2908 struct sock *sk = sock->sk; in packet_recvmsg() local
2920 if (pkt_sk(sk)->ifindex < 0) in packet_recvmsg()
2925 err = sock_recv_errqueue(sk, msg, len, in packet_recvmsg()
2939 skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err); in packet_recvmsg()
2950 if (pkt_sk(sk)->has_vnet_hdr) { in packet_recvmsg()
3021 sock_recv_ts_and_drops(msg, sk, skb); in packet_recvmsg()
3040 if (pkt_sk(sk)->auxdata) { in packet_recvmsg()
3073 skb_free_datagram(sk, skb); in packet_recvmsg()
3082 struct sock *sk = sock->sk; in packet_getname_spkt() local
3090 dev = dev_get_by_index_rcu(sock_net(sk), pkt_sk(sk)->ifindex); in packet_getname_spkt()
3103 struct sock *sk = sock->sk; in packet_getname() local
3104 struct packet_sock *po = pkt_sk(sk); in packet_getname()
3115 dev = dev_get_by_index_rcu(sock_net(sk), po->ifindex); in packet_getname()
3175 static int packet_mc_add(struct sock *sk, struct packet_mreq_max *mreq) in packet_mc_add() argument
3177 struct packet_sock *po = pkt_sk(sk); in packet_mc_add()
3185 dev = __dev_get_by_index(sock_net(sk), mreq->mr_ifindex); in packet_mc_add()
3229 static int packet_mc_drop(struct sock *sk, struct packet_mreq_max *mreq) in packet_mc_drop() argument
3235 for (mlp = &pkt_sk(sk)->mclist; (ml = *mlp) != NULL; mlp = &ml->next) { in packet_mc_drop()
3243 dev = __dev_get_by_index(sock_net(sk), ml->ifindex); in packet_mc_drop()
3255 static void packet_flush_mclist(struct sock *sk) in packet_flush_mclist() argument
3257 struct packet_sock *po = pkt_sk(sk); in packet_flush_mclist()
3268 dev = __dev_get_by_index(sock_net(sk), ml->ifindex); in packet_flush_mclist()
3279 struct sock *sk = sock->sk; in packet_setsockopt() local
3280 struct packet_sock *po = pkt_sk(sk); in packet_setsockopt()
3302 ret = packet_mc_add(sk, &mreq); in packet_setsockopt()
3304 ret = packet_mc_drop(sk, &mreq); in packet_setsockopt()
3326 if (pkt_sk(sk)->has_vnet_hdr) in packet_setsockopt()
3330 return packet_set_ring(sk, &req_u, 0, in packet_setsockopt()
3342 pkt_sk(sk)->copy_thresh = val; in packet_setsockopt()
3452 return fanout_add(sk, val & 0xffff, val >> 16); in packet_setsockopt()
3489 struct sock *sk = sock->sk; in packet_getsockopt() local
3490 struct packet_sock *po = pkt_sk(sk); in packet_getsockopt()
3505 spin_lock_bh(&sk->sk_receive_queue.lock); in packet_getsockopt()
3508 spin_unlock_bh(&sk->sk_receive_queue.lock); in packet_getsockopt()
3591 struct sock *sk; in packet_notifier() local
3596 sk_for_each_rcu(sk, &net->packet.sklist) { in packet_notifier()
3597 struct packet_sock *po = pkt_sk(sk); in packet_notifier()
3609 __unregister_prot_hook(sk, false); in packet_notifier()
3610 sk->sk_err = ENETDOWN; in packet_notifier()
3611 if (!sock_flag(sk, SOCK_DEAD)) in packet_notifier()
3612 sk->sk_error_report(sk); in packet_notifier()
3628 register_prot_hook(sk); in packet_notifier()
3642 struct sock *sk = sock->sk; in packet_ioctl() local
3647 int amount = sk_wmem_alloc_get(sk); in packet_ioctl()
3656 spin_lock_bh(&sk->sk_receive_queue.lock); in packet_ioctl()
3657 skb = skb_peek(&sk->sk_receive_queue); in packet_ioctl()
3660 spin_unlock_bh(&sk->sk_receive_queue.lock); in packet_ioctl()
3664 return sock_get_timestamp(sk, (struct timeval __user *)arg); in packet_ioctl()
3666 return sock_get_timestampns(sk, (struct timespec __user *)arg); in packet_ioctl()
3695 struct sock *sk = sock->sk; in packet_poll() local
3696 struct packet_sock *po = pkt_sk(sk); in packet_poll()
3699 spin_lock_bh(&sk->sk_receive_queue.lock); in packet_poll()
3705 spin_unlock_bh(&sk->sk_receive_queue.lock); in packet_poll()
3706 spin_lock_bh(&sk->sk_write_queue.lock); in packet_poll()
3711 spin_unlock_bh(&sk->sk_write_queue.lock); in packet_poll()
3724 struct sock *sk = sock->sk; in packet_mm_open() local
3726 if (sk) in packet_mm_open()
3727 atomic_inc(&pkt_sk(sk)->mapped); in packet_mm_open()
3734 struct sock *sk = sock->sk; in packet_mm_close() local
3736 if (sk) in packet_mm_close()
3737 atomic_dec(&pkt_sk(sk)->mapped); in packet_mm_close()
3813 static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, in packet_set_ring() argument
3817 struct packet_sock *po = pkt_sk(sk); in packet_set_ring()
3833 rb_queue = tx_ring ? &sk->sk_write_queue : &sk->sk_receive_queue; in packet_set_ring()
3907 lock_sock(sk); in packet_set_ring()
3915 __unregister_prot_hook(sk, false); in packet_set_ring()
3948 register_prot_hook(sk); in packet_set_ring()
3956 release_sock(sk); in packet_set_ring()
3967 struct sock *sk = sock->sk; in packet_mmap() local
3968 struct packet_sock *po = pkt_sk(sk); in packet_mmap()