783e33fc34e94152ae5438c0d6fa7b912f2ec617
[olsrd.git] / lib / nameservice / src / olsrd_copy.c
1 /*************************************************************
2  *                 TOOLS COPIED FROM OLSRD                   *
3  *************************************************************/
4
5 // these functions are copied from the main olsrd source
6 // TODO: there must be a better way!!!
7
8 #include "olsrd_plugin.h"
9
10 /**
11  *Hashing function. Creates a key based on
12  *an 32-bit address.
13  *@param address the address to hash
14  *@return the hash(a value in the 0-31 range)
15  */
16 olsr_u32_t
17 olsr_hashing(union olsr_ip_addr *address)
18 {
19   olsr_u32_t hash;
20   char *tmp;
21
22   if(ipversion == AF_INET)
23     /* IPv4 */  
24     hash = (ntohl(address->v4));
25   else
26     {
27       /* IPv6 */
28       tmp = (char *) &address->v6;
29       hash = (ntohl(*tmp));
30     }
31
32   //hash &= 0x7fffffff; 
33   hash &= HASHMASK;
34
35   return hash;
36 }
37
38
39
40 /**
41  *Checks if a timer has times out. That means
42  *if it is smaller than present time.
43  *@param timer the timeval struct to evaluate
44  *@return positive if the timer has not timed out,
45  *0 if it matches with present time and negative
46  *if it is timed out.
47  */
48 int
49 olsr_timed_out(struct timeval *timer)
50 {
51   return(timercmp(timer, now, <));
52 }
53
54
55
56 /**
57  *Initiates a "timer", wich is a timeval structure,
58  *with the value given in time_value.
59  *@param time_value the value to initialize the timer with
60  *@param hold_timer the timer itself
61  *@return nada
62  */
63 void
64 olsr_init_timer(olsr_u32_t time_value, struct timeval *hold_timer)
65
66   olsr_u16_t  time_value_sec;
67   olsr_u16_t  time_value_msec;
68
69   time_value_sec = time_value/1000;
70   time_value_msec = time_value-(time_value_sec*1000);
71
72   hold_timer->tv_sec = time_value_sec;
73   hold_timer->tv_usec = time_value_msec*1000;   
74 }
75
76
77
78
79
80 /**
81  *Generaties a timestamp a certain number of milliseconds
82  *into the future.
83  *
84  *@param time_value how many milliseconds from now
85  *@param hold_timer the timer itself
86  *@return nada
87  */
88 void
89 olsr_get_timestamp(olsr_u32_t delay, struct timeval *hold_timer)
90
91   olsr_u16_t  time_value_sec;
92   olsr_u16_t  time_value_msec;
93
94   time_value_sec = delay/1000;
95   time_value_msec= delay - (delay*1000);
96
97   hold_timer->tv_sec = now->tv_sec + time_value_sec;
98   hold_timer->tv_usec = now->tv_usec + (time_value_msec*1000);   
99 }
100
101
102 /**
103  *Converts a olsr_ip_addr to a string
104  *Goes for both IPv4 and IPv6
105  *
106  *NON REENTRANT! If you need to use this
107  *function twice in e.g. the same printf
108  *it will not work.
109  *You must use it in different calls e.g.
110  *two different printfs
111  *
112  *@param the IP to convert
113  *@return a pointer to a static string buffer
114  *representing the address in "dots and numbers"
115  *
116  */
117 char *
118 olsr_ip_to_string(union olsr_ip_addr *addr)
119 {
120
121   char *ret;
122   struct in_addr in;
123   
124   if(ipversion == AF_INET)
125     {
126       in.s_addr=addr->v4;
127       ret = inet_ntoa(in);
128     }
129   else
130     {
131       /* IPv6 */
132       ret = (char *)inet_ntop(AF_INET6, &addr->v6, ipv6_buf, sizeof(ipv6_buf));
133     }
134
135   return ret;
136 }