Lines Matching refs:x
99 static void esp_ssg_unref(struct xfrm_state *x, void *tmp, struct sk_buff *skb) in esp_ssg_unref() argument
101 struct crypto_aead *aead = x->data; in esp_ssg_unref()
107 if (x->props.flags & XFRM_STATE_ESN) in esp_ssg_unref()
123 static struct sock *esp_find_tcp_sk(struct xfrm_state *x) in esp_find_tcp_sk() argument
125 struct xfrm_encap_tmpl *encap = x->encap; in esp_find_tcp_sk()
126 struct net *net = xs_net(x); in esp_find_tcp_sk()
130 spin_lock_bh(&x->lock); in esp_find_tcp_sk()
133 spin_unlock_bh(&x->lock); in esp_find_tcp_sk()
135 sk = inet_lookup_established(net, net->ipv4.tcp_death_row.hashinfo, x->id.daddr.a4, in esp_find_tcp_sk()
136 dport, x->props.saddr.a4, sport, 0); in esp_find_tcp_sk()
148 static int esp_output_tcp_finish(struct xfrm_state *x, struct sk_buff *skb) in esp_output_tcp_finish() argument
155 sk = esp_find_tcp_sk(x); in esp_output_tcp_finish()
180 struct xfrm_state *x = dst->xfrm; in esp_output_tcp_encap_cb() local
182 return esp_output_tcp_finish(x, skb); in esp_output_tcp_encap_cb()
185 static int esp_output_tail_tcp(struct xfrm_state *x, struct sk_buff *skb) in esp_output_tail_tcp() argument
190 err = xfrm_trans_queue_net(xs_net(x), skb, esp_output_tcp_encap_cb); in esp_output_tail_tcp()
200 static int esp_output_tail_tcp(struct xfrm_state *x, struct sk_buff *skb) in esp_output_tail_tcp() argument
212 struct xfrm_state *x; in esp_output_done() local
217 x = sp->xvec[sp->len - 1]; in esp_output_done()
219 x = skb_dst(skb)->xfrm; in esp_output_done()
223 esp_ssg_unref(x, tmp, skb); in esp_output_done()
228 XFRM_INC_STATS(xs_net(x), LINUX_MIB_XFRMOUTSTATEPROTOERROR); in esp_output_done()
238 x->encap && x->encap->encap_type == TCP_ENCAP_ESPINTCP) in esp_output_done()
239 esp_output_tail_tcp(x, skb); in esp_output_done()
266 struct xfrm_state *x, in esp_output_set_extra() argument
274 if ((x->props.flags & XFRM_STATE_ESN)) { in esp_output_set_extra()
290 esph->spi = x->id.spi; in esp_output_set_extra()
334 static struct ip_esp_hdr *esp_output_tcp_encap(struct xfrm_state *x, in esp_output_tcp_encap() argument
348 sk = esp_find_tcp_sk(x); in esp_output_tcp_encap()
362 static struct ip_esp_hdr *esp_output_tcp_encap(struct xfrm_state *x, in esp_output_tcp_encap() argument
370 static int esp_output_encap(struct xfrm_state *x, struct sk_buff *skb, in esp_output_encap() argument
373 struct xfrm_encap_tmpl *encap = x->encap; in esp_output_encap()
378 spin_lock_bh(&x->lock); in esp_output_encap()
382 spin_unlock_bh(&x->lock); in esp_output_encap()
390 esph = esp_output_tcp_encap(x, skb, esp); in esp_output_encap()
402 int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp) in esp_output_head() argument
412 if (x->encap) { in esp_output_head()
413 int err = esp_output_encap(x, skb, esp); in esp_output_head()
434 struct page_frag *pfrag = &x->xfrag; in esp_output_head()
440 spin_lock_bh(&x->lock); in esp_output_head()
443 spin_unlock_bh(&x->lock); in esp_output_head()
462 spin_unlock_bh(&x->lock); in esp_output_head()
492 int esp_output_tail(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp) in esp_output_tail() argument
511 if (x->props.flags & XFRM_STATE_ESN) { in esp_output_tail()
516 aead = x->data; in esp_output_tail()
534 esph = esp_output_set_extra(skb, x, esp->esph, extra); in esp_output_tail()
546 struct page_frag *pfrag = &x->xfrag; in esp_output_tail()
550 spin_lock_bh(&x->lock); in esp_output_tail()
552 spin_unlock_bh(&x->lock); in esp_output_tail()
563 spin_unlock_bh(&x->lock); in esp_output_tail()
573 if ((x->props.flags & XFRM_STATE_ESN)) in esp_output_tail()
597 if ((x->props.flags & XFRM_STATE_ESN)) in esp_output_tail()
602 esp_ssg_unref(x, tmp, skb); in esp_output_tail()
604 if (!err && x->encap && x->encap->encap_type == TCP_ENCAP_ESPINTCP) in esp_output_tail()
605 err = esp_output_tail_tcp(x, skb); in esp_output_tail()
614 static int esp_output(struct xfrm_state *x, struct sk_buff *skb) in esp_output() argument
629 aead = x->data; in esp_output()
633 if (x->tfcpad) { in esp_output()
637 padto = min(x->tfcpad, xfrm_state_mtu(x, dst->child_mtu_cached)); in esp_output()
648 esp.nfrags = esp_output_head(x, skb, &esp); in esp_output()
653 esph->spi = x->id.spi; in esp_output()
661 return esp_output_tail(x, skb, &esp); in esp_output()
666 struct xfrm_state *x = xfrm_input_state(skb); in esp_remove_trailer() local
667 struct crypto_aead *aead = x->data; in esp_remove_trailer()
708 struct xfrm_state *x = xfrm_input_state(skb); in esp_input_done2() local
710 struct crypto_aead *aead = x->data; in esp_input_done2()
727 if (x->encap) { in esp_input_done2()
728 struct xfrm_encap_tmpl *encap = x->encap; in esp_input_done2()
733 switch (x->encap->encap_type) { in esp_input_done2()
752 if (iph->saddr != x->props.saddr.a4 || in esp_input_done2()
757 km_new_mapping(x, &ipaddr, source); in esp_input_done2()
775 if (x->props.mode == XFRM_MODE_TRANSPORT) in esp_input_done2()
780 if (x->props.mode == XFRM_MODE_TUNNEL || in esp_input_done2()
781 x->props.mode == XFRM_MODE_IPTFS) in esp_input_done2()
810 struct xfrm_state *x = xfrm_input_state(skb); in esp_input_set_header() local
817 if ((x->props.flags & XFRM_STATE_ESN)) { in esp_input_set_header()
838 static int esp_input(struct xfrm_state *x, struct sk_buff *skb) in esp_input() argument
840 struct crypto_aead *aead = x->data; in esp_input()
863 if (x->props.flags & XFRM_STATE_ESN) { in esp_input()
910 if ((x->props.flags & XFRM_STATE_ESN)) in esp_input()
922 if ((x->props.flags & XFRM_STATE_ESN)) in esp_input()
936 struct xfrm_state *x; in esp4_err() local
949 x = xfrm_state_lookup(net, skb->mark, (const xfrm_address_t *)&iph->daddr, in esp4_err()
951 if (!x) in esp4_err()
958 xfrm_state_put(x); in esp4_err()
963 static void esp_destroy(struct xfrm_state *x) in esp_destroy() argument
965 struct crypto_aead *aead = x->data; in esp_destroy()
973 static int esp_init_aead(struct xfrm_state *x, struct netlink_ext_ack *extack) in esp_init_aead() argument
980 x->geniv, x->aead->alg_name) >= CRYPTO_MAX_ALG_NAME) { in esp_init_aead()
990 x->data = aead; in esp_init_aead()
992 err = crypto_aead_setkey(aead, x->aead->alg_key, in esp_init_aead()
993 (x->aead->alg_key_len + 7) / 8); in esp_init_aead()
997 err = crypto_aead_setauthsize(aead, x->aead->alg_icv_len / 8); in esp_init_aead()
1008 static int esp_init_authenc(struct xfrm_state *x, in esp_init_authenc() argument
1022 if ((x->props.flags & XFRM_STATE_ESN)) { in esp_init_authenc()
1025 x->geniv ?: "", x->geniv ? "(" : "", in esp_init_authenc()
1026 x->aalg ? x->aalg->alg_name : "digest_null", in esp_init_authenc()
1027 x->ealg->alg_name, in esp_init_authenc()
1028 x->geniv ? ")" : "") >= CRYPTO_MAX_ALG_NAME) { in esp_init_authenc()
1035 x->geniv ?: "", x->geniv ? "(" : "", in esp_init_authenc()
1036 x->aalg ? x->aalg->alg_name : "digest_null", in esp_init_authenc()
1037 x->ealg->alg_name, in esp_init_authenc()
1038 x->geniv ? ")" : "") >= CRYPTO_MAX_ALG_NAME) { in esp_init_authenc()
1051 x->data = aead; in esp_init_authenc()
1053 keylen = (x->aalg ? (x->aalg->alg_key_len + 7) / 8 : 0) + in esp_init_authenc()
1054 (x->ealg->alg_key_len + 7) / 8 + RTA_SPACE(sizeof(*param)); in esp_init_authenc()
1067 if (x->aalg) { in esp_init_authenc()
1070 memcpy(p, x->aalg->alg_key, (x->aalg->alg_key_len + 7) / 8); in esp_init_authenc()
1071 p += (x->aalg->alg_key_len + 7) / 8; in esp_init_authenc()
1073 aalg_desc = xfrm_aalg_get_byname(x->aalg->alg_name, 0); in esp_init_authenc()
1084 aead, x->aalg->alg_trunc_len / 8); in esp_init_authenc()
1091 param->enckeylen = cpu_to_be32((x->ealg->alg_key_len + 7) / 8); in esp_init_authenc()
1092 memcpy(p, x->ealg->alg_key, (x->ealg->alg_key_len + 7) / 8); in esp_init_authenc()
1103 static int esp_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack) in esp_init_state() argument
1109 x->data = NULL; in esp_init_state()
1111 if (x->aead) { in esp_init_state()
1112 err = esp_init_aead(x, extack); in esp_init_state()
1113 } else if (x->ealg) { in esp_init_state()
1114 err = esp_init_authenc(x, extack); in esp_init_state()
1123 aead = x->data; in esp_init_state()
1125 x->props.header_len = sizeof(struct ip_esp_hdr) + in esp_init_state()
1127 if (x->props.mode == XFRM_MODE_TUNNEL) in esp_init_state()
1128 x->props.header_len += sizeof(struct iphdr); in esp_init_state()
1129 else if (x->props.mode == XFRM_MODE_BEET && x->sel.family != AF_INET6) in esp_init_state()
1130 x->props.header_len += IPV4_BEET_PHMAXLEN; in esp_init_state()
1131 if (x->encap) { in esp_init_state()
1132 struct xfrm_encap_tmpl *encap = x->encap; in esp_init_state()
1140 x->props.header_len += sizeof(struct udphdr); in esp_init_state()
1147 x->props.header_len += 2; in esp_init_state()
1154 x->props.trailer_len = align + 1 + crypto_aead_authsize(aead); in esp_init_state()