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