Excellent, thank you. (by "level 3" or "phase3", I just meant the third of variable number of IKE_AUTH exchanges)<div>~Mark<br><br>On Tuesday, June 24, 2014, Martin Willi <<a href="mailto:martin@strongswan.org">martin@strongswan.org</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Mark,<br>
<br>
> I do find that checking that get_message_id(message) == 3 in build_i()<br>
> is "just before" my initiator sends an IKE_AUTH level 3 message, which<br>
> is what I want.<br>
<br>
What's a "level 3" IKE_AUTH message?<br>
<br>
> But is there any other (better) way of determining where I am in the<br>
> IKE_AUTH message exchange?<br>
<br>
There are many things to consider; IKE_AUTH may use an arbitrary number<br>
of exchanges, for example in EAP, but also with RFC 4739 Multiple<br>
Authentication.<br>
<br>
> I don't think message_id 3 equates to IKE_AUTH phase 3.<br>
<br>
What's IKE_AUTH "phase 3"? Message IDs are incremental in IKEv2, which<br>
means the first IKE_AUTH exchange uses message ID 1. But you can't<br>
determine what's the message ID of the last IKE_AUTH exchange, as the<br>
number of exchanges is variable.<br>
<br>
> Basically, I'm trying to trigger on when it seems all hurdles have<br>
> been cleared in the IKE_AUTH exchange and we're "just about" to conclude<br>
> success (specifically, my initiator has received an EAP-challenge has<br>
> offered a result and the responder has accepted that (so I'm over all of<br>
> those hurdles), ... I then want to trigger something, before getting back<br>
> the TSs etc.<br>
<br>
There is a bunch of hooks in [1] that allows a listener to catch some of<br>
these events. If you just want to catch about-to-complete IKE_SAs, use<br>
the authorize() hook and act if the "final" flag is set. If you have to<br>
mangle traffic selectors, use the narrow() hook.<br>
<br>
If none of these hooks works, you may use the message() hook and check<br>
for specific state. As responder, when sending the last IKE_AUTH<br>
response the IKE_SA state is ESTABLISHED; on the initiator you may check<br>
for the presence of specific payloads in the message.<br>
<br>
Regards<br>
Martin<br>
<br>
[1]<a href="http://git.strongswan.org/?p=strongswan.git;a=blob;f=src/libcharon/bus/listeners/listener.h" target="_blank">http://git.strongswan.org/?p=strongswan.git;a=blob;f=src/libcharon/bus/listeners/listener.h</a><br>

<br>
</blockquote></div>