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()
417 net, sk, skb, NULL, rt->dst.dev, in raw_send_hdrinc()
486 static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) in raw_sendmsg() argument
488 struct inet_sock *inet = inet_sk(sk); in raw_sendmsg()
489 struct net *net = sock_net(sk); in raw_sendmsg()
536 if (sk->sk_state != TCP_ESTABLISHED) in raw_sendmsg()
546 ipc.oif = sk->sk_bound_dev_if; in raw_sendmsg()
587 tos = get_rtconn_flags(&ipc, sk); in raw_sendmsg()
599 flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos, in raw_sendmsg()
601 inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol, in raw_sendmsg()
602 inet_sk_flowi_flags(sk) | in raw_sendmsg()
621 security_sk_classify_flow(sk, flowi4_to_flowi(&fl4)); in raw_sendmsg()
622 rt = ip_route_output_flow(net, &fl4, sk); in raw_sendmsg()
630 if (rt->rt_flags & RTCF_BROADCAST && !sock_flag(sk, SOCK_BROADCAST)) in raw_sendmsg()
638 err = raw_send_hdrinc(sk, &fl4, msg, len, in raw_sendmsg()
642 sock_tx_timestamp(sk, &ipc.tx_flags); in raw_sendmsg()
646 lock_sock(sk); in raw_sendmsg()
647 err = ip_append_data(sk, &fl4, raw_getfrag, in raw_sendmsg()
651 ip_flush_pending_frames(sk); in raw_sendmsg()
653 err = ip_push_pending_frames(sk, &fl4); in raw_sendmsg()
657 release_sock(sk); in raw_sendmsg()
677 static void raw_close(struct sock *sk, long timeout) in raw_close() argument
682 ip_ra_control(sk, 0, NULL); in raw_close()
684 sk_common_release(sk); in raw_close()
687 static void raw_destroy(struct sock *sk) in raw_destroy() argument
689 lock_sock(sk); in raw_destroy()
690 ip_flush_pending_frames(sk); in raw_destroy()
691 release_sock(sk); in raw_destroy()
695 static int raw_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) in raw_bind() argument
697 struct inet_sock *inet = inet_sk(sk); in raw_bind()
702 if (sk->sk_state != TCP_CLOSE || addr_len < sizeof(struct sockaddr_in)) in raw_bind()
704 chk_addr_ret = inet_addr_type(sock_net(sk), addr->sin_addr.s_addr); in raw_bind()
712 sk_dst_reset(sk); in raw_bind()
722 static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, in raw_recvmsg() argument
725 struct inet_sock *inet = inet_sk(sk); in raw_recvmsg()
735 err = ip_recv_error(sk, msg, len, addr_len); in raw_recvmsg()
739 skb = skb_recv_datagram(sk, flags, noblock, &err); in raw_recvmsg()
753 sock_recv_ts_and_drops(msg, sk, skb); in raw_recvmsg()
768 skb_free_datagram(sk, skb); in raw_recvmsg()
775 static int raw_init(struct sock *sk) in raw_init() argument
777 struct raw_sock *rp = raw_sk(sk); in raw_init()
779 if (inet_sk(sk)->inet_num == IPPROTO_ICMP) in raw_init()
784 static int raw_seticmpfilter(struct sock *sk, char __user *optval, int optlen) in raw_seticmpfilter() argument
788 if (copy_from_user(&raw_sk(sk)->filter, optval, optlen)) in raw_seticmpfilter()
793 static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *optlen) in raw_geticmpfilter() argument
806 copy_to_user(optval, &raw_sk(sk)->filter, len)) in raw_geticmpfilter()
812 static int do_raw_setsockopt(struct sock *sk, int level, int optname, in do_raw_setsockopt() argument
816 if (inet_sk(sk)->inet_num != IPPROTO_ICMP) in do_raw_setsockopt()
819 return raw_seticmpfilter(sk, optval, optlen); in do_raw_setsockopt()
824 static int raw_setsockopt(struct sock *sk, int level, int optname, in raw_setsockopt() argument
828 return ip_setsockopt(sk, level, optname, optval, optlen); in raw_setsockopt()
829 return do_raw_setsockopt(sk, level, optname, optval, optlen); in raw_setsockopt()
833 static int compat_raw_setsockopt(struct sock *sk, int level, int optname, in compat_raw_setsockopt() argument
837 return compat_ip_setsockopt(sk, level, optname, optval, optlen); in compat_raw_setsockopt()
838 return do_raw_setsockopt(sk, level, optname, optval, optlen); in compat_raw_setsockopt()
842 static int do_raw_getsockopt(struct sock *sk, int level, int optname, in do_raw_getsockopt() argument
846 if (inet_sk(sk)->inet_num != IPPROTO_ICMP) in do_raw_getsockopt()
849 return raw_geticmpfilter(sk, optval, optlen); in do_raw_getsockopt()
854 static int raw_getsockopt(struct sock *sk, int level, int optname, in raw_getsockopt() argument
858 return ip_getsockopt(sk, level, optname, optval, optlen); in raw_getsockopt()
859 return do_raw_getsockopt(sk, level, optname, optval, optlen); in raw_getsockopt()
863 static int compat_raw_getsockopt(struct sock *sk, int level, int optname, in compat_raw_getsockopt() argument
867 return compat_ip_getsockopt(sk, level, optname, optval, optlen); in compat_raw_getsockopt()
868 return do_raw_getsockopt(sk, level, optname, optval, optlen); in compat_raw_getsockopt()
872 static int raw_ioctl(struct sock *sk, int cmd, unsigned long arg) in raw_ioctl() argument
876 int amount = sk_wmem_alloc_get(sk); in raw_ioctl()
884 spin_lock_bh(&sk->sk_receive_queue.lock); in raw_ioctl()
885 skb = skb_peek(&sk->sk_receive_queue); in raw_ioctl()
888 spin_unlock_bh(&sk->sk_receive_queue.lock); in raw_ioctl()
894 return ipmr_ioctl(sk, cmd, (void __user *)arg); in raw_ioctl()
902 static int compat_raw_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg) in compat_raw_ioctl() argument
910 return ipmr_compat_ioctl(sk, cmd, compat_ptr(arg)); in compat_raw_ioctl()
948 struct sock *sk; in raw_get_first() local
953 sk_for_each(sk, &state->h->ht[state->bucket]) in raw_get_first()
954 if (sock_net(sk) == seq_file_net(seq)) in raw_get_first()
957 sk = NULL; in raw_get_first()
959 return sk; in raw_get_first()
962 static struct sock *raw_get_next(struct seq_file *seq, struct sock *sk) in raw_get_next() argument
967 sk = sk_next(sk); in raw_get_next()
970 } while (sk && sock_net(sk) != seq_file_net(seq)); in raw_get_next()
972 if (!sk && ++state->bucket < RAW_HTABLE_SIZE) { in raw_get_next()
973 sk = sk_head(&state->h->ht[state->bucket]); in raw_get_next()
976 return sk; in raw_get_next()
981 struct sock *sk = raw_get_first(seq); in raw_get_idx() local
983 if (sk) in raw_get_idx()
984 while (pos && (sk = raw_get_next(seq, sk)) != NULL) in raw_get_idx()
986 return pos ? NULL : sk; in raw_get_idx()
1000 struct sock *sk; in raw_seq_next() local
1003 sk = raw_get_first(seq); in raw_seq_next()
1005 sk = raw_get_next(seq, v); in raw_seq_next()
1007 return sk; in raw_seq_next()