1386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* 2386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * err.h 3386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 4386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * error status codes 5386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 6386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * David A. McGrew 7386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Cisco Systems, Inc. 8386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 9386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* 10386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 11386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Copyright (c) 2001-2006, Cisco Systems, Inc. 12386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * All rights reserved. 13386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 14386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Redistribution and use in source and binary forms, with or without 15386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * modification, are permitted provided that the following conditions 16386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * are met: 17386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 18386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Redistributions of source code must retain the above copyright 19386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * notice, this list of conditions and the following disclaimer. 20386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 21386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Redistributions in binary form must reproduce the above 22386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * copyright notice, this list of conditions and the following 23386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * disclaimer in the documentation and/or other materials provided 24386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * with the distribution. 25386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 26386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Neither the name of the Cisco Systems, Inc. nor the names of its 27386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * contributors may be used to endorse or promote products derived 28386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * from this software without specific prior written permission. 29386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 30386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 31386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 32386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 33386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 34386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 35386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 36386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 37386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 40386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 41386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * OF THE POSSIBILITY OF SUCH DAMAGE. 42386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 43386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 44386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 45386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 46386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#ifndef ERR_H 47386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define ERR_H 48386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 49386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#include "datatypes.h" 50386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 51386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/** 52386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * @defgroup Error Error Codes 53386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 54386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Error status codes are represented by the enumeration err_status_t. 55386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 56386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * @{ 57386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 58386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 59386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 60386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* 61386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * @brief err_status_t defines error codes. 62386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 63386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * The enumeration err_status_t defines error codes. Note that the 64386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * value of err_status_ok is equal to zero, which can simplify error 65386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * checking somewhat. 66386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 67386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 68386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagaritypedef enum { 69386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_ok = 0, /**< nothing to report */ 70386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_fail = 1, /**< unspecified failure */ 71386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_bad_param = 2, /**< unsupported parameter */ 72386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_alloc_fail = 3, /**< couldn't allocate memory */ 73386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_dealloc_fail = 4, /**< couldn't deallocate properly */ 74386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_init_fail = 5, /**< couldn't initialize */ 75386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_terminus = 6, /**< can't process as much data as requested */ 76386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_auth_fail = 7, /**< authentication failure */ 77386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_cipher_fail = 8, /**< cipher failure */ 78386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_replay_fail = 9, /**< replay check failed (bad index) */ 79386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_replay_old = 10, /**< replay check failed (index too old) */ 80386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_algo_fail = 11, /**< algorithm failed test routine */ 81386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_no_such_op = 12, /**< unsupported operation */ 82386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_no_ctx = 13, /**< no appropriate context found */ 83386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_cant_check = 14, /**< unable to perform desired validation */ 84386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_key_expired = 15, /**< can't use key any more */ 85386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_socket_err = 16, /**< error in use of socket */ 86386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_signal_err = 17, /**< error in use POSIX signals */ 87386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_nonce_bad = 18, /**< nonce check failed */ 88386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_read_fail = 19, /**< couldn't read data */ 89386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_write_fail = 20, /**< couldn't write data */ 90386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_parse_err = 21, /**< error pasring data */ 91386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_encode_err = 22, /**< error encoding data */ 92386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_semaphore_err = 23,/**< error while using semaphores */ 93386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_status_pfkey_err = 24 /**< error while using pfkey */ 94386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} err_status_t; 95386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 96386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/** 97386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * @} 98386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 99386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 100386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagaritypedef enum { 101386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_level_emergency = 0, 102386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_level_alert, 103386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_level_critical, 104386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_level_error, 105386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_level_warning, 106386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_level_notice, 107386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_level_info, 108386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_level_debug, 109386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari err_level_none 110386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} err_reporting_level_t; 111386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 112386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* 113386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * err_reporting_init prepares the error system. If 114386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * ERR_REPORTING_SYSLOG is defined, it will open syslog. 115386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 116386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * The ident argument is a string that will be prepended to 117386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * all syslog messages. It is conventionally argv[0]. 118386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 119386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 120386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_status_t 121386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_reporting_init(char *ident); 122386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 123386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#ifdef SRTP_KERNEL_LINUX 124386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagariextern err_reporting_level_t err_level; 125386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#else 126386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 127386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* 128386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * keydaemon_report_error reports a 'printf' formatted error 129386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * string, followed by a an arg list. The priority argument 130386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * is equivalent to that defined for syslog. 131386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 132386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * Errors will be reported to ERR_REPORTING_FILE, if defined, and to 133386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * syslog, if ERR_REPORTING_SYSLOG is defined. 134386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * 135386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 136386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 137386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarivoid 138386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagarierr_report(int priority, char *format, ...); 139386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif /* ! SRTP_KERNEL_LINUX */ 140386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 141386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 142386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* 143386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari * debug_module_t defines a debug module 144386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari */ 145386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 146386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagaritypedef struct { 147386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari int on; /* 1 if debugging is on, 0 if it is off */ 148386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari char *name; /* printable name for debug module */ 149386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari} debug_module_t; 150386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 151386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#ifdef ENABLE_DEBUGGING 152386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 153386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define debug_on(mod) (mod).on = 1 154386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 155386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define debug_off(mod) (mod).on = 0 156386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 157386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* use err_report() to report debug message */ 158386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define debug_print(mod, format, arg) \ 159386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (mod.on) err_report(err_level_debug, ("%s: " format "\n"), mod.name, arg) 160386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define debug_print2(mod, format, arg1,arg2) \ 161386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari if (mod.on) err_report(err_level_debug, ("%s: " format "\n"), mod.name, arg1,arg2) 162386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 163386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#else 164386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 165386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari/* define macros to do nothing */ 166386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define debug_print(mod, format, arg) 167386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 168386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define debug_on(mod) 169386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 170386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#define debug_off(mod) 171386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 172386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif 173386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari 174386ce4d9144fc190797f4e43a31aeaf76ca2e373Param Reddappagari#endif /* ERR_H */ 175