Apply by doing:
        cd /usr/src
        patch -p0 < 005_isakmpd.patch

Then rebuild and install isakmpd:
        cd sbin/isakmpd
        make obj
	make depend
        make
        make install

Index: sbin/isakmpd/nat_traversal.c
===================================================================
RCS file: /cvs/openbsd/src/sbin/isakmpd/nat_traversal.c,v
retrieving revision 1.7
diff -u -p -r1.7 nat_traversal.c
--- sbin/isakmpd/nat_traversal.c	8 Aug 2004 19:11:06 -0000	1.7
+++ sbin/isakmpd/nat_traversal.c	18 Nov 2004 18:25:35 -0000
@@ -58,7 +58,6 @@
  * products today.
  */
 static const char *isakmp_nat_t_cap_text[] = {
-	"draft-ietf-ipsec-nat-t-ike-00",	/* V1 (XXX: may be obsolete) */
 	"draft-ietf-ipsec-nat-t-ike-02\n",	/* V2 */
 	"draft-ietf-ipsec-nat-t-ike-03",	/* V3 */
 #ifdef notyet
@@ -233,10 +232,8 @@ nat_t_generate_nat_d_hash(struct message
 {
 	struct ipsec_exch *ie = (struct ipsec_exch *)msg->exchange->data;
 	struct hash	 *hash;
-	struct prf	 *prf;
 	u_int8_t	 *res;
 	in_port_t	  port;
-	int		  prf_type = PRF_HMAC; /* XXX */
 
 	hash = hash_get(ie->hash->type);
 	if (hash == NULL) {
@@ -244,19 +241,12 @@ nat_t_generate_nat_d_hash(struct message
 		return NULL;
 	}
 
-	prf = prf_alloc(prf_type, hash->type, msg->exchange->cookies,
-	    ISAKMP_HDR_COOKIES_LEN);
-	if(!prf) {
-		log_print("nat_t_generate_nat_d_hash: prf_alloc failed");
-		return NULL;
-	}
+	*hashlen = hash->hashsize;
 
-	*hashlen = prf->blocksize;
 	res = (u_int8_t *)malloc((unsigned long)*hashlen);
 	if (!res) {
 		log_print("nat_t_generate_nat_d_hash: malloc (%lu) failed",
 		    (unsigned long)*hashlen);
-		prf_free(prf);
 		*hashlen = 0;
 		return NULL;
 	}
@@ -264,10 +254,12 @@ nat_t_generate_nat_d_hash(struct message
 	port = sockaddr_port(sa);
 	memset(res, 0, *hashlen);
 
-	prf->Update(prf->prfctx, sockaddr_addrdata(sa), sockaddr_addrlen(sa));
-	prf->Update(prf->prfctx, (unsigned char *)&port, sizeof port);
-	prf->Final(res, prf->prfctx);
-	prf_free (prf);
+	hash->Init(hash->ctx);
+	hash->Update(hash->ctx, msg->exchange->cookies,
+	    sizeof msg->exchange->cookies);
+	hash->Update(hash->ctx, sockaddr_addrdata(sa), sockaddr_addrlen(sa));
+	hash->Update(hash->ctx, (unsigned char *)&port, sizeof port);
+	hash->Final(res, hash->ctx);
 
 	return res;
 }
@@ -312,11 +304,12 @@ nat_t_exchange_add_nat_d(struct message 
 {
 	struct sockaddr *sa;
 
-	msg->transport->vtbl->get_src(msg->transport, &sa);
+	/* Remote address first. */
+	msg->transport->vtbl->get_dst(msg->transport, &sa);
 	if (nat_t_add_nat_d(msg, sa))
 		return -1;
 
-	msg->transport->vtbl->get_dst(msg->transport, &sa);
+	msg->transport->vtbl->get_src(msg->transport, &sa);
 	if (nat_t_add_nat_d(msg, sa))
 		return -1;
