X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=glue.h;h=de0ab23ff59352b0d9ddd14026af1d94e8f099a2;hb=4e189c94aef3d3e9a4e8edfd2bb989feeb5d5e26;hp=8a6a014f4271439230d86790fefb71e855f34c9b;hpb=1c3dc9f45532c25adc21f297422f0f5a7420b8ca;p=ipfw.git diff --git a/glue.h b/glue.h index 8a6a014..de0ab23 100644 --- a/glue.h +++ b/glue.h @@ -23,8 +23,7 @@ * SUCH DAMAGE. */ /* - * - * $Id$ + * $Id: glue.h 4661 2010-01-04 11:56:12Z luigi $ * * glue code to adapt the FreeBSD version to linux and windows, * userland and kernel. @@ -56,6 +55,7 @@ enum sopt_dir { SOPT_GET, SOPT_SET }; #include /* for size_t */ #include #include +#include #include @@ -86,6 +86,7 @@ enum sopt_dir { SOPT_GET, SOPT_SET }; * so early include this file (to be solved) */ #include #include /* struct in_addr */ +#include /* struct in6_addr */ #include /* * LIST_HEAD in queue.h conflict with linux/list.h @@ -205,11 +206,27 @@ struct clockinfo { int profhz; /* profiling clock frequency */ }; - /* - * linux does not have heapsort + * linux does not have a reentrant version of qsort, + * so we the FreeBSD stdlib version. */ -#define heapsort(_a, _b, _c, _d) qsort(_a, _b, _c, _d) +void +qsort_r(void *a, size_t n, size_t es, void *thunk, + int cmp_t(void *, const void *, const void *)); + +/* prototypes from libutil */ +/* humanize_number(3) */ +#define HN_DECIMAL 0x01 +#define HN_NOSPACE 0x02 +#define HN_B 0x04 +#define HN_DIVISOR_1000 0x08 + +#define HN_GETSCALE 0x10 +#define HN_AUTOSCALE 0x20 + +int humanize_number(char *_buf, size_t _len, int64_t _number, + const char *_suffix, int _scale, int _flags); +int expand_number(const char *_buf, int64_t *_num); #define setprogname(x) /* not present in linux */ @@ -224,6 +241,11 @@ int sysctlbyname(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen); +#ifdef __linux__ +/* linux does not have sin_len in sockaddr, we only remap in userland */ +#define sin_len sin_zero[0] +#endif /* __linux__ */ + #else /* KERNEL_MODULE */ /* linux and windows kernel do not have bcopy ? */ @@ -233,12 +255,22 @@ sysctlbyname(const char *name, void *oldp, size_t *oldlenp, void *newp, #include #endif +/* skb_dst() was introduced from linux 2.6.31 */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31) // or 2.4.x +#define skb_dst(_dummy) skb->dst +#endif + /* definitions useful for the kernel side */ struct route_in6 { }; #endif /* KERNEL_MODULE */ +/* missing in netinet/in.h */ + +#define INET_ADDRSTRLEN 16 + + /* * List of values used for set/getsockopt options. * The base value on FreeBSD is defined as a macro, @@ -253,6 +285,11 @@ enum ipfw_msg_type { IP_FW_TABLE_FLUSH, IP_FW_TABLE_GETSIZE, IP_FW_TABLE_LIST, + IP_FW_DYN_GET, /* new addition */ + + /* IP_FW3 and IP_DUMMYNET3 are the new API */ + IP_FW3 = _IPFW_SOCKOPT_BASE + 8, + IP_DUMMYNET3, IP_FW_ADD = _IPFW_SOCKOPT_BASE + 10, IP_FW_DEL,