1/* 2 * Copyright (c) 2004-2008 Voltaire Inc. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: 9 * 10 * Redistribution and use in source and binary forms, with or 11 * without modification, are permitted provided that the following 12 * conditions are met: 13 * 14 * - Redistributions of source code must retain the above 15 * copyright notice, this list of conditions and the following 16 * disclaimer. 17 * 18 * - Redistributions in binary form must reproduce the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer in the documentation and/or other materials 21 * provided with the distribution. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 * 32 */ 33 34#define _GNU_SOURCE 35 36#if HAVE_CONFIG_H 37# include <config.h> 38#endif /* HAVE_CONFIG_H */ 39 40#include <inttypes.h> 41#include <string.h> 42#include <errno.h> 43#include <stdio.h> 44#include <stdlib.h> 45#include <unistd.h> 46#include <stdarg.h> 47#include <sys/types.h> 48#include <sys/stat.h> 49#include <fcntl.h> 50#include <sys/ioctl.h> 51#include <unistd.h> 52#include <string.h> 53#include <endian.h> 54#include <byteswap.h> 55#include <sys/poll.h> 56#include <syslog.h> 57#include <netinet/in.h> 58 59#include <common.h> 60 61void 62ibwarn(const char * const fn, char *msg, ...) 63{ 64 char buf[512]; 65 va_list va; 66 int n; 67 68 va_start(va, msg); 69 n = vsnprintf(buf, sizeof(buf), msg, va); 70 va_end(va); 71 72 printf("ibwarn: [%d] %s: %s\n", getpid(), fn, buf); 73} 74 75void 76ibpanic(const char * const fn, char *msg, ...) 77{ 78 char buf[512]; 79 va_list va; 80 int n; 81 82 va_start(va, msg); 83 n = vsnprintf(buf, sizeof(buf), msg, va); 84 va_end(va); 85 86 printf("ibpanic: [%d] %s: %s: (%m)\n", getpid(), fn, buf); 87 syslog(LOG_ALERT, "ibpanic: [%d] %s: %s: (%m)\n", getpid(), fn, buf); 88 89 exit(-1); 90} 91 92void 93logmsg(const char * const fn, char *msg, ...) 94{ 95 char buf[512]; 96 va_list va; 97 int n; 98 99 va_start(va, msg); 100 n = vsnprintf(buf, sizeof(buf), msg, va); 101 va_end(va); 102 103 syslog(LOG_ALERT, "[%d] %s: %s: (%m)\n", getpid(), fn, buf); 104} 105 106void 107xdump(FILE *file, char *msg, void *p, int size) 108{ 109#define HEX(x) ((x) < 10 ? '0' + (x) : 'a' + ((x) -10)) 110 uint8_t *cp = p; 111 int i; 112 113 if (msg) 114 fputs(msg, file); 115 116 for (i = 0; i < size;) { 117 fputc(HEX(*cp >> 4), file); 118 fputc(HEX(*cp & 0xf), file); 119 if (++i >= size) 120 break; 121 fputc(HEX(cp[1] >> 4), file); 122 fputc(HEX(cp[1] & 0xf), file); 123 if ((++i) % 16) 124 fputc(' ', file); 125 else 126 fputc('\n', file); 127 cp += 2; 128 } 129 if (i % 16) { 130 fputc('\n', file); 131 } 132} 133