Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

Portable.h

Go to the documentation of this file.
00001 /*
00002  * Dibbler - a portable DHCPv6
00003  *
00004  * authors: Tomasz Mrugalski <thomson@klub.com.pl>
00005  *          Marek Senderski <msend@o2.pl>
00006  *
00007  * Released under GNU GPL v2 licence
00008  *
00009  * $Id: Portable.h,v 1.44 2005/07/17 21:09:52 thomson Exp $
00010  *
00011  * $Log: Portable.h,v $
00012  * Revision 1.44  2005/07/17 21:09:52  thomson
00013  * Minor improvements for 0.4.1 release.
00014  *
00015  * Revision 1.43  2005/06/07 21:59:24  thomson
00016  * 0.4.1 release.
00017  *
00018  * Revision 1.42  2005/03/15 00:36:22  thomson
00019  * 0.4.0 release (win32 commit)
00020  *
00021  * Revision 1.41  2005/03/08 00:43:48  thomson
00022  * 0.4.0-RC2 release.
00023  *
00024  * Revision 1.40  2005/02/03 19:10:26  thomson
00025  * *** empty log message ***
00026  *
00027  * Revision 1.39  2005/02/01 23:19:43  thomson
00028  * 0.4.0-RC1 version.
00029  *
00030  * Revision 1.38  2005/01/31 18:46:53  thomson
00031  * Win32 project fixes.
00032  *
00033  * Revision 1.37  2005/01/30 22:53:28  thomson
00034  * *** empty log message ***
00035  *
00036  * Revision 1.36  2005/01/25 21:14:14  thomson
00037  * *** empty log message ***
00038  *
00039  * Revision 1.35  2005/01/24 00:42:57  thomson
00040  * no message
00041  *
00042  * Revision 1.34  2005/01/23 23:17:53  thomson
00043  * Relay/global address support related improvements.
00044  *
00045  * Revision 1.33  2005/01/11 22:53:35  thomson
00046  * Relay skeleton implemented.
00047  *
00048  * Revision 1.32  2004/12/27 20:45:00  thomson
00049  * 0.3.1 version.
00050  *
00051  * Revision 1.31  2004/12/15 22:54:45  thomson
00052  * no message
00053  *
00054  * Revision 1.30  2004/12/07 00:45:41  thomson
00055  * Clnt managers creation unified and cleaned up.
00056  *
00057  * Revision 1.29  2004/12/04 23:45:40  thomson
00058  * Problem with client and server on the same Linux host fixed (bug #56)
00059  *
00060  * Revision 1.28  2004/11/15 20:59:12  thomson
00061  * 0.3.0-RC2
00062  *
00063  * Revision 1.27  2004/11/01 23:31:25  thomson
00064  * New options,option handling mechanism and option renewal implemented.
00065  *
00066  * Revision 1.26  2004/10/25 20:45:54  thomson
00067  * Option support, parsers rewritten. ClntIfaceMgr now handles options.
00068  *
00069  * Revision 1.25  2004/10/03 21:53:15  thomson
00070  * strncasecmp macro added (win32)
00071  *
00072  * Revision 1.24  2004/10/03 21:28:45  thomson
00073  * 0.2.1-RC1 version.
00074  *
00075  * Revision 1.23  2004/09/05 15:27:49  thomson
00076  * Data receive switched from recvfrom to recvmsg, unicast partially supported.
00077  *
00078  * Revision 1.21  2004/07/11 14:09:11  thomson
00079  * 0.2.0-RC2
00080  *
00081  * Revision 1.18  2004/06/04 19:03:47  thomson
00082  * Resolved warnings with signed/unisigned
00083  *
00084  * Revision 1.17  2004/05/23 23:45:45  thomson
00085  * logLevel works (finally...)
00086  *
00087  * Revision 1.15  2004/03/29 22:06:49  thomson
00088  * 0.1.1 version
00089  */
00090 
00091 #ifndef PORTABLE_H
00092 #define PORTABLE_H
00093 
00094 //#define DIBBLER_VERSION "0.4.1-CVS (" __DATE__ " " __TIME__ ")"
00095 #define DIBBLER_VERSION "0.4.1"
00096 
00097 #define DIBBLER_COPYRIGHT1 "| Dibbler - a portable DHCPv6, version " DIBBLER_VERSION
00098 #define DIBBLER_COPYRIGHT2 "| Authors : Tomasz Mrugalski<thomson(at)klub.com.pl>,Marek Senderski<msend(at)o2.pl>"
00099 #define DIBBLER_COPYRIGHT3 "| Licence : GNU GPL v2 or later. Developed at Gdansk University of Technology."
00100 #define DIBBLER_COPYRIGHT4 "| Homepage: http://klub.com.pl/dhcpv6/"
00101 
00102 #ifdef LINUX
00103 #include <netinet/in.h>
00104 #include <stdio.h>
00105 #include <stdlib.h>
00106 #include <unistd.h>
00107 #include <resolv.h>
00108 #include <sys/socket.h>
00109 #include <sys/select.h>
00110 #include <sys/time.h>
00111 #include <arpa/inet.h>
00112 #include <ctype.h>
00113 #include <stdarg.h>
00114 #include <string.h>
00115 #endif 
00116 
00117 // **********************************************************************
00118 // *** file setup/default paths *****************************************
00119 // **********************************************************************
00120 
00121 #define CLNTCFGMGR_FILE   "client-CfgMgr.xml"
00122 #define CLNTIFACEMGR_FILE "client-IfaceMgr.xml"
00123 #define CLNTDUID_FILE     "client-duid"
00124 #define CLNTADDRMGR_FILE  "client-AddrMgr.xml"
00125 #define CLNTTRANSMGR_FILE "client-TransMgr.xml"
00126 
00127 #define SRVCFGMGR_FILE    "server-CfgMgr.xml"
00128 #define SRVIFACEMGR_FILE  "server-IfaceMgr.xml"
00129 #define SRVDUID_FILE      "server-duid"
00130 #define SRVADDRMGR_FILE   "server-AddrMgr.xml"
00131 #define SRVTRANSMGR_FILE  "server-TransMgr.xml"
00132 
00133 #define RELCFGMGR_FILE    "relay-CfgMgr.xml"
00134 #define RELIFACEMGR_FILE  "relay-IfaceMgr.xml"
00135 #define RELTRANSMGR_FILE  "relay-TransMgr.xml"
00136 
00137 // false - normal operation
00138 // true - Linux: client and server can be run on the same host, but
00139 //        there is also a drawback: multiple clients can be run at once.
00140 #define CLIENT_BIND_REUSE true
00141 
00142 #ifdef WIN32
00143 #define WORKDIR           ".\\"
00144 #define CLNTCONF_FILE     "client.conf"
00145 #define SRVCONF_FILE      "server.conf"
00146 #define RELCONF_FILE      "relay.conf"
00147 #define CLNTLOG_FILE      "client.log"
00148 #define SRVLOG_FILE           "server.log"
00149 #define RELLOG_FILE       "relay.log"
00150 #define NULLFILE          "nul"
00151 #endif
00152 
00153 #ifdef LINUX
00154 #define WORKDIR           "/var/lib/dibbler"
00155 #define CLNTCONF_FILE     "/etc/dibbler/client.conf"
00156 #define SRVCONF_FILE      "/etc/dibbler/server.conf"
00157 #define RELCONF_FILE      "/etc/dibbler/relay.conf"
00158 #define RESOLVCONF_FILE   "/etc/resolv.conf"
00159 #define CLNTPID_FILE      "/var/lib/dibbler/client.pid"
00160 #define SRVPID_FILE       "/var/lib/dibbler/server.pid"
00161 #define RELPID_FILE       "/var/lib/dibbler/relay.pid"
00162 #define CLNTLOG_FILE      "/var/lib/dibbler/dibbler-client.log"
00163 #define SRVLOG_FILE       "/var/lib/dibbler/dibbler-server.log"
00164 #define RELLOG_FILE       "/var/lib/dibbler/dibbler-relay.log"
00165 #define NULLFILE          "/dev/null"
00166 #endif
00167 
00168 // --- options ---
00169 #define OPTION_DNS_SERVERS_FILENAME  "option-dns-servers"
00170 #define OPTION_DOMAINS_FILENAME      "option-domains"
00171 #define OPTION_NTP_SERVERS_FILENAME  "option-ntp-servers"
00172 #define OPTION_TIMEZONE_FILENAME     "option-timezone"
00173 #define OPTION_SIP_SERVERS_FILENAME  "option-sip-servers"
00174 #define OPTION_SIP_DOMAINS_FILENAME  "option-sip-domains"
00175 #define OPTION_NIS_SERVERS_FILENAME  "option-nis-servers"
00176 #define OPTION_NIS_DOMAIN_FILENAME   "option-nis-domain"
00177 #define OPTION_NISP_SERVERS_FILENAME "option-nisplus-servers"
00178 #define OPTION_NISP_DOMAIN_FILENAME  "option-nisplus-domain"
00179 
00180 // **********************************************************************
00181 // *** interface flags **************************************************
00182 // **********************************************************************
00183 
00184 #ifdef WIN32
00185 #define MAX_IFNAME_LENGTH 255
00186 #define LOGLEVEL        0
00187 #define IF_RUNNING      0x1
00188 #define IF_UP           0x1
00189 #define IF_MULTICAST    0x4
00190 #define IF_LOOPBACK     0x8
00191 #endif
00192 
00193 #ifdef LINUX
00194 #define MAX_IFNAME_LENGTH 64
00195 #define LOGLEVEL        0
00196 #define IF_UP           0x1
00197 #define IF_LOOPBACK     0x8  
00198 #define IF_RUNNING      0x40
00199 #define IF_MULTICAST    0x1000
00200 #endif
00201 
00202 // **********************************************************************
00203 // *** time related functions *******************************************
00204 // **********************************************************************
00205 
00206 #ifdef WIN32
00207 #define strncasecmp _strnicmp
00208 #include <windows.h>
00209 #include <time.h>
00210 #endif
00211 
00212 #define now() (unsigned) time(NULL)
00213 
00214 // **********************************************************************
00215 // *** interface/socket low level functions *****************************
00216 // **********************************************************************
00217 
00218 #ifdef __cplusplus 
00219 extern "C" {
00220 #endif
00221 
00222 extern struct iface * if_list_get();
00223 extern void if_list_release(struct iface * list);
00224     
00225 /* add address to interface */
00226 extern int ipaddr_add(const char* ifacename, int ifindex, const char* addr, 
00227                       unsigned long pref, unsigned long valid);
00228 extern int ipaddr_del(const char* ifacename, int ifindex, const char* addr);
00229 
00230 /* add socket to interface */
00231 extern int sock_add(char* ifacename,int ifaceid, char* addr, int port, int thisifaceonly, int reuse);
00232 extern int sock_del(int fd);
00233 extern int sock_send(int fd, char* addr, char* buf, int buflen, int port, int iface);
00234 extern int sock_recv(int fd, char* myPlainAddr, char* peerPlainAddr, char* buf, int buflen);
00235 
00236 /* pack/unpack address */
00237 extern void print_packed(char addr[]);
00238 extern int inet_pton4(const char* src, char* dst);
00239 extern int inet_pton6(const char* src, char* dst);
00240 extern char * inet_ntop4(const char* src, char* dst);
00241 extern char * inet_ntop6(const char* src, char* dst);
00242 extern void print_packed(char * addr);
00243 extern int is_addr_tentative(char* ifacename, int iface, char* plainAddr);
00244 /* microsleep(int microsecs) */
00245 extern void microsleep(int microsecs);
00246 
00247 /* DNS */
00248 extern int dns_add(const char* ifname, int ifindex, const char* addrPlain);
00249 extern int dns_del(const char* ifname, int ifindex, const char* addrPlain);
00250 extern int domain_add(const char* ifname, int ifindex, const char* domain);
00251 extern int domain_del(const char* ifname, int ifindex, const char* domain);
00252 extern int ntp_add(const char* ifname, int ifindex, const char* addrPlain);
00253 extern int ntp_del(const char* ifname, int ifindex, const char* addrPlain);
00254 extern int timezone_set(const char* ifname, int ifindex, const char* timezone);
00255 extern int timezone_del(const char* ifname, int ifindex, const char* timezone);
00256 extern int sipserver_add(const char* ifname, int ifindex, const char* addrPlain);
00257 extern int sipserver_del(const char* ifname, int ifindex, const char* addrPlain);
00258 extern int sipdomain_add(const char* ifname, int ifindex, const char* domain);
00259 extern int sipdomain_del(const char* ifname, int ifindex, const char* domain);
00260 extern int nisserver_add(const char* ifname, int ifindex, const char* addrPlain);
00261 extern int nisserver_del(const char* ifname, int ifindex, const char* addrPlain);
00262 extern int nisdomain_set(const char* ifname, int ifindex, const char* domain);
00263 extern int nisdomain_del(const char* ifname, int ifindex, const char* domain);
00264 
00265 extern int nisplusserver_add(const char* ifname, int ifindex, const char* addrPlain);
00266 extern int nisplusserver_del(const char* ifname, int ifindex, const char* addrPlain);
00267 extern int nisplusdomain_set(const char* ifname, int ifindex, const char* domain);
00268 extern int nisplusdomain_del(const char* ifname, int ifindex, const char* domain);
00269 
00270 #ifdef __cplusplus
00271 }
00272 #endif
00273 
00274 #ifndef MAX_IFNAME_LENGTH 
00275 #define MAX_IFNAME_LENGTH 255
00276 #endif
00277 
00278 struct iface {
00279     char name[MAX_IFNAME_LENGTH];  // interface name
00280     int  id;                       // interface ID (often called ifindex)
00281     int  hardwareType;             // type of hardware (see RFC 826)
00282     char mac[255];                 // link layer address
00283     int  maclen;                   // length of link layer address
00284     char *linkaddr;                // assigned IPv6 link local addresses 
00285     int  linkaddrcount;            // number of assigned IPv6 link local addresses
00286     char *globaladdr;              // global IPv6 addresses
00287     int  globaladdrcount;          // number of global IPV6 addresses
00288     unsigned int flags;            // look IF_xxx in portable.h
00289     struct iface* next;            // structure describing next iface in system
00290 };
00291 
00292 #endif
00293 

Generated on Sun Aug 7 22:47:14 2005 for Dibbler - a portable DHCPv6 by  doxygen 1.3.9.1