1/* $Id: common.h,v 1.2 2008/11/20 21:41:03 Exp $ */ 2/* ported from KAME: common.h,v 1.29 2002/06/11 08:24:34 jinmei Exp */ 3 4/* 5 * Copyright (C) 1998 and 1999 WIDE Project. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. Neither the name of the project nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 */ 32 33#define IN6_IFF_INVALID -1 34 35/* ANSI __func__ can not be concatantated (C99 std) */ 36#if defined(HAVE_GCC_FUNCTION) 37#define FNAME __FUNCTION__ ":" 38#else 39#define FNAME "" 40#endif 41 42#ifndef MIN 43#define MIN(a, b) (((a) < (b)) ? (a) : (b)) 44#endif 45#ifndef MAX 46#define MAX(a, b) (((a) > (b)) ? (a) : (b)) 47#endif 48 49extern int foreground; 50extern int debug_thresh; 51 52/* common.c */ 53extern int set_dhcp6c_flags(u_int32_t flags); // Foxconn added pling 09/21/2010 54 55extern int dhcp6_copy_list __P((struct dhcp6_list *, const struct dhcp6_list *)); 56extern void dhcp6_clear_list __P((struct dhcp6_list *)); 57extern int dhcp6_count_list __P((struct dhcp6_list *)); 58extern struct dhcp6_listval *dhcp6_find_listval __P((struct dhcp6_list *, 59 void *, 60 dhcp6_listval_type_t)); 61extern struct dhcp6_listval *dhcp6_add_listval __P((struct dhcp6_list *, 62 void *, 63 dhcp6_listval_type_t)); 64extern struct dhcp6_event *dhcp6_create_event __P((struct dhcp6_if *, int)); 65extern void dhcp6_remove_event __P((struct dhcp6_event *)); 66extern int getifaddr __P((struct in6_addr *, char *, struct in6_addr *, 67 int, int, int)); 68extern int transmit_sa __P((int, struct sockaddr_in6 *, char *, size_t)); 69extern long random_between __P((long, long)); 70extern int prefix6_mask __P((struct in6_addr *, int)); 71extern int sa6_plen2mask __P((struct sockaddr_in6 *, int)); 72extern char *addr2str __P((struct sockaddr *)); 73extern char *in6addr2str __P((struct in6_addr *, int)); 74extern const char *getdev __P((struct sockaddr_in6 *)); 75extern int in6_addrscopebyif __P((struct in6_addr *, char *)); 76extern int in6_scope __P((struct in6_addr *)); 77extern void setloglevel __P((int)); 78#ifdef __GNUC__ 79extern void dprintf(int, const char *, ...) 80 __attribute__ ((__format__(__printf__, 2, 3))); 81#else 82extern void dprintf __P((int, const char *, ...)); 83#endif 84 85extern int get_duid __P((const char *, const char *, struct duid *)); 86extern void dhcp6_init_options __P((struct dhcp6_optinfo *)); 87extern void dhcp6_clear_options __P((struct dhcp6_optinfo *)); 88extern int dhcp6_copy_options __P((struct dhcp6_optinfo *, 89 struct dhcp6_optinfo *)); 90/* Foxconn modified start pling 10/04/2010 */ 91//extern int dhcp6_get_options __P((struct dhcp6opt *, struct dhcp6opt *, 92// struct dhcp6_optinfo *)); 93extern int dhcp6_get_options __P((struct dhcp6opt *, struct dhcp6opt *, 94 struct dhcp6_optinfo *, int, int, int)); 95/* Foxconn modified end pling 10/04/2010 */ 96extern int dhcp6_set_options __P((struct dhcp6opt *, struct dhcp6opt *, 97 struct dhcp6_optinfo *)); 98extern void dhcp6_set_timeoparam __P((struct dhcp6_event *)); 99extern void dhcp6_reset_timer __P((struct dhcp6_event *)); 100extern char *dhcp6optstr __P((int)); 101extern char *dhcp6msgstr __P((int)); 102extern char *dhcp6_stcodestr __P((int)); 103extern char *duidstr __P((const struct duid *)); 104extern int duidcpy __P((struct duid *, const struct duid *)); 105extern int duidcmp __P((const struct duid *, const struct duid *)); 106extern void duidfree __P((struct duid *)); 107extern void relayfree __P((struct relay_list *)); 108extern void ifinit __P((const char *)); 109extern int configure_duid __P((const char *, struct duid *)); 110extern struct dhcp6_if *find_ifconfbyname __P((const char *)); 111extern struct dhcp6_if *find_ifconfbyid __P((unsigned int)); 112extern struct prefix_ifconf *find_prefixifconf __P((const char *)); 113extern struct host_conf *find_hostconf __P((const struct duid *)); 114 115#include "bcmconfig.h" 116#if defined(__CONFIG_UCLIBC__) /* Use macro instead for uClibc. */ 117#define warn(format, ...) do { fprintf(stderr, format "\n", ##__VA_ARGS__); } while(0) 118#define warnx(format, ...) do { fprintf(stderr, format "\n", ##__VA_ARGS__); } while(0) 119 120#define err(rc, format, ...) do { fprintf(stderr, format "\n", ##__VA_ARGS__); exit(rc); } while(0) 121#define errx(rc, format, ...) do { fprintf(stderr, format "\n", ##__VA_ARGS__); exit(rc); } while(0) 122#endif 123