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