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

Generated on Wed Mar 16 00:10:26 2005 for Dibbler - a portable DHCPv6 by  doxygen 1.3.9.1