doi.h revision 1.5
172613Skris/* $OpenBSD: doi.h,v 1.5 1999/04/19 19:54:53 niklas Exp $ */ 272613Skris/* $EOM: doi.h,v 1.25 1999/04/02 00:57:24 niklas Exp $ */ 372613Skris 472613Skris/* 572613Skris * Copyright (c) 1998, 1999 Niklas Hallqvist. All rights reserved. 672613Skris * 772613Skris * Redistribution and use in source and binary forms, with or without 872613Skris * modification, are permitted provided that the following conditions 972613Skris * are met: 1072613Skris * 1. Redistributions of source code must retain the above copyright 1172613Skris * notice, this list of conditions and the following disclaimer. 1272613Skris * 2. Redistributions in binary form must reproduce the above copyright 1372613Skris * notice, this list of conditions and the following disclaimer in the 1472613Skris * documentation and/or other materials provided with the distribution. 1572613Skris * 3. All advertising materials mentioning features or use of this software 1672613Skris * must display the following acknowledgement: 1772613Skris * This product includes software developed by Ericsson Radio Systems. 1872613Skris * 4. The name of the author may not be used to endorse or promote products 1972613Skris * derived from this software without specific prior written permission. 2072613Skris * 2172613Skris * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2272613Skris * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2372613Skris * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2472613Skris * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2572613Skris * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2672613Skris * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2772613Skris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2872613Skris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2972613Skris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 3072613Skris * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31194206Ssimon */ 3272613Skris 3372613Skris/* 3472613Skris * This code was written under funding by Ericsson Radio Systems. 3572613Skris */ 3672613Skris 3772613Skris#ifndef _DOI_H_ 3872613Skris#define _DOI_H_ 3972613Skris 4072613Skris#include <sys/types.h> 4172613Skris#include <sys/queue.h> 4272613Skris 4372613Skrisstruct exchange; 4472613Skrisstruct keystate; 4572613Skrisstruct message; 4672613Skrisstruct proto; 4772613Skrisstruct sa; 4872613Skris 4972613Skris/* XXX This structure needs per-field commenting. */ 5072613Skrisstruct doi { 5172613Skris LIST_ENTRY (doi) link; 5272613Skris u_int8_t id; 5372613Skris 5472613Skris /* Size of DOI-specific exchange data. */ 5572613Skris size_t exchange_size; 5672613Skris 5772613Skris /* Size of DOI-specific security association data. */ 5872613Skris size_t sa_size; 5972613Skris 6072613Skris /* Size of DOI-specific protocol data. */ 6172613Skris size_t proto_size; 6289837Skris 6372613Skris int (*debug_attribute) (u_int16_t, u_int8_t *, u_int16_t, void *); 6472613Skris void (*delete_spi) (struct sa *, struct proto *, int); 6572613Skris u_int16_t *(*exchange_script) (u_int8_t); 6672613Skris void (*finalize_exchange) (struct message *); 6772613Skris void (*free_exchange_data) (void *); 6872613Skris void (*free_proto_data) (void *); 6989837Skris void (*free_sa_data) (void *); 7072613Skris struct keystate *(*get_keystate) (struct message *); 7172613Skris u_int8_t *(*get_spi) (size_t *, u_int8_t, struct message *); 7272613Skris int (*is_attribute_incompatible) (u_int16_t, u_int8_t *, u_int16_t, void *); 7372613Skris void (*proto_init) (struct proto *, char *); 7472613Skris void (*setup_situation) (u_int8_t *); 7572613Skris size_t (*situation_size) (void); 7672613Skris u_int8_t (*spi_size) (u_int8_t); 7772613Skris int (*validate_attribute) (u_int16_t, u_int8_t *, u_int16_t, void *); 7872613Skris int (*validate_exchange) (u_int8_t); 7972613Skris int (*validate_id_information) (u_int8_t, u_int8_t *, u_int8_t *, size_t, 8072613Skris struct exchange *); 8172613Skris int (*validate_key_information) (u_int8_t *, size_t); 8272613Skris int (*validate_notification) (u_int16_t); 8372613Skris int (*validate_proto) (u_int8_t); 8472613Skris int (*validate_situation) (u_int8_t *, size_t *); 8572613Skris int (*validate_transform_id) (u_int8_t, u_int8_t); 8672613Skris int (*initiator) (struct message *msg); 8772613Skris int (*responder) (struct message *msg); 8872613Skris}; 8972613Skris 9072613Skrisextern void doi_init (void); 9172613Skrisextern struct doi *doi_lookup (u_int8_t); 9272613Skrisextern void doi_register (struct doi *); 9372613Skris 9472613Skris#endif /* _DOI_H_ */ 9589837Skris