1 /* $OpenBSD: radius_local.h,v 1.1 2015/07/20 23:52:29 yasuoka Exp $ */ 2 3 /*- 4 * Copyright (c) 2009 Internet Initiative Japan Inc. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #ifndef RADIUS_LOCAL_H 30 #define RADIUS_LOCAL_H 31 32 #ifndef countof 33 #define countof(x) (sizeof(x)/sizeof((x)[0])) 34 #endif 35 36 typedef struct _RADIUS_PACKET_DATA { 37 uint8_t code; 38 uint8_t id; 39 uint16_t length; 40 uint8_t authenticator[16]; 41 char attributes[0]; 42 } RADIUS_PACKET_DATA; 43 #pragma pack(1) 44 typedef struct _RADIUS_ATTRIBUTE { 45 uint8_t type; 46 uint8_t length; 47 char data[0]; 48 uint32_t vendor; 49 uint8_t vtype; 50 uint8_t vlength; 51 char vdata[0]; 52 } RADIUS_ATTRIBUTE; 53 #pragma pack() 54 55 struct _RADIUS_PACKET { 56 RADIUS_PACKET_DATA *pdata; 57 size_t capacity; 58 const RADIUS_PACKET *request; 59 }; 60 #define RADIUS_PACKET_CAPACITY_INITIAL 64 61 #define RADIUS_PACKET_CAPACITY_INCREMENT 64 62 63 #define ATTRS_BEGIN(pdata) ((RADIUS_ATTRIBUTE*)pdata->attributes) 64 65 #define ATTRS_END(pdata) \ 66 ((RADIUS_ATTRIBUTE*)(((char*)pdata) + ntohs(pdata->length))) 67 68 #define ATTRS_NEXT(x) ((RADIUS_ATTRIBUTE*)(((char*)x) + x->length)) 69 70 /* 71 * must be expression rather than statement 72 * to be used in third expression of for statement. 73 */ 74 #define ATTRS_ADVANCE(x) (x = ATTRS_NEXT(x)) 75 76 int radius_ensure_add_capacity(RADIUS_PACKET * packet, size_t capacity); 77 78 #define ROUNDUP(a, b) ((((a) + (b) - 1) / (b)) * (b)) 79 #define MINIMUM(a, b) (((a) < (b))? (a) : (b)) 80 81 #endif /* RADIUS_LOCAL_H */ 82