Lines Matching refs:x
116 static void esp_ssg_unref(struct xfrm_state *x, void *tmp, struct sk_buff *skb) in esp_ssg_unref() argument
118 struct crypto_aead *aead = x->data; in esp_ssg_unref()
124 if (x->props.flags & XFRM_STATE_ESN) in esp_ssg_unref()
140 static struct sock *esp6_find_tcp_sk(struct xfrm_state *x) in esp6_find_tcp_sk() argument
142 struct xfrm_encap_tmpl *encap = x->encap; in esp6_find_tcp_sk()
143 struct net *net = xs_net(x); in esp6_find_tcp_sk()
147 spin_lock_bh(&x->lock); in esp6_find_tcp_sk()
150 spin_unlock_bh(&x->lock); in esp6_find_tcp_sk()
152 sk = __inet6_lookup_established(net, net->ipv4.tcp_death_row.hashinfo, &x->id.daddr.in6, in esp6_find_tcp_sk()
153 dport, &x->props.saddr.in6, ntohs(sport), 0, 0); in esp6_find_tcp_sk()
165 static int esp_output_tcp_finish(struct xfrm_state *x, struct sk_buff *skb) in esp_output_tcp_finish() argument
172 sk = esp6_find_tcp_sk(x); in esp_output_tcp_finish()
197 struct xfrm_state *x = dst->xfrm; in esp_output_tcp_encap_cb() local
199 return esp_output_tcp_finish(x, skb); in esp_output_tcp_encap_cb()
202 static int esp_output_tail_tcp(struct xfrm_state *x, struct sk_buff *skb) in esp_output_tail_tcp() argument
207 err = xfrm_trans_queue_net(xs_net(x), skb, esp_output_tcp_encap_cb); in esp_output_tail_tcp()
217 static int esp_output_tail_tcp(struct xfrm_state *x, struct sk_buff *skb) in esp_output_tail_tcp() argument
246 struct xfrm_state *x; in esp_output_done() local
251 x = sp->xvec[sp->len - 1]; in esp_output_done()
253 x = skb_dst(skb)->xfrm; in esp_output_done()
257 esp_ssg_unref(x, tmp, skb); in esp_output_done()
264 XFRM_INC_STATS(xs_net(x), LINUX_MIB_XFRMOUTSTATEPROTOERROR); in esp_output_done()
274 x->encap && x->encap->encap_type == TCP_ENCAP_ESPINTCP) in esp_output_done()
275 esp_output_tail_tcp(x, skb); in esp_output_done()
302 struct xfrm_state *x, in esp_output_set_esn() argument
310 if ((x->props.flags & XFRM_STATE_ESN)) { in esp_output_set_esn()
326 esph->spi = x->id.spi; in esp_output_set_esn()
364 static struct ip_esp_hdr *esp6_output_tcp_encap(struct xfrm_state *x, in esp6_output_tcp_encap() argument
378 sk = esp6_find_tcp_sk(x); in esp6_output_tcp_encap()
392 static struct ip_esp_hdr *esp6_output_tcp_encap(struct xfrm_state *x, in esp6_output_tcp_encap() argument
400 static int esp6_output_encap(struct xfrm_state *x, struct sk_buff *skb, in esp6_output_encap() argument
403 struct xfrm_encap_tmpl *encap = x->encap; in esp6_output_encap()
408 spin_lock_bh(&x->lock); in esp6_output_encap()
412 spin_unlock_bh(&x->lock); in esp6_output_encap()
420 esph = esp6_output_tcp_encap(x, skb, esp); in esp6_output_encap()
432 int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp) in esp6_output_head() argument
441 if (x->encap) { in esp6_output_head()
442 int err = esp6_output_encap(x, skb, esp); in esp6_output_head()
463 struct page_frag *pfrag = &x->xfrag; in esp6_output_head()
469 spin_lock_bh(&x->lock); in esp6_output_head()
472 spin_unlock_bh(&x->lock); in esp6_output_head()
491 spin_unlock_bh(&x->lock); in esp6_output_head()
523 int esp6_output_tail(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp) in esp6_output_tail() argument
542 if (x->props.flags & XFRM_STATE_ESN) { in esp6_output_tail()
547 aead = x->data; in esp6_output_tail()
565 esph = esp_output_set_esn(skb, x, esp->esph, extra); in esp6_output_tail()
577 struct page_frag *pfrag = &x->xfrag; in esp6_output_tail()
581 spin_lock_bh(&x->lock); in esp6_output_tail()
583 spin_unlock_bh(&x->lock); in esp6_output_tail()
594 spin_unlock_bh(&x->lock); in esp6_output_tail()
604 if ((x->props.flags & XFRM_STATE_ESN)) in esp6_output_tail()
628 if ((x->props.flags & XFRM_STATE_ESN)) in esp6_output_tail()
634 esp_ssg_unref(x, tmp, skb); in esp6_output_tail()
636 if (!err && x->encap && x->encap->encap_type == TCP_ENCAP_ESPINTCP) in esp6_output_tail()
637 err = esp_output_tail_tcp(x, skb); in esp6_output_tail()
646 static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) in esp6_output() argument
661 aead = x->data; in esp6_output()
665 if (x->tfcpad) { in esp6_output()
669 padto = min(x->tfcpad, xfrm_state_mtu(x, dst->child_mtu_cached)); in esp6_output()
680 esp.nfrags = esp6_output_head(x, skb, &esp); in esp6_output()
685 esph->spi = x->id.spi; in esp6_output()
693 return esp6_output_tail(x, skb, &esp); in esp6_output()
698 struct xfrm_state *x = xfrm_input_state(skb); in esp_remove_trailer() local
699 struct crypto_aead *aead = x->data; in esp_remove_trailer()
739 struct xfrm_state *x = xfrm_input_state(skb); in esp6_input_done2() local
741 struct crypto_aead *aead = x->data; in esp6_input_done2()
755 if (x->encap) { in esp6_input_done2()
758 struct xfrm_encap_tmpl *encap = x->encap; in esp6_input_done2()
774 switch (x->encap->encap_type) { in esp6_input_done2()
793 if (!ipv6_addr_equal(&ip6h->saddr, &x->props.saddr.in6) || in esp6_input_done2()
798 km_new_mapping(x, &ipaddr, source); in esp6_input_done2()
816 if (x->props.mode == XFRM_MODE_TRANSPORT) in esp6_input_done2()
823 if (x->props.mode == XFRM_MODE_TUNNEL || in esp6_input_done2()
824 x->props.mode == XFRM_MODE_IPTFS) in esp6_input_done2()
853 struct xfrm_state *x = xfrm_input_state(skb); in esp_input_set_header() local
859 if ((x->props.flags & XFRM_STATE_ESN)) { in esp_input_set_header()
876 static int esp6_input(struct xfrm_state *x, struct sk_buff *skb) in esp6_input() argument
878 struct crypto_aead *aead = x->data; in esp6_input()
905 if (x->props.flags & XFRM_STATE_ESN) { in esp6_input()
952 if ((x->props.flags & XFRM_STATE_ESN)) in esp6_input()
964 if ((x->props.flags & XFRM_STATE_ESN)) in esp6_input()
979 struct xfrm_state *x; in esp6_err() local
985 x = xfrm_state_lookup(net, skb->mark, (const xfrm_address_t *)&iph->daddr, in esp6_err()
987 if (!x) in esp6_err()
995 xfrm_state_put(x); in esp6_err()
1000 static void esp6_destroy(struct xfrm_state *x) in esp6_destroy() argument
1002 struct crypto_aead *aead = x->data; in esp6_destroy()
1010 static int esp_init_aead(struct xfrm_state *x, struct netlink_ext_ack *extack) in esp_init_aead() argument
1017 x->geniv, x->aead->alg_name) >= CRYPTO_MAX_ALG_NAME) { in esp_init_aead()
1027 x->data = aead; in esp_init_aead()
1029 err = crypto_aead_setkey(aead, x->aead->alg_key, in esp_init_aead()
1030 (x->aead->alg_key_len + 7) / 8); in esp_init_aead()
1034 err = crypto_aead_setauthsize(aead, x->aead->alg_icv_len / 8); in esp_init_aead()
1045 static int esp_init_authenc(struct xfrm_state *x, in esp_init_authenc() argument
1059 if ((x->props.flags & XFRM_STATE_ESN)) { in esp_init_authenc()
1062 x->geniv ?: "", x->geniv ? "(" : "", in esp_init_authenc()
1063 x->aalg ? x->aalg->alg_name : "digest_null", in esp_init_authenc()
1064 x->ealg->alg_name, in esp_init_authenc()
1065 x->geniv ? ")" : "") >= CRYPTO_MAX_ALG_NAME) { in esp_init_authenc()
1072 x->geniv ?: "", x->geniv ? "(" : "", in esp_init_authenc()
1073 x->aalg ? x->aalg->alg_name : "digest_null", in esp_init_authenc()
1074 x->ealg->alg_name, in esp_init_authenc()
1075 x->geniv ? ")" : "") >= CRYPTO_MAX_ALG_NAME) { in esp_init_authenc()
1088 x->data = aead; in esp_init_authenc()
1090 keylen = (x->aalg ? (x->aalg->alg_key_len + 7) / 8 : 0) + in esp_init_authenc()
1091 (x->ealg->alg_key_len + 7) / 8 + RTA_SPACE(sizeof(*param)); in esp_init_authenc()
1104 if (x->aalg) { in esp_init_authenc()
1107 memcpy(p, x->aalg->alg_key, (x->aalg->alg_key_len + 7) / 8); in esp_init_authenc()
1108 p += (x->aalg->alg_key_len + 7) / 8; in esp_init_authenc()
1110 aalg_desc = xfrm_aalg_get_byname(x->aalg->alg_name, 0); in esp_init_authenc()
1121 aead, x->aalg->alg_trunc_len / 8); in esp_init_authenc()
1128 param->enckeylen = cpu_to_be32((x->ealg->alg_key_len + 7) / 8); in esp_init_authenc()
1129 memcpy(p, x->ealg->alg_key, (x->ealg->alg_key_len + 7) / 8); in esp_init_authenc()
1140 static int esp6_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack) in esp6_init_state() argument
1146 x->data = NULL; in esp6_init_state()
1148 if (x->aead) { in esp6_init_state()
1149 err = esp_init_aead(x, extack); in esp6_init_state()
1150 } else if (x->ealg) { in esp6_init_state()
1151 err = esp_init_authenc(x, extack); in esp6_init_state()
1160 aead = x->data; in esp6_init_state()
1162 x->props.header_len = sizeof(struct ip_esp_hdr) + in esp6_init_state()
1164 switch (x->props.mode) { in esp6_init_state()
1166 if (x->sel.family != AF_INET6) in esp6_init_state()
1167 x->props.header_len += IPV4_BEET_PHMAXLEN + in esp6_init_state()
1174 x->props.header_len += sizeof(struct ipv6hdr); in esp6_init_state()
1178 if (x->encap) { in esp6_init_state()
1179 struct xfrm_encap_tmpl *encap = x->encap; in esp6_init_state()
1187 x->props.header_len += sizeof(struct udphdr); in esp6_init_state()
1194 x->props.header_len += 2; in esp6_init_state()
1201 x->props.trailer_len = align + 1 + crypto_aead_authsize(aead); in esp6_init_state()