Lines Matching refs:skb
44 static inline __sum16 dccp_v6_csum_finish(struct sk_buff *skb, in dccp_v6_csum_finish() argument
48 return csum_ipv6_magic(saddr, daddr, skb->len, IPPROTO_DCCP, skb->csum); in dccp_v6_csum_finish()
51 static inline void dccp_v6_send_check(struct sock *sk, struct sk_buff *skb) in dccp_v6_send_check() argument
54 struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v6_send_check()
56 dccp_csum_outgoing(skb); in dccp_v6_send_check()
57 dh->dccph_checksum = dccp_v6_csum_finish(skb, &np->saddr, &sk->sk_v6_daddr); in dccp_v6_send_check()
60 static inline __u64 dccp_v6_init_sequence(struct sk_buff *skb) in dccp_v6_init_sequence() argument
62 return secure_dccpv6_sequence_number(ipv6_hdr(skb)->daddr.s6_addr32, in dccp_v6_init_sequence()
63 ipv6_hdr(skb)->saddr.s6_addr32, in dccp_v6_init_sequence()
64 dccp_hdr(skb)->dccph_dport, in dccp_v6_init_sequence()
65 dccp_hdr(skb)->dccph_sport ); in dccp_v6_init_sequence()
69 static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, in dccp_v6_err() argument
72 const struct ipv6hdr *hdr = (const struct ipv6hdr *)skb->data; in dccp_v6_err()
73 const struct dccp_hdr *dh = (struct dccp_hdr *)(skb->data + offset); in dccp_v6_err()
79 struct net *net = dev_net(skb->dev); in dccp_v6_err()
81 if (skb->len < offset + sizeof(*dh) || in dccp_v6_err()
82 skb->len < offset + __dccp_basic_hdr_len(dh)) { in dccp_v6_err()
83 ICMP6_INC_STATS_BH(net, __in6_dev_get(skb->dev), in dccp_v6_err()
91 inet6_iif(skb)); in dccp_v6_err()
94 ICMP6_INC_STATS_BH(net, __in6_dev_get(skb->dev), in dccp_v6_err()
127 dst->ops->redirect(dst, sk, skb); in dccp_v6_err()
188 struct sk_buff *skb; in dccp_v6_send_response() local
216 skb = dccp_make_response(sk, dst, req); in dccp_v6_send_response()
217 if (skb != NULL) { in dccp_v6_send_response()
218 struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v6_send_response()
220 dh->dccph_checksum = dccp_v6_csum_finish(skb, in dccp_v6_send_response()
225 err = ip6_xmit(sk, skb, &fl6, rcu_dereference(np->opt), in dccp_v6_send_response()
245 struct sk_buff *skb; in dccp_v6_ctl_send_reset() local
257 skb = dccp_ctl_make_reset(ctl_sk, rxskb); in dccp_v6_ctl_send_reset()
258 if (skb == NULL) in dccp_v6_ctl_send_reset()
262 dccp_hdr(skb)->dccph_checksum = dccp_v6_csum_finish(skb, &rxip6h->saddr, in dccp_v6_ctl_send_reset()
271 fl6.fl6_dport = dccp_hdr(skb)->dccph_dport; in dccp_v6_ctl_send_reset()
272 fl6.fl6_sport = dccp_hdr(skb)->dccph_sport; in dccp_v6_ctl_send_reset()
278 skb_dst_set(skb, dst); in dccp_v6_ctl_send_reset()
279 ip6_xmit(ctl_sk, skb, &fl6, NULL, 0); in dccp_v6_ctl_send_reset()
285 kfree_skb(skb); in dccp_v6_ctl_send_reset()
298 static struct sock *dccp_v6_hnd_req(struct sock *sk,struct sk_buff *skb) in dccp_v6_hnd_req() argument
300 const struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v6_hnd_req()
301 const struct ipv6hdr *iph = ipv6_hdr(skb); in dccp_v6_hnd_req()
306 &iph->daddr, inet6_iif(skb)); in dccp_v6_hnd_req()
308 nsk = dccp_check_req(sk, skb, req); in dccp_v6_hnd_req()
316 inet6_iif(skb)); in dccp_v6_hnd_req()
329 static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) in dccp_v6_conn_request() argument
335 const __be32 service = dccp_hdr_request(skb)->dccph_req_service; in dccp_v6_conn_request()
336 struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb); in dccp_v6_conn_request()
338 if (skb->protocol == htons(ETH_P_IP)) in dccp_v6_conn_request()
339 return dccp_v4_conn_request(sk, skb); in dccp_v6_conn_request()
341 if (!ipv6_unicast_destination(skb)) in dccp_v6_conn_request()
362 if (dccp_reqsk_init(req, dccp_sk(sk), skb)) in dccp_v6_conn_request()
366 if (dccp_parse_options(sk, dreq, skb)) in dccp_v6_conn_request()
369 if (security_inet_conn_request(sk, skb, req)) in dccp_v6_conn_request()
373 ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr; in dccp_v6_conn_request()
374 ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr; in dccp_v6_conn_request()
377 if (ipv6_opt_accepted(sk, skb, IP6CB(skb)) || in dccp_v6_conn_request()
380 atomic_inc(&skb->users); in dccp_v6_conn_request()
381 ireq->pktopts = skb; in dccp_v6_conn_request()
388 ireq->ir_iif = inet6_iif(skb); in dccp_v6_conn_request()
399 dreq->dreq_iss = dccp_v6_init_sequence(skb); in dccp_v6_conn_request()
417 struct sk_buff *skb, in dccp_v6_request_recv_sock() argument
428 if (skb->protocol == htons(ETH_P_IP)) { in dccp_v6_request_recv_sock()
432 newsk = dccp_v4_request_recv_sock(sk, skb, req, dst); in dccp_v6_request_recv_sock()
449 newnp->mcast_oif = inet6_iif(skb); in dccp_v6_request_recv_sock()
450 newnp->mcast_hops = ipv6_hdr(skb)->hop_limit; in dccp_v6_request_recv_sock()
490 newsk = dccp_create_openreq_child(sk, req, skb); in dccp_v6_request_recv_sock()
534 newnp->mcast_oif = inet6_iif(skb); in dccp_v6_request_recv_sock()
535 newnp->mcast_hops = ipv6_hdr(skb)->hop_limit; in dccp_v6_request_recv_sock()
584 static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) in dccp_v6_do_rcv() argument
597 if (skb->protocol == htons(ETH_P_IP)) in dccp_v6_do_rcv()
598 return dccp_v4_do_rcv(sk, skb); in dccp_v6_do_rcv()
600 if (sk_filter(sk, skb)) in dccp_v6_do_rcv()
626 opt_skb = skb_clone(skb, GFP_ATOMIC); in dccp_v6_do_rcv()
629 if (dccp_rcv_established(sk, skb, dccp_hdr(skb), skb->len)) in dccp_v6_do_rcv()
663 struct sock *nsk = dccp_v6_hnd_req(sk, skb); in dccp_v6_do_rcv()
673 if (dccp_child_process(sk, nsk, skb)) in dccp_v6_do_rcv()
681 if (dccp_rcv_state_process(sk, skb, dccp_hdr(skb), skb->len)) in dccp_v6_do_rcv()
690 dccp_v6_ctl_send_reset(sk, skb); in dccp_v6_do_rcv()
694 kfree_skb(skb); in dccp_v6_do_rcv()
698 static int dccp_v6_rcv(struct sk_buff *skb) in dccp_v6_rcv() argument
706 if (dccp_invalid_packet(skb)) in dccp_v6_rcv()
710 if (dccp_v6_csum_finish(skb, &ipv6_hdr(skb)->saddr, in dccp_v6_rcv()
711 &ipv6_hdr(skb)->daddr)) { in dccp_v6_rcv()
716 dh = dccp_hdr(skb); in dccp_v6_rcv()
718 DCCP_SKB_CB(skb)->dccpd_seq = dccp_hdr_seq(dh); in dccp_v6_rcv()
719 DCCP_SKB_CB(skb)->dccpd_type = dh->dccph_type; in dccp_v6_rcv()
721 if (dccp_packet_without_ack(skb)) in dccp_v6_rcv()
722 DCCP_SKB_CB(skb)->dccpd_ack_seq = DCCP_PKT_WITHOUT_ACK_SEQ; in dccp_v6_rcv()
724 DCCP_SKB_CB(skb)->dccpd_ack_seq = dccp_hdr_ack_seq(skb); in dccp_v6_rcv()
728 sk = __inet6_lookup_skb(&dccp_hashinfo, skb, in dccp_v6_rcv()
730 inet6_iif(skb)); in dccp_v6_rcv()
766 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) in dccp_v6_rcv()
769 return sk_receive_skb(sk, skb, 1) ? -1 : 0; in dccp_v6_rcv()
772 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) in dccp_v6_rcv()
781 DCCP_SKB_CB(skb)->dccpd_reset_code = in dccp_v6_rcv()
783 dccp_v6_ctl_send_reset(sk, skb); in dccp_v6_rcv()
787 kfree_skb(skb); in dccp_v6_rcv()