Sync with the new ipfw3 version.
[ipfw.git] / tcc_glue.h
diff --git a/tcc_glue.h b/tcc_glue.h
new file mode 100644 (file)
index 0000000..59a2107
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+ * Copyright (c) 2010 Luigi Rizzo, Universita` di Pisa
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * headers to build userland ipfw under tcc.
+ */
+#ifndef _TCC_GLUE_H
+#define        _TCC_GLUE_H
+
+//#define      __restrict
+#define        NULL    ((void *)0)
+typedef int size_t;
+typedef unsigned char  u_char;
+typedef unsigned char  uint8_t;
+typedef unsigned char  u_int8_t;
+typedef unsigned short u_short;
+typedef unsigned short uint16_t;
+typedef unsigned short u_int16_t;
+typedef int            __int32_t;
+typedef int            int32_t;
+typedef int            socklen_t;
+typedef int            pid_t;
+typedef unsigned int   time_t;
+typedef unsigned int   uint;
+typedef unsigned int   u_int;
+typedef unsigned int   uint32_t;
+typedef unsigned int   u_int32_t;
+typedef unsigned int   gid_t;
+typedef unsigned int   uid_t;
+typedef unsigned long  u_long;
+typedef unsigned long  uintptr_t;
+typedef long long int  int64_t;
+typedef unsigned long long     int uint64_t;
+typedef unsigned long long     int u_int64_t;
+
+typedef uint32_t       in_addr_t;
+struct in_addr {
+       uint32_t        s_addr;
+};
+struct sockaddr_in {
+       uint8_t _sin_len;
+        uint8_t        sin_family;
+        uint16_t       sin_port;
+        struct  in_addr sin_addr;
+        char    sin_zero[8];
+};
+#define IFNAMSIZ       16
+#define INET6_ADDRSTRLEN       64
+
+struct in6_addr {
+        union {
+                uint8_t         __s6_addr8[16];
+                uint16_t        __s6_addr16[8];
+                uint32_t        __s6_addr32[4];
+        } __u6; // _addr;                    /* 128-bit IP6 address */
+};
+
+
+#define LITTLE_ENDIAN 1234
+#define BYTE_ORDER LITTLE_ENDIAN
+
+/* to be revised */
+#define        EX_OK           0
+#define        EX_DATAERR      1
+#define        EX_OSERR        2
+#define        EX_UNAVAILABLE  3
+#define        EX_USAGE        4
+#define        EX_NOHOST       5
+
+#define        EEXIST          1
+#define        EINVAL          2
+#define        ERANGE          3
+#define        ESRCH           4
+
+#define        IPPROTO_IP              1
+#define        IPPROTO_IPV6            2
+#define        IPPROTO_RAW             100
+
+#define        IPTOS_LOWDELAY          100
+#define        IPTOS_MINCOST           101
+#define        IPTOS_RELIABILITY       102
+#define        IPTOS_THROUGHPUT        103
+#define        SOCK_RAW                12
+#define        AF_INET                 2
+#define        AF_INET6                28
+
+#define        INADDR_ANY              0
+
+
+#define bcmp(src, dst, len)    memcmp(src, dst, len)
+#define bcopy(src, dst, len)   memcpy(dst, src, len)
+#define bzero(p, len)  memset(p, 0, len)
+#define index(s, c)    strchr(s, c)
+
+char *strsep(char **stringp, const char *delim);
+
+void    warn(const char *, ...);
+//void    warnx(const char *, ...);
+#define warnx warn
+void    err(int, const char *, ...);
+#define        errx err
+
+uint16_t       htons(uint16_t)__attribute__ ((stdcall));
+uint16_t       ntohs(uint16_t)__attribute__ ((stdcall));
+uint32_t       htonl(uint32_t)__attribute__ ((stdcall));
+uint32_t       ntohl(uint32_t)__attribute__ ((stdcall));
+int inet_aton(const char *cp, struct in_addr *pin);
+char * inet_ntoa(struct in_addr);
+const char * inet_ntop(int af, const void * src, char * dst,
+         socklen_t size);
+int inet_pton(int af, const char * src, void * dst);
+
+struct group {
+       gid_t   gr_gid;
+       char    gr_name[16];
+};
+struct passwd {
+       uid_t   pw_uid;
+       char    pw_name[16];
+};
+
+#define getpwnam(s)    (NULL)
+#define getpwuid(s)    (NULL)
+
+#define getgrnam(x) (NULL)
+#define getgrgid(x) (NULL)
+
+int getopt(int argc, char * const argv[], const char *optstring);
+
+int getsockopt(int s, int level, int optname, void * optval,
+         socklen_t * optlen);
+
+int setsockopt(int s, int level, int optname, const void *optval,
+         socklen_t optlen);
+
+struct  protoent {
+        char    *p_name;           /* official protocol name */
+        char    **p_aliases;  /* alias list */
+        short   p_proto;                /* protocol # */
+};
+
+struct  servent {
+        char    *s_name;           /* official service name */
+        char    **s_aliases;  /* alias list */
+        short   s_port;                 /* port # */
+        char    *s_proto;          /* protocol to use */
+};
+
+struct  hostent {
+        char    *h_name;           /* official name of host */
+        char    **h_aliases;  /* alias list */
+        short   h_addrtype;             /* host address type */
+        short   h_length;               /* length of address */
+        char    **h_addr_list; /* list of addresses */
+#define h_addr  h_addr_list[0]          /* address, for backward compat */
+};
+
+struct hostent* gethostbyaddr(const char* addr, int len, int type)__attribute__ ((stdcall));
+struct hostent* gethostbyname(const char *name)__attribute__ ((stdcall));
+
+struct protoent* getprotobynumber(int number)__attribute__ ((stdcall));
+struct protoent* getprotobyname(const char* name)__attribute__ ((stdcall));
+
+struct servent* getservbyport(int port, const char* proto)__attribute__ ((stdcall));
+struct servent* getservbyname(const char* name, const char* proto) __attribute__ ((stdcall));
+
+extern int optind;
+extern char *optarg;
+
+#include <windef.h>
+
+#define WSADESCRIPTION_LEN      256
+#define WSASYS_STATUS_LEN       128
+
+typedef struct WSAData {
+        WORD                    wVersion;
+        WORD                    wHighVersion;
+        char                    szDescription[WSADESCRIPTION_LEN+1];
+        char                    szSystemStatus[WSASYS_STATUS_LEN+1];
+        unsigned short          iMaxSockets;
+        unsigned short          iMaxUdpDg;
+        char FAR *              lpVendorInfo;
+} WSADATA, * LPWSADATA;
+
+int WSAStartup(
+    WORD wVersionRequested,
+    LPWSADATA lpWSAData
+    );
+
+int
+WSACleanup(void);
+
+int WSAGetLastError();
+
+/* return error on process handling */
+#define        pipe(f)         (-1)
+#define        kill(p, s)      (-1)
+#define        waitpid(w,s,o)  (-1)
+#define fork(x)                (-1)
+#define execvp(f, a)   (-1)
+
+#define _W_INT(i)       (i)
+#define _WSTATUS(x)     (_W_INT(x) & 0177)
+#define WIFEXITED(x)    (_WSTATUS(x) == 0)
+#define WEXITSTATUS(x)  (_W_INT(x) >> 8)
+#define _WSTOPPED       0177            /* _WSTATUS if process is stopped */
+#define WIFSIGNALED(x)  (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
+#define WTERMSIG(x)     (_WSTATUS(x))
+
+#endif /* _TCC_GLUE_H */