net: macsec: PN wrap callback
Allow to call macsec_pn_wrapped from hardware drivers to notify when a PN rolls over. Some drivers might used an interrupt to implement this. Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
28c5107aa9
commit
5c937de78b
|
@ -424,6 +424,23 @@ static struct macsec_eth_header *macsec_ethhdr(struct sk_buff *skb)
|
||||||
return (struct macsec_eth_header *)skb_mac_header(skb);
|
return (struct macsec_eth_header *)skb_mac_header(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __macsec_pn_wrapped(struct macsec_secy *secy,
|
||||||
|
struct macsec_tx_sa *tx_sa)
|
||||||
|
{
|
||||||
|
pr_debug("PN wrapped, transitioning to !oper\n");
|
||||||
|
tx_sa->active = false;
|
||||||
|
if (secy->protect_frames)
|
||||||
|
secy->operational = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void macsec_pn_wrapped(struct macsec_secy *secy, struct macsec_tx_sa *tx_sa)
|
||||||
|
{
|
||||||
|
spin_lock_bh(&tx_sa->lock);
|
||||||
|
__macsec_pn_wrapped(secy, tx_sa);
|
||||||
|
spin_unlock_bh(&tx_sa->lock);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(macsec_pn_wrapped);
|
||||||
|
|
||||||
static u32 tx_sa_update_pn(struct macsec_tx_sa *tx_sa, struct macsec_secy *secy)
|
static u32 tx_sa_update_pn(struct macsec_tx_sa *tx_sa, struct macsec_secy *secy)
|
||||||
{
|
{
|
||||||
u32 pn;
|
u32 pn;
|
||||||
|
@ -432,12 +449,8 @@ static u32 tx_sa_update_pn(struct macsec_tx_sa *tx_sa, struct macsec_secy *secy)
|
||||||
pn = tx_sa->next_pn;
|
pn = tx_sa->next_pn;
|
||||||
|
|
||||||
tx_sa->next_pn++;
|
tx_sa->next_pn++;
|
||||||
if (tx_sa->next_pn == 0) {
|
if (tx_sa->next_pn == 0)
|
||||||
pr_debug("PN wrapped, transitioning to !oper\n");
|
__macsec_pn_wrapped(secy, tx_sa);
|
||||||
tx_sa->active = false;
|
|
||||||
if (secy->protect_frames)
|
|
||||||
secy->operational = false;
|
|
||||||
}
|
|
||||||
spin_unlock_bh(&tx_sa->lock);
|
spin_unlock_bh(&tx_sa->lock);
|
||||||
|
|
||||||
return pn;
|
return pn;
|
||||||
|
|
|
@ -219,4 +219,6 @@ struct macsec_ops {
|
||||||
int (*mdo_del_txsa)(struct macsec_context *ctx);
|
int (*mdo_del_txsa)(struct macsec_context *ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void macsec_pn_wrapped(struct macsec_secy *secy, struct macsec_tx_sa *tx_sa);
|
||||||
|
|
||||||
#endif /* _NET_MACSEC_H_ */
|
#endif /* _NET_MACSEC_H_ */
|
||||||
|
|
Loading…
Reference in New Issue