16ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* 26ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * err.h 36ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 46ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * error status codes 56ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 66ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * David A. McGrew 76ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Cisco Systems, Inc. 86ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */ 96ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* 106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Copyright (c) 2001-2006, Cisco Systems, Inc. 126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * All rights reserved. 136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Redistribution and use in source and binary forms, with or without 156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * modification, are permitted provided that the following conditions 166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * are met: 176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Redistributions of source code must retain the above copyright 196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * notice, this list of conditions and the following disclaimer. 206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Redistributions in binary form must reproduce the above 226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * copyright notice, this list of conditions and the following 236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * disclaimer in the documentation and/or other materials provided 246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * with the distribution. 256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Neither the name of the Cisco Systems, Inc. nor the names of its 276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * contributors may be used to endorse or promote products derived 286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * from this software without specific prior written permission. 296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 386ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 396ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 406ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 416ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * OF THE POSSIBILITY OF SUCH DAMAGE. 426ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 436ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */ 446ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 456ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 466ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#ifndef ERR_H 476ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define ERR_H 486ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 496ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#include "datatypes.h" 506ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 516ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/** 526ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * @defgroup Error Error Codes 536ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 546ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Error status codes are represented by the enumeration err_status_t. 556ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 566ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * @{ 576ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */ 586ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 596ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 606ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* 616ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * @brief err_status_t defines error codes. 626ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 636ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * The enumeration err_status_t defines error codes. Note that the 646ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * value of err_status_ok is equal to zero, which can simplify error 656ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * checking somewhat. 666ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 676ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */ 686ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgtypedef enum { 696ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_ok = 0, /**< nothing to report */ 706ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_fail = 1, /**< unspecified failure */ 716ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_bad_param = 2, /**< unsupported parameter */ 726ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_alloc_fail = 3, /**< couldn't allocate memory */ 736ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_dealloc_fail = 4, /**< couldn't deallocate properly */ 746ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_init_fail = 5, /**< couldn't initialize */ 756ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_terminus = 6, /**< can't process as much data as requested */ 766ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_auth_fail = 7, /**< authentication failure */ 776ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_cipher_fail = 8, /**< cipher failure */ 786ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_replay_fail = 9, /**< replay check failed (bad index) */ 796ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_replay_old = 10, /**< replay check failed (index too old) */ 806ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_algo_fail = 11, /**< algorithm failed test routine */ 816ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_no_such_op = 12, /**< unsupported operation */ 826ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_no_ctx = 13, /**< no appropriate context found */ 836ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_cant_check = 14, /**< unable to perform desired validation */ 846ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_key_expired = 15, /**< can't use key any more */ 856ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_socket_err = 16, /**< error in use of socket */ 866ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_signal_err = 17, /**< error in use POSIX signals */ 876ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_nonce_bad = 18, /**< nonce check failed */ 886ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_read_fail = 19, /**< couldn't read data */ 896ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_write_fail = 20, /**< couldn't write data */ 906ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_parse_err = 21, /**< error pasring data */ 916ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_encode_err = 22, /**< error encoding data */ 926ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_semaphore_err = 23,/**< error while using semaphores */ 936ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_status_pfkey_err = 24 /**< error while using pfkey */ 946ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org} err_status_t; 956ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 966ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/** 976ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * @} 986ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */ 996ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1006ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgtypedef enum { 1016ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_level_emergency = 0, 1026ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_level_alert, 1036ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_level_critical, 1046ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_level_error, 1056ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_level_warning, 1066ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_level_notice, 1076ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_level_info, 1086ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_level_debug, 1096ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org err_level_none 1106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org} err_reporting_level_t; 1116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* 1136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * err_reporting_init prepares the error system. If 1146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * ERR_REPORTING_SYSLOG is defined, it will open syslog. 1156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 1166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * The ident argument is a string that will be prepended to 1176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * all syslog messages. It is conventionally argv[0]. 1186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */ 1196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgerr_status_t 1216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgerr_reporting_init(char *ident); 1226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#ifdef SRTP_KERNEL_LINUX 1246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgextern err_reporting_level_t err_level; 1256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#else 1266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* 1286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * keydaemon_report_error reports a 'printf' formatted error 1296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * string, followed by a an arg list. The priority argument 1306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * is equivalent to that defined for syslog. 1316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 1326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Errors will be reported to ERR_REPORTING_FILE, if defined, and to 1336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * syslog, if ERR_REPORTING_SYSLOG is defined. 1346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 1356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */ 1366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid 1386ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgerr_report(int priority, char *format, ...); 1396ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif /* ! SRTP_KERNEL_LINUX */ 1406ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1416ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1426ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* 1436ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * debug_module_t defines a debug module 1446ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */ 1456ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1466ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgtypedef struct { 1476ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org int on; /* 1 if debugging is on, 0 if it is off */ 1486ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org char *name; /* printable name for debug module */ 1496ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org} debug_module_t; 1506ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1516ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#ifdef ENABLE_DEBUGGING 1526ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1536ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define debug_on(mod) (mod).on = 1 1546ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1556ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define debug_off(mod) (mod).on = 0 1566ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1576ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* use err_report() to report debug message */ 1586ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define debug_print(mod, format, arg) \ 1596ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org if (mod.on) err_report(err_level_debug, ("%s: " format "\n"), mod.name, arg) 1606ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define debug_print2(mod, format, arg1,arg2) \ 1616ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org if (mod.on) err_report(err_level_debug, ("%s: " format "\n"), mod.name, arg1,arg2) 1626ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1636ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#else 1646ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1656ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* define macros to do nothing */ 1666ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define debug_print(mod, format, arg) 1676ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1686ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define debug_on(mod) 1696ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1706ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define debug_off(mod) 1716ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1726ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif 1736ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 1746ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif /* ERR_H */ 175