Updated UniK olsrd to olsr.org in licence headers
[olsrd.git] / src / local_hna_set.c
1 /*
2  * OLSR ad-hoc routing table management protocol
3  * Copyright (C) 2003 Andreas T√łnnesen (andreto@ifi.uio.no)
4  *
5  * This file is part of the olsr.org OLSR daemon.
6  *
7  * olsr.org is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * olsr.org is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with olsr.org; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  *
21  */
22
23
24 #include "local_hna_set.h"
25
26
27 int
28 olsr_init_local_hna_set()
29 {
30
31   inet_gw = 0;
32   if(ipversion == AF_INET)
33     {
34       netmask_size = sizeof(olsr_u32_t);
35     }
36   else
37     {
38       netmask_size = sizeof(olsr_u16_t);
39     }
40
41   local_hna4_set.next = &local_hna4_set;
42   local_hna4_set.prev = &local_hna4_set;
43   local_hna6_set.next = &local_hna6_set;
44   local_hna6_set.prev = &local_hna6_set;
45
46   return 1;
47 }
48
49
50 void
51 add_local_hna4_entry(union olsr_ip_addr *net, union hna_netmask *mask)
52 {
53   struct local_hna_entry *new_entry;
54
55   if((net->v4 == 0) && (mask->v4 == 0))
56     inet_gw = 1;
57
58   new_entry = olsr_malloc(sizeof(struct local_hna_entry), "Add local HNA entry 4");
59
60   memcpy(&new_entry->A_network_addr, net, sizeof(olsr_u32_t));
61   memcpy(&new_entry->A_netmask, mask, sizeof(olsr_u32_t));
62
63   /* Queue */
64
65   local_hna4_set.next->prev = new_entry;
66   new_entry->next = local_hna4_set.next;
67   local_hna4_set.next = new_entry;
68   new_entry->prev = &local_hna4_set;
69 }
70
71
72 void
73 add_local_hna6_entry(union olsr_ip_addr *net, union hna_netmask *mask)
74 {
75   struct local_hna_entry *new_entry;
76
77   new_entry = olsr_malloc(sizeof(struct local_hna_entry), "Add local HNA entry 6");
78
79   memcpy(&new_entry->A_network_addr, net, sizeof(struct in6_addr));
80   memcpy(&new_entry->A_netmask, mask, sizeof(olsr_u16_t));
81
82   /* Queue */
83
84   local_hna6_set.next->prev = new_entry;
85   new_entry->next = local_hna6_set.next;
86   local_hna6_set.next = new_entry;
87   new_entry->prev = &local_hna6_set;
88 }
89
90
91 int
92 remove_local_hna4_entry(union olsr_ip_addr *net, union hna_netmask *mask)
93 {
94   struct local_hna_entry *entry;
95
96   if((net->v4 == 0) && (mask->v4 == 0))
97     inet_gw = 0;
98
99   for(entry = local_hna4_set.next; 
100       entry != &local_hna4_set;
101       entry = entry->next)
102     {
103       if((net->v4 == entry->A_network_addr.v4) && 
104          (mask->v4 == entry->A_netmask.v4))
105         {
106           entry->prev->next = entry->next;
107           entry->next->prev = entry->prev;
108
109           free(entry);
110           return 1;
111         }
112     }
113   return 0;
114 }
115
116
117
118 int
119 remove_local_hna6_entry(union olsr_ip_addr *net, union hna_netmask *mask)
120 {
121   struct local_hna_entry *entry;
122
123   for(entry = local_hna6_set.next; 
124       entry != &local_hna6_set;
125       entry = entry->next)
126     {
127       if((memcmp(net, &entry->A_network_addr, ipsize) == 0) && 
128          (mask->v6 == entry->A_netmask.v6))
129         {
130           entry->prev->next = entry->next;
131           entry->next->prev = entry->prev;
132           
133           free(entry);
134           return 1;
135         }
136     }
137   return 0;
138 }
139