1 /* 2 * Copyright (c) 2018 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29 /* 30 * RFC 2408 Internet Security Association and Key Management Protocol 31 */ 32 33 #ifndef _NETINET_ISAKMP_H_ 34 #define _NETINET_ISAKMP_H_ 35 36 typedef u_char cookie_t[8]; 37 typedef u_char msgid_t[4]; 38 39 /* 3.1 ISAKMP Header Format (IKEv1 and IKEv2) 40 * 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 41 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 42 * ! Initiator ! 43 * ! Cookie ! 44 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 45 * ! Responder ! 46 * ! Cookie ! 47 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 48 * ! Next Payload ! MjVer ! MnVer ! Exchange Type ! Flags ! 49 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 50 * ! Message ID ! 51 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 52 * ! Length ! 53 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 54 */ 55 struct isakmp { 56 cookie_t i_ck; /* Initiator Cookie */ 57 cookie_t r_ck; /* Responder Cookie */ 58 uint8_t np; /* Next Payload Type */ 59 uint8_t vers; 60 #define ISAKMP_VERS_MAJOR 0xf0 61 #define ISAKMP_VERS_MAJOR_SHIFT 4 62 #define ISAKMP_VERS_MINOR 0x0f 63 #define ISAKMP_VERS_MINOR_SHIFT 0 64 uint8_t etype; /* Exchange Type */ 65 uint8_t flags; /* Flags */ 66 msgid_t msgid; 67 uint32_t len; /* Length */ 68 }; 69 70 /* 3.2 Payload Generic Header 71 * 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 72 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 73 * ! Next Payload ! RESERVED ! Payload Length ! 74 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 75 */ 76 struct isakmp_gen { 77 uint8_t np; /* Next Payload */ 78 uint8_t critical; /* bit 7 - critical, rest is RESERVED */ 79 uint16_t len; /* Payload Length */ 80 }; 81 82 #endif /* _NETINET_ISAKMP_H_ */ 83