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

1.1     ! misho       1: /*     $NetBSD: handler.h,v 1.25 2010/11/17 10:40:41 tteras Exp $      */
        !             2: 
        !             3: /* Id: handler.h,v 1.19 2006/02/25 08:25:12 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 _HANDLER_H
        !            35: #define _HANDLER_H
        !            36: 
        !            37: #include <sys/queue.h>
        !            38: #include <openssl/rsa.h>
        !            39: 
        !            40: #include <sys/time.h>
        !            41: 
        !            42: #include "isakmp_var.h"
        !            43: #include "oakley.h"
        !            44: #include "schedule.h"
        !            45: #include "evt.h"
        !            46: 
        !            47: /* Phase 1 handler */
        !            48: /*
        !            49:  * main mode:
        !            50:  *      initiator               responder
        !            51:  *  0   (---)                   (---)
        !            52:  *  1   start                   start (1st msg received)
        !            53:  *  2   (---)                   1st valid msg received
        !            54:  *  3   1st msg sent           1st msg sent
        !            55:  *  4   1st valid msg received  2st valid msg received
        !            56:  *  5   2nd msg sent            2nd msg sent
        !            57:  *  6   2nd valid msg received  3rd valid msg received
        !            58:  *  7   3rd msg sent            3rd msg sent
        !            59:  *  8   3rd valid msg received  (---)
        !            60:  *  9   SA established          SA established
        !            61:  *
        !            62:  * aggressive mode:
        !            63:  *      initiator               responder
        !            64:  *  0   (---)                   (---)
        !            65:  *  1   start                   start (1st msg received)
        !            66:  *  2   (---)                   1st valid msg received
        !            67:  *  3   1st msg sent           1st msg sent
        !            68:  *  4   1st valid msg received  2st valid msg received
        !            69:  *  5   (---)                   (---)
        !            70:  *  6   (---)                   (---)
        !            71:  *  7   (---)                   (---)
        !            72:  *  8   (---)                   (---)
        !            73:  *  9   SA established          SA established
        !            74:  *
        !            75:  * base mode:
        !            76:  *      initiator               responder
        !            77:  *  0   (---)                   (---)
        !            78:  *  1   start                   start (1st msg received)
        !            79:  *  2   (---)                   1st valid msg received
        !            80:  *  3   1st msg sent           1st msg sent
        !            81:  *  4   1st valid msg received  2st valid msg received
        !            82:  *  5   2nd msg sent            (---)
        !            83:  *  6   (---)                   (---)
        !            84:  *  7   (---)                   (---)
        !            85:  *  8   (---)                   (---)
        !            86:  *  9   SA established          SA established
        !            87:  */
        !            88: #define PHASE1ST_SPAWN                 0
        !            89: #define PHASE1ST_START                 1
        !            90: #define PHASE1ST_MSG1RECEIVED          2
        !            91: #define PHASE1ST_MSG1SENT              3
        !            92: #define PHASE1ST_MSG2RECEIVED          4
        !            93: #define PHASE1ST_MSG2SENT              5
        !            94: #define PHASE1ST_MSG3RECEIVED          6
        !            95: #define PHASE1ST_MSG3SENT              7
        !            96: #define PHASE1ST_MSG4RECEIVED          8
        !            97: #define PHASE1ST_ESTABLISHED           9
        !            98: #define PHASE1ST_DYING                 10
        !            99: #define PHASE1ST_EXPIRED               11
        !           100: #define PHASE1ST_MAX                   12
        !           101: 
        !           102: /* About address semantics in each case.
        !           103:  *                     initiator(addr=I)       responder(addr=R)
        !           104:  *                     src     dst             src     dst
        !           105:  *                     (local) (remote)        (local) (remote)
        !           106:  * phase 1 handler     I       R               R       I
        !           107:  * phase 2 handler     I       R               R       I
        !           108:  * getspi msg          R       I               I       R
        !           109:  * acquire msg         I       R
        !           110:  * ID payload          I       R               I       R
        !           111:  */
        !           112: #ifdef ENABLE_HYBRID
        !           113: struct isakmp_cfg_state;
        !           114: #endif
        !           115: struct ph1handle {
        !           116:        isakmp_index index;
        !           117: 
        !           118:        int status;                     /* status of this SA */
        !           119:        int side;                       /* INITIATOR or RESPONDER */
        !           120: 
        !           121:        struct sockaddr *remote;        /* remote address to negosiate ph1 */
        !           122:        struct sockaddr *local;         /* local address to negosiate ph1 */
        !           123:                        /* XXX copy from rmconf due to anonymous configuration.
        !           124:                         * If anonymous will be forbidden, we do delete them. */
        !           125: 
        !           126:        struct remoteconf *rmconf;      /* pointer to remote configuration */
        !           127: 
        !           128:        struct isakmpsa *approval;      /* pointer to SA(s) approved. */
        !           129:        vchar_t *authstr;               /* place holder of string for auth. */
        !           130:                                        /* for example pre-shared key */
        !           131: 
        !           132:        u_int8_t version;               /* ISAKMP version */
        !           133:        u_int8_t etype;                 /* Exchange type actually for use */
        !           134:        u_int8_t flags;                 /* Flags */
        !           135:        u_int32_t msgid;                /* message id */
        !           136: 
        !           137:        u_int32_t vendorid_mask;        /* bitmask of received supported vendor ids*/
        !           138: #ifdef ENABLE_NATT
        !           139:        struct ph1natt_options *natt_options;   /* Selected NAT-T IKE version */
        !           140:        u_int32_t natt_flags;           /* NAT-T related flags */
        !           141: #endif
        !           142: #ifdef ENABLE_FRAG
        !           143:        int frag;                       /* IKE phase 1 fragmentation */
        !           144:        struct isakmp_frag_item *frag_chain;    /* Received fragments */
        !           145: #endif
        !           146: 
        !           147:        struct sched sce;               /* schedule for expire */
        !           148: 
        !           149:        struct sched scr;               /* schedule for resend */
        !           150:        int retry_counter;              /* for resend. */
        !           151:        vchar_t *sendbuf;               /* buffer for re-sending */
        !           152: 
        !           153:        vchar_t *dhpriv;                /* DH; private value */
        !           154:        vchar_t *dhpub;                 /* DH; public value */
        !           155:        vchar_t *dhpub_p;               /* DH; partner's public value */
        !           156:        vchar_t *dhgxy;                 /* DH; shared secret */
        !           157:        vchar_t *nonce;                 /* nonce value */
        !           158:        vchar_t *nonce_p;               /* partner's nonce value */
        !           159:        vchar_t *skeyid;                /* SKEYID */
        !           160:        vchar_t *skeyid_d;              /* SKEYID_d */
        !           161:        vchar_t *skeyid_a;              /* SKEYID_a, i.e. hash */
        !           162:        vchar_t *skeyid_e;              /* SKEYID_e, i.e. encryption */
        !           163:        vchar_t *key;                   /* cipher key */
        !           164:        vchar_t *hash;                  /* HASH minus general header */
        !           165:        vchar_t *sig;                   /* SIG minus general header */
        !           166:        vchar_t *sig_p;                 /* peer's SIG minus general header */
        !           167:        vchar_t *cert;                  /* CERT minus general header */
        !           168:        vchar_t *cert_p;                /* peer's CERT minus general header */
        !           169:        vchar_t *crl_p;                 /* peer's CRL minus general header */
        !           170:        vchar_t *cr_p;                  /* peer's CR not including general */
        !           171:        RSA *rsa;                       /* my RSA key */
        !           172:        RSA *rsa_p;                     /* peer's RSA key */
        !           173:        struct genlist *rsa_candidates; /* possible candidates for peer's RSA key */
        !           174:        vchar_t *id;                    /* ID minus gen header */
        !           175:        vchar_t *id_p;                  /* partner's ID minus general header */
        !           176:                                        /* i.e. struct ipsecdoi_id_b*. */
        !           177:        struct isakmp_ivm *ivm;         /* IVs */
        !           178: 
        !           179:        vchar_t *sa;                    /* whole SA payload to send/to be sent*/
        !           180:                                        /* to calculate HASH */
        !           181:                                        /* NOT INCLUDING general header. */
        !           182: 
        !           183:        vchar_t *sa_ret;                /* SA payload to reply/to be replyed */
        !           184:                                        /* NOT INCLUDING general header. */
        !           185:                                        /* NOTE: Should be release after use. */
        !           186: 
        !           187: #ifdef HAVE_GSSAPI
        !           188:        void *gssapi_state;             /* GSS-API specific state. */
        !           189:                                        /* Allocated when needed */
        !           190:        vchar_t *gi_i;                  /* optional initiator GSS id */
        !           191:        vchar_t *gi_r;                  /* optional responder GSS id */
        !           192: #endif
        !           193: 
        !           194:        struct isakmp_pl_hash *pl_hash; /* pointer to hash payload */
        !           195: 
        !           196:        time_t created;                 /* timestamp for establish */
        !           197:        int initial_contact_received;   /* set if initial contact received */
        !           198: #ifdef ENABLE_STATS
        !           199:        struct timeval start;
        !           200:        struct timeval end;
        !           201: #endif
        !           202: 
        !           203: #ifdef ENABLE_DPD
        !           204:        int             dpd_support;    /* Does remote supports DPD ? */
        !           205:        u_int32_t       dpd_last_ack;
        !           206:        u_int32_t       dpd_seq;                /* DPD seq number to receive */
        !           207:        u_int8_t        dpd_fails;              /* number of failures */
        !           208:        struct sched    dpd_r_u;
        !           209: #endif
        !           210: 
        !           211:        u_int32_t msgid2;               /* msgid counter for Phase 2 */
        !           212:        int ph2cnt;     /* the number which is negotiated by this phase 1 */
        !           213:        LIST_HEAD(_ph2ofph1_, ph2handle) ph2tree;
        !           214: 
        !           215:        LIST_ENTRY(ph1handle) chain;
        !           216: #ifdef ENABLE_HYBRID
        !           217:        struct isakmp_cfg_state *mode_cfg;      /* ISAKMP mode config state */
        !           218: #endif
        !           219:        EVT_LISTENER_LIST(evt_listeners);
        !           220: };
        !           221: 
        !           222: /* For limiting enumeration of ph1 tree */
        !           223: struct ph1selector {
        !           224:        struct sockaddr *local;
        !           225:        struct sockaddr *remote;
        !           226: };
        !           227: 
        !           228: /* Phase 2 handler */
        !           229: /* allocated per a SA or SA bundles of a pair of peer's IP addresses. */
        !           230: /*
        !           231:  *      initiator               responder
        !           232:  *  0   (---)                   (---)
        !           233:  *  1   start                   start (1st msg received)
        !           234:  *  2   acquire msg get         1st valid msg received
        !           235:  *  3   getspi request sent     getspi request sent
        !           236:  *  4   getspi done             getspi done
        !           237:  *  5   1st msg sent            1st msg sent
        !           238:  *  6   1st valid msg received  2nd valid msg received
        !           239:  *  7   (commit bit)            (commit bit)
        !           240:  *  8   SAs added               SAs added
        !           241:  *  9   SAs established         SAs established
        !           242:  * 10   SAs expired             SAs expired
        !           243:  */
        !           244: #define PHASE2ST_SPAWN         0
        !           245: #define PHASE2ST_START         1
        !           246: #define PHASE2ST_STATUS2       2
        !           247: #define PHASE2ST_GETSPISENT    3
        !           248: #define PHASE2ST_GETSPIDONE    4
        !           249: #define PHASE2ST_MSG1SENT      5
        !           250: #define PHASE2ST_STATUS6       6
        !           251: #define PHASE2ST_COMMIT                7
        !           252: #define PHASE2ST_ADDSA         8
        !           253: #define PHASE2ST_ESTABLISHED   9
        !           254: #define PHASE2ST_EXPIRED       10
        !           255: #define PHASE2ST_MAX           11
        !           256: 
        !           257: struct ph2handle {
        !           258:        /* source and destination addresses used for IKE exchange. Might
        !           259:         * differ from source and destination of SA. On the initiator,
        !           260:         * they are tweaked if a hint is available in the SPD (set by
        !           261:         * MIGRATE for instance). Otherwise they are the source and
        !           262:         * destination of SA for transport mode and the tunnel endpoints
        !           263:         * for tunnel mode */
        !           264:        struct sockaddr *src;
        !           265:        struct sockaddr *dst;
        !           266: 
        !           267:        /* source and destination addresses of the SA in the case addresses
        !           268:         * used for IKE exchanges (src and dst) do differ. On the initiator,
        !           269:         * they are set (if needed) in pk_recvacquire(). On the responder,
        !           270:         * they are _derived_ from the local and remote parameters of the
        !           271:         * SP, if available. */
        !           272:        struct sockaddr *sa_src;
        !           273:        struct sockaddr *sa_dst;
        !           274: 
        !           275:        /* Store our Phase 2 ID and the peer ID (ID minus general header).
        !           276:         * On the initiator, they are set during ACQUIRE processing.
        !           277:         * On the responder, they are set from the content of ID payload
        !           278:         * in quick_r1recv(). Then, if they are of type address or
        !           279:         * tunnel, they are compared to sainfo selectors.
        !           280:         */
        !           281:        vchar_t *id;                    /* ID minus gen header */
        !           282:        vchar_t *id_p;                  /* peer's ID minus general header */
        !           283: 
        !           284: #ifdef ENABLE_NATT
        !           285:        struct sockaddr *natoa_src;     /* peer's view of my address */
        !           286:        struct sockaddr *natoa_dst;     /* peer's view of his address */
        !           287: #endif
        !           288: 
        !           289:        u_int32_t spid;                 /* policy id by kernel */
        !           290: 
        !           291:        int status;                     /* ipsec sa status */
        !           292:        u_int8_t side;                  /* INITIATOR or RESPONDER */
        !           293: 
        !           294:        struct sched sce;               /* schedule for expire */
        !           295:        struct sched scr;               /* schedule for resend */
        !           296:        int retry_counter;              /* for resend. */
        !           297:        vchar_t *sendbuf;               /* buffer for re-sending */
        !           298:        vchar_t *msg1;                  /* buffer for re-sending */
        !           299:                                /* used for responder's first message */
        !           300: 
        !           301:        int retry_checkph1;             /* counter to wait phase 1 finished. */
        !           302:                                        /* NOTE: actually it's timer. */
        !           303: 
        !           304:        u_int32_t seq;                  /* sequence number used by PF_KEY */
        !           305:                        /*
        !           306:                         * NOTE: In responder side, we can't identify each SAs
        !           307:                         * with same destination address for example, when
        !           308:                         * socket based SA is required.  So we set a identifier
        !           309:                         * number to "seq", and sent kernel by pfkey.
        !           310:                         */
        !           311:        u_int8_t satype;                /* satype in PF_KEY */
        !           312:                        /*
        !           313:                         * saved satype in the original PF_KEY request from
        !           314:                         * the kernel in order to reply a error.
        !           315:                         */
        !           316: 
        !           317:        u_int8_t flags;                 /* Flags for phase 2 */
        !           318:        u_int32_t msgid;                /* msgid for phase 2 */
        !           319: 
        !           320:        struct sainfo *sainfo;          /* place holder of sainfo */
        !           321:        struct saprop *proposal;        /* SA(s) proposal. */
        !           322:        struct saprop *approval;        /* SA(s) approved. */
        !           323:        u_int32_t lifetime_secs;        /* responder lifetime (seconds) */
        !           324:        u_int32_t lifetime_kb;          /* responder lifetime (kbytes) */
        !           325:        caddr_t spidx_gen;              /* policy from peer's proposal */
        !           326: 
        !           327:        struct dhgroup *pfsgrp;         /* DH; prime number */
        !           328:        vchar_t *dhpriv;                /* DH; private value */
        !           329:        vchar_t *dhpub;                 /* DH; public value */
        !           330:        vchar_t *dhpub_p;               /* DH; partner's public value */
        !           331:        vchar_t *dhgxy;                 /* DH; shared secret */
        !           332:        vchar_t *nonce;                 /* nonce value in phase 2 */
        !           333:        vchar_t *nonce_p;               /* partner's nonce value in phase 2 */
        !           334: 
        !           335:        vchar_t *sa;                    /* whole SA payload to send/to be sent*/
        !           336:                                        /* to calculate HASH */
        !           337:                                        /* NOT INCLUDING general header. */
        !           338: 
        !           339:        vchar_t *sa_ret;                /* SA payload to reply/to be replyed */
        !           340:                                        /* NOT INCLUDING general header. */
        !           341:                                        /* NOTE: Should be release after use. */
        !           342: 
        !           343:        struct isakmp_ivm *ivm;         /* IVs */
        !           344: 
        !           345:        int generated_spidx;    /* mark handlers whith generated policy */
        !           346: 
        !           347: #ifdef ENABLE_STATS
        !           348:        struct timeval start;
        !           349:        struct timeval end;
        !           350: #endif
        !           351:        struct ph1handle *ph1;  /* back pointer to isakmp status */
        !           352: 
        !           353:        LIST_ENTRY(ph2handle) chain;
        !           354:        LIST_ENTRY(ph2handle) ph1bind;  /* chain to ph1handle */
        !           355:        EVT_LISTENER_LIST(evt_listeners);
        !           356: };
        !           357: 
        !           358: /* For limiting enumeration of ph2 tree */
        !           359: struct ph2selector {
        !           360:        u_int32_t spid;
        !           361:        struct sockaddr *src;
        !           362:        struct sockaddr *dst;
        !           363: };
        !           364: 
        !           365: /*
        !           366:  * for handling initial contact.
        !           367:  */
        !           368: struct contacted {
        !           369:        struct sockaddr *remote;        /* remote address to negosiate ph1 */
        !           370:        LIST_ENTRY(contacted) chain;
        !           371: };
        !           372: 
        !           373: /*
        !           374:  * for checking a packet retransmited.
        !           375:  */
        !           376: struct recvdpkt {
        !           377:        struct sockaddr *remote;        /* the remote address */
        !           378:        struct sockaddr *local;         /* the local address */
        !           379:        vchar_t *hash;                  /* hash of the received packet */
        !           380:        vchar_t *sendbuf;               /* buffer for the response */
        !           381:        int retry_counter;              /* how many times to send */
        !           382:        struct timeval time_send;       /* timestamp of previous send */
        !           383: 
        !           384:        LIST_ENTRY(recvdpkt) chain;
        !           385: };
        !           386: 
        !           387: /* for parsing ISAKMP header. */
        !           388: struct isakmp_parse_t {
        !           389:        u_char type;            /* payload type of mine */
        !           390:        int len;                /* ntohs(ptr->len) */
        !           391:        struct isakmp_gen *ptr;
        !           392: };
        !           393: 
        !           394: /*
        !           395:  * for IV management.
        !           396:  *
        !           397:  * - normal case
        !           398:  * initiator                                     responder
        !           399:  * -------------------------                     --------------------------
        !           400:  * initialize iv(A), ive(A).                     initialize iv(A), ive(A).
        !           401:  * encode by ive(A).
        !           402:  * save to iv(B).            ---[packet(B)]-->   save to ive(B).
        !           403:  *                                               decode by iv(A).
        !           404:  *                                               packet consistency.
        !           405:  *                                               sync iv(B) with ive(B).
        !           406:  *                                               check auth, integrity.
        !           407:  *                                               encode by ive(B).
        !           408:  * save to ive(C).          <--[packet(C)]---    save to iv(C).
        !           409:  * decoded by iv(B).
        !           410:  *      :
        !           411:  *
        !           412:  * - In the case that a error is found while cipher processing,
        !           413:  * initiator                                     responder
        !           414:  * -------------------------                     --------------------------
        !           415:  * initialize iv(A), ive(A).                     initialize iv(A), ive(A).
        !           416:  * encode by ive(A).
        !           417:  * save to iv(B).            ---[packet(B)]-->   save to ive(B).
        !           418:  *                                               decode by iv(A).
        !           419:  *                                               packet consistency.
        !           420:  *                                               sync iv(B) with ive(B).
        !           421:  *                                               check auth, integrity.
        !           422:  *                                               error found.
        !           423:  *                                               create notify.
        !           424:  *                                               get ive2(X) from iv(B).
        !           425:  *                                               encode by ive2(X).
        !           426:  * get iv2(X) from iv(B).   <--[packet(Y)]---    save to iv2(Y).
        !           427:  * save to ive2(Y).
        !           428:  * decoded by iv2(X).
        !           429:  *      :
        !           430:  *
        !           431:  * The reason why the responder synchronizes iv with ive after checking the
        !           432:  * packet consistency is that it is required to leave the IV for decoding
        !           433:  * packet.  Because there is a potential of error while checking the packet
        !           434:  * consistency.  Also the reason why that is before authentication and
        !           435:  * integirty check is that the IV for informational exchange has to be made
        !           436:  * by the IV which is after packet decoded and checking the packet consistency.
        !           437:  * Otherwise IV mismatched happens between the intitiator and the responder.
        !           438:  */
        !           439: struct isakmp_ivm {
        !           440:        vchar_t *iv;    /* for decoding packet */
        !           441:                        /* if phase 1, it's for computing phase2 iv */
        !           442:        vchar_t *ive;   /* for encoding packet */
        !           443: };
        !           444: 
        !           445: /* for dumping */
        !           446: struct ph1dump {
        !           447:        isakmp_index index;
        !           448:        int status;
        !           449:        int side;
        !           450:        struct sockaddr_storage remote;
        !           451:        struct sockaddr_storage local;
        !           452:        u_int8_t version;
        !           453:        u_int8_t etype;
        !           454:        time_t created;
        !           455:        int ph2cnt;
        !           456: };
        !           457: 
        !           458: struct sockaddr;
        !           459: struct ph1handle;
        !           460: struct ph2handle;
        !           461: struct policyindex;
        !           462: 
        !           463: extern struct ph1handle *getph1byindex __P((isakmp_index *));
        !           464: extern struct ph1handle *getph1byindex0 __P((isakmp_index *));
        !           465: 
        !           466: extern int enumph1 __P((struct ph1selector *ph1sel,
        !           467:                        int (* enum_func)(struct ph1handle *iph1, void *arg),
        !           468:                        void *enum_arg));
        !           469: 
        !           470: #define GETPH1_F_ESTABLISHED           0x0001
        !           471: 
        !           472: extern struct ph1handle *getph1 __P((struct ph1handle *ph1hint,
        !           473:                                     struct sockaddr *local,
        !           474:                                     struct sockaddr *remote,
        !           475:                                     int flags));
        !           476: 
        !           477: #define getph1byaddr(local, remote, est) \
        !           478:        getph1(NULL, local, remote, est ? GETPH1_F_ESTABLISHED : 0)
        !           479: #define getph1bydstaddr(remote) \
        !           480:        getph1(NULL, NULL, remote, 0)
        !           481: 
        !           482: #ifdef ENABLE_HYBRID
        !           483: struct ph1handle *getph1bylogin __P((char *));
        !           484: int purgeph1bylogin __P((char *));
        !           485: #endif
        !           486: extern void migrate_ph12 __P((struct ph1handle *old_iph1, struct ph1handle *new_iph1));
        !           487: extern void migrate_dying_ph12 __P((struct ph1handle *iph1));
        !           488: extern vchar_t *dumpph1 __P((void));
        !           489: extern struct ph1handle *newph1 __P((void));
        !           490: extern void delph1 __P((struct ph1handle *));
        !           491: extern int insph1 __P((struct ph1handle *));
        !           492: extern void remph1 __P((struct ph1handle *));
        !           493: extern int resolveph1rmconf __P((struct ph1handle *));
        !           494: extern void flushph1 __P((void));
        !           495: extern void initph1tree __P((void));
        !           496: extern int ph1_rekey_enabled __P((struct ph1handle *));
        !           497: 
        !           498: extern int enumph2 __P((struct ph2selector *ph2sel,
        !           499:                        int (* enum_func)(struct ph2handle *iph2, void *arg),
        !           500:                        void *enum_arg));
        !           501: extern struct ph2handle *getph2byseq __P((u_int32_t));
        !           502: extern struct ph2handle *getph2bysaddr __P((struct sockaddr *,
        !           503:        struct sockaddr *));
        !           504: extern struct ph2handle *getph2bymsgid __P((struct ph1handle *, u_int32_t));
        !           505: extern struct ph2handle *getph2byid __P((struct sockaddr *,
        !           506:        struct sockaddr *, u_int32_t));
        !           507: extern struct ph2handle *getph2bysaidx __P((struct sockaddr *,
        !           508:        struct sockaddr *, u_int, u_int32_t));
        !           509: extern struct ph2handle *newph2 __P((void));
        !           510: extern void initph2 __P((struct ph2handle *));
        !           511: extern void delph2 __P((struct ph2handle *));
        !           512: extern int insph2 __P((struct ph2handle *));
        !           513: extern void remph2 __P((struct ph2handle *));
        !           514: extern void flushph2 __P((void));
        !           515: extern void deleteallph2 __P((struct sockaddr *, struct sockaddr *, u_int));
        !           516: extern void initph2tree __P((void));
        !           517: 
        !           518: extern void bindph12 __P((struct ph1handle *, struct ph2handle *));
        !           519: extern void unbindph12 __P((struct ph2handle *));
        !           520: 
        !           521: extern struct contacted *getcontacted __P((struct sockaddr *));
        !           522: extern int inscontacted __P((struct sockaddr *));
        !           523: extern void remcontacted __P((struct sockaddr *));
        !           524: extern void initctdtree __P((void));
        !           525: 
        !           526: extern int check_recvdpkt __P((struct sockaddr *,
        !           527:        struct sockaddr *, vchar_t *));
        !           528: extern int add_recvdpkt __P((struct sockaddr *, struct sockaddr *,
        !           529:        vchar_t *, vchar_t *));
        !           530: extern void init_recvdpkt __P((void));
        !           531: 
        !           532: #ifdef ENABLE_HYBRID
        !           533: extern int exclude_cfg_addr __P((const struct sockaddr *));
        !           534: #endif
        !           535: 
        !           536: extern int revalidate_ph12(void);
        !           537: 
        !           538: #endif /* _HANDLER_H */

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