Lines Matching full:rx_sa
140 struct macsec_rx_sa *rx_sa; member
741 struct macsec_rx_sa *rx_sa = macsec_skb_cb(skb)->rx_sa; in macsec_post_decrypt() local
742 struct pcpu_rx_sc_stats *rxsc_stats = this_cpu_ptr(rx_sa->sc->stats); in macsec_post_decrypt()
746 spin_lock(&rx_sa->lock); in macsec_post_decrypt()
747 if (rx_sa->next_pn_halves.lower >= secy->replay_window) in macsec_post_decrypt()
748 lowest_pn = rx_sa->next_pn_halves.lower - secy->replay_window; in macsec_post_decrypt()
755 spin_unlock(&rx_sa->lock); in macsec_post_decrypt()
774 spin_unlock(&rx_sa->lock); in macsec_post_decrypt()
782 this_cpu_inc(rx_sa->stats->InPktsNotValid); in macsec_post_decrypt()
790 this_cpu_inc(rx_sa->stats->InPktsInvalid); in macsec_post_decrypt()
803 this_cpu_inc(rx_sa->stats->InPktsOK); in macsec_post_decrypt()
808 if (pn + 1 > rx_sa->next_pn_halves.lower) { in macsec_post_decrypt()
809 rx_sa->next_pn_halves.lower = pn + 1; in macsec_post_decrypt()
812 !pn_same_half(pn, rx_sa->next_pn_halves.lower))) { in macsec_post_decrypt()
813 rx_sa->next_pn_halves.upper++; in macsec_post_decrypt()
814 rx_sa->next_pn_halves.lower = pn + 1; in macsec_post_decrypt()
817 spin_unlock(&rx_sa->lock); in macsec_post_decrypt()
852 struct macsec_rx_sa *rx_sa = macsec_skb_cb(skb)->rx_sa; in macsec_decrypt_done() local
853 struct macsec_rx_sc *rx_sc = rx_sa->sc; in macsec_decrypt_done()
881 macsec_rxsa_put(rx_sa); in macsec_decrypt_done()
888 struct macsec_rx_sa *rx_sa, in macsec_decrypt() argument
911 req = macsec_alloc_req(rx_sa->key.tfm, &iv, &sg, ret); in macsec_decrypt()
921 pn_t recovered_pn = rx_sa->next_pn_halves; in macsec_decrypt()
924 if (hdr_pn < rx_sa->next_pn_halves.lower && in macsec_decrypt()
925 !pn_same_half(hdr_pn, rx_sa->next_pn_halves.lower)) in macsec_decrypt()
928 macsec_fill_iv_xpn(iv, rx_sa->ssci, recovered_pn.full64, in macsec_decrypt()
929 rx_sa->key.salt); in macsec_decrypt()
1137 struct macsec_rx_sa *rx_sa; in macsec_handle_frame() local
1224 rx_sa = macsec_rxsa_get(rx_sc->sa[macsec_skb_cb(skb)->assoc_num]); in macsec_handle_frame()
1225 if (!rx_sa) { in macsec_handle_frame()
1254 spin_lock(&rx_sa->lock); in macsec_handle_frame()
1255 late = rx_sa->next_pn_halves.lower >= secy->replay_window && in macsec_handle_frame()
1256 hdr_pn < (rx_sa->next_pn_halves.lower - secy->replay_window); in macsec_handle_frame()
1259 late = late && pn_same_half(rx_sa->next_pn_halves.lower, hdr_pn); in macsec_handle_frame()
1260 spin_unlock(&rx_sa->lock); in macsec_handle_frame()
1271 macsec_skb_cb(skb)->rx_sa = rx_sa; in macsec_handle_frame()
1276 skb = macsec_decrypt(skb, dev, rx_sa, sci, secy); in macsec_handle_frame()
1281 macsec_rxsa_put(rx_sa); in macsec_handle_frame()
1298 if (rx_sa) in macsec_handle_frame()
1299 macsec_rxsa_put(rx_sa); in macsec_handle_frame()
1315 macsec_rxsa_put(rx_sa); in macsec_handle_frame()
1397 static int init_rx_sa(struct macsec_rx_sa *rx_sa, char *sak, int key_len, in init_rx_sa() argument
1400 rx_sa->stats = alloc_percpu(struct macsec_rx_sa_stats); in init_rx_sa()
1401 if (!rx_sa->stats) in init_rx_sa()
1404 rx_sa->key.tfm = macsec_alloc_tfm(sak, key_len, icv_len); in init_rx_sa()
1405 if (IS_ERR(rx_sa->key.tfm)) { in init_rx_sa()
1406 free_percpu(rx_sa->stats); in init_rx_sa()
1407 return PTR_ERR(rx_sa->key.tfm); in init_rx_sa()
1410 rx_sa->ssci = MACSEC_UNDEF_SSCI; in init_rx_sa()
1411 rx_sa->active = false; in init_rx_sa()
1412 rx_sa->next_pn = 1; in init_rx_sa()
1413 refcount_set(&rx_sa->refcnt, 1); in init_rx_sa()
1414 spin_lock_init(&rx_sa->lock); in init_rx_sa()
1415 INIT_RCU_WORK(&rx_sa->destroy_work, free_rxsa_work); in init_rx_sa()
1420 static void clear_rx_sa(struct macsec_rx_sa *rx_sa) in clear_rx_sa() argument
1422 rx_sa->active = false; in clear_rx_sa()
1424 macsec_rxsa_put(rx_sa); in clear_rx_sa()
1647 struct macsec_rx_sa *rx_sa; in get_rxsa_from_nl() local
1658 rx_sa = rtnl_dereference(rx_sc->sa[*assoc_num]); in get_rxsa_from_nl()
1659 if (!rx_sa) in get_rxsa_from_nl()
1663 return rx_sa; in get_rxsa_from_nl()
1750 struct macsec_rx_sa *rx_sa; in macsec_add_rxsa() local
1801 rx_sa = rtnl_dereference(rx_sc->sa[assoc_num]); in macsec_add_rxsa()
1802 if (rx_sa) { in macsec_add_rxsa()
1807 rx_sa = kmalloc_obj(*rx_sa); in macsec_add_rxsa()
1808 if (!rx_sa) { in macsec_add_rxsa()
1813 err = init_rx_sa(rx_sa, nla_data(tb_sa[MACSEC_SA_ATTR_KEY]), in macsec_add_rxsa()
1816 kfree(rx_sa); in macsec_add_rxsa()
1822 spin_lock_bh(&rx_sa->lock); in macsec_add_rxsa()
1823 rx_sa->next_pn = nla_get_uint(tb_sa[MACSEC_SA_ATTR_PN]); in macsec_add_rxsa()
1824 spin_unlock_bh(&rx_sa->lock); in macsec_add_rxsa()
1828 rx_sa->active = !!nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]); in macsec_add_rxsa()
1830 rx_sa->sc = rx_sc; in macsec_add_rxsa()
1833 rx_sa->ssci = nla_get_ssci(tb_sa[MACSEC_SA_ATTR_SSCI]); in macsec_add_rxsa()
1834 nla_memcpy(rx_sa->key.salt.bytes, tb_sa[MACSEC_SA_ATTR_SALT], in macsec_add_rxsa()
1850 ctx.sa.rx_sa = rx_sa; in macsec_add_rxsa()
1861 nla_memcpy(rx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEYID], MACSEC_KEYID_LEN); in macsec_add_rxsa()
1862 rcu_assign_pointer(rx_sc->sa[assoc_num], rx_sa); in macsec_add_rxsa()
1869 macsec_rxsa_put(rx_sa); in macsec_add_rxsa()
2089 struct macsec_rx_sa *rx_sa; in macsec_del_rxsa() local
2105 rx_sa = get_rxsa_from_nl(genl_info_net(info), attrs, tb_rxsc, tb_sa, in macsec_del_rxsa()
2107 if (IS_ERR(rx_sa)) { in macsec_del_rxsa()
2109 return PTR_ERR(rx_sa); in macsec_del_rxsa()
2112 if (rx_sa->active) { in macsec_del_rxsa()
2129 ctx.sa.rx_sa = rx_sa; in macsec_del_rxsa()
2138 clear_rx_sa(rx_sa); in macsec_del_rxsa()
2386 struct macsec_rx_sa *rx_sa; in macsec_upd_rxsa() local
2409 rx_sa = get_rxsa_from_nl(genl_info_net(info), attrs, tb_rxsc, tb_sa, in macsec_upd_rxsa()
2411 if (IS_ERR(rx_sa)) { in macsec_upd_rxsa()
2413 return PTR_ERR(rx_sa); in macsec_upd_rxsa()
2427 spin_lock_bh(&rx_sa->lock); in macsec_upd_rxsa()
2428 prev_pn = rx_sa->next_pn_halves; in macsec_upd_rxsa()
2429 rx_sa->next_pn = nla_get_uint(tb_sa[MACSEC_SA_ATTR_PN]); in macsec_upd_rxsa()
2430 spin_unlock_bh(&rx_sa->lock); in macsec_upd_rxsa()
2433 was_active = rx_sa->active; in macsec_upd_rxsa()
2435 rx_sa->active = nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]); in macsec_upd_rxsa()
2449 ctx.sa.rx_sa = rx_sa; in macsec_upd_rxsa()
2463 spin_lock_bh(&rx_sa->lock); in macsec_upd_rxsa()
2464 rx_sa->next_pn_halves = prev_pn; in macsec_upd_rxsa()
2465 spin_unlock_bh(&rx_sa->lock); in macsec_upd_rxsa()
2467 rx_sa->active = was_active; in macsec_upd_rxsa()
2763 struct macsec_rx_sa *rx_sa, in get_rx_sa_stats() argument
2777 ctx.sa.rx_sa = rx_sa; in get_rx_sa_stats()
2788 per_cpu_ptr(rx_sa->stats, cpu); in get_rx_sa_stats()
3239 struct macsec_rx_sa *rx_sa = rtnl_dereference(rx_sc->sa[i]); in dump_secy() local
3244 if (!rx_sa) in dump_secy()
3264 get_rx_sa_stats(dev, rx_sc, i, rx_sa, &rx_sa_stats); in dump_secy()
3275 pn = rx_sa->next_pn; in dump_secy()
3278 pn = rx_sa->next_pn_halves.lower; in dump_secy()
3284 nla_put(skb, MACSEC_SA_ATTR_KEYID, MACSEC_KEYID_LEN, rx_sa->key.id) || in dump_secy()
3285 (secy->xpn && nla_put_ssci(skb, MACSEC_SA_ATTR_SSCI, rx_sa->ssci)) || in dump_secy()
3286 nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, rx_sa->active)) { in dump_secy()