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 int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) in dccp_v6_conn_request() argument
304 const __be32 service = dccp_hdr_request(skb)->dccph_req_service; in dccp_v6_conn_request()
305 struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb); in dccp_v6_conn_request()
307 if (skb->protocol == htons(ETH_P_IP)) in dccp_v6_conn_request()
308 return dccp_v4_conn_request(sk, skb); in dccp_v6_conn_request()
310 if (!ipv6_unicast_destination(skb)) in dccp_v6_conn_request()
331 if (dccp_reqsk_init(req, dccp_sk(sk), skb)) in dccp_v6_conn_request()
335 if (dccp_parse_options(sk, dreq, skb)) in dccp_v6_conn_request()
338 if (security_inet_conn_request(sk, skb, req)) in dccp_v6_conn_request()
342 ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr; in dccp_v6_conn_request()
343 ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr; in dccp_v6_conn_request()
346 if (ipv6_opt_accepted(sk, skb, IP6CB(skb)) || in dccp_v6_conn_request()
349 atomic_inc(&skb->users); in dccp_v6_conn_request()
350 ireq->pktopts = skb; in dccp_v6_conn_request()
357 ireq->ir_iif = inet6_iif(skb); in dccp_v6_conn_request()
368 dreq->dreq_iss = dccp_v6_init_sequence(skb); in dccp_v6_conn_request()
386 struct sk_buff *skb, in dccp_v6_request_recv_sock() argument
400 if (skb->protocol == htons(ETH_P_IP)) { in dccp_v6_request_recv_sock()
404 newsk = dccp_v4_request_recv_sock(sk, skb, req, dst, in dccp_v6_request_recv_sock()
422 newnp->mcast_oif = inet6_iif(skb); in dccp_v6_request_recv_sock()
423 newnp->mcast_hops = ipv6_hdr(skb)->hop_limit; in dccp_v6_request_recv_sock()
452 newsk = dccp_create_openreq_child(sk, req, skb); in dccp_v6_request_recv_sock()
488 newnp->mcast_oif = inet6_iif(skb); in dccp_v6_request_recv_sock()
489 newnp->mcast_hops = ipv6_hdr(skb)->hop_limit; in dccp_v6_request_recv_sock()
546 static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) in dccp_v6_do_rcv() argument
559 if (skb->protocol == htons(ETH_P_IP)) in dccp_v6_do_rcv()
560 return dccp_v4_do_rcv(sk, skb); in dccp_v6_do_rcv()
562 if (sk_filter(sk, skb)) in dccp_v6_do_rcv()
588 opt_skb = skb_clone(skb, GFP_ATOMIC); in dccp_v6_do_rcv()
591 if (dccp_rcv_established(sk, skb, dccp_hdr(skb), skb->len)) in dccp_v6_do_rcv()
625 if (dccp_rcv_state_process(sk, skb, dccp_hdr(skb), skb->len)) in dccp_v6_do_rcv()
634 dccp_v6_ctl_send_reset(sk, skb); in dccp_v6_do_rcv()
638 kfree_skb(skb); in dccp_v6_do_rcv()
642 static int dccp_v6_rcv(struct sk_buff *skb) in dccp_v6_rcv() argument
650 if (dccp_invalid_packet(skb)) in dccp_v6_rcv()
654 if (dccp_v6_csum_finish(skb, &ipv6_hdr(skb)->saddr, in dccp_v6_rcv()
655 &ipv6_hdr(skb)->daddr)) { in dccp_v6_rcv()
660 dh = dccp_hdr(skb); in dccp_v6_rcv()
662 DCCP_SKB_CB(skb)->dccpd_seq = dccp_hdr_seq(dh); in dccp_v6_rcv()
663 DCCP_SKB_CB(skb)->dccpd_type = dh->dccph_type; in dccp_v6_rcv()
665 if (dccp_packet_without_ack(skb)) in dccp_v6_rcv()
666 DCCP_SKB_CB(skb)->dccpd_ack_seq = DCCP_PKT_WITHOUT_ACK_SEQ; in dccp_v6_rcv()
668 DCCP_SKB_CB(skb)->dccpd_ack_seq = dccp_hdr_ack_seq(skb); in dccp_v6_rcv()
671 sk = __inet6_lookup_skb(&dccp_hashinfo, skb, in dccp_v6_rcv()
673 inet6_iif(skb)); in dccp_v6_rcv()
702 nsk = dccp_check_req(sk, skb, req); in dccp_v6_rcv()
709 } else if (dccp_child_process(sk, nsk, skb)) { in dccp_v6_rcv()
710 dccp_v6_ctl_send_reset(sk, skb); in dccp_v6_rcv()
730 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) in dccp_v6_rcv()
733 return sk_receive_skb(sk, skb, 1) ? -1 : 0; in dccp_v6_rcv()
736 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) in dccp_v6_rcv()
745 DCCP_SKB_CB(skb)->dccpd_reset_code = in dccp_v6_rcv()
747 dccp_v6_ctl_send_reset(sk, skb); in dccp_v6_rcv()
751 kfree_skb(skb); in dccp_v6_rcv()