isakmp.h revision c91307af2622f6625525f3c1f9c954376df950ad
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* $NetBSD: isakmp.h,v 1.4 2006/09/09 16:22:09 manu Exp $ */ 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Id: isakmp.h,v 1.11 2005/04/25 22:19:39 manubsd Exp */ 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/* 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * All rights reserved. 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * modification, are permitted provided that the following conditions 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * are met: 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * documentation and/or other materials provided with the distribution. 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 3. Neither the name of the project nor the names of its contributors 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * may be used to endorse or promote products derived from this software 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * without specific prior written permission. 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * SUCH DAMAGE. 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef _ISAKMP_H 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define _ISAKMP_H 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* refer to RFC 2408 */ 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* must include <netinet/in.h> first. */ 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* must include "isakmp_var.h" first. */ 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define INITIATOR 0 /* synonym sender */ 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define RESPONDER 1 /* synonym receiver */ 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define GENERATE 1 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define VALIDATE 0 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 3.1 ISAKMP Header Format 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ! Initiator ! 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ! Cookie ! 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ! Responder ! 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ! Cookie ! 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ! Next Payload ! MjVer ! MnVer ! Exchange Type ! Flags ! 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ! Message ID ! 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ! Length ! 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/ 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cookie_t i_ck; /* Initiator Cookie */ 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cookie_t r_ck; /* Responder Cookie */ 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t np; /* Next Payload Type */ 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t v; 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int8_t etype; /* Exchange Type */ 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int8_t flags; /* Flags */ 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int32_t msgid; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int32_t len; /* Length */ 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} __attribute__((__packed__)); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Next Payload Type */ 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_NONE 0 /* NONE*/ 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_SA 1 /* Security Association */ 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_P 2 /* Proposal */ 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_T 3 /* Transform */ 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_KE 4 /* Key Exchange */ 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_ID 5 /* Identification */ 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_CERT 6 /* Certificate */ 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_CR 7 /* Certificate Request */ 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_HASH 8 /* Hash */ 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_SIG 9 /* Signature */ 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_NONCE 10 /* Nonce */ 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_N 11 /* Notification */ 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_D 12 /* Delete */ 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_VID 13 /* Vendor ID */ 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NPTYPE_ATTR 14 /* Attribute */ 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/* NAT-T draft-ietf-ipsec-nat-t-ike-05 and later */ 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/* XXX conflicts with values assigned to RFC 3547 */ 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_NPTYPE_NATD_BADDRAFT 15 /* NAT Discovery */ 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_NPTYPE_NATOA_BADDRAFT 16 /* NAT Original Address */ 9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* NAT-T RFC */ 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NPTYPE_NATD_RFC 20 /* NAT Discovery */ 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NPTYPE_NATOA_RFC 21 /* NAT Original Address */ 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* NAT-T up to draft-ietf-ipsec-nat-t-ike-04 */ 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NPTYPE_NATD_DRAFT 130 /* NAT Discovery */ 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NPTYPE_NATOA_DRAFT 131 /* NAT Original Address */ 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Frag does not seems to be documented */ 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NPTYPE_FRAG 132 /* IKE fragmentation payload */ 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NPTYPE_MAX 17 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* 128 - 255 Private Use */ 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * The following are valid when the Vendor ID is one of the 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * following: 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * MD5("A GSS-API Authentication Method for IKE") 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * MD5("GSSAPI") (recognized by Windows 2000) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * MD5("MS NT5 ISAKMPOAKLEY") (sent by Windows 2000) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See draft-ietf-ipsec-isakmp-gss-auth-06.txt. 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NPTYPE_GSS 129 /* GSS token */ 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_MAJOR_VERSION 1 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_MINOR_VERSION 0 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_VERSION_NUMBER 0x10 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_GETMAJORV(v) (((v) & 0xf0) >> 4) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_SETMAJORV(v, m) ((v) = ((v) & 0x0f) | (((m) << 4) & 0xf0)) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_GETMINORV(v) ((v) & 0x0f) 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_SETMINORV(v, m) ((v) = ((v) & 0xf0) | ((m) & 0x0f)) 13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/* Exchange Type */ 13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_NONE 0 /* NONE */ 13590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_BASE 1 /* Base */ 13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_IDENT 2 /* Identity Proteciton */ 13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_AUTH 3 /* Authentication Only */ 13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_AGG 4 /* Aggressive */ 13990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_INFO 5 /* Informational */ 14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_CFG 6 /* Mode config */ 14190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/* Additional Exchange Type */ 14290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_QUICK 32 /* Quick Mode */ 14390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_NEWGRP 33 /* New group Mode */ 14490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define ISAKMP_ETYPE_ACKINFO 34 /* Acknowledged Informational */ 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Flags */ 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_FLAG_E 0x01 /* Encryption Bit */ 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_FLAG_C 0x02 /* Commit Bit */ 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_FLAG_A 0x04 /* Authentication Only Bit */ 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 3.2 Payload Generic Header 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ! Next Payload ! RESERVED ! Payload Length ! 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/ 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_gen { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t np; /* Next Payload */ 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t reserved; /* RESERVED, unused, must set to 0 */ 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int16_t len; /* Payload Length */ 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} __attribute__((__packed__)); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 3.3 Data Attributes 164868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !A! Attribute Type ! AF=0 Attribute Length ! 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !F! ! AF=1 Attribute Value ! 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) . AF=0 Attribute Value . 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) . AF=1 Not Transmitted . 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/ 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_data { 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int16_t type; /* defined by DOI-spec, and Attribute Format */ 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int16_t lorv; /* if f equal 1, Attribute Length */ 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* if f equal 0, Attribute Value */ 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* if f equal 1, Attribute Value */ 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} __attribute__((__packed__)); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_GEN_TLV 0x0000 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_GEN_TV 0x8000 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* mask for type of attribute format */ 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_GEN_MASK 0x8000 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if 0 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* MAY NOT be used, because of being defined in ipsec-doi. */ 186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/* 3.4 Security Association Payload */ 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_pl_sa { 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct isakmp_gen h; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int32_t doi; /* Domain of Interpretation */ 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int32_t sit; /* Situation */ 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} __attribute__((__packed__)); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 3.5 Proposal Payload */ 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) The value of the next payload field MUST only contain the value "2" 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) or "0". If there are additional Proposal payloads in the message, 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) then this field will be 2. If the current Proposal payload is the 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last within the security association proposal, then this field will 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) be 0. 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_pl_p { 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct isakmp_gen h; 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t p_no; /* Proposal # */ 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t proto_id; /* Protocol */ 20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) u_int8_t spi_size; /* SPI Size */ 20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) u_int8_t num_t; /* Number of Transforms */ 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /* SPI */ 20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} __attribute__((__packed__)); 21090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 3.6 Transform Payload */ 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) The value of the next payload field MUST only contain the value "3" 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) or "0". If there are additional Transform payloads in the proposal, 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) then this field will be 3. If the current Transform payload is the 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last within the proposal, then this field will be 0. 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_pl_t { 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct isakmp_gen h; 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t t_no; /* Transform # */ 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t t_id; /* Transform-Id */ 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int16_t reserved; /* RESERVED2 */ 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* SA Attributes */ 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} __attribute__((__packed__)); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 3.7 Key Exchange Payload */ 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_pl_ke { 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct isakmp_gen h; 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* Key Exchange Data */ 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} __attribute__((__packed__)); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if 0 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/* NOTE: MUST NOT use because of being defined in ipsec-doi instead them. */ 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* 3.8 Identification Payload */ 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct isakmp_pl_id { 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct isakmp_gen h; 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) union { 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int8_t id_type; /* ID Type */ 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int32_t doi_data; /* DOI Specific ID Data */ 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } d; 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /* Identification Data */ 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} __attribute__((__packed__)); 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* A.4 ISAKMP Identification Type Values */ 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_ID_IPV4_ADDR 0 2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define ISAKMP_ID_IPV4_ADDR_SUBNET 1 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_ID_IPV6_ADDR 2 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_ID_IPV6_ADDR_SUBNET 3 2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 3.9 Certificate Payload */ 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_pl_cert { 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct isakmp_gen h; 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Encoding type of 1 octet follows immediately, 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * variable length CERT data follows encoding type. 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} __attribute__((__packed__)); 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Certificate Type */ 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_CERT_NONE 0 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_CERT_PKCS7 1 2627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define ISAKMP_CERT_PGP 2 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_CERT_DNS 3 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_CERT_X509SIGN 4 2657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define ISAKMP_CERT_X509KE 5 2667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define ISAKMP_CERT_KERBEROS 6 2677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define ISAKMP_CERT_CRL 7 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_CERT_ARL 8 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_CERT_SPKI 9 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_CERT_X509ATTR 10 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_CERT_PLAINRSA 11 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* the method to get peers certificate */ 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_GETCERT_PAYLOAD 1 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_GETCERT_LOCALFILE 2 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_GETCERT_DNS 3 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* 3.10 Certificate Request Payload */ 2797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)struct isakmp_pl_cr { 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct isakmp_gen h; 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int8_t num_cert; /* # Cert. Types */ 2827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) /* 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Certificate Types (variable length) 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) -- Contains a list of the types of certificates requested, 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sorted in order of preference. Each individual certificate 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) type is 1 octet. This field is NOT required. 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /* # Certificate Authorities (1 octet) */ 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /* Certificate Authorities (variable length) */ 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} __attribute__((__packed__)); 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* 3.11 Hash Payload */ 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct isakmp_pl_hash { 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct isakmp_gen h; 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /* Hash Data */ 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} __attribute__((__packed__)); 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* 3.12 Signature Payload */ 2997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)struct isakmp_pl_sig { 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct isakmp_gen h; 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /* Signature Data */ 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} __attribute__((__packed__)); 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/* 3.13 Nonce Payload */ 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct isakmp_pl_nonce { 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct isakmp_gen h; 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* Nonce Data */ 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} __attribute__((__packed__)); 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* 3.14 Notification Payload */ 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct isakmp_pl_n { 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct isakmp_gen h; 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int32_t doi; /* Domain of Interpretation */ 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int8_t proto_id; /* Protocol-ID */ 3157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) u_int8_t spi_size; /* SPI Size */ 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) u_int16_t type; /* Notify Message Type */ 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /* SPI */ 3187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) /* Notification Data */ 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} __attribute__((__packed__)); 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* 3.14.1 Notify Message Types */ 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* NOTIFY MESSAGES - ERROR TYPES */ 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE 1 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_DOI_NOT_SUPPORTED 2 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_SITUATION_NOT_SUPPORTED 3 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_COOKIE 4 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_MAJOR_VERSION 5 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_MINOR_VERSION 6 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE 7 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_FLAGS 8 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_MESSAGE_ID 9 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_PROTOCOL_ID 10 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_SPI 11 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_TRANSFORM_ID 12 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED 13 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN 14 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_BAD_PROPOSAL_SYNTAX 15 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_PAYLOAD_MALFORMED 16 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_KEY_INFORMATION 17 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_ID_INFORMATION 18 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_CERT_ENCODING 19 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_CERTIFICATE 20 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_BAD_CERT_REQUEST_SYNTAX 21 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INVALID_CERT_AUTHORITY 22 345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define ISAKMP_NTYPE_INVALID_HASH_INFORMATION 23 346868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define ISAKMP_NTYPE_AUTHENTICATION_FAILED 24 347868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define ISAKMP_NTYPE_INVALID_SIGNATURE 25 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_ADDRESS_NOTIFICATION 26 349868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define ISAKMP_NTYPE_NOTIFY_SA_LIFETIME 27 350868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define ISAKMP_NTYPE_CERTIFICATE_UNAVAILABLE 28 351868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define ISAKMP_NTYPE_UNSUPPORTED_EXCHANGE_TYPE 29 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_UNEQUAL_PAYLOAD_LENGTHS 30 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_MINERROR 1 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_MAXERROR 16383 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* NOTIFY MESSAGES - STATUS TYPES */ 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_CONNECTED 16384 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 4.6.3 IPSEC DOI Notify Message Types */ 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_RESPONDER_LIFETIME 24576 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_REPLAY_STATUS 24577 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ISAKMP_NTYPE_INITIAL_CONTACT 24578 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* DPD */ 3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define ISAKMP_NTYPE_R_U_THERE 36136 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_NTYPE_R_U_THERE_ACK 36137 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define ISAKMP_NTYPE_HEARTBEAT 40503 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* using only to log */ 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_LOG_RETRY_LIMIT_REACHED 65530 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* XXX means internal error but it's not reserved by any drafts... */ 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_INTERNAL_ERROR -1 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/* 3.15 Delete Payload */ 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_pl_d { 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct isakmp_gen h; 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int32_t doi; /* Domain of Interpretation */ 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t proto_id; /* Protocol-Id */ 3797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) u_int8_t spi_size; /* SPI Size */ 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int16_t num_spi; /* # of SPIs */ 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* SPI(es) */ 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} __attribute__((__packed__)); 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct payload_list { 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct payload_list *next, *prev; 38690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) vchar_t *payload; 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int payload_type; 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* See draft-ietf-ipsec-isakmp-mode-cfg-04.txt, 3.2 */ 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_pl_attr { 39390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) struct isakmp_gen h; 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t type; /* Exchange type */ 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t res2; 3967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) u_int16_t id; /* Per transaction id */ 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} __attribute__((__packed__)); 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/* Exchange type */ 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_CFG_REQUEST 1 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_CFG_REPLY 2 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_CFG_SET 3 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_CFG_ACK 4 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* IKE fragmentation payload */ 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_frag { 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int16_t unknown0; /* always set to zero? */ 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int16_t len; 40990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) u_int16_t unknown1; /* always set to 1? */ 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t index; 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t flags; 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} __attribute__((__packed__)); 4137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* flags */ 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ISAKMP_FRAG_LAST 1 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* DPD R-U-THERE / R-U-THERE-ACK Payload */ 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct isakmp_pl_ru { 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct isakmp_gen h; 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int32_t doi; /* Domain of Interpretation */ 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t proto_id; /* Protocol-Id */ 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int8_t spi_size; /* SPI Size */ 42390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) u_int16_t type; /* Notify type */ 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cookie_t i_ck; /* Initiator Cookie */ 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cookie_t r_ck; /* Responder cookie*/ 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) u_int32_t data; /* Notification data */ 4277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} __attribute__((__packed__)); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif /* _ISAKMP_H */ 4307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)