Annotation of embedaddon/ipsec-tools/src/racoon/strnames.c, revision 1.1.1.1

1.1       misho       1: /*     $NetBSD: strnames.c,v 1.9 2008/07/14 05:40:13 tteras Exp $      */
                      2: 
                      3: /*     $KAME: strnames.c,v 1.25 2003/11/13 10:53:26 itojun 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: #include "config.h"
                     35: 
                     36: #include <sys/types.h>
                     37: #include <sys/param.h>
                     38: #include <sys/socket.h>
                     39: 
                     40: #include <netinet/in.h> 
                     41: #include PATH_IPSEC_H
                     42: #include <netinet/in.h>
                     43: 
                     44: #include <stdio.h>
                     45: #include <stdlib.h>
                     46: #ifdef ENABLE_HYBRID
                     47: #include <resolv.h>
                     48: #endif
                     49: 
                     50: #include "var.h"
                     51: #include "misc.h"
                     52: #include "vmbuf.h"
                     53: #include "plog.h"
                     54: 
                     55: #include "isakmp_var.h"
                     56: #include "isakmp.h"
                     57: #ifdef ENABLE_HYBRID
                     58: #  include "isakmp_xauth.h"
                     59: #  include "isakmp_unity.h"
                     60: #  include "isakmp_cfg.h"
                     61: #endif
                     62: #include "ipsec_doi.h"
                     63: #include "oakley.h"
                     64: #include "handler.h"
                     65: #include "pfkey.h"
                     66: #include "strnames.h"
                     67: #include "algorithm.h"
                     68: 
                     69: struct ksmap {
                     70:        int key;
                     71:        char *str;
                     72:        char *(*f) __P((int));
                     73: };
                     74: 
                     75: char *
                     76: num2str(n)
                     77:        int n;
                     78: {
                     79:        static char buf[20];
                     80: 
                     81:        snprintf(buf, sizeof(buf), "%d", n);
                     82: 
                     83:        return buf;
                     84: }
                     85: 
                     86: /* isakmp.h */
                     87: char *
                     88: s_isakmp_state(t, d, s)
                     89:        int t, d, s;
                     90: {
                     91:        switch (t) {
                     92:        case ISAKMP_ETYPE_AGG:
                     93:                switch (d) {
                     94:                case INITIATOR:
                     95:                        switch (s) {
                     96:                        case PHASE1ST_MSG1SENT:
                     97:                                return "agg I msg1";
                     98:                        case PHASE1ST_ESTABLISHED:
                     99:                                return "agg I msg2";
                    100:                        default:
                    101:                                break;
                    102:                        }
                    103:                case RESPONDER:
                    104:                        switch (s) {
                    105:                        case PHASE1ST_MSG1SENT:
                    106:                                return "agg R msg1";
                    107:                        default:
                    108:                                break;
                    109:                        }
                    110:                }
                    111:                break;
                    112:        case ISAKMP_ETYPE_BASE:
                    113:                switch (d) {
                    114:                case INITIATOR:
                    115:                        switch (s) {
                    116:                        case PHASE1ST_MSG1SENT:
                    117:                                return "base I msg1";
                    118:                        case PHASE1ST_MSG2SENT:
                    119:                                return "base I msg2";
                    120:                        default:
                    121:                                break;
                    122:                        }
                    123:                case RESPONDER:
                    124:                        switch (s) {
                    125:                        case PHASE1ST_MSG1SENT:
                    126:                                return "base R msg1";
                    127:                        case PHASE1ST_ESTABLISHED:
                    128:                                return "base R msg2";
                    129:                        default:
                    130:                                break;
                    131:                        }
                    132:                }
                    133:                break;
                    134:        case ISAKMP_ETYPE_IDENT:
                    135:                switch (d) {
                    136:                case INITIATOR:
                    137:                        switch (s) {
                    138:                        case PHASE1ST_MSG1SENT:
                    139:                                return "ident I msg1";
                    140:                        case PHASE1ST_MSG2SENT:
                    141:                                return "ident I msg2";
                    142:                        case PHASE1ST_MSG3SENT:
                    143:                                return "ident I msg3";
                    144:                        default:
                    145:                                break;
                    146:                        }
                    147:                case RESPONDER:
                    148:                        switch (s) {
                    149:                        case PHASE1ST_MSG1SENT:
                    150:                                return "ident R msg1";
                    151:                        case PHASE1ST_MSG2SENT:
                    152:                                return "ident R msg2";
                    153:                        case PHASE1ST_ESTABLISHED:
                    154:                                return "ident R msg3";
                    155:                        default:
                    156:                                break;
                    157:                        }
                    158:                }
                    159:                break;
                    160:        case ISAKMP_ETYPE_QUICK:
                    161:                switch (d) {
                    162:                case INITIATOR:
                    163:                        switch (s) {
                    164:                        case PHASE2ST_MSG1SENT:
                    165:                                return "quick I msg1";
                    166:                        case PHASE2ST_ADDSA:
                    167:                                return "quick I msg2";
                    168:                        default:
                    169:                                break;
                    170:                        }
                    171:                case RESPONDER:
                    172:                        switch (s) {
                    173:                        case PHASE2ST_MSG1SENT:
                    174:                                return "quick R msg1";
                    175:                        case PHASE2ST_COMMIT:
                    176:                                return "quick R msg2";
                    177:                        default:
                    178:                                break;
                    179:                        }
                    180:                }
                    181:                break;
                    182:        default:
                    183:        case ISAKMP_ETYPE_NONE:
                    184:        case ISAKMP_ETYPE_AUTH:
                    185:        case ISAKMP_ETYPE_INFO:
                    186:        case ISAKMP_ETYPE_NEWGRP:
                    187:        case ISAKMP_ETYPE_ACKINFO:
                    188:                break;
                    189:        }
                    190:        /*NOTREACHED*/
                    191: 
                    192:        return "???";
                    193: }
                    194: 
                    195: static struct ksmap name_isakmp_certtype[] = {
                    196: { ISAKMP_CERT_NONE,    "NONE",                                 NULL },
                    197: { ISAKMP_CERT_PKCS7,   "PKCS #7 wrapped X.509 certificate",    NULL },
                    198: { ISAKMP_CERT_PGP,     "PGP Certificate",                      NULL },
                    199: { ISAKMP_CERT_DNS,     "DNS Signed Key",                       NULL },
                    200: { ISAKMP_CERT_X509SIGN,        "X.509 Certificate Signature",          NULL },
                    201: { ISAKMP_CERT_X509KE,  "X.509 Certificate Key Exchange",       NULL },
                    202: { ISAKMP_CERT_KERBEROS,        "Kerberos Tokens",                      NULL },
                    203: { ISAKMP_CERT_CRL,     "Certificate Revocation List (CRL)",    NULL },
                    204: { ISAKMP_CERT_ARL,     "Authority Revocation List (ARL)",      NULL },
                    205: { ISAKMP_CERT_SPKI,    "SPKI Certificate",                     NULL },
                    206: { ISAKMP_CERT_X509ATTR,        "X.509 Certificate Attribute",          NULL },
                    207: };
                    208: 
                    209: char *
                    210: s_isakmp_certtype(k)
                    211:        int k;
                    212: {
                    213:        int i;
                    214:        for (i = 0; i < ARRAYLEN(name_isakmp_certtype); i++)
                    215:                if (name_isakmp_certtype[i].key == k)
                    216:                        return name_isakmp_certtype[i].str;
                    217:        return num2str(k);
                    218: }
                    219: 
                    220: static struct ksmap name_isakmp_etype[] = {
                    221: { ISAKMP_ETYPE_NONE,   "None",                 NULL },
                    222: { ISAKMP_ETYPE_BASE,   "Base",                 NULL },
                    223: { ISAKMP_ETYPE_IDENT,  "Identity Protection",  NULL },
                    224: { ISAKMP_ETYPE_AUTH,   "Authentication Only",  NULL },
                    225: { ISAKMP_ETYPE_AGG,    "Aggressive",           NULL },
                    226: { ISAKMP_ETYPE_INFO,   "Informational",        NULL },
                    227: { ISAKMP_ETYPE_CFG,    "Mode config",          NULL },
                    228: { ISAKMP_ETYPE_QUICK,  "Quick",                NULL },
                    229: { ISAKMP_ETYPE_NEWGRP, "New Group",            NULL },
                    230: { ISAKMP_ETYPE_ACKINFO,        "Acknowledged Informational",   NULL },
                    231: };
                    232: 
                    233: char *
                    234: s_isakmp_etype(k)
                    235:        int k;
                    236: {
                    237:        int i;
                    238:        for (i = 0; i < ARRAYLEN(name_isakmp_etype); i++)
                    239:                if (name_isakmp_etype[i].key == k)
                    240:                        return name_isakmp_etype[i].str;
                    241:        return num2str(k);
                    242: }
                    243: 
                    244: static struct ksmap name_isakmp_notify_msg[] = {
                    245: { ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE,   "INVALID-PAYLOAD-TYPE",         NULL },
                    246: { ISAKMP_NTYPE_DOI_NOT_SUPPORTED,      "DOI-NOT-SUPPORTED",            NULL },
                    247: { ISAKMP_NTYPE_SITUATION_NOT_SUPPORTED,        "SITUATION-NOT-SUPPORTED",      NULL },
                    248: { ISAKMP_NTYPE_INVALID_COOKIE,         "INVALID-COOKIE",               NULL },
                    249: { ISAKMP_NTYPE_INVALID_MAJOR_VERSION,  "INVALID-MAJOR-VERSION",        NULL },
                    250: { ISAKMP_NTYPE_INVALID_MINOR_VERSION,  "INVALID-MINOR-VERSION",        NULL },
                    251: { ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE,  "INVALID-EXCHANGE-TYPE",        NULL },
                    252: { ISAKMP_NTYPE_INVALID_FLAGS,          "INVALID-FLAGS",                NULL },
                    253: { ISAKMP_NTYPE_INVALID_MESSAGE_ID,     "INVALID-MESSAGE-ID",           NULL },
                    254: { ISAKMP_NTYPE_INVALID_PROTOCOL_ID,    "INVALID-PROTOCOL-ID",          NULL },
                    255: { ISAKMP_NTYPE_INVALID_SPI,            "INVALID-SPI",                  NULL },
                    256: { ISAKMP_NTYPE_INVALID_TRANSFORM_ID,   "INVALID-TRANSFORM-ID",         NULL },
                    257: { ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED, "ATTRIBUTES-NOT-SUPPORTED",   NULL },
                    258: { ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN,     "NO-PROPOSAL-CHOSEN",           NULL },
                    259: { ISAKMP_NTYPE_BAD_PROPOSAL_SYNTAX,    "BAD-PROPOSAL-SYNTAX",          NULL },
                    260: { ISAKMP_NTYPE_PAYLOAD_MALFORMED,      "PAYLOAD-MALFORMED",            NULL },
                    261: { ISAKMP_NTYPE_INVALID_KEY_INFORMATION,        "INVALID-KEY-INFORMATION",      NULL },
                    262: { ISAKMP_NTYPE_INVALID_ID_INFORMATION, "INVALID-ID-INFORMATION",       NULL },
                    263: { ISAKMP_NTYPE_INVALID_CERT_ENCODING,  "INVALID-CERT-ENCODING",        NULL },
                    264: { ISAKMP_NTYPE_INVALID_CERTIFICATE,    "INVALID-CERTIFICATE",          NULL },
                    265: { ISAKMP_NTYPE_BAD_CERT_REQUEST_SYNTAX,        "BAD-CERT-REQUEST-SYNTAX",      NULL },
                    266: { ISAKMP_NTYPE_INVALID_CERT_AUTHORITY, "INVALID-CERT-AUTHORITY",       NULL },
                    267: { ISAKMP_NTYPE_INVALID_HASH_INFORMATION, "INVALID-HASH-INFORMATION",   NULL },
                    268: { ISAKMP_NTYPE_AUTHENTICATION_FAILED,  "AUTHENTICATION-FAILED",        NULL },
                    269: { ISAKMP_NTYPE_INVALID_SIGNATURE,      "INVALID-SIGNATURE",            NULL },
                    270: { ISAKMP_NTYPE_ADDRESS_NOTIFICATION,   "ADDRESS-NOTIFICATION",         NULL },
                    271: { ISAKMP_NTYPE_NOTIFY_SA_LIFETIME,     "NOTIFY-SA-LIFETIME",           NULL },
                    272: { ISAKMP_NTYPE_CERTIFICATE_UNAVAILABLE,        "CERTIFICATE-UNAVAILABLE",      NULL },
                    273: { ISAKMP_NTYPE_UNSUPPORTED_EXCHANGE_TYPE, "UNSUPPORTED-EXCHANGE-TYPE", NULL },
                    274: { ISAKMP_NTYPE_UNEQUAL_PAYLOAD_LENGTHS,        "UNEQUAL-PAYLOAD-LENGTHS",      NULL },
                    275: { ISAKMP_NTYPE_CONNECTED,              "CONNECTED",                    NULL },
                    276: { ISAKMP_NTYPE_RESPONDER_LIFETIME,     "RESPONDER-LIFETIME",           NULL },
                    277: { ISAKMP_NTYPE_REPLAY_STATUS,          "REPLAY-STATUS",                NULL },
                    278: { ISAKMP_NTYPE_INITIAL_CONTACT,                "INITIAL-CONTACT",              NULL },
                    279: { ISAKMP_NTYPE_R_U_THERE,              "R-U-THERE",                    NULL },
                    280: { ISAKMP_NTYPE_R_U_THERE_ACK,          "R-U-THERE-ACK",                NULL },
                    281: #ifdef ENABLE_HYBRID
                    282: { ISAKMP_NTYPE_UNITY_HEARTBEAT,                "HEARTBEAT (Unity)",            NULL },
                    283: #endif
                    284: { ISAKMP_LOG_RETRY_LIMIT_REACHED,      "RETRY-LIMIT-REACHED",          NULL },
                    285: };
                    286: 
                    287: char *
                    288: s_isakmp_notify_msg(k)
                    289:        int k;
                    290: {
                    291:        int i;
                    292:        for (i = 0; i < ARRAYLEN(name_isakmp_notify_msg); i++)
                    293:                if (name_isakmp_notify_msg[i].key == k)
                    294:                        return name_isakmp_notify_msg[i].str;
                    295: 
                    296:        return num2str(k);
                    297: }
                    298: 
                    299: static struct ksmap name_isakmp_nptype[] = {
                    300: { ISAKMP_NPTYPE_NONE,          "none",         NULL },
                    301: { ISAKMP_NPTYPE_SA,            "sa",           NULL },
                    302: { ISAKMP_NPTYPE_P,             "prop",         NULL },
                    303: { ISAKMP_NPTYPE_T,             "trns",         NULL },
                    304: { ISAKMP_NPTYPE_KE,            "ke",           NULL },
                    305: { ISAKMP_NPTYPE_ID,            "id",           NULL },
                    306: { ISAKMP_NPTYPE_CERT,          "cert",         NULL },
                    307: { ISAKMP_NPTYPE_CR,            "cr",           NULL },
                    308: { ISAKMP_NPTYPE_HASH,          "hash",         NULL },
                    309: { ISAKMP_NPTYPE_SIG,           "sig",          NULL },
                    310: { ISAKMP_NPTYPE_NONCE,         "nonce",        NULL },
                    311: { ISAKMP_NPTYPE_N,             "notify",       NULL },
                    312: { ISAKMP_NPTYPE_D,             "delete",       NULL },
                    313: { ISAKMP_NPTYPE_VID,           "vid",          NULL },
                    314: { ISAKMP_NPTYPE_ATTR,          "attr",         NULL },
                    315: { ISAKMP_NPTYPE_GSS,           "gss id",       NULL },
                    316: { ISAKMP_NPTYPE_NATD_RFC,      "nat-d",        NULL },
                    317: { ISAKMP_NPTYPE_NATOA_RFC,     "nat-oa",       NULL },
                    318: { ISAKMP_NPTYPE_NATD_DRAFT,    "nat-d",        NULL },
                    319: { ISAKMP_NPTYPE_NATOA_DRAFT,   "nat-oa",       NULL },
                    320: { ISAKMP_NPTYPE_FRAG,          "ike frag",     NULL },
                    321: };
                    322: 
                    323: char *
                    324: s_isakmp_nptype(k)
                    325:        int k;
                    326: {
                    327:        int i;
                    328:        for (i = 0; i < ARRAYLEN(name_isakmp_nptype); i++)
                    329:                if (name_isakmp_nptype[i].key == k)
                    330:                        return name_isakmp_nptype[i].str;
                    331:        return num2str(k);
                    332: }
                    333: 
                    334: #ifdef ENABLE_HYBRID
                    335: /* isakmp_cfg.h / isakmp_unity.h / isakmp_xauth.h */
                    336: static struct ksmap name_isakmp_cfg_type[] = {
                    337: { INTERNAL_IP4_ADDRESS,                "INTERNAL_IP4_ADDRESS",         NULL },
                    338: { INTERNAL_IP4_NETMASK,                "INTERNAL_IP4_NETMASK",         NULL },
                    339: { INTERNAL_IP4_DNS,            "INTERNAL_IP4_DNS",             NULL },
                    340: { INTERNAL_IP4_NBNS,           "INTERNAL_IP4_NBNS",            NULL },
                    341: { INTERNAL_ADDRESS_EXPIRY,     "INTERNAL_ADDRESS_EXPIRY",      NULL },
                    342: { INTERNAL_IP4_DHCP,           "INTERNAL_IP4_DHCP",            NULL },
                    343: { APPLICATION_VERSION,         "APPLICATION_VERSION",          NULL },
                    344: { INTERNAL_IP6_ADDRESS,                "INTERNAL_IP6_ADDRESS",         NULL },
                    345: { INTERNAL_IP6_NETMASK,                "INTERNAL_IP6_NETMASK",         NULL },
                    346: { INTERNAL_IP6_DNS,            "INTERNAL_IP6_DNS",             NULL },
                    347: { INTERNAL_IP6_NBNS,           "INTERNAL_IP6_NBNS",            NULL },
                    348: { INTERNAL_IP6_DHCP,           "INTERNAL_IP6_DHCP",            NULL },
                    349: { INTERNAL_IP4_SUBNET,         "INTERNAL_IP4_SUBNET",          NULL },
                    350: { SUPPORTED_ATTRIBUTES,                "SUPPORTED_ATTRIBUTES",         NULL },
                    351: { INTERNAL_IP6_SUBNET,         "INTERNAL_IP6_SUBNET",          NULL },
                    352: { XAUTH_TYPE,                  "XAUTH_TYPE",                   NULL },
                    353: { XAUTH_USER_NAME,             "XAUTH_USER_NAME",              NULL },
                    354: { XAUTH_USER_PASSWORD,         "XAUTH_USER_PASSWORD",          NULL },
                    355: { XAUTH_PASSCODE,              "XAUTH_PASSCODE",               NULL },
                    356: { XAUTH_MESSAGE,               "XAUTH_MESSAGE",                NULL },
                    357: { XAUTH_CHALLENGE,             "XAUTH_CHALLENGE",              NULL },
                    358: { XAUTH_DOMAIN,                        "XAUTH_DOMAIN",                 NULL },
                    359: { XAUTH_STATUS,                        "XAUTH_STATUS",                 NULL },
                    360: { XAUTH_NEXT_PIN,              "XAUTH_NEXT_PIN",               NULL },
                    361: { XAUTH_ANSWER,                        "XAUTH_ANSWER",                 NULL },
                    362: { UNITY_BANNER,                        "UNITY_BANNER",                 NULL },
                    363: { UNITY_SAVE_PASSWD,           "UNITY_SAVE_PASSWD",            NULL },
                    364: { UNITY_DEF_DOMAIN,            "UNITY_DEF_DOMAIN",             NULL },
                    365: { UNITY_SPLITDNS_NAME,         "UNITY_SPLITDNS_NAME",          NULL },
                    366: { UNITY_SPLIT_INCLUDE,         "UNITY_SPLIT_INCLUDE",          NULL },
                    367: { UNITY_NATT_PORT,             "UNITY_NATT_PORT",              NULL },
                    368: { UNITY_LOCAL_LAN,             "UNITY_LOCAL_LAN",              NULL },
                    369: { UNITY_PFS,                   "UNITY_PFS",                    NULL },
                    370: { UNITY_FW_TYPE,               "UNITY_FW_TYPE",                NULL },
                    371: { UNITY_BACKUP_SERVERS,                "UNITY_BACKUP_SERVERS",         NULL },
                    372: { UNITY_DDNS_HOSTNAME,         "UNITY_DDNS_HOSTNAME",          NULL },
                    373: };
                    374: 
                    375: char *
                    376: s_isakmp_cfg_type(k)
                    377:        int k;
                    378: {
                    379:        int i;
                    380:        for (i = 0; i < ARRAYLEN(name_isakmp_cfg_type); i++)
                    381:                if (name_isakmp_cfg_type[i].key == k)
                    382:                        return name_isakmp_cfg_type[i].str;
                    383:        return num2str(k);
                    384: }
                    385: 
                    386: /* isakmp_cfg.h / isakmp_unity.h / isakmp_xauth.h */
                    387: static struct ksmap name_isakmp_cfg_ptype[] = {
                    388: { ISAKMP_CFG_ACK,              "mode config ACK",              NULL },
                    389: { ISAKMP_CFG_SET,              "mode config SET",              NULL },
                    390: { ISAKMP_CFG_REQUEST,          "mode config REQUEST",          NULL },
                    391: { ISAKMP_CFG_REPLY,            "mode config REPLY",            NULL },
                    392: };
                    393: 
                    394: char *
                    395: s_isakmp_cfg_ptype(k)
                    396:        int k;
                    397: {
                    398:        int i;
                    399:        for (i = 0; i < ARRAYLEN(name_isakmp_cfg_ptype); i++)
                    400:                if (name_isakmp_cfg_ptype[i].key == k)
                    401:                        return name_isakmp_cfg_ptype[i].str;
                    402:        return num2str(k);
                    403: }
                    404: 
                    405: #endif
                    406: 
                    407: /* ipsec_doi.h */
                    408: static struct ksmap name_ipsecdoi_proto[] = {
                    409: { IPSECDOI_PROTO_ISAKMP,       "ISAKMP",       s_ipsecdoi_trns_isakmp },
                    410: { IPSECDOI_PROTO_IPSEC_AH,     "AH",           s_ipsecdoi_trns_ah },
                    411: { IPSECDOI_PROTO_IPSEC_ESP,    "ESP",          s_ipsecdoi_trns_esp },
                    412: { IPSECDOI_PROTO_IPCOMP,       "IPCOMP",       s_ipsecdoi_trns_ipcomp },
                    413: };
                    414: 
                    415: char *
                    416: s_ipsecdoi_proto(k)
                    417:        int k;
                    418: {
                    419:        int i;
                    420:        for (i = 0; i < ARRAYLEN(name_ipsecdoi_proto); i++)
                    421:                if (name_ipsecdoi_proto[i].key == k)
                    422:                        return name_ipsecdoi_proto[i].str;
                    423:        return num2str(k);
                    424: }
                    425: 
                    426: static struct ksmap name_ipsecdoi_trns_isakmp[] = {
                    427: { IPSECDOI_KEY_IKE,    "IKE", NULL },
                    428: };
                    429: 
                    430: char *
                    431: s_ipsecdoi_trns_isakmp(k)
                    432:        int k;
                    433: {
                    434:        int i;
                    435:        for (i = 0; i < ARRAYLEN(name_ipsecdoi_trns_isakmp); i++)
                    436:                if (name_ipsecdoi_trns_isakmp[i].key == k)
                    437:                        return name_ipsecdoi_trns_isakmp[i].str;
                    438:        return num2str(k);
                    439: }
                    440: 
                    441: static struct ksmap name_ipsecdoi_trns_ah[] = {
                    442: { IPSECDOI_AH_MD5,     "MD5", NULL },
                    443: { IPSECDOI_AH_SHA,     "SHA", NULL },
                    444: { IPSECDOI_AH_DES,     "DES", NULL },
                    445: { IPSECDOI_AH_SHA256,  "SHA256", NULL },
                    446: { IPSECDOI_AH_SHA384,  "SHA384", NULL },
                    447: { IPSECDOI_AH_SHA512,  "SHA512", NULL },
                    448: };
                    449: 
                    450: char *
                    451: s_ipsecdoi_trns_ah(k)
                    452:        int k;
                    453: {
                    454:        int i;
                    455:        for (i = 0; i < ARRAYLEN(name_ipsecdoi_trns_ah); i++)
                    456:                if (name_ipsecdoi_trns_ah[i].key == k)
                    457:                        return name_ipsecdoi_trns_ah[i].str;
                    458:        return num2str(k);
                    459: }
                    460: 
                    461: static struct ksmap name_ipsecdoi_trns_esp[] = {
                    462: { IPSECDOI_ESP_DES_IV64,       "DES_IV64",     NULL },
                    463: { IPSECDOI_ESP_DES,            "DES",          NULL },
                    464: { IPSECDOI_ESP_3DES,           "3DES",         NULL },
                    465: { IPSECDOI_ESP_RC5,            "RC5",          NULL },
                    466: { IPSECDOI_ESP_IDEA,           "IDEA",         NULL },
                    467: { IPSECDOI_ESP_CAST,           "CAST",         NULL },
                    468: { IPSECDOI_ESP_BLOWFISH,       "BLOWFISH",     NULL },
                    469: { IPSECDOI_ESP_3IDEA,          "3IDEA",        NULL },
                    470: { IPSECDOI_ESP_DES_IV32,       "DES_IV32",     NULL },
                    471: { IPSECDOI_ESP_RC4,            "RC4",          NULL },
                    472: { IPSECDOI_ESP_NULL,           "NULL",         NULL },
                    473: { IPSECDOI_ESP_AES,            "AES",          NULL },
                    474: { IPSECDOI_ESP_TWOFISH,                "TWOFISH",      NULL },
                    475: { IPSECDOI_ESP_CAMELLIA,       "CAMELLIA",     NULL },
                    476: };
                    477: 
                    478: char *
                    479: s_ipsecdoi_trns_esp(k)
                    480:        int k;
                    481: {
                    482:        int i;
                    483:        for (i = 0; i < ARRAYLEN(name_ipsecdoi_trns_esp); i++)
                    484:                if (name_ipsecdoi_trns_esp[i].key == k)
                    485:                        return name_ipsecdoi_trns_esp[i].str;
                    486:        return num2str(k);
                    487: }
                    488: 
                    489: static struct ksmap name_ipsecdoi_trns_ipcomp[] = {
                    490: { IPSECDOI_IPCOMP_OUI,         "OUI",          NULL},
                    491: { IPSECDOI_IPCOMP_DEFLATE,     "DEFLATE",      NULL},
                    492: { IPSECDOI_IPCOMP_LZS,         "LZS",          NULL},
                    493: };
                    494: 
                    495: char *
                    496: s_ipsecdoi_trns_ipcomp(k)
                    497:        int k;
                    498: {
                    499:        int i;
                    500:        for (i = 0; i < ARRAYLEN(name_ipsecdoi_trns_ipcomp); i++)
                    501:                if (name_ipsecdoi_trns_ipcomp[i].key == k)
                    502:                        return name_ipsecdoi_trns_ipcomp[i].str;
                    503:        return num2str(k);
                    504: }
                    505: 
                    506: char *
                    507: s_ipsecdoi_trns(proto, trns)
                    508:        int proto, trns;
                    509: {
                    510:        int i;
                    511:        for (i = 0; i < ARRAYLEN(name_ipsecdoi_proto); i++)
                    512:                if (name_ipsecdoi_proto[i].key == proto
                    513:                 && name_ipsecdoi_proto[i].f)
                    514:                        return (name_ipsecdoi_proto[i].f)(trns);
                    515:        return num2str(trns);
                    516: }
                    517: 
                    518: static struct ksmap name_attr_ipsec[] = {
                    519: { IPSECDOI_ATTR_SA_LD_TYPE,    "SA Life Type",         s_ipsecdoi_ltype },
                    520: { IPSECDOI_ATTR_SA_LD,         "SA Life Duration",     NULL },
                    521: { IPSECDOI_ATTR_GRP_DESC,      "Group Description",    NULL },
                    522: { IPSECDOI_ATTR_ENC_MODE,      "Encryption Mode",      s_ipsecdoi_encmode },
                    523: { IPSECDOI_ATTR_AUTH,          "Authentication Algorithm", s_ipsecdoi_auth },
                    524: { IPSECDOI_ATTR_KEY_LENGTH,    "Key Length",           NULL },
                    525: { IPSECDOI_ATTR_KEY_ROUNDS,    "Key Rounds",           NULL },
                    526: { IPSECDOI_ATTR_COMP_DICT_SIZE,        "Compression Dictionary Size",  NULL },
                    527: { IPSECDOI_ATTR_COMP_PRIVALG,  "Compression Private Algorithm", NULL },
                    528: };
                    529: 
                    530: char *
                    531: s_ipsecdoi_attr(k)
                    532:        int k;
                    533: {
                    534:        int i;
                    535:        for (i = 0; i < ARRAYLEN(name_attr_ipsec); i++)
                    536:                if (name_attr_ipsec[i].key == k)
                    537:                        return name_attr_ipsec[i].str;
                    538:        return num2str(k);
                    539: }
                    540: 
                    541: static struct ksmap name_attr_ipsec_ltype[] = {
                    542: { IPSECDOI_ATTR_SA_LD_TYPE_SEC,        "seconds",      NULL },
                    543: { IPSECDOI_ATTR_SA_LD_TYPE_KB, "kilobytes",    NULL },
                    544: };
                    545: 
                    546: char *
                    547: s_ipsecdoi_ltype(k)
                    548:        int k;
                    549: {
                    550:        int i;
                    551:        for (i = 0; i < ARRAYLEN(name_attr_ipsec_ltype); i++)
                    552:                if (name_attr_ipsec_ltype[i].key == k)
                    553:                        return name_attr_ipsec_ltype[i].str;
                    554:        return num2str(k);
                    555: }
                    556: 
                    557: static struct ksmap name_attr_ipsec_encmode[] = {
                    558: { IPSECDOI_ATTR_ENC_MODE_ANY,          "Any",          NULL },
                    559: { IPSECDOI_ATTR_ENC_MODE_TUNNEL,       "Tunnel",       NULL },
                    560: { IPSECDOI_ATTR_ENC_MODE_TRNS,         "Transport",    NULL },
                    561: { IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC,        "UDP-Tunnel",   NULL },
                    562: { IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC,  "UDP-Transport",        NULL },
                    563: { IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT,      "UDP-Tunnel",   NULL },
                    564: { IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT,        "UDP-Transport",        NULL },
                    565: };
                    566: 
                    567: char *
                    568: s_ipsecdoi_encmode(k)
                    569:        int k;
                    570: {
                    571:        int i;
                    572:        for (i = 0; i < ARRAYLEN(name_attr_ipsec_encmode); i++)
                    573:                if (name_attr_ipsec_encmode[i].key == k)
                    574:                        return name_attr_ipsec_encmode[i].str;
                    575:        return num2str(k);
                    576: }
                    577: 
                    578: static struct ksmap name_attr_ipsec_auth[] = {
                    579: { IPSECDOI_ATTR_AUTH_HMAC_MD5,         "hmac-md5",     NULL },
                    580: { IPSECDOI_ATTR_AUTH_HMAC_SHA1,                "hmac-sha",     NULL },
                    581: { IPSECDOI_ATTR_AUTH_HMAC_SHA2_256,    "hmac-sha256",  NULL },
                    582: { IPSECDOI_ATTR_AUTH_HMAC_SHA2_384,    "hmac-sha384",  NULL },
                    583: { IPSECDOI_ATTR_AUTH_HMAC_SHA2_512,    "hmac-sha512",  NULL },
                    584: { IPSECDOI_ATTR_AUTH_DES_MAC,          "des-mac",      NULL },
                    585: { IPSECDOI_ATTR_AUTH_KPDK,             "kpdk",         NULL },
                    586: };
                    587: 
                    588: char *
                    589: s_ipsecdoi_auth(k)
                    590:        int k;
                    591: {
                    592:        int i;
                    593:        for (i = 0; i < ARRAYLEN(name_attr_ipsec_auth); i++)
                    594:                if (name_attr_ipsec_auth[i].key == k)
                    595:                        return name_attr_ipsec_auth[i].str;
                    596:        return num2str(k);
                    597: }
                    598: 
                    599: char *
                    600: s_ipsecdoi_attr_v(type, val)
                    601:        int type, val;
                    602: {
                    603:        int i;
                    604:        for (i = 0; i < ARRAYLEN(name_attr_ipsec); i++)
                    605:                if (name_attr_ipsec[i].key == type
                    606:                 && name_attr_ipsec[i].f)
                    607:                        return (name_attr_ipsec[i].f)(val);
                    608:        return num2str(val);
                    609: }
                    610: 
                    611: static struct ksmap name_ipsecdoi_ident[] = {
                    612: { IPSECDOI_ID_IPV4_ADDR,       "IPv4_address", NULL },
                    613: { IPSECDOI_ID_FQDN,            "FQDN",         NULL },
                    614: { IPSECDOI_ID_USER_FQDN,       "User_FQDN",    NULL },
                    615: { IPSECDOI_ID_IPV4_ADDR_SUBNET,        "IPv4_subnet",  NULL },
                    616: { IPSECDOI_ID_IPV6_ADDR,       "IPv6_address", NULL },
                    617: { IPSECDOI_ID_IPV6_ADDR_SUBNET,        "IPv6_subnet",  NULL },
                    618: { IPSECDOI_ID_IPV4_ADDR_RANGE, "IPv4_address_range",   NULL },
                    619: { IPSECDOI_ID_IPV6_ADDR_RANGE, "IPv6_address_range",   NULL },
                    620: { IPSECDOI_ID_DER_ASN1_DN,     "DER_ASN1_DN",  NULL },
                    621: { IPSECDOI_ID_DER_ASN1_GN,     "DER_ASN1_GN",  NULL },
                    622: { IPSECDOI_ID_KEY_ID,          "KEY_ID",       NULL },
                    623: };
                    624: 
                    625: char *
                    626: s_ipsecdoi_ident(k)
                    627:        int k;
                    628: {
                    629:        int i;
                    630:        for (i = 0; i < ARRAYLEN(name_ipsecdoi_ident); i++)
                    631:                if (name_ipsecdoi_ident[i].key == k)
                    632:                        return name_ipsecdoi_ident[i].str;
                    633:        return num2str(k);
                    634: }
                    635: 
                    636: /* oakley.h */
                    637: static struct ksmap name_oakley_attr[] = {
                    638: { OAKLEY_ATTR_ENC_ALG,         "Encryption Algorithm", s_attr_isakmp_enc },
                    639: { OAKLEY_ATTR_HASH_ALG,                "Hash Algorithm",       s_attr_isakmp_hash },
                    640: { OAKLEY_ATTR_AUTH_METHOD,     "Authentication Method", s_oakley_attr_method },
                    641: { OAKLEY_ATTR_GRP_DESC,                "Group Description",    s_attr_isakmp_desc },
                    642: { OAKLEY_ATTR_GRP_TYPE,                "Group Type",           s_attr_isakmp_group },
                    643: { OAKLEY_ATTR_GRP_PI,          "Group Prime/Irreducible Polynomial",   NULL },
                    644: { OAKLEY_ATTR_GRP_GEN_ONE,     "Group Generator One",  NULL },
                    645: { OAKLEY_ATTR_GRP_GEN_TWO,     "Group Generator Two",  NULL },
                    646: { OAKLEY_ATTR_GRP_CURVE_A,     "Group Curve A",        NULL },
                    647: { OAKLEY_ATTR_GRP_CURVE_B,     "Group Curve B",        NULL },
                    648: { OAKLEY_ATTR_SA_LD_TYPE,      "Life Type",            s_attr_isakmp_ltype },
                    649: { OAKLEY_ATTR_SA_LD,           "Life Duration",        NULL },
                    650: { OAKLEY_ATTR_PRF,             "PRF",                  NULL },
                    651: { OAKLEY_ATTR_KEY_LEN,         "Key Length",           NULL },
                    652: { OAKLEY_ATTR_FIELD_SIZE,      "Field Size",           NULL },
                    653: { OAKLEY_ATTR_GRP_ORDER,       "Group Order",          NULL },
                    654: { OAKLEY_ATTR_BLOCK_SIZE,      "Block Size",           NULL },
                    655: { OAKLEY_ATTR_GSS_ID,          "GSS-API endpoint name",NULL },
                    656: };
                    657: 
                    658: char *
                    659: s_oakley_attr(k)
                    660:        int k;
                    661: {
                    662:        int i;
                    663:        for (i = 0; i < ARRAYLEN(name_oakley_attr); i++)
                    664:                if (name_oakley_attr[i].key == k)
                    665:                        return name_oakley_attr[i].str;
                    666:        return num2str(k);
                    667: }
                    668: 
                    669: static struct ksmap name_attr_isakmp_enc[] = {
                    670: { OAKLEY_ATTR_ENC_ALG_DES,     "DES-CBC",              NULL },
                    671: { OAKLEY_ATTR_ENC_ALG_IDEA,    "IDEA-CBC",             NULL },
                    672: { OAKLEY_ATTR_ENC_ALG_BLOWFISH,        "Blowfish-CBC",         NULL },
                    673: { OAKLEY_ATTR_ENC_ALG_RC5,     "RC5-R16-B64-CBC",      NULL },
                    674: { OAKLEY_ATTR_ENC_ALG_3DES,    "3DES-CBC",             NULL },
                    675: { OAKLEY_ATTR_ENC_ALG_CAST,    "CAST-CBC",             NULL },
                    676: { OAKLEY_ATTR_ENC_ALG_AES,     "AES-CBC",              NULL },
                    677: };
                    678: 
                    679: char *
                    680: s_attr_isakmp_enc(k)
                    681:        int k;
                    682: {
                    683:        int i;
                    684:        for (i = 0; i < ARRAYLEN(name_attr_isakmp_enc); i++)
                    685:                if (name_attr_isakmp_enc[i].key == k)
                    686:                        return name_attr_isakmp_enc[i].str;
                    687:        return num2str(k);
                    688: }
                    689: 
                    690: static struct ksmap name_attr_isakmp_hash[] = {
                    691: { OAKLEY_ATTR_HASH_ALG_MD5,    "MD5",          NULL },
                    692: { OAKLEY_ATTR_HASH_ALG_SHA,    "SHA",          NULL },
                    693: { OAKLEY_ATTR_HASH_ALG_TIGER,  "Tiger",        NULL },
                    694: { OAKLEY_ATTR_HASH_ALG_SHA2_256,"SHA256",      NULL },
                    695: { OAKLEY_ATTR_HASH_ALG_SHA2_384,"SHA384",      NULL },
                    696: { OAKLEY_ATTR_HASH_ALG_SHA2_512,"SHA512",      NULL },
                    697: };
                    698: 
                    699: char *
                    700: s_attr_isakmp_hash(k)
                    701:        int k;
                    702: {
                    703:        int i;
                    704:        for (i = 0; i < ARRAYLEN(name_attr_isakmp_hash); i++)
                    705:                if (name_attr_isakmp_hash[i].key == k)
                    706:                        return name_attr_isakmp_hash[i].str;
                    707:        return num2str(k);
                    708: }
                    709: 
                    710: static struct ksmap name_attr_isakmp_method[] = {
                    711: { OAKLEY_ATTR_AUTH_METHOD_PSKEY,               "pre-shared key",       NULL },
                    712: { OAKLEY_ATTR_AUTH_METHOD_DSSSIG,              "DSS signatures",       NULL },
                    713: { OAKLEY_ATTR_AUTH_METHOD_RSASIG,              "RSA signatures",       NULL },
                    714: { OAKLEY_ATTR_AUTH_METHOD_RSAENC,              "Encryption with RSA",  NULL },
                    715: { OAKLEY_ATTR_AUTH_METHOD_RSAREV,              "Revised encryption with RSA",  NULL },
                    716: { OAKLEY_ATTR_AUTH_METHOD_EGENC,               "Encryption with El-Gamal",     NULL },
                    717: { OAKLEY_ATTR_AUTH_METHOD_EGREV,               "Revised encryption with El-Gamal",     NULL },
                    718: #ifdef HAVE_GSSAPI
                    719: { OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB,          "GSS-API on Kerberos 5", NULL },
                    720: #endif
                    721: #ifdef ENABLE_HYBRID
                    722: { OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R,                "Hybrid DSS server",    NULL },
                    723: { OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R,                "Hybrid RSA server",    NULL },
                    724: { OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I,                "Hybrid DSS client",    NULL },
                    725: { OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I,                "Hybrid RSA client",    NULL },
                    726: { OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I,       "XAuth pskey client",   NULL },
                    727: { OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R,       "XAuth pskey server",   NULL },
                    728: { OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I,      "XAuth RSASIG client",  NULL },
                    729: { OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R,      "XAuth RSASIG server",  NULL },
                    730: #endif
                    731: };
                    732: 
                    733: char *
                    734: s_oakley_attr_method(k)
                    735:        int k;
                    736: {
                    737:        int i;
                    738:        for (i = 0; i < ARRAYLEN(name_attr_isakmp_method); i++)
                    739:                if (name_attr_isakmp_method[i].key == k)
                    740:                        return name_attr_isakmp_method[i].str;
                    741:        return num2str(k);
                    742: }
                    743: 
                    744: static struct ksmap name_attr_isakmp_desc[] = {
                    745: { OAKLEY_ATTR_GRP_DESC_MODP768,                "768-bit MODP group",   NULL },
                    746: { OAKLEY_ATTR_GRP_DESC_MODP1024,       "1024-bit MODP group",  NULL },
                    747: { OAKLEY_ATTR_GRP_DESC_EC2N155,                "EC2N group on GP[2^155]",      NULL },
                    748: { OAKLEY_ATTR_GRP_DESC_EC2N185,                "EC2N group on GP[2^185]",      NULL },
                    749: { OAKLEY_ATTR_GRP_DESC_MODP1536,       "1536-bit MODP group",  NULL },
                    750: { OAKLEY_ATTR_GRP_DESC_MODP2048,       "2048-bit MODP group",  NULL },
                    751: { OAKLEY_ATTR_GRP_DESC_MODP3072,       "3072-bit MODP group",  NULL },
                    752: { OAKLEY_ATTR_GRP_DESC_MODP4096,       "4096-bit MODP group",  NULL },
                    753: { OAKLEY_ATTR_GRP_DESC_MODP6144,       "6144-bit MODP group",  NULL },
                    754: { OAKLEY_ATTR_GRP_DESC_MODP8192,       "8192-bit MODP group",  NULL },
                    755: };
                    756: 
                    757: char *
                    758: s_attr_isakmp_desc(k)
                    759:        int k;
                    760: {
                    761:        int i;
                    762:        for (i = 0; i < ARRAYLEN(name_attr_isakmp_desc); i++)
                    763:                if (name_attr_isakmp_desc[i].key == k)
                    764:                        return name_attr_isakmp_desc[i].str;
                    765:        return num2str(k);
                    766: }
                    767: 
                    768: static struct ksmap name_attr_isakmp_group[] = {
                    769: { OAKLEY_ATTR_GRP_TYPE_MODP,   "MODP", NULL },
                    770: { OAKLEY_ATTR_GRP_TYPE_ECP,    "ECP",  NULL },
                    771: { OAKLEY_ATTR_GRP_TYPE_EC2N,   "EC2N", NULL },
                    772: };
                    773: 
                    774: char *
                    775: s_attr_isakmp_group(k)
                    776:        int k;
                    777: {
                    778:        int i;
                    779:        for (i = 0; i < ARRAYLEN(name_attr_isakmp_group); i++)
                    780:                if (name_attr_isakmp_group[i].key == k)
                    781:                        return name_attr_isakmp_group[i].str;
                    782:        return num2str(k);
                    783: }
                    784: 
                    785: static struct ksmap name_attr_isakmp_ltype[] = {
                    786: { OAKLEY_ATTR_SA_LD_TYPE_SEC,  "seconds",      NULL },
                    787: { OAKLEY_ATTR_SA_LD_TYPE_KB,   "kilobytes",    NULL },
                    788: };
                    789: 
                    790: char *
                    791: s_attr_isakmp_ltype(k)
                    792:        int k;
                    793: {
                    794:        int i;
                    795:        for (i = 0; i < ARRAYLEN(name_attr_isakmp_ltype); i++)
                    796:                if (name_attr_isakmp_ltype[i].key == k)
                    797:                        return name_attr_isakmp_ltype[i].str;
                    798:        return num2str(k);
                    799: }
                    800: 
                    801: char *
                    802: s_oakley_attr_v(type, val)
                    803:        int type, val;
                    804: {
                    805:        int i;
                    806:        for (i = 0; i < ARRAYLEN(name_oakley_attr); i++)
                    807:                if (name_oakley_attr[i].key == type
                    808:                 && name_oakley_attr[i].f)
                    809:                        return (name_oakley_attr[i].f)(val);
                    810:        return num2str(val);
                    811: }
                    812: 
                    813: /* netinet6/ipsec.h */
                    814: static struct ksmap name_ipsec_level[] = {
                    815: { IPSEC_LEVEL_USE,     "use",          NULL },
                    816: { IPSEC_LEVEL_REQUIRE, "require",      NULL },
                    817: { IPSEC_LEVEL_UNIQUE,  "unique",       NULL },
                    818: };
                    819: 
                    820: char *
                    821: s_ipsec_level(k)
                    822:        int k;
                    823: {
                    824:        int i;
                    825:        for (i = 0; i < ARRAYLEN(name_ipsec_level); i++)
                    826:                if (name_ipsec_level[i].key == k)
                    827:                        return name_ipsec_level[i].str;
                    828:        return num2str(k);
                    829: }
                    830: 
                    831: static struct ksmap name_algclass[] = {
                    832: { algclass_ipsec_enc,  "ipsec enc",    s_ipsecdoi_trns_esp },
                    833: { algclass_ipsec_auth, "ipsec auth",   s_ipsecdoi_trns_ah },
                    834: { algclass_ipsec_comp, "ipsec comp",   s_ipsecdoi_trns_ipcomp },
                    835: { algclass_isakmp_enc, "isakmp enc",   s_attr_isakmp_enc },
                    836: { algclass_isakmp_hash,        "isakmp hash",  s_attr_isakmp_hash },
                    837: { algclass_isakmp_dh,  "isakmp dh",    s_attr_isakmp_desc },
                    838: { algclass_isakmp_ameth, "isakmp auth method", s_oakley_attr_method },
                    839: };
                    840: 
                    841: char *
                    842: s_algclass(k)
                    843:        int k;
                    844: {
                    845:        int i;
                    846:        for (i = 0; i < ARRAYLEN(name_algclass); i++)
                    847:                if (name_algclass[i].key == k)
                    848:                        return name_algclass[i].str;
                    849:        return num2str(k);
                    850: }
                    851: 
                    852: char *
                    853: s_algtype(class, n)
                    854:        int class, n;
                    855: {
                    856:        int i;
                    857:        for (i = 0; i < ARRAYLEN(name_algclass); i++)
                    858:                if (name_algclass[i].key == class
                    859:                 && name_algclass[i].f)
                    860:                        return (name_algclass[i].f)(n);
                    861:        return num2str(n);
                    862: }
                    863: 
                    864: /* pfkey.h */
                    865: static struct ksmap name_pfkey_type[] = {
                    866: { SADB_GETSPI,         "GETSPI",       NULL },
                    867: { SADB_UPDATE,         "UPDATE",       NULL },
                    868: { SADB_ADD,            "ADD",          NULL },
                    869: { SADB_DELETE,         "DELETE",       NULL },
                    870: { SADB_GET,            "GET",          NULL },
                    871: { SADB_ACQUIRE,                "ACQUIRE",      NULL },
                    872: { SADB_REGISTER,       "REGISTER",     NULL },
                    873: { SADB_EXPIRE,         "EXPIRE",       NULL },
                    874: { SADB_FLUSH,          "FLUSH",        NULL },
                    875: { SADB_DUMP,           "DUMP",         NULL },
                    876: { SADB_X_PROMISC,      "X_PROMISC",    NULL },
                    877: { SADB_X_PCHANGE,      "X_PCHANGE",    NULL },
                    878: { SADB_X_SPDUPDATE,    "X_SPDUPDATE",  NULL },
                    879: { SADB_X_SPDADD,       "X_SPDADD",     NULL },
                    880: { SADB_X_SPDDELETE,    "X_SPDDELETE",  NULL },
                    881: { SADB_X_SPDGET,       "X_SPDGET",     NULL },
                    882: { SADB_X_SPDACQUIRE,   "X_SPDACQUIRE", NULL },
                    883: { SADB_X_SPDDUMP,      "X_SPDDUMP",    NULL },
                    884: { SADB_X_SPDFLUSH,     "X_SPDFLUSH",   NULL },
                    885: { SADB_X_SPDSETIDX,    "X_SPDSETIDX",  NULL },
                    886: { SADB_X_SPDEXPIRE,    "X_SPDEXPIRE",  NULL },
                    887: { SADB_X_SPDDELETE2,   "X_SPDDELETE2", NULL },
                    888: #ifdef SADB_X_NAT_T_NEW_MAPPING
                    889: { SADB_X_NAT_T_NEW_MAPPING, "X_NAT_T_NEW_MAPPING", NULL },
                    890: #endif
                    891: #ifdef SADB_X_MIGRATE
                    892: { SADB_X_MIGRATE,      "X_MIGRATE",    NULL },
                    893: #endif
                    894: };
                    895: 
                    896: char *
                    897: s_pfkey_type(k)
                    898:        int k;
                    899: {
                    900:        int i;
                    901:        for (i = 0; i < ARRAYLEN(name_pfkey_type); i++)
                    902:                if (name_pfkey_type[i].key == k)
                    903:                        return name_pfkey_type[i].str;
                    904:        return num2str(k);
                    905: }
                    906: 
                    907: static struct ksmap name_pfkey_satype[] = {
                    908: { SADB_SATYPE_UNSPEC,  "UNSPEC",       NULL },
                    909: { SADB_SATYPE_AH,      "AH",           NULL },
                    910: { SADB_SATYPE_ESP,     "ESP",          NULL },
                    911: { SADB_SATYPE_RSVP,    "RSVP",         NULL },
                    912: { SADB_SATYPE_OSPFV2,  "OSPFV2",       NULL },
                    913: { SADB_SATYPE_RIPV2,   "RIPV2",        NULL },
                    914: { SADB_SATYPE_MIP,     "MIP",          NULL },
                    915: { SADB_X_SATYPE_IPCOMP,        "IPCOMP",       NULL },
                    916: };
                    917: 
                    918: char *
                    919: s_pfkey_satype(k)
                    920:        int k;
                    921: {
                    922:        int i;
                    923:        for (i = 0; i < ARRAYLEN(name_pfkey_satype); i++)
                    924:                if (name_pfkey_satype[i].key == k)
                    925:                        return name_pfkey_satype[i].str;
                    926:        return num2str(k);
                    927: }
                    928: 
                    929: static struct ksmap name_direction[] = {
                    930: { IPSEC_DIR_INBOUND,   "in",   NULL },
                    931: { IPSEC_DIR_OUTBOUND,  "out",  NULL },
                    932: #ifdef HAVE_POLICY_FWD
                    933: { IPSEC_DIR_FWD,       "fwd",  NULL },
                    934: #endif
                    935: };
                    936: 
                    937: char *
                    938: s_direction(k)
                    939:        int k;
                    940: {
                    941:        int i;
                    942:        for (i = 0; i < ARRAYLEN(name_direction); i++)
                    943:                if (name_direction[i].key == k)
                    944:                        return name_direction[i].str;
                    945:        return num2str(k);
                    946: }
                    947: 
                    948: char *
                    949: s_proto(k)
                    950:        int k;
                    951: {
                    952:        switch (k) {
                    953:        case IPPROTO_ICMP:
                    954:                return "icmp";
                    955:        case IPPROTO_TCP:
                    956:                return "tcp";
                    957:        case IPPROTO_UDP:
                    958:                return "udp";
                    959:        case IPPROTO_ICMPV6:
                    960:                return "icmpv6";
                    961:        case IPSEC_ULPROTO_ANY:
                    962:                return "any";
                    963:        }
                    964: 
                    965:        return num2str(k);
                    966: }
                    967: 
                    968: char *
                    969: s_doi(int k)
                    970: {
                    971:   switch (k) {
                    972:     case IPSEC_DOI:
                    973:       return "ipsec_doi";
                    974:     default:
                    975:       return num2str(k);
                    976:   }
                    977: }
                    978: 
                    979: char *
                    980: s_etype (int k)
                    981: {
                    982:   switch (k) {
                    983:     case ISAKMP_ETYPE_NONE:
                    984:       return "_none";
                    985:     case ISAKMP_ETYPE_BASE:
                    986:       return "base";
                    987:     case ISAKMP_ETYPE_IDENT:
                    988:       return "main";
                    989:     case ISAKMP_ETYPE_AUTH:
                    990:       return "_auth";
                    991:     case ISAKMP_ETYPE_AGG:
                    992:       return "aggressive";
                    993:     case ISAKMP_ETYPE_INFO:
                    994:       return "_info";
                    995:     case ISAKMP_ETYPE_QUICK:
                    996:       return "_quick";
                    997:     case ISAKMP_ETYPE_NEWGRP:
                    998:       return "_newgrp";
                    999:     case ISAKMP_ETYPE_ACKINFO:
                   1000:       return "_ackinfo";
                   1001:     default:
                   1002:       return num2str(k);
                   1003:   }
                   1004: }
                   1005: 
                   1006: char *
                   1007: s_idtype (int k)
                   1008: {
                   1009:   switch (k) {
                   1010:     case IDTYPE_FQDN:
                   1011:       return "fqdn";
                   1012:     case IDTYPE_USERFQDN:
                   1013:       return "user_fqdn";
                   1014:     case IDTYPE_KEYID:
                   1015:       return "keyid";
                   1016:     case IDTYPE_ADDRESS:
                   1017:       return "address";
                   1018:     case IDTYPE_ASN1DN:
                   1019:       return "asn1dn";
                   1020:     default:
                   1021:       return num2str(k);
                   1022:   }
                   1023: }
                   1024: 
                   1025: char *
                   1026: s_switch (int k)
                   1027: {
                   1028:   switch (k) {
                   1029:     case FALSE:
                   1030:       return "off";
                   1031:     case TRUE:
                   1032:       return "on";
                   1033:     default:
                   1034:       return num2str(k);
                   1035:   }
                   1036: }

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