Lines Matching refs:sk
96 void raw_hash_sk(struct sock *sk) in raw_hash_sk() argument
98 struct raw_hashinfo *h = sk->sk_prot->h.raw_hash; in raw_hash_sk()
101 head = &h->ht[inet_sk(sk)->inet_num & (RAW_HTABLE_SIZE - 1)]; in raw_hash_sk()
104 sk_add_node(sk, head); in raw_hash_sk()
105 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); in raw_hash_sk()
110 void raw_unhash_sk(struct sock *sk) in raw_unhash_sk() argument
112 struct raw_hashinfo *h = sk->sk_prot->h.raw_hash; in raw_unhash_sk()
115 if (sk_del_node_init(sk)) in raw_unhash_sk()
116 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); in raw_unhash_sk()
121 static struct sock *__raw_v4_lookup(struct net *net, struct sock *sk, in __raw_v4_lookup() argument
124 sk_for_each_from(sk) { in __raw_v4_lookup()
125 struct inet_sock *inet = inet_sk(sk); in __raw_v4_lookup()
127 if (net_eq(sock_net(sk), net) && inet->inet_num == num && in __raw_v4_lookup()
130 !(sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif)) in __raw_v4_lookup()
133 sk = NULL; in __raw_v4_lookup()
135 return sk; in __raw_v4_lookup()
142 static int icmp_filter(const struct sock *sk, const struct sk_buff *skb) in icmp_filter() argument
153 __u32 data = raw_sk(sk)->filter.data; in icmp_filter()
170 struct sock *sk; in raw_v4_input() local
181 sk = __raw_v4_lookup(net, __sk_head(head), iph->protocol, in raw_v4_input()
185 while (sk) { in raw_v4_input()
187 if ((iph->protocol != IPPROTO_ICMP || !icmp_filter(sk, skb)) && in raw_v4_input()
188 ip_mc_sf_allow(sk, iph->daddr, iph->saddr, in raw_v4_input()
194 raw_rcv(sk, clone); in raw_v4_input()
196 sk = __raw_v4_lookup(net, sk_next(sk), iph->protocol, in raw_v4_input()
223 static void raw_err(struct sock *sk, struct sk_buff *skb, u32 info) in raw_err() argument
225 struct inet_sock *inet = inet_sk(sk); in raw_err()
232 ipv4_sk_update_pmtu(skb, sk, info); in raw_err()
234 ipv4_sk_redirect(skb, sk); in raw_err()
243 if (!inet->recverr && sk->sk_state != TCP_ESTABLISHED) in raw_err()
275 ip_icmp_error(sk, skb, err, 0, info, payload); in raw_err()
279 sk->sk_err = err; in raw_err()
280 sk->sk_error_report(sk); in raw_err()
310 static int raw_rcv_skb(struct sock *sk, struct sk_buff *skb) in raw_rcv_skb() argument
314 ipv4_pktinfo_prepare(sk, skb); in raw_rcv_skb()
315 if (sock_queue_rcv_skb(sk, skb) < 0) { in raw_rcv_skb()
323 int raw_rcv(struct sock *sk, struct sk_buff *skb) in raw_rcv() argument
325 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) { in raw_rcv()
326 atomic_inc(&sk->sk_drops); in raw_rcv()
334 raw_rcv_skb(sk, skb); in raw_rcv()
338 static int raw_send_hdrinc(struct sock *sk, struct flowi4 *fl4, in raw_send_hdrinc() argument
343 struct inet_sock *inet = inet_sk(sk); in raw_send_hdrinc()
344 struct net *net = sock_net(sk); in raw_send_hdrinc()
353 ip_local_error(sk, EMSGSIZE, fl4->daddr, inet->inet_dport, in raw_send_hdrinc()
362 skb = sock_alloc_send_skb(sk, in raw_send_hdrinc()
369 skb->priority = sk->sk_priority; in raw_send_hdrinc()
370 skb->mark = sk->sk_mark; in raw_send_hdrinc()
380 sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags); in raw_send_hdrinc()
414 err = NF_HOOK(NFPROTO_IPV4, NF_INET_LOCAL_OUT, sk, skb, in raw_send_hdrinc()
483 static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) in raw_sendmsg() argument
485 struct inet_sock *inet = inet_sk(sk); in raw_sendmsg()
532 if (sk->sk_state != TCP_ESTABLISHED) in raw_sendmsg()
542 ipc.oif = sk->sk_bound_dev_if; in raw_sendmsg()
545 err = ip_cmsg_send(sock_net(sk), msg, &ipc, false); in raw_sendmsg()
583 tos = get_rtconn_flags(&ipc, sk); in raw_sendmsg()
595 flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos, in raw_sendmsg()
597 inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol, in raw_sendmsg()
598 inet_sk_flowi_flags(sk) | in raw_sendmsg()
611 security_sk_classify_flow(sk, flowi4_to_flowi(&fl4)); in raw_sendmsg()
612 rt = ip_route_output_flow(sock_net(sk), &fl4, sk); in raw_sendmsg()
620 if (rt->rt_flags & RTCF_BROADCAST && !sock_flag(sk, SOCK_BROADCAST)) in raw_sendmsg()
628 err = raw_send_hdrinc(sk, &fl4, msg, len, in raw_sendmsg()
632 sock_tx_timestamp(sk, &ipc.tx_flags); in raw_sendmsg()
636 lock_sock(sk); in raw_sendmsg()
637 err = ip_append_data(sk, &fl4, raw_getfrag, in raw_sendmsg()
641 ip_flush_pending_frames(sk); in raw_sendmsg()
643 err = ip_push_pending_frames(sk, &fl4); in raw_sendmsg()
647 release_sock(sk); in raw_sendmsg()
667 static void raw_close(struct sock *sk, long timeout) in raw_close() argument
672 ip_ra_control(sk, 0, NULL); in raw_close()
674 sk_common_release(sk); in raw_close()
677 static void raw_destroy(struct sock *sk) in raw_destroy() argument
679 lock_sock(sk); in raw_destroy()
680 ip_flush_pending_frames(sk); in raw_destroy()
681 release_sock(sk); in raw_destroy()
685 static int raw_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) in raw_bind() argument
687 struct inet_sock *inet = inet_sk(sk); in raw_bind()
692 if (sk->sk_state != TCP_CLOSE || addr_len < sizeof(struct sockaddr_in)) in raw_bind()
694 chk_addr_ret = inet_addr_type(sock_net(sk), addr->sin_addr.s_addr); in raw_bind()
702 sk_dst_reset(sk); in raw_bind()
712 static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, in raw_recvmsg() argument
715 struct inet_sock *inet = inet_sk(sk); in raw_recvmsg()
725 err = ip_recv_error(sk, msg, len, addr_len); in raw_recvmsg()
729 skb = skb_recv_datagram(sk, flags, noblock, &err); in raw_recvmsg()
743 sock_recv_ts_and_drops(msg, sk, skb); in raw_recvmsg()
758 skb_free_datagram(sk, skb); in raw_recvmsg()
765 static int raw_init(struct sock *sk) in raw_init() argument
767 struct raw_sock *rp = raw_sk(sk); in raw_init()
769 if (inet_sk(sk)->inet_num == IPPROTO_ICMP) in raw_init()
774 static int raw_seticmpfilter(struct sock *sk, char __user *optval, int optlen) in raw_seticmpfilter() argument
778 if (copy_from_user(&raw_sk(sk)->filter, optval, optlen)) in raw_seticmpfilter()
783 static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *optlen) in raw_geticmpfilter() argument
796 copy_to_user(optval, &raw_sk(sk)->filter, len)) in raw_geticmpfilter()
802 static int do_raw_setsockopt(struct sock *sk, int level, int optname, in do_raw_setsockopt() argument
806 if (inet_sk(sk)->inet_num != IPPROTO_ICMP) in do_raw_setsockopt()
809 return raw_seticmpfilter(sk, optval, optlen); in do_raw_setsockopt()
814 static int raw_setsockopt(struct sock *sk, int level, int optname, in raw_setsockopt() argument
818 return ip_setsockopt(sk, level, optname, optval, optlen); in raw_setsockopt()
819 return do_raw_setsockopt(sk, level, optname, optval, optlen); in raw_setsockopt()
823 static int compat_raw_setsockopt(struct sock *sk, int level, int optname, in compat_raw_setsockopt() argument
827 return compat_ip_setsockopt(sk, level, optname, optval, optlen); in compat_raw_setsockopt()
828 return do_raw_setsockopt(sk, level, optname, optval, optlen); in compat_raw_setsockopt()
832 static int do_raw_getsockopt(struct sock *sk, int level, int optname, in do_raw_getsockopt() argument
836 if (inet_sk(sk)->inet_num != IPPROTO_ICMP) in do_raw_getsockopt()
839 return raw_geticmpfilter(sk, optval, optlen); in do_raw_getsockopt()
844 static int raw_getsockopt(struct sock *sk, int level, int optname, in raw_getsockopt() argument
848 return ip_getsockopt(sk, level, optname, optval, optlen); in raw_getsockopt()
849 return do_raw_getsockopt(sk, level, optname, optval, optlen); in raw_getsockopt()
853 static int compat_raw_getsockopt(struct sock *sk, int level, int optname, in compat_raw_getsockopt() argument
857 return compat_ip_getsockopt(sk, level, optname, optval, optlen); in compat_raw_getsockopt()
858 return do_raw_getsockopt(sk, level, optname, optval, optlen); in compat_raw_getsockopt()
862 static int raw_ioctl(struct sock *sk, int cmd, unsigned long arg) in raw_ioctl() argument
866 int amount = sk_wmem_alloc_get(sk); in raw_ioctl()
874 spin_lock_bh(&sk->sk_receive_queue.lock); in raw_ioctl()
875 skb = skb_peek(&sk->sk_receive_queue); in raw_ioctl()
878 spin_unlock_bh(&sk->sk_receive_queue.lock); in raw_ioctl()
884 return ipmr_ioctl(sk, cmd, (void __user *)arg); in raw_ioctl()
892 static int compat_raw_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg) in compat_raw_ioctl() argument
900 return ipmr_compat_ioctl(sk, cmd, compat_ptr(arg)); in compat_raw_ioctl()
938 struct sock *sk; in raw_get_first() local
943 sk_for_each(sk, &state->h->ht[state->bucket]) in raw_get_first()
944 if (sock_net(sk) == seq_file_net(seq)) in raw_get_first()
947 sk = NULL; in raw_get_first()
949 return sk; in raw_get_first()
952 static struct sock *raw_get_next(struct seq_file *seq, struct sock *sk) in raw_get_next() argument
957 sk = sk_next(sk); in raw_get_next()
960 } while (sk && sock_net(sk) != seq_file_net(seq)); in raw_get_next()
962 if (!sk && ++state->bucket < RAW_HTABLE_SIZE) { in raw_get_next()
963 sk = sk_head(&state->h->ht[state->bucket]); in raw_get_next()
966 return sk; in raw_get_next()
971 struct sock *sk = raw_get_first(seq); in raw_get_idx() local
973 if (sk) in raw_get_idx()
974 while (pos && (sk = raw_get_next(seq, sk)) != NULL) in raw_get_idx()
976 return pos ? NULL : sk; in raw_get_idx()
990 struct sock *sk; in raw_seq_next() local
993 sk = raw_get_first(seq); in raw_seq_next()
995 sk = raw_get_next(seq, v); in raw_seq_next()
997 return sk; in raw_seq_next()