dco->dco_message_type = OVPN_CMD_DEL_PEER;
break;
+ case OVPN_NOTIF_ROTATE_KEY:
+ dco->dco_message_type = OVPN_CMD_SWAP_KEYS;
+ break;
+
default:
msg(M_WARN, "Unknown kernel notification %d", type);
break;
return;
}
- if (dco->dco_message_type != OVPN_CMD_DEL_PEER)
+ switch (dco->dco_message_type)
{
- msg(D_DCO_DEBUG, "%s: received message of type %u - ignoring", __func__,
- dco->dco_message_type);
- return;
- }
+ case OVPN_CMD_DEL_PEER:
+ if (dco->dco_del_peer_reason == OVPN_DEL_PEER_REASON_EXPIRED)
+ {
+ msg(D_DCO_DEBUG, "%s: received peer expired notification of for peer-id "
+ "%d", __func__, dco->dco_message_peer_id);
+ trigger_ping_timeout_signal(c);
+ return;
+ }
+ break;
- if (dco->dco_del_peer_reason == OVPN_DEL_PEER_REASON_EXPIRED)
- {
- msg(D_DCO_DEBUG, "%s: received peer expired notification of for peer-id "
- "%d", __func__, dco->dco_message_peer_id);
- trigger_ping_timeout_signal(c);
- return;
+ case OVPN_CMD_SWAP_KEYS:
+ msg(D_DCO_DEBUG, "%s: received key rotation notification for peer-id %d",
+ __func__, dco->dco_message_peer_id);
+ tls_session_soft_reset(c->c2.tls_multi);
+ break;
+
+ default:
+ msg(D_DCO_DEBUG, "%s: received message of type %u - ignoring", __func__,
+ dco->dco_message_type);
+ return;
}
+
#endif /* if defined(ENABLE_DCO) && (defined(TARGET_LINUX) || defined(TARGET_FREEBSD)) */
}
tls_session_generate_data_channel_keys(struct tls_multi *multi,
struct tls_session *session);
+void
+tls_session_soft_reset(struct tls_multi *multi);
+
/**
* Load ovpn.xkey provider used for external key signing
*/