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()
236 static void dccp_v4_err(struct sk_buff *skb, u32 info) in dccp_v4_err() argument
238 const struct iphdr *iph = (struct iphdr *)skb->data; in dccp_v4_err()
240 const struct dccp_hdr *dh = (struct dccp_hdr *)(skb->data + offset); in dccp_v4_err()
243 const int type = icmp_hdr(skb)->type; in dccp_v4_err()
244 const int code = icmp_hdr(skb)->code; in dccp_v4_err()
248 struct net *net = dev_net(skb->dev); in dccp_v4_err()
250 if (skb->len < offset + sizeof(*dh) || in dccp_v4_err()
251 skb->len < offset + __dccp_basic_hdr_len(dh)) { in dccp_v4_err()
259 inet_iif(skb)); in dccp_v4_err()
292 dccp_do_redirect(skb, sk); in dccp_v4_err()
361 static inline __sum16 dccp_v4_csum_finish(struct sk_buff *skb, in dccp_v4_csum_finish() argument
364 return csum_tcpudp_magic(src, dst, skb->len, IPPROTO_DCCP, skb->csum); in dccp_v4_csum_finish()
367 void dccp_v4_send_check(struct sock *sk, struct sk_buff *skb) in dccp_v4_send_check() argument
370 struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v4_send_check()
372 dccp_csum_outgoing(skb); in dccp_v4_send_check()
373 dh->dccph_checksum = dccp_v4_csum_finish(skb, in dccp_v4_send_check()
379 static inline u64 dccp_v4_init_sequence(const struct sk_buff *skb) in dccp_v4_init_sequence() argument
381 return secure_dccp_sequence_number(ip_hdr(skb)->daddr, in dccp_v4_init_sequence()
382 ip_hdr(skb)->saddr, in dccp_v4_init_sequence()
383 dccp_hdr(skb)->dccph_dport, in dccp_v4_init_sequence()
384 dccp_hdr(skb)->dccph_sport); in dccp_v4_init_sequence()
393 struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb, in dccp_v4_request_recv_sock() argument
404 newsk = dccp_create_openreq_child(sk, req, skb); in dccp_v4_request_recv_sock()
415 newinet->mc_index = inet_iif(skb); in dccp_v4_request_recv_sock()
416 newinet->mc_ttl = ip_hdr(skb)->ttl; in dccp_v4_request_recv_sock()
446 static struct sock *dccp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) in dccp_v4_hnd_req() argument
448 const struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v4_hnd_req()
449 const struct iphdr *iph = ip_hdr(skb); in dccp_v4_hnd_req()
455 nsk = dccp_check_req(sk, skb, req); in dccp_v4_hnd_req()
463 inet_iif(skb)); in dccp_v4_hnd_req()
477 struct sk_buff *skb) in dccp_v4_route_skb() argument
480 const struct iphdr *iph = ip_hdr(skb); in dccp_v4_route_skb()
482 .flowi4_oif = inet_iif(skb), in dccp_v4_route_skb()
487 .fl4_sport = dccp_hdr(skb)->dccph_dport, in dccp_v4_route_skb()
488 .fl4_dport = dccp_hdr(skb)->dccph_sport, in dccp_v4_route_skb()
491 security_skb_classify_flow(skb, flowi4_to_flowi(&fl4)); in dccp_v4_route_skb()
504 struct sk_buff *skb; in dccp_v4_send_response() local
512 skb = dccp_make_response(sk, dst, req); in dccp_v4_send_response()
513 if (skb != NULL) { in dccp_v4_send_response()
515 struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v4_send_response()
517 dh->dccph_checksum = dccp_v4_csum_finish(skb, ireq->ir_loc_addr, in dccp_v4_send_response()
519 err = ip_build_and_send_pkt(skb, sk, ireq->ir_loc_addr, in dccp_v4_send_response()
534 struct sk_buff *skb; in dccp_v4_ctl_send_reset() local
550 skb = dccp_ctl_make_reset(ctl_sk, rxskb); in dccp_v4_ctl_send_reset()
551 if (skb == NULL) in dccp_v4_ctl_send_reset()
555 dccp_hdr(skb)->dccph_checksum = dccp_v4_csum_finish(skb, rxiph->saddr, in dccp_v4_ctl_send_reset()
557 skb_dst_set(skb, dst_clone(dst)); in dccp_v4_ctl_send_reset()
560 err = ip_build_and_send_pkt(skb, ctl_sk, in dccp_v4_ctl_send_reset()
593 int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) in dccp_v4_conn_request() argument
598 const __be32 service = dccp_hdr_request(skb)->dccph_req_service; in dccp_v4_conn_request()
599 struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb); in dccp_v4_conn_request()
602 if (skb_rtable(skb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST)) in dccp_v4_conn_request()
631 if (dccp_reqsk_init(req, dccp_sk(sk), skb)) in dccp_v4_conn_request()
635 if (dccp_parse_options(sk, dreq, skb)) in dccp_v4_conn_request()
638 if (security_inet_conn_request(sk, skb, req)) in dccp_v4_conn_request()
642 sk_rcv_saddr_set(req_to_sk(req), ip_hdr(skb)->daddr); in dccp_v4_conn_request()
643 sk_daddr_set(req_to_sk(req), ip_hdr(skb)->saddr); in dccp_v4_conn_request()
656 dreq->dreq_iss = dccp_v4_init_sequence(skb); in dccp_v4_conn_request()
674 int dccp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) in dccp_v4_do_rcv() argument
676 struct dccp_hdr *dh = dccp_hdr(skb); in dccp_v4_do_rcv()
679 if (dccp_rcv_established(sk, skb, dh, skb->len)) in dccp_v4_do_rcv()
708 struct sock *nsk = dccp_v4_hnd_req(sk, skb); in dccp_v4_do_rcv()
714 if (dccp_child_process(sk, nsk, skb)) in dccp_v4_do_rcv()
720 if (dccp_rcv_state_process(sk, skb, dh, skb->len)) in dccp_v4_do_rcv()
725 dccp_v4_ctl_send_reset(sk, skb); in dccp_v4_do_rcv()
727 kfree_skb(skb); in dccp_v4_do_rcv()
737 int dccp_invalid_packet(struct sk_buff *skb) in dccp_invalid_packet() argument
742 if (skb->pkt_type != PACKET_HOST) in dccp_invalid_packet()
746 if (!pskb_may_pull(skb, sizeof(struct dccp_hdr))) { in dccp_invalid_packet()
751 dh = dccp_hdr(skb); in dccp_invalid_packet()
762 if (dh->dccph_doff < dccp_hdr_len(skb) / sizeof(u32)) { in dccp_invalid_packet()
769 if (!pskb_may_pull(skb, dh->dccph_doff * sizeof(u32))) { in dccp_invalid_packet()
789 cscov = dccp_csum_coverage(skb); in dccp_invalid_packet()
790 if (cscov > skb->len) { in dccp_invalid_packet()
792 dh->dccph_cscov, skb->len); in dccp_invalid_packet()
798 skb->csum = skb_checksum(skb, 0, cscov, 0); in dccp_invalid_packet()
805 static int dccp_v4_rcv(struct sk_buff *skb) in dccp_v4_rcv() argument
814 if (dccp_invalid_packet(skb)) in dccp_v4_rcv()
817 iph = ip_hdr(skb); in dccp_v4_rcv()
819 if (dccp_v4_csum_finish(skb, iph->saddr, iph->daddr)) { in dccp_v4_rcv()
824 dh = dccp_hdr(skb); in dccp_v4_rcv()
826 DCCP_SKB_CB(skb)->dccpd_seq = dccp_hdr_seq(dh); in dccp_v4_rcv()
827 DCCP_SKB_CB(skb)->dccpd_type = dh->dccph_type; in dccp_v4_rcv()
833 (unsigned long long) DCCP_SKB_CB(skb)->dccpd_seq); in dccp_v4_rcv()
835 if (dccp_packet_without_ack(skb)) { in dccp_v4_rcv()
836 DCCP_SKB_CB(skb)->dccpd_ack_seq = DCCP_PKT_WITHOUT_ACK_SEQ; in dccp_v4_rcv()
839 DCCP_SKB_CB(skb)->dccpd_ack_seq = dccp_hdr_ack_seq(skb); in dccp_v4_rcv()
841 DCCP_SKB_CB(skb)->dccpd_ack_seq); in dccp_v4_rcv()
846 sk = __inet_lookup_skb(&dccp_hashinfo, skb, in dccp_v4_rcv()
885 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) in dccp_v4_rcv()
887 nf_reset(skb); in dccp_v4_rcv()
889 return sk_receive_skb(sk, skb, 1); in dccp_v4_rcv()
892 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) in dccp_v4_rcv()
901 DCCP_SKB_CB(skb)->dccpd_reset_code = in dccp_v4_rcv()
903 dccp_v4_ctl_send_reset(sk, skb); in dccp_v4_rcv()
907 kfree_skb(skb); in dccp_v4_rcv()