"Fossies" - the Fresh Open Source Software Archive

Member "vpnc-0.5.3/isakmp-pkt.h" (19 Nov 2008, 3844 Bytes) of package /linux/privat/old/vpnc-0.5.3.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "isakmp-pkt.h" see the Fossies "Dox" file reference documentation.

    1 /* ISAKMP packing and unpacking routines.
    2    Copyright (C) 2002  Geoffrey Keating
    3    Copyright (C) 2003-2005 Maurice Massar
    4 
    5    This program is free software; you can redistribute it and/or modify
    6    it under the terms of the GNU General Public License as published by
    7    the Free Software Foundation; either version 2 of the License, or
    8    (at your option) any later version.
    9    
   10    This program is distributed in the hope that it will be useful,
   11    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13    GNU General Public License for more details.
   14    
   15    You should have received a copy of the GNU General Public License
   16    along with this program; if not, write to the Free Software
   17    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   18 
   19    $Id: isakmp-pkt.h 312 2008-06-15 18:09:42Z Joerg Mayer $
   20 */
   21 
   22 #ifndef __ISAKMP_PKT_H__
   23 #define __ISAKMP_PKT_H__
   24 #if defined(__linux__)
   25 #include <stdint.h>
   26 #endif
   27 #include <sys/types.h>
   28 
   29 #include "isakmp.h"
   30 
   31 struct isakmp_attribute {
   32     struct isakmp_attribute *next;
   33     uint16_t type;
   34     enum {
   35         isakmp_attr_lots,
   36         isakmp_attr_16,
   37         isakmp_attr_2x8,
   38         isakmp_attr_acl
   39     } af;
   40     union {
   41         uint16_t attr_16;
   42         uint8_t attr_2x8[2];
   43         struct {
   44             uint16_t length;
   45             uint8_t *data;
   46         } lots;
   47         struct {
   48             uint16_t count;
   49             struct acl_ent_s {
   50                 struct in_addr addr, mask;
   51                 uint16_t protocol, sport, dport;
   52             } *acl_ent;
   53         } acl;
   54     } u;
   55 };
   56 
   57 struct isakmp_payload {
   58     struct isakmp_payload *next;
   59     enum isakmp_payload_enum type;
   60     union {
   61         struct {
   62             uint32_t doi;
   63             uint32_t situation;
   64             struct isakmp_payload *proposals;
   65         } sa;
   66         struct {
   67             uint8_t number;
   68             uint8_t prot_id;
   69             uint8_t spi_size;
   70             uint8_t *spi;
   71             struct isakmp_payload *transforms;
   72         } p;
   73         struct {
   74             uint8_t number;
   75             uint8_t id;
   76             struct isakmp_attribute *attributes;
   77         } t;
   78         struct {
   79             uint16_t length;
   80             uint8_t *data;
   81         } ke, hash, sig, nonce, vid, natd;
   82         struct {
   83             uint8_t type;
   84             uint8_t protocol;
   85             uint16_t port;
   86             uint16_t length;
   87             uint8_t *data;
   88         } id;
   89         struct {
   90             uint8_t encoding;
   91             uint16_t length;
   92             uint8_t *data;
   93         } cert, cr;
   94         struct {
   95             uint32_t doi;
   96             uint8_t protocol;
   97             uint8_t spi_length;
   98             uint8_t *spi;
   99             uint16_t type;
  100             uint16_t data_length;
  101             uint8_t *data;
  102             struct isakmp_attribute *attributes; /* sometimes, data is an attributes array */
  103         } n;
  104         struct {
  105             uint32_t doi;
  106             uint8_t protocol;
  107             uint8_t spi_length;
  108             uint16_t num_spi;
  109             uint8_t **spi;
  110         } d;
  111         struct {
  112             uint8_t type;
  113             uint16_t id;
  114             struct isakmp_attribute *attributes;
  115         } modecfg;
  116     } u;
  117 };
  118 
  119 struct isakmp_packet {
  120     uint8_t i_cookie[ISAKMP_COOKIE_LENGTH];
  121     uint8_t r_cookie[ISAKMP_COOKIE_LENGTH];
  122     uint8_t isakmp_version;
  123     uint8_t exchange_type;
  124     uint8_t flags;
  125     uint32_t message_id;
  126     struct isakmp_payload *payload;
  127 };
  128 
  129 extern void *xallocc(size_t x);
  130 extern struct isakmp_packet *new_isakmp_packet(void);
  131 extern struct isakmp_payload *new_isakmp_payload(uint8_t);
  132 extern struct isakmp_payload *new_isakmp_data_payload(uint8_t type, const void *data,
  133     size_t data_length);
  134 extern struct isakmp_attribute *new_isakmp_attribute(uint16_t, struct isakmp_attribute *);
  135 extern struct isakmp_attribute *new_isakmp_attribute_16(uint16_t type, uint16_t data,
  136     struct isakmp_attribute *next);
  137 extern void free_isakmp_packet(struct isakmp_packet *p);
  138 extern void flatten_isakmp_payloads(struct isakmp_payload *p, uint8_t ** result, size_t * size);
  139 extern void flatten_isakmp_payload(struct isakmp_payload *p, uint8_t ** result, size_t * size);
  140 extern void flatten_isakmp_packet(struct isakmp_packet *p,
  141     uint8_t ** result, size_t * size, size_t blksz);
  142 extern struct isakmp_packet *parse_isakmp_packet(const uint8_t * data,
  143     size_t data_len, int * reject);
  144 extern void test_pack_unpack(void);
  145 
  146 #endif