Lines Matching refs:skb
63 struct sk_buff *skb,
75 static int sctp_add_backlog(struct sock *sk, struct sk_buff *skb);
79 static inline int sctp_rcv_checksum(struct net *net, struct sk_buff *skb) in sctp_rcv_checksum() argument
81 struct sctphdr *sh = sctp_hdr(skb); in sctp_rcv_checksum()
83 __le32 val = sctp_compute_cksum(skb, 0); in sctp_rcv_checksum()
107 int sctp_rcv(struct sk_buff *skb) in sctp_rcv() argument
120 struct net *net = dev_net(skb->dev); in sctp_rcv()
122 if (skb->pkt_type != PACKET_HOST) in sctp_rcv()
127 if (skb_linearize(skb)) in sctp_rcv()
130 sh = sctp_hdr(skb); in sctp_rcv()
133 __skb_pull(skb, skb_transport_offset(skb)); in sctp_rcv()
134 if (skb->len < sizeof(struct sctphdr)) in sctp_rcv()
137 skb->csum_valid = 0; /* Previous value not applicable */ in sctp_rcv()
138 if (skb_csum_unnecessary(skb)) in sctp_rcv()
139 __skb_decr_checksum_unnecessary(skb); in sctp_rcv()
140 else if (!sctp_checksum_disable && sctp_rcv_checksum(net, skb) < 0) in sctp_rcv()
142 skb->csum_valid = 1; in sctp_rcv()
144 skb_pull(skb, sizeof(struct sctphdr)); in sctp_rcv()
147 if (skb->len < sizeof(struct sctp_chunkhdr)) in sctp_rcv()
150 family = ipver2af(ip_hdr(skb)->version); in sctp_rcv()
156 af->from_skb(&src, skb, 1); in sctp_rcv()
157 af->from_skb(&dest, skb, 0); in sctp_rcv()
170 if (!af->addr_valid(&src, NULL, skb) || in sctp_rcv()
171 !af->addr_valid(&dest, NULL, skb)) in sctp_rcv()
174 asoc = __sctp_rcv_lookup(net, skb, &src, &dest, &transport); in sctp_rcv()
187 if (sk->sk_bound_dev_if && (sk->sk_bound_dev_if != af->skb_iif(skb))) { in sctp_rcv()
210 if (sctp_rcv_ootb(skb)) { in sctp_rcv()
216 if (!xfrm_policy_check(sk, XFRM_POLICY_IN, skb, family)) in sctp_rcv()
218 nf_reset(skb); in sctp_rcv()
220 if (sk_filter(sk, skb)) in sctp_rcv()
224 chunk = sctp_chunkify(skb, asoc, sk); in sctp_rcv()
227 SCTP_INPUT_CB(skb)->chunk = chunk; in sctp_rcv()
261 if (sctp_add_backlog(sk, skb)) { in sctp_rcv()
264 skb = NULL; /* sctp_chunk_free already freed the skb */ in sctp_rcv()
285 kfree_skb(skb); in sctp_rcv()
303 int sctp_backlog_rcv(struct sock *sk, struct sk_buff *skb) in sctp_backlog_rcv() argument
305 struct sctp_chunk *chunk = SCTP_INPUT_CB(skb)->chunk; in sctp_backlog_rcv()
337 if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) in sctp_backlog_rcv()
365 static int sctp_add_backlog(struct sock *sk, struct sk_buff *skb) in sctp_add_backlog() argument
367 struct sctp_chunk *chunk = SCTP_INPUT_CB(skb)->chunk; in sctp_add_backlog()
371 ret = sk_add_backlog(sk, skb, sk->sk_rcvbuf); in sctp_add_backlog()
419 struct sk_buff *skb) in sctp_icmp_redirect() argument
427 dst->ops->redirect(dst, sk, skb); in sctp_icmp_redirect()
470 struct sock *sctp_err_lookup(struct net *net, int family, struct sk_buff *skb, in sctp_err_lookup() argument
483 int len = skb->len - ((void *)sctphdr - (void *)skb->data); in sctp_err_lookup()
493 af->from_skb(&saddr, skb, 1); in sctp_err_lookup()
494 af->from_skb(&daddr, skb, 0); in sctp_err_lookup()
568 void sctp_v4_err(struct sk_buff *skb, __u32 info) in sctp_v4_err() argument
570 const struct iphdr *iph = (const struct iphdr *)skb->data; in sctp_v4_err()
572 const int type = icmp_hdr(skb)->type; in sctp_v4_err()
573 const int code = icmp_hdr(skb)->code; in sctp_v4_err()
580 struct net *net = dev_net(skb->dev); in sctp_v4_err()
583 saveip = skb->network_header; in sctp_v4_err()
584 savesctp = skb->transport_header; in sctp_v4_err()
585 skb_reset_network_header(skb); in sctp_v4_err()
586 skb_set_transport_header(skb, ihlen); in sctp_v4_err()
587 sk = sctp_err_lookup(net, AF_INET, skb, sctp_hdr(skb), &asoc, &transport); in sctp_v4_err()
589 skb->network_header = saveip; in sctp_v4_err()
590 skb->transport_header = savesctp; in sctp_v4_err()
630 sctp_icmp_redirect(sk, transport, skb); in sctp_v4_err()
660 static int sctp_rcv_ootb(struct sk_buff *skb) in sctp_rcv_ootb() argument
665 ch = (sctp_chunkhdr_t *) skb->data; in sctp_rcv_ootb()
674 if (ch_end > skb_tail_pointer(skb)) in sctp_rcv_ootb()
696 if (SCTP_CID_INIT == ch->type && (void *)ch != skb->data) in sctp_rcv_ootb()
700 } while (ch_end < skb_tail_pointer(skb)); in sctp_rcv_ootb()
935 struct sk_buff *skb, in __sctp_rcv_init_lookup() argument
941 struct sctphdr *sh = sctp_hdr(skb); in __sctp_rcv_init_lookup()
963 init = (sctp_init_chunk_t *)skb->data; in __sctp_rcv_init_lookup()
1032 struct sk_buff *skb, in __sctp_rcv_walk_lookup() argument
1045 ch = (sctp_chunkhdr_t *) skb->data; in __sctp_rcv_walk_lookup()
1052 if (ch_end > skb_tail_pointer(skb)) in __sctp_rcv_walk_lookup()
1076 sctp_hdr(skb)->source, in __sctp_rcv_walk_lookup()
1087 } while (ch_end < skb_tail_pointer(skb)); in __sctp_rcv_walk_lookup()
1099 struct sk_buff *skb, in __sctp_rcv_lookup_harder() argument
1105 ch = (sctp_chunkhdr_t *) skb->data; in __sctp_rcv_lookup_harder()
1112 if (WORD_ROUND(ntohs(ch->length)) > skb->len) in __sctp_rcv_lookup_harder()
1117 return __sctp_rcv_init_lookup(net, skb, laddr, transportp); in __sctp_rcv_lookup_harder()
1119 return __sctp_rcv_walk_lookup(net, skb, laddr, transportp); in __sctp_rcv_lookup_harder()
1124 struct sk_buff *skb, in __sctp_rcv_lookup() argument
1138 asoc = __sctp_rcv_lookup_harder(net, skb, laddr, transportp); in __sctp_rcv_lookup()