Commit 5c937de7 authored by Antoine Tenart's avatar Antoine Tenart Committed by David S. Miller

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: default avatarAntoine Tenart <antoine.tenart@bootlin.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 28c5107a
...@@ -424,6 +424,23 @@ static struct macsec_eth_header *macsec_ethhdr(struct sk_buff *skb) ...@@ -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) ...@@ -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 { ...@@ -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_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment