Annotation of embedaddon/ipsec-tools/src/racoon/isakmp.h, revision 1.1.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>