]> rtime.felk.cvut.cz Git - frescor/fwp.git/blob - fwp/lib/fwp/fwp_utils.h
Rename lib/core to lib/fwp. Clean-ups
[frescor/fwp.git] / fwp / lib / fwp / fwp_utils.h
1 #ifndef _FWP_UTILS_H
2 #define _FWP_UTILS_H
3
4 #include <time.h>
5 #include <stdio.h>
6 #include <errno.h>
7 #include <unistd.h>
8 #include <stdlib.h>
9
10 #include <sys/socket.h>
11 #include <sys/un.h>
12 #include <netinet/in.h>
13 #include <arpa/inet.h>
14 #include <fwp_msgb.h>
15
16 #define Kbit 1000
17 #define Mbit (Kbit*Kbit)
18
19 #define SEC_TO_NSEC        1000000000LL
20 #define SEC_TO_USEC        1000000LL
21 #define MSEC_TO_USEC       1000LL
22 #define USEC_TO_NSEC       1000LL
23
24 /*extern const int prio_to_ac[8];
25 extern const unsigned int ac_to_tos[4];
26 extern const char *ac_to_text[4];
27 */
28
29 #define DEBUG
30
31 /* TODO: Introduce multilevel debugging massages and printf-like
32  * debugging function. */
33
34 #ifdef DEBUG
35 #define FWP_DEBUG(fmt,args...) printf("fwp: %s: " fmt, __func__ , ##args)
36 #define FWP_ERROR(fmt,args...) fprintf(stderr, "fwp: %s: " fmt, __func__ , ##args)
37
38 #else
39 #define FWP_DEBUG(fmt,args...)
40 #define FWP_ERROR(fmt,args...)
41 #endif
42
43 static inline ssize_t
44 _fwp_sendto(int s, const void *buf, size_t len, int flags,
45             const fwp_sockaddr_t *sockaddr)
46 {
47         ssize_t ret;
48         while ((ret = sendto(s, buf, len, flags, (struct sockaddr*)&sockaddr->addr, sockaddr->addrlen)) < 0) {
49                 if (errno != EINTR) break;
50         }
51         return ret;
52 }
53
54 static inline ssize_t
55 _fwp_recvfrom(int s, void *buf, size_t len, int flags,
56               fwp_sockaddr_t *sockaddr)
57 {
58         ssize_t ret;
59         while ((ret = recvfrom(s, buf, len, flags, (struct sockaddr*)&sockaddr->addr, 
60                 &sockaddr->addrlen)) < 0) {     
61                         if (errno != EINTR) break;
62         }
63         return ret;
64 }
65
66 static inline ssize_t
67 _fwp_send(int s, const void *buf, size_t len, int flags)
68 {
69         ssize_t ret;
70         while ((ret = send(s, buf, len, flags)) < 0) {
71                 if (errno != EINTR) break;
72         }
73         return ret;
74 }
75
76 static inline ssize_t
77 _fwp_recv(int s, void *buf, size_t len, int flags)
78 {
79         ssize_t ret;
80         while ((ret = recv(s, buf, len, flags)) < 0) {  
81                 if (errno != EINTR) break;
82         }
83         return ret;
84 }
85
86 inline void fwp_timespec_add (struct timespec *sum, const struct timespec *left,
87               const struct timespec *right);
88
89 inline void fwp_timespec_sub (struct timespec *diff, const struct timespec *left,
90               const struct timespec *right);
91
92 int fwp_set_rt_prio(int priority);
93
94 int fwp_create_unix_socket(char *path, struct sockaddr_un *addr);
95
96 int fwp_create_inet_socket(unsigned int port, struct sockaddr_in *addr);
97
98 #endif /* _FWP_UTILS_H */