Lines Matching refs:rx_sa
142 struct macsec_rx_sa *rx_sa;
750 struct macsec_rx_sa *rx_sa = macsec_skb_cb(skb)->rx_sa;
751 struct pcpu_rx_sc_stats *rxsc_stats = this_cpu_ptr(rx_sa->sc->stats);
755 spin_lock(&rx_sa->lock);
756 if (rx_sa->next_pn_halves.lower >= secy->replay_window)
757 lowest_pn = rx_sa->next_pn_halves.lower - secy->replay_window;
764 spin_unlock(&rx_sa->lock);
783 spin_unlock(&rx_sa->lock);
791 this_cpu_inc(rx_sa->stats->InPktsNotValid);
799 this_cpu_inc(rx_sa->stats->InPktsInvalid);
812 this_cpu_inc(rx_sa->stats->InPktsOK);
817 if (pn + 1 > rx_sa->next_pn_halves.lower) {
818 rx_sa->next_pn_halves.lower = pn + 1;
820 !pn_same_half(pn, rx_sa->next_pn_halves.lower)) {
821 rx_sa->next_pn_halves.upper++;
822 rx_sa->next_pn_halves.lower = pn + 1;
825 spin_unlock(&rx_sa->lock);
865 struct macsec_rx_sa *rx_sa = macsec_skb_cb(skb)->rx_sa;
866 struct macsec_rx_sc *rx_sc = rx_sa->sc;
894 macsec_rxsa_put(rx_sa);
901 struct macsec_rx_sa *rx_sa,
924 req = macsec_alloc_req(rx_sa->key.tfm, &iv, &sg, ret);
934 pn_t recovered_pn = rx_sa->next_pn_halves;
937 if (hdr_pn < rx_sa->next_pn_halves.lower &&
938 !pn_same_half(hdr_pn, rx_sa->next_pn_halves.lower))
941 macsec_fill_iv_xpn(iv, rx_sa->ssci, recovered_pn.full64,
942 rx_sa->key.salt);
1108 struct macsec_rx_sa *rx_sa;
1192 rx_sa = macsec_rxsa_get(rx_sc->sa[macsec_skb_cb(skb)->assoc_num]);
1193 if (!rx_sa) {
1227 spin_lock(&rx_sa->lock);
1228 late = rx_sa->next_pn_halves.lower >= secy->replay_window &&
1229 hdr_pn < (rx_sa->next_pn_halves.lower - secy->replay_window);
1232 late = late && pn_same_half(rx_sa->next_pn_halves.lower, hdr_pn);
1233 spin_unlock(&rx_sa->lock);
1244 macsec_skb_cb(skb)->rx_sa = rx_sa;
1249 skb = macsec_decrypt(skb, dev, rx_sa, sci, secy);
1254 macsec_rxsa_put(rx_sa);
1271 if (rx_sa)
1272 macsec_rxsa_put(rx_sa);
1288 macsec_rxsa_put(rx_sa);
1369 static int init_rx_sa(struct macsec_rx_sa *rx_sa, char *sak, int key_len,
1372 rx_sa->stats = alloc_percpu(struct macsec_rx_sa_stats);
1373 if (!rx_sa->stats)
1376 rx_sa->key.tfm = macsec_alloc_tfm(sak, key_len, icv_len);
1377 if (IS_ERR(rx_sa->key.tfm)) {
1378 free_percpu(rx_sa->stats);
1379 return PTR_ERR(rx_sa->key.tfm);
1382 rx_sa->ssci = MACSEC_UNDEF_SSCI;
1383 rx_sa->active = false;
1384 rx_sa->next_pn = 1;
1385 refcount_set(&rx_sa->refcnt, 1);
1386 spin_lock_init(&rx_sa->lock);
1391 static void clear_rx_sa(struct macsec_rx_sa *rx_sa)
1393 rx_sa->active = false;
1395 macsec_rxsa_put(rx_sa);
1620 struct macsec_rx_sa *rx_sa;
1633 rx_sa = rtnl_dereference(rx_sc->sa[*assoc_num]);
1634 if (!rx_sa)
1638 return rx_sa;
1757 struct macsec_rx_sa *rx_sa;
1816 rx_sa = rtnl_dereference(rx_sc->sa[assoc_num]);
1817 if (rx_sa) {
1822 rx_sa = kmalloc(sizeof(*rx_sa), GFP_KERNEL);
1823 if (!rx_sa) {
1828 err = init_rx_sa(rx_sa, nla_data(tb_sa[MACSEC_SA_ATTR_KEY]),
1831 kfree(rx_sa);
1837 spin_lock_bh(&rx_sa->lock);
1838 rx_sa->next_pn = nla_get_u64(tb_sa[MACSEC_SA_ATTR_PN]);
1839 spin_unlock_bh(&rx_sa->lock);
1843 rx_sa->active = !!nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]);
1845 rx_sa->sc = rx_sc;
1859 ctx.sa.rx_sa = rx_sa;
1871 rx_sa->ssci = nla_get_ssci(tb_sa[MACSEC_SA_ATTR_SSCI]);
1872 nla_memcpy(rx_sa->key.salt.bytes, tb_sa[MACSEC_SA_ATTR_SALT],
1876 nla_memcpy(rx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEYID], MACSEC_KEYID_LEN);
1877 rcu_assign_pointer(rx_sc->sa[assoc_num], rx_sa);
1884 macsec_rxsa_put(rx_sa);
2139 struct macsec_rx_sa *rx_sa;
2155 rx_sa = get_rxsa_from_nl(genl_info_net(info), attrs, tb_rxsc, tb_sa,
2157 if (IS_ERR(rx_sa)) {
2159 return PTR_ERR(rx_sa);
2162 if (rx_sa->active) {
2179 ctx.sa.rx_sa = rx_sa;
2188 clear_rx_sa(rx_sa);
2447 struct macsec_rx_sa *rx_sa;
2470 rx_sa = get_rxsa_from_nl(genl_info_net(info), attrs, tb_rxsc, tb_sa,
2472 if (IS_ERR(rx_sa)) {
2474 return PTR_ERR(rx_sa);
2488 spin_lock_bh(&rx_sa->lock);
2489 prev_pn = rx_sa->next_pn_halves;
2490 rx_sa->next_pn = nla_get_u64(tb_sa[MACSEC_SA_ATTR_PN]);
2491 spin_unlock_bh(&rx_sa->lock);
2494 was_active = rx_sa->active;
2496 rx_sa->active = nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]);
2510 ctx.sa.rx_sa = rx_sa;
2524 spin_lock_bh(&rx_sa->lock);
2525 rx_sa->next_pn_halves = prev_pn;
2526 spin_unlock_bh(&rx_sa->lock);
2528 rx_sa->active = was_active;
2754 struct macsec_rx_sa *rx_sa,
2768 ctx.sa.rx_sa = rx_sa;
2779 per_cpu_ptr(rx_sa->stats, cpu);
3230 struct macsec_rx_sa *rx_sa = rtnl_dereference(rx_sc->sa[i]);
3235 if (!rx_sa)
3255 get_rx_sa_stats(dev, rx_sc, i, rx_sa, &rx_sa_stats);
3266 pn = rx_sa->next_pn;
3269 pn = rx_sa->next_pn_halves.lower;
3275 nla_put(skb, MACSEC_SA_ATTR_KEYID, MACSEC_KEYID_LEN, rx_sa->key.id) ||
3276 (secy->xpn && nla_put_ssci(skb, MACSEC_SA_ATTR_SSCI, rx_sa->ssci)) ||
3277 nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, rx_sa->active)) {