Annotation of embedaddon/ipsec-tools/src/racoon/isakmp.h, revision 1.1

1.1     ! misho       1: /*     $NetBSD: isakmp.h,v 1.7 2009/05/20 07:54:50 vanhu Exp $ */
        !             2: 
        !             3: /* Id: isakmp.h,v 1.11 2005/04/25 22:19:39 manubsd Exp */
        !             4: 
        !             5: /*
        !             6:  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
        !             7:  * All rights reserved.
        !             8:  * 
        !             9:  * Redistribution and use in source and binary forms, with or without
        !            10:  * modification, are permitted provided that the following conditions
        !            11:  * are met:
        !            12:  * 1. Redistributions of source code must retain the above copyright
        !            13:  *    notice, this list of conditions and the following disclaimer.
        !            14:  * 2. Redistributions in binary form must reproduce the above copyright
        !            15:  *    notice, this list of conditions and the following disclaimer in the
        !            16:  *    documentation and/or other materials provided with the distribution.
        !            17:  * 3. Neither the name of the project nor the names of its contributors
        !            18:  *    may be used to endorse or promote products derived from this software
        !            19:  *    without specific prior written permission.
        !            20:  * 
        !            21:  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
        !            22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
        !            25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            31:  * SUCH DAMAGE.
        !            32:  */
        !            33: 
        !            34: #ifndef _ISAKMP_H
        !            35: #define _ISAKMP_H
        !            36: 
        !            37: /* refer to RFC 2408 */
        !            38: 
        !            39: #include <netinet/in.h>
        !            40: #include "isakmp_var.h"
        !            41: 
        !            42: #define INITIATOR      0       /* synonym sender */
        !            43: #define RESPONDER      1       /* synonym receiver */
        !            44: 
        !            45: #define GENERATE       1
        !            46: #define VALIDATE       0
        !            47: 
        !            48: /* 3.1 ISAKMP Header Format
        !            49:          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
        !            50:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !            51:         !                          Initiator                            !
        !            52:         !                            Cookie                             !
        !            53:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !            54:         !                          Responder                            !
        !            55:         !                            Cookie                             !
        !            56:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !            57:         !  Next Payload ! MjVer ! MnVer ! Exchange Type !     Flags     !
        !            58:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !            59:         !                          Message ID                           !
        !            60:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !            61:         !                            Length                             !
        !            62:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !            63: */
        !            64: struct isakmp {
        !            65:        cookie_t i_ck;          /* Initiator Cookie */
        !            66:        cookie_t r_ck;          /* Responder Cookie */
        !            67:        u_int8_t np;            /* Next Payload Type */
        !            68:        u_int8_t v;
        !            69:        u_int8_t etype;         /* Exchange Type */
        !            70:        u_int8_t flags;         /* Flags */
        !            71:        u_int32_t msgid;
        !            72:        u_int32_t len;          /* Length */
        !            73: } __attribute__((__packed__));
        !            74: 
        !            75: /* Next Payload Type */
        !            76: #define ISAKMP_NPTYPE_NONE     0       /* NONE*/
        !            77: #define ISAKMP_NPTYPE_SA       1       /* Security Association */
        !            78: #define ISAKMP_NPTYPE_P                2       /* Proposal */
        !            79: #define ISAKMP_NPTYPE_T                3       /* Transform */
        !            80: #define ISAKMP_NPTYPE_KE       4       /* Key Exchange */
        !            81: #define ISAKMP_NPTYPE_ID       5       /* Identification */
        !            82: #define ISAKMP_NPTYPE_CERT     6       /* Certificate */
        !            83: #define ISAKMP_NPTYPE_CR       7       /* Certificate Request */
        !            84: #define ISAKMP_NPTYPE_HASH     8       /* Hash */
        !            85: #define ISAKMP_NPTYPE_SIG      9       /* Signature */
        !            86: #define ISAKMP_NPTYPE_NONCE    10      /* Nonce */
        !            87: #define ISAKMP_NPTYPE_N                11      /* Notification */
        !            88: #define ISAKMP_NPTYPE_D                12      /* Delete */
        !            89: #define ISAKMP_NPTYPE_VID      13      /* Vendor ID */
        !            90: #define ISAKMP_NPTYPE_ATTR     14      /* Attribute */
        !            91: 
        !            92: 
        !            93: /* NAT-T draft-ietf-ipsec-nat-t-ike-05 and later */
        !            94: /* XXX conflicts with values assigned to RFC 3547 */
        !            95: #define ISAKMP_NPTYPE_NATD_BADDRAFT            15      /* NAT Discovery */
        !            96: #define ISAKMP_NPTYPE_NATOA_BADDRAFT   16      /* NAT Original Address */
        !            97: 
        !            98: 
        !            99: /* NAT-T RFC */
        !           100: #define ISAKMP_NPTYPE_NATD_RFC 20      /* NAT Discovery */
        !           101: #define ISAKMP_NPTYPE_NATOA_RFC        21      /* NAT Original Address */
        !           102: 
        !           103: /* NAT-T up to draft-ietf-ipsec-nat-t-ike-04 */
        !           104: #define ISAKMP_NPTYPE_NATD_DRAFT       130     /* NAT Discovery */
        !           105: #define ISAKMP_NPTYPE_NATOA_DRAFT      131     /* NAT Original Address */
        !           106: 
        !           107: /* Frag does not seems to be documented */
        !           108: #define ISAKMP_NPTYPE_FRAG     132     /* IKE fragmentation payload */
        !           109: 
        !           110: #define ISAKMP_NPTYPE_MAX      17
        !           111:                        /*      128 - 255 Private Use */
        !           112: 
        !           113: /*
        !           114:  * The following are valid when the Vendor ID is one of the
        !           115:  * following:
        !           116:  *
        !           117:  *     MD5("A GSS-API Authentication Method for IKE")
        !           118:  *     MD5("GSSAPI") (recognized by Windows 2000)
        !           119:  *     MD5("MS NT5 ISAKMPOAKLEY") (sent by Windows 2000)
        !           120:  *
        !           121:  * See draft-ietf-ipsec-isakmp-gss-auth-06.txt.
        !           122:  */
        !           123: #define ISAKMP_NPTYPE_GSS      129     /* GSS token */
        !           124: 
        !           125: #define ISAKMP_MAJOR_VERSION   1
        !           126: #define ISAKMP_MINOR_VERSION   0
        !           127: #define ISAKMP_VERSION_NUMBER  0x10
        !           128: #define ISAKMP_GETMAJORV(v)    (((v) & 0xf0) >> 4)
        !           129: #define ISAKMP_SETMAJORV(v, m) ((v) = ((v) & 0x0f) | (((m) << 4) & 0xf0))
        !           130: #define ISAKMP_GETMINORV(v)    ((v) & 0x0f)
        !           131: #define ISAKMP_SETMINORV(v, m) ((v) = ((v) & 0xf0) | ((m) & 0x0f))
        !           132: 
        !           133: /* Exchange Type */
        !           134: #define ISAKMP_ETYPE_NONE      0       /* NONE */
        !           135: #define ISAKMP_ETYPE_BASE      1       /* Base */
        !           136: #define ISAKMP_ETYPE_IDENT     2       /* Identity Protection */
        !           137: #define ISAKMP_ETYPE_AUTH      3       /* Authentication Only */
        !           138: #define ISAKMP_ETYPE_AGG       4       /* Aggressive */
        !           139: #define ISAKMP_ETYPE_INFO      5       /* Informational */
        !           140: #define ISAKMP_ETYPE_CFG       6       /* Mode config */
        !           141: /* Additional Exchange Type */
        !           142: #define ISAKMP_ETYPE_QUICK     32      /* Quick Mode */
        !           143: #define ISAKMP_ETYPE_NEWGRP    33      /* New group Mode */
        !           144: #define ISAKMP_ETYPE_ACKINFO   34      /* Acknowledged Informational */
        !           145: 
        !           146: /* Flags */
        !           147: #define ISAKMP_FLAG_E 0x01 /* Encryption Bit */
        !           148: #define ISAKMP_FLAG_C 0x02 /* Commit Bit */
        !           149: #define ISAKMP_FLAG_A 0x04 /* Authentication Only Bit */
        !           150: 
        !           151: /* 3.2 Payload Generic Header
        !           152:          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
        !           153:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !           154:         ! Next Payload  !   RESERVED    !         Payload Length        !
        !           155:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !           156: */
        !           157: struct isakmp_gen {
        !           158:        u_int8_t np;            /* Next Payload */
        !           159:        u_int8_t reserved;      /* RESERVED, unused, must set to 0 */
        !           160:        u_int16_t len;          /* Payload Length */
        !           161: } __attribute__((__packed__));
        !           162: 
        !           163: /* 3.3 Data Attributes
        !           164:          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
        !           165:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !           166:         !A!       Attribute Type        !    AF=0  Attribute Length     !
        !           167:         !F!                             !    AF=1  Attribute Value      !
        !           168:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !           169:         .                   AF=0  Attribute Value                       .
        !           170:         .                   AF=1  Not Transmitted                       .
        !           171:         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        !           172: */
        !           173: struct isakmp_data {
        !           174:        u_int16_t type;         /* defined by DOI-spec, and Attribute Format */
        !           175:        u_int16_t lorv;         /* if f equal 1, Attribute Length */
        !           176:                                /* if f equal 0, Attribute Value */
        !           177:        /* if f equal 1, Attribute Value */
        !           178: } __attribute__((__packed__));
        !           179: #define ISAKMP_GEN_TLV 0x0000
        !           180: #define ISAKMP_GEN_TV  0x8000
        !           181:        /* mask for type of attribute format */
        !           182: #define ISAKMP_GEN_MASK 0x8000
        !           183: 
        !           184: #if 0
        !           185: /* MAY NOT be used, because of being defined in ipsec-doi. */
        !           186: /* 3.4 Security Association Payload */
        !           187: struct isakmp_pl_sa {
        !           188:        struct isakmp_gen h;
        !           189:        u_int32_t doi;          /* Domain of Interpretation */
        !           190:        u_int32_t sit;          /* Situation */
        !           191: } __attribute__((__packed__));
        !           192: #endif
        !           193: 
        !           194: /* 3.5 Proposal Payload */
        !           195:        /*
        !           196:        The value of the next payload field MUST only contain the value "2"
        !           197:        or "0".  If there are additional Proposal payloads in the message,
        !           198:        then this field will be 2.  If the current Proposal payload is the
        !           199:        last within the security association proposal, then this field will
        !           200:        be 0.
        !           201:        */
        !           202: struct isakmp_pl_p {
        !           203:        struct isakmp_gen h;
        !           204:        u_int8_t p_no;          /* Proposal # */
        !           205:        u_int8_t proto_id;      /* Protocol */
        !           206:        u_int8_t spi_size;      /* SPI Size */
        !           207:        u_int8_t num_t;         /* Number of Transforms */
        !           208:        /* SPI */
        !           209: } __attribute__((__packed__));
        !           210: 
        !           211: /* 3.6 Transform Payload */
        !           212:        /*
        !           213:        The value of the next payload field MUST only contain the value "3"
        !           214:        or "0".  If there are additional Transform payloads in the proposal,
        !           215:        then this field will be 3.  If the current Transform payload is the
        !           216:        last within the proposal, then this field will be 0.
        !           217:        */
        !           218: struct isakmp_pl_t {
        !           219:        struct isakmp_gen h;
        !           220:        u_int8_t t_no;          /* Transform # */
        !           221:        u_int8_t t_id;          /* Transform-Id */
        !           222:        u_int16_t reserved;     /* RESERVED2 */
        !           223:        /* SA Attributes */
        !           224: } __attribute__((__packed__));
        !           225: 
        !           226: /* 3.7 Key Exchange Payload */
        !           227: struct isakmp_pl_ke {
        !           228:        struct isakmp_gen h;
        !           229:        /* Key Exchange Data */
        !           230: } __attribute__((__packed__));
        !           231: 
        !           232: #if 0
        !           233: /* NOTE: MUST NOT use because of being defined in ipsec-doi instead them. */
        !           234: /* 3.8 Identification Payload */
        !           235: struct isakmp_pl_id {
        !           236:        struct isakmp_gen h;
        !           237:        union {
        !           238:                u_int8_t id_type;       /* ID Type */
        !           239:                u_int32_t doi_data;     /* DOI Specific ID Data */
        !           240:        } d;
        !           241:        /* Identification Data */
        !           242: } __attribute__((__packed__));
        !           243: /* A.4 ISAKMP Identification Type Values */
        !           244: #define ISAKMP_ID_IPV4_ADDR            0
        !           245: #define ISAKMP_ID_IPV4_ADDR_SUBNET     1
        !           246: #define ISAKMP_ID_IPV6_ADDR            2
        !           247: #define ISAKMP_ID_IPV6_ADDR_SUBNET     3
        !           248: #endif
        !           249: 
        !           250: /* 3.9 Certificate Payload */
        !           251: struct isakmp_pl_cert {
        !           252:        struct isakmp_gen h;
        !           253:        /*
        !           254:         * Encoding type of 1 octet follows immediately,
        !           255:         * variable length CERT data follows encoding type.
        !           256:         */
        !           257: } __attribute__((__packed__));
        !           258: 
        !           259: /* Certificate Type */
        !           260: #define ISAKMP_CERT_NONE       0
        !           261: #define ISAKMP_CERT_PKCS7      1
        !           262: #define ISAKMP_CERT_PGP                2
        !           263: #define ISAKMP_CERT_DNS                3
        !           264: #define ISAKMP_CERT_X509SIGN   4
        !           265: #define ISAKMP_CERT_X509KE     5
        !           266: #define ISAKMP_CERT_KERBEROS   6
        !           267: #define ISAKMP_CERT_CRL                7
        !           268: #define ISAKMP_CERT_ARL                8
        !           269: #define ISAKMP_CERT_SPKI       9
        !           270: #define ISAKMP_CERT_X509ATTR   10
        !           271: #define ISAKMP_CERT_PLAINRSA   11
        !           272: 
        !           273: /* 3.10 Certificate Request Payload */
        !           274: struct isakmp_pl_cr {
        !           275:        struct isakmp_gen h;
        !           276:        u_int8_t num_cert; /* # Cert. Types */
        !           277:        /*
        !           278:        Certificate Types (variable length)
        !           279:          -- Contains a list of the types of certificates requested,
        !           280:          sorted in order of preference.  Each individual certificate
        !           281:          type is 1 octet.  This field is NOT required.
        !           282:        */
        !           283:        /* # Certificate Authorities (1 octet) */
        !           284:        /* Certificate Authorities (variable length) */
        !           285: } __attribute__((__packed__));
        !           286: 
        !           287: /* 3.11 Hash Payload */
        !           288: struct isakmp_pl_hash {
        !           289:        struct isakmp_gen h;
        !           290:        /* Hash Data */
        !           291: } __attribute__((__packed__));
        !           292: 
        !           293: /* 3.12 Signature Payload */
        !           294: struct isakmp_pl_sig {
        !           295:        struct isakmp_gen h;
        !           296:        /* Signature Data */
        !           297: } __attribute__((__packed__));
        !           298: 
        !           299: /* 3.13 Nonce Payload */
        !           300: struct isakmp_pl_nonce {
        !           301:        struct isakmp_gen h;
        !           302:        /* Nonce Data */
        !           303: } __attribute__((__packed__));
        !           304: 
        !           305: /* 3.14 Notification Payload */
        !           306: struct isakmp_pl_n {
        !           307:        struct isakmp_gen h;
        !           308:        u_int32_t doi;          /* Domain of Interpretation */
        !           309:        u_int8_t proto_id;      /* Protocol-ID */
        !           310:        u_int8_t spi_size;      /* SPI Size */
        !           311:        u_int16_t type;         /* Notify Message Type */
        !           312:        /* SPI */
        !           313:        /* Notification Data */
        !           314: } __attribute__((__packed__));
        !           315: 
        !           316: /* 3.14.1 Notify Message Types */
        !           317: /* NOTIFY MESSAGES - ERROR TYPES */
        !           318: #define ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE      1
        !           319: #define ISAKMP_NTYPE_DOI_NOT_SUPPORTED         2
        !           320: #define ISAKMP_NTYPE_SITUATION_NOT_SUPPORTED   3
        !           321: #define ISAKMP_NTYPE_INVALID_COOKIE            4
        !           322: #define ISAKMP_NTYPE_INVALID_MAJOR_VERSION     5
        !           323: #define ISAKMP_NTYPE_INVALID_MINOR_VERSION     6
        !           324: #define ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE     7
        !           325: #define ISAKMP_NTYPE_INVALID_FLAGS             8
        !           326: #define ISAKMP_NTYPE_INVALID_MESSAGE_ID                9
        !           327: #define ISAKMP_NTYPE_INVALID_PROTOCOL_ID       10
        !           328: #define ISAKMP_NTYPE_INVALID_SPI               11
        !           329: #define ISAKMP_NTYPE_INVALID_TRANSFORM_ID      12
        !           330: #define ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED  13
        !           331: #define ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN                14
        !           332: #define ISAKMP_NTYPE_BAD_PROPOSAL_SYNTAX       15
        !           333: #define ISAKMP_NTYPE_PAYLOAD_MALFORMED         16
        !           334: #define ISAKMP_NTYPE_INVALID_KEY_INFORMATION   17
        !           335: #define ISAKMP_NTYPE_INVALID_ID_INFORMATION    18
        !           336: #define ISAKMP_NTYPE_INVALID_CERT_ENCODING     19
        !           337: #define ISAKMP_NTYPE_INVALID_CERTIFICATE       20
        !           338: #define ISAKMP_NTYPE_BAD_CERT_REQUEST_SYNTAX   21
        !           339: #define ISAKMP_NTYPE_INVALID_CERT_AUTHORITY    22
        !           340: #define ISAKMP_NTYPE_INVALID_HASH_INFORMATION  23
        !           341: #define ISAKMP_NTYPE_AUTHENTICATION_FAILED     24
        !           342: #define ISAKMP_NTYPE_INVALID_SIGNATURE         25
        !           343: #define ISAKMP_NTYPE_ADDRESS_NOTIFICATION      26
        !           344: #define ISAKMP_NTYPE_NOTIFY_SA_LIFETIME                27
        !           345: #define ISAKMP_NTYPE_CERTIFICATE_UNAVAILABLE   28
        !           346: #define ISAKMP_NTYPE_UNSUPPORTED_EXCHANGE_TYPE 29
        !           347: #define ISAKMP_NTYPE_UNEQUAL_PAYLOAD_LENGTHS   30
        !           348: #define ISAKMP_NTYPE_MINERROR                  1
        !           349: #define ISAKMP_NTYPE_MAXERROR                  16383
        !           350: /* NOTIFY MESSAGES - STATUS TYPES */
        !           351: #define ISAKMP_NTYPE_CONNECTED                 16384
        !           352: /* 4.6.3 IPSEC DOI Notify Message Types */
        !           353: #define ISAKMP_NTYPE_RESPONDER_LIFETIME                24576
        !           354: #define ISAKMP_NTYPE_REPLAY_STATUS             24577
        !           355: #define ISAKMP_NTYPE_INITIAL_CONTACT           24578
        !           356: 
        !           357: /* DPD */
        !           358: #define ISAKMP_NTYPE_R_U_THERE                 36136
        !           359: #define ISAKMP_NTYPE_R_U_THERE_ACK             36137
        !           360: 
        !           361: #define ISAKMP_NTYPE_HEARTBEAT                 40503
        !           362: 
        !           363: /* using only to log */
        !           364: #define ISAKMP_LOG_RETRY_LIMIT_REACHED         65530
        !           365: 
        !           366: /* XXX means internal error but it's not reserved by any drafts... */
        !           367: #define ISAKMP_INTERNAL_ERROR                  -1
        !           368: 
        !           369: /* 3.15 Delete Payload */
        !           370: struct isakmp_pl_d {
        !           371:        struct isakmp_gen h;
        !           372:        u_int32_t doi;          /* Domain of Interpretation */
        !           373:        u_int8_t proto_id;      /* Protocol-Id */
        !           374:        u_int8_t spi_size;      /* SPI Size */
        !           375:        u_int16_t num_spi;      /* # of SPIs */
        !           376:        /* SPI(es) */
        !           377: } __attribute__((__packed__));
        !           378: 
        !           379: struct payload_list {
        !           380:        struct payload_list     *next, *prev;
        !           381:        vchar_t                 *payload;
        !           382:        u_int8_t                payload_type;
        !           383:        u_int8_t                free_payload;
        !           384: };
        !           385: 
        !           386: 
        !           387: /* See draft-ietf-ipsec-isakmp-mode-cfg-04.txt, 3.2 */
        !           388: struct isakmp_pl_attr {
        !           389:        struct isakmp_gen h;
        !           390:        u_int8_t type;          /* Exchange type */
        !           391:        u_int8_t res2;
        !           392:        u_int16_t id;           /* Per transaction id */
        !           393: } __attribute__((__packed__));
        !           394:             
        !           395: /* Exchange type */
        !           396: #define ISAKMP_CFG_REQUEST     1
        !           397: #define ISAKMP_CFG_REPLY       2
        !           398: #define ISAKMP_CFG_SET         3
        !           399: #define ISAKMP_CFG_ACK         4
        !           400: 
        !           401: /* IKE fragmentation payload */
        !           402: struct isakmp_frag {
        !           403:        u_int16_t unknown0;     /* always set to zero? */
        !           404:        u_int16_t len;
        !           405:        u_int16_t unknown1;     /* always set to 1? */
        !           406:        u_int8_t index;
        !           407:        u_int8_t flags;
        !           408: } __attribute__((__packed__)); 
        !           409: 
        !           410: /* flags */
        !           411: #define ISAKMP_FRAG_LAST       1
        !           412: 
        !           413: /* DPD R-U-THERE / R-U-THERE-ACK Payload */
        !           414: struct isakmp_pl_ru {
        !           415:        struct isakmp_gen h;
        !           416:        u_int32_t doi;          /* Domain of Interpretation */
        !           417:        u_int8_t proto_id;      /* Protocol-Id */
        !           418:        u_int8_t spi_size;      /* SPI Size */
        !           419:        u_int16_t type;         /* Notify type */
        !           420:        cookie_t  i_ck; /* Initiator Cookie */
        !           421:        cookie_t r_ck;  /* Responder cookie*/
        !           422:        u_int32_t data;         /* Notification data */
        !           423: } __attribute__((__packed__));
        !           424: 
        !           425: #endif /* _ISAKMP_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>