Lines Matching refs:sk

57 static inline void dccp_v6_send_check(struct sock *sk, struct sk_buff *skb)
59 struct ipv6_pinfo *np = inet6_sk(sk);
63 dh->dccph_checksum = dccp_v6_csum_finish(skb, &np->saddr, &sk->sk_v6_daddr);
82 struct sock *sk;
95 sk = __inet6_lookup_established(net, &dccp_hashinfo,
100 if (!sk) {
106 if (sk->sk_state == DCCP_TIME_WAIT) {
107 inet_twsk_put(inet_twsk(sk));
111 if (sk->sk_state == DCCP_NEW_SYN_RECV) {
112 dccp_req_err(sk, seq);
116 bh_lock_sock(sk);
117 if (sock_owned_by_user(sk))
120 if (sk->sk_state == DCCP_CLOSED)
123 dp = dccp_sk(sk);
124 if ((1 << sk->sk_state) & ~(DCCPF_REQUESTING | DCCPF_LISTEN) &&
130 np = inet6_sk(sk);
133 if (!sock_owned_by_user(sk)) {
134 struct dst_entry *dst = __sk_dst_check(sk, np->dst_cookie);
137 dst->ops->redirect(dst, sk, skb);
145 if (!ip6_sk_accept_pmtu(sk))
148 if (sock_owned_by_user(sk))
150 if ((1 << sk->sk_state) & (DCCPF_LISTEN | DCCPF_CLOSED))
153 dst = inet6_csk_update_pmtu(sk, ntohl(info));
157 if (inet_csk(sk)->icsk_pmtu_cookie > dst_mtu(dst))
158 dccp_sync_mss(sk, dst_mtu(dst));
165 switch (sk->sk_state) {
169 if (!sock_owned_by_user(sk)) {
171 sk->sk_err = err;
176 sk_error_report(sk);
177 dccp_done(sk);
179 WRITE_ONCE(sk->sk_err_soft, err);
184 if (!sock_owned_by_user(sk) && inet6_test_bit(RECVERR6, sk)) {
185 sk->sk_err = err;
186 sk_error_report(sk);
188 WRITE_ONCE(sk->sk_err_soft, err);
191 bh_unlock_sock(sk);
192 sock_put(sk);
197 static int dccp_v6_send_response(const struct sock *sk, struct request_sock *req)
200 struct ipv6_pinfo *np = inet6_sk(sk);
222 dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
229 skb = dccp_make_response(sk, dst, req);
242 err = ip6_xmit(sk, skb, &fl6, READ_ONCE(sk->sk_mark), opt,
243 np->tclass, READ_ONCE(sk->sk_priority));
260 static void dccp_v6_ctl_send_reset(const struct sock *sk, struct sk_buff *rxskb,
297 /* sk = NULL, but it is safe for now. RST socket required. */
320 static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
325 struct ipv6_pinfo *np = inet6_sk(sk);
330 return dccp_v4_conn_request(sk, skb);
336 __IP6_INC_STATS(sock_net(sk), NULL, IPSTATS_MIB_INHDRERRORS);
340 if (dccp_bad_service_code(sk, service)) {
348 if (inet_csk_reqsk_queue_is_full(sk))
351 if (sk_acceptq_is_full(sk))
354 req = inet_reqsk_alloc(&dccp6_request_sock_ops, sk, true);
358 if (dccp_reqsk_init(req, dccp_sk(sk), skb))
362 if (dccp_parse_options(sk, dreq, skb))
369 ireq->ir_mark = inet_request_mark(sk, skb);
371 if (security_inet_conn_request(sk, skb, req))
374 if (ipv6_opt_accepted(sk, skb, IP6CB(skb)) ||
380 ireq->ir_iif = READ_ONCE(sk->sk_bound_dev_if);
400 if (dccp_v6_send_response(sk, req))
403 inet_csk_reqsk_queue_hash_add(sk, req, DCCP_TIMEOUT_INIT);
414 static struct sock *dccp_v6_request_recv_sock(const struct sock *sk,
423 const struct ipv6_pinfo *np = inet6_sk(sk);
433 newsk = dccp_v4_request_recv_sock(sk, skb, req, dst,
473 if (sk_acceptq_is_full(sk))
479 dst = inet6_csk_route_req(sk, &fl6, req, IPPROTO_DCCP);
484 newsk = dccp_create_openreq_child(sk, req, skb);
549 if (__inet_inherit_port(sk, newsk) < 0) {
565 __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
569 __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENDROPS);
581 static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
583 struct ipv6_pinfo *np = inet6_sk(sk);
595 return dccp_v4_do_rcv(sk, skb);
597 if (sk_filter(sk, skb))
619 opt_skb = skb_clone_and_charge_r(skb, sk);
621 if (sk->sk_state == DCCP_OPEN) { /* Fast path */
622 if (dccp_rcv_established(sk, skb, dccp_hdr(skb), skb->len))
654 if (dccp_rcv_state_process(sk, skb, dccp_hdr(skb), skb->len))
661 dccp_v6_ctl_send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED);
672 if (!((1 << sk->sk_state) & (DCCPF_CLOSED | DCCPF_LISTEN))) {
679 if (inet6_test_bit(REPFLOW, sk))
681 if (ipv6_opt_accepted(sk, opt_skb,
701 struct sock *sk;
727 sk = __inet6_lookup_skb(&dccp_hashinfo, skb, __dccp_hdr_len(dh),
730 if (!sk) {
742 if (sk->sk_state == DCCP_TIME_WAIT) {
743 dccp_pr_debug("sk->sk_state == DCCP_TIME_WAIT: do_time_wait\n");
744 inet_twsk_put(inet_twsk(sk));
748 if (sk->sk_state == DCCP_NEW_SYN_RECV) {
749 struct request_sock *req = inet_reqsk(sk);
752 sk = req->rsk_listener;
753 if (unlikely(sk->sk_state != DCCP_LISTEN)) {
754 inet_csk_reqsk_queue_drop_and_put(sk, req);
757 sock_hold(sk);
759 nsk = dccp_check_req(sk, skb, req);
764 if (nsk == sk) {
766 } else if (dccp_child_process(sk, nsk, skb)) {
767 dccp_v6_ctl_send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED);
770 sock_put(sk);
779 min_cov = dccp_sk(sk)->dccps_pcrlen;
787 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
791 return __sk_receive_skb(sk, skb, 1, dh->dccph_doff * 4,
806 dccp_v6_ctl_send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED);
815 sock_put(sk);
819 static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
823 struct inet_connection_sock *icsk = inet_csk(sk);
824 struct inet_sock *inet = inet_sk(sk);
825 struct ipv6_pinfo *np = inet6_sk(sk);
826 struct dccp_sock *dp = dccp_sk(sk);
844 if (inet6_test_bit(SNDFLOW, sk)) {
849 flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);
872 if (sk->sk_bound_dev_if &&
873 sk->sk_bound_dev_if != usin->sin6_scope_id)
876 sk->sk_bound_dev_if = usin->sin6_scope_id;
880 if (!sk->sk_bound_dev_if)
884 sk->sk_v6_daddr = usin->sin6_addr;
896 if (ipv6_only_sock(sk))
904 sk->sk_backlog_rcv = dccp_v4_do_rcv;
906 err = dccp_v4_connect(sk, (struct sockaddr *)&sin, sizeof(sin));
910 sk->sk_backlog_rcv = dccp_v6_do_rcv;
913 np->saddr = sk->sk_v6_rcv_saddr;
917 if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr))
918 saddr = &sk->sk_v6_rcv_saddr;
921 fl6.daddr = sk->sk_v6_daddr;
923 fl6.flowi6_oif = sk->sk_bound_dev_if;
926 security_sk_classify_flow(sk, flowi6_to_flowi_common(&fl6));
928 opt = rcu_dereference_protected(np->opt, lockdep_sock_is_held(sk));
931 dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
940 err = inet_bhash2_update_saddr(sk, saddr, AF_INET6);
949 ip6_dst_store(sk, dst, NULL, NULL);
957 dccp_set_state(sk, DCCP_REQUESTING);
958 err = inet6_hash_connect(&dccp_death_row, sk);
963 sk->sk_v6_daddr.s6_addr32,
966 err = dccp_connect(sk);
973 dccp_set_state(sk, DCCP_CLOSED);
974 inet_bhash2_reset_saddr(sk);
975 __sk_dst_reset(sk);
978 sk->sk_route_caps = 0;
1011 static void dccp_v6_sk_destruct(struct sock *sk)
1013 dccp_destruct_common(sk);
1014 inet6_sock_destruct(sk);
1020 static int dccp_v6_init_sock(struct sock *sk)
1023 int err = dccp_init_sock(sk, dccp_v6_ctl_sock_initialized);
1028 inet_csk(sk)->icsk_af_ops = &dccp_ipv6_af_ops;
1029 sk->sk_destruct = dccp_v6_sk_destruct;