Lines Matching refs:tx_sa
141 struct macsec_tx_sa *tx_sa;
468 struct macsec_tx_sa *tx_sa)
471 tx_sa->active = false;
476 void macsec_pn_wrapped(struct macsec_secy *secy, struct macsec_tx_sa *tx_sa)
478 spin_lock_bh(&tx_sa->lock);
479 __macsec_pn_wrapped(secy, tx_sa);
480 spin_unlock_bh(&tx_sa->lock);
484 static pn_t tx_sa_update_pn(struct macsec_tx_sa *tx_sa,
489 spin_lock_bh(&tx_sa->lock);
491 pn = tx_sa->next_pn_halves;
493 tx_sa->next_pn++;
495 tx_sa->next_pn_halves.lower++;
497 if (tx_sa->next_pn == 0)
498 __macsec_pn_wrapped(secy, tx_sa);
499 spin_unlock_bh(&tx_sa->lock);
523 struct macsec_tx_sa *tx_sa)
532 this_cpu_inc(tx_sa->stats->OutPktsEncrypted);
536 this_cpu_inc(tx_sa->stats->OutPktsProtected);
558 struct macsec_tx_sa *sa = macsec_skb_cb(skb)->tx_sa;
564 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa);
619 struct macsec_tx_sa *tx_sa;
628 tx_sa = macsec_txsa_get(tx_sc->sa[tx_sc->encoding_sa]);
629 if (!tx_sa) {
645 macsec_txsa_put(tx_sa);
652 macsec_txsa_put(tx_sa);
663 pn = tx_sa_update_pn(tx_sa, secy);
665 macsec_txsa_put(tx_sa);
681 macsec_txsa_put(tx_sa);
688 macsec_txsa_put(tx_sa);
693 req = macsec_alloc_req(tx_sa->key.tfm, &iv, &sg, ret);
695 macsec_txsa_put(tx_sa);
701 macsec_fill_iv_xpn(iv, tx_sa->ssci, pn.full64, tx_sa->key.salt);
709 macsec_txsa_put(tx_sa);
725 macsec_skb_cb(skb)->tx_sa = tx_sa;
737 macsec_txsa_put(tx_sa);
743 macsec_txsa_put(tx_sa);
1469 static int init_tx_sa(struct macsec_tx_sa *tx_sa, char *sak, int key_len,
1472 tx_sa->stats = alloc_percpu(struct macsec_tx_sa_stats);
1473 if (!tx_sa->stats)
1476 tx_sa->key.tfm = macsec_alloc_tfm(sak, key_len, icv_len);
1477 if (IS_ERR(tx_sa->key.tfm)) {
1478 free_percpu(tx_sa->stats);
1479 return PTR_ERR(tx_sa->key.tfm);
1482 tx_sa->ssci = MACSEC_UNDEF_SSCI;
1483 tx_sa->active = false;
1484 refcount_set(&tx_sa->refcnt, 1);
1485 spin_lock_init(&tx_sa->lock);
1490 static void clear_tx_sa(struct macsec_tx_sa *tx_sa)
1492 tx_sa->active = false;
1494 macsec_txsa_put(tx_sa);
1552 struct macsec_tx_sa *tx_sa;
1569 tx_sa = rtnl_dereference(tx_sc->sa[*assoc_num]);
1570 if (!tx_sa)
1576 return tx_sa;
2001 struct macsec_tx_sa *tx_sa;
2059 tx_sa = rtnl_dereference(tx_sc->sa[assoc_num]);
2060 if (tx_sa) {
2065 tx_sa = kmalloc(sizeof(*tx_sa), GFP_KERNEL);
2066 if (!tx_sa) {
2071 err = init_tx_sa(tx_sa, nla_data(tb_sa[MACSEC_SA_ATTR_KEY]),
2074 kfree(tx_sa);
2079 spin_lock_bh(&tx_sa->lock);
2080 tx_sa->next_pn = nla_get_u64(tb_sa[MACSEC_SA_ATTR_PN]);
2081 spin_unlock_bh(&tx_sa->lock);
2084 tx_sa->active = !!nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]);
2087 if (assoc_num == tx_sc->encoding_sa && tx_sa->active)
2102 ctx.sa.tx_sa = tx_sa;
2114 tx_sa->ssci = nla_get_ssci(tb_sa[MACSEC_SA_ATTR_SSCI]);
2115 nla_memcpy(tx_sa->key.salt.bytes, tb_sa[MACSEC_SA_ATTR_SALT],
2119 nla_memcpy(tx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEYID], MACSEC_KEYID_LEN);
2120 rcu_assign_pointer(tx_sc->sa[assoc_num], tx_sa);
2128 macsec_txsa_put(tx_sa);
2268 struct macsec_tx_sa *tx_sa;
2280 tx_sa = get_txsa_from_nl(genl_info_net(info), attrs, tb_sa,
2282 if (IS_ERR(tx_sa)) {
2284 return PTR_ERR(tx_sa);
2287 if (tx_sa->active) {
2304 ctx.sa.tx_sa = tx_sa;
2313 clear_tx_sa(tx_sa);
2353 struct macsec_tx_sa *tx_sa;
2372 tx_sa = get_txsa_from_nl(genl_info_net(info), attrs, tb_sa,
2374 if (IS_ERR(tx_sa)) {
2376 return PTR_ERR(tx_sa);
2390 spin_lock_bh(&tx_sa->lock);
2391 prev_pn = tx_sa->next_pn_halves;
2392 tx_sa->next_pn = nla_get_u64(tb_sa[MACSEC_SA_ATTR_PN]);
2393 spin_unlock_bh(&tx_sa->lock);
2396 was_active = tx_sa->active;
2398 tx_sa->active = nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]);
2402 secy->operational = tx_sa->active;
2416 ctx.sa.tx_sa = tx_sa;
2431 spin_lock_bh(&tx_sa->lock);
2432 tx_sa->next_pn_halves = prev_pn;
2433 spin_unlock_bh(&tx_sa->lock);
2435 tx_sa->active = was_active;
2710 struct macsec_tx_sa *tx_sa,
2724 ctx.sa.tx_sa = tx_sa;
2734 per_cpu_ptr(tx_sa->stats, cpu);
3130 struct macsec_tx_sa *tx_sa = rtnl_dereference(tx_sc->sa[i]);
3135 if (!tx_sa)
3151 get_tx_sa_stats(dev, i, tx_sa, &tx_sa_stats);
3161 pn = tx_sa->next_pn;
3164 pn = tx_sa->next_pn_halves.lower;
3170 nla_put(skb, MACSEC_SA_ATTR_KEYID, MACSEC_KEYID_LEN, tx_sa->key.id) ||
3171 (secy->xpn && nla_put_ssci(skb, MACSEC_SA_ATTR_SSCI, tx_sa->ssci)) ||
3172 nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, tx_sa->active)) {
3458 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa);
3768 struct macsec_tx_sa *tx_sa;
3771 tx_sa = rtnl_dereference(tx_sc->sa[tx_sc->encoding_sa]);
3773 secy->operational = tx_sa && tx_sa->active;