Lines Matching refs:skb
190 static void dccp_do_redirect(struct sk_buff *skb, struct sock *sk) in dccp_do_redirect() argument
195 dst->ops->redirect(dst, sk, skb); in dccp_do_redirect()
234 static void dccp_v4_err(struct sk_buff *skb, u32 info) in dccp_v4_err() argument
236 const struct iphdr *iph = (struct iphdr *)skb->data; in dccp_v4_err()
238 const struct dccp_hdr *dh = (struct dccp_hdr *)(skb->data + offset); in dccp_v4_err()
241 const int type = icmp_hdr(skb)->type; in dccp_v4_err()
242 const int code = icmp_hdr(skb)->code; in dccp_v4_err()
246 struct net *net = dev_net(skb->dev); in dccp_v4_err()
248 if (skb->len < offset + sizeof(*dh) || in dccp_v4_err()
249 skb->len < offset + __dccp_basic_hdr_len(dh)) { in dccp_v4_err()
257 inet_iif(skb)); in dccp_v4_err()
290 dccp_do_redirect(skb, sk); in dccp_v4_err()
359 static inline __sum16 dccp_v4_csum_finish(struct sk_buff *skb, in dccp_v4_csum_finish() argument
362 return csum_tcpudp_magic(src, dst, skb->len, IPPROTO_DCCP, skb->csum); in dccp_v4_csum_finish()
365 void dccp_v4_send_check(struct sock *sk, struct sk_buff *skb) in dccp_v4_send_check() argument
368 struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v4_send_check()
370 dccp_csum_outgoing(skb); in dccp_v4_send_check()
371 dh->dccph_checksum = dccp_v4_csum_finish(skb, in dccp_v4_send_check()
377 static inline u64 dccp_v4_init_sequence(const struct sk_buff *skb) in dccp_v4_init_sequence() argument
379 return secure_dccp_sequence_number(ip_hdr(skb)->daddr, in dccp_v4_init_sequence()
380 ip_hdr(skb)->saddr, in dccp_v4_init_sequence()
381 dccp_hdr(skb)->dccph_dport, in dccp_v4_init_sequence()
382 dccp_hdr(skb)->dccph_sport); in dccp_v4_init_sequence()
392 struct sk_buff *skb, in dccp_v4_request_recv_sock() argument
405 newsk = dccp_create_openreq_child(sk, req, skb); in dccp_v4_request_recv_sock()
416 newinet->mc_index = inet_iif(skb); in dccp_v4_request_recv_sock()
417 newinet->mc_ttl = ip_hdr(skb)->ttl; in dccp_v4_request_recv_sock()
448 struct sk_buff *skb) in dccp_v4_route_skb() argument
451 const struct iphdr *iph = ip_hdr(skb); in dccp_v4_route_skb()
453 .flowi4_oif = inet_iif(skb), in dccp_v4_route_skb()
458 .fl4_sport = dccp_hdr(skb)->dccph_dport, in dccp_v4_route_skb()
459 .fl4_dport = dccp_hdr(skb)->dccph_sport, in dccp_v4_route_skb()
462 security_skb_classify_flow(skb, flowi4_to_flowi(&fl4)); in dccp_v4_route_skb()
475 struct sk_buff *skb; in dccp_v4_send_response() local
483 skb = dccp_make_response(sk, dst, req); in dccp_v4_send_response()
484 if (skb != NULL) { in dccp_v4_send_response()
486 struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v4_send_response()
488 dh->dccph_checksum = dccp_v4_csum_finish(skb, ireq->ir_loc_addr, in dccp_v4_send_response()
490 err = ip_build_and_send_pkt(skb, sk, ireq->ir_loc_addr, in dccp_v4_send_response()
505 struct sk_buff *skb; in dccp_v4_ctl_send_reset() local
521 skb = dccp_ctl_make_reset(ctl_sk, rxskb); in dccp_v4_ctl_send_reset()
522 if (skb == NULL) in dccp_v4_ctl_send_reset()
526 dccp_hdr(skb)->dccph_checksum = dccp_v4_csum_finish(skb, rxiph->saddr, in dccp_v4_ctl_send_reset()
528 skb_dst_set(skb, dst_clone(dst)); in dccp_v4_ctl_send_reset()
531 err = ip_build_and_send_pkt(skb, ctl_sk, in dccp_v4_ctl_send_reset()
564 int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) in dccp_v4_conn_request() argument
569 const __be32 service = dccp_hdr_request(skb)->dccph_req_service; in dccp_v4_conn_request()
570 struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb); in dccp_v4_conn_request()
573 if (skb_rtable(skb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST)) in dccp_v4_conn_request()
602 if (dccp_reqsk_init(req, dccp_sk(sk), skb)) in dccp_v4_conn_request()
606 if (dccp_parse_options(sk, dreq, skb)) in dccp_v4_conn_request()
609 if (security_inet_conn_request(sk, skb, req)) in dccp_v4_conn_request()
613 sk_rcv_saddr_set(req_to_sk(req), ip_hdr(skb)->daddr); in dccp_v4_conn_request()
614 sk_daddr_set(req_to_sk(req), ip_hdr(skb)->saddr); in dccp_v4_conn_request()
627 dreq->dreq_iss = dccp_v4_init_sequence(skb); in dccp_v4_conn_request()
645 int dccp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) in dccp_v4_do_rcv() argument
647 struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v4_do_rcv()
650 if (dccp_rcv_established(sk, skb, dh, skb->len)) in dccp_v4_do_rcv()
679 if (dccp_rcv_state_process(sk, skb, dh, skb->len)) in dccp_v4_do_rcv()
684 dccp_v4_ctl_send_reset(sk, skb); in dccp_v4_do_rcv()
685 kfree_skb(skb); in dccp_v4_do_rcv()
695 int dccp_invalid_packet(struct sk_buff *skb) in dccp_invalid_packet() argument
700 if (skb->pkt_type != PACKET_HOST) in dccp_invalid_packet()
704 if (!pskb_may_pull(skb, sizeof(struct dccp_hdr))) { in dccp_invalid_packet()
709 dh = dccp_hdr(skb); in dccp_invalid_packet()
720 if (dh->dccph_doff < dccp_hdr_len(skb) / sizeof(u32)) { in dccp_invalid_packet()
727 if (!pskb_may_pull(skb, dh->dccph_doff * sizeof(u32))) { in dccp_invalid_packet()
747 cscov = dccp_csum_coverage(skb); in dccp_invalid_packet()
748 if (cscov > skb->len) { in dccp_invalid_packet()
750 dh->dccph_cscov, skb->len); in dccp_invalid_packet()
756 skb->csum = skb_checksum(skb, 0, cscov, 0); in dccp_invalid_packet()
763 static int dccp_v4_rcv(struct sk_buff *skb) in dccp_v4_rcv() argument
772 if (dccp_invalid_packet(skb)) in dccp_v4_rcv()
775 iph = ip_hdr(skb); in dccp_v4_rcv()
777 if (dccp_v4_csum_finish(skb, iph->saddr, iph->daddr)) { in dccp_v4_rcv()
782 dh = dccp_hdr(skb); in dccp_v4_rcv()
784 DCCP_SKB_CB(skb)->dccpd_seq = dccp_hdr_seq(dh); in dccp_v4_rcv()
785 DCCP_SKB_CB(skb)->dccpd_type = dh->dccph_type; in dccp_v4_rcv()
791 (unsigned long long) DCCP_SKB_CB(skb)->dccpd_seq); in dccp_v4_rcv()
793 if (dccp_packet_without_ack(skb)) { in dccp_v4_rcv()
794 DCCP_SKB_CB(skb)->dccpd_ack_seq = DCCP_PKT_WITHOUT_ACK_SEQ; in dccp_v4_rcv()
797 DCCP_SKB_CB(skb)->dccpd_ack_seq = dccp_hdr_ack_seq(skb); in dccp_v4_rcv()
799 DCCP_SKB_CB(skb)->dccpd_ack_seq); in dccp_v4_rcv()
803 sk = __inet_lookup_skb(&dccp_hashinfo, skb, in dccp_v4_rcv()
833 nsk = dccp_check_req(sk, skb, req); in dccp_v4_rcv()
840 } else if (dccp_child_process(sk, nsk, skb)) { in dccp_v4_rcv()
841 dccp_v4_ctl_send_reset(sk, skb); in dccp_v4_rcv()
863 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) in dccp_v4_rcv()
865 nf_reset(skb); in dccp_v4_rcv()
867 return sk_receive_skb(sk, skb, 1); in dccp_v4_rcv()
870 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) in dccp_v4_rcv()
879 DCCP_SKB_CB(skb)->dccpd_reset_code = in dccp_v4_rcv()
881 dccp_v4_ctl_send_reset(sk, skb); in dccp_v4_rcv()
885 kfree_skb(skb); in dccp_v4_rcv()