a4890049b417de2d4a43790ebf365e708f911a87
[project/luci.git] / contrib / package / olsrd-luci / patches / 100-olsrd-hg-r3.patch
1 diff --exclude='.hg*' -Nur olsrd-0.5.6-r3/lib/nameservice/README_NAMESERVICE /home/sven-ola/olsrd-0.5.6/lib/nameservice/README_NAMESERVICE
2 --- olsrd-0.5.6-r3/lib/nameservice/README_NAMESERVICE   2008-12-02 11:42:54.000000000 +0100
3 +++ /home/sven-ola/olsrd-0.5.6/lib/nameservice/README_NAMESERVICE       2008-12-03 09:11:11.000000000 +0100
4 @@ -112,12 +112,32 @@
5          table. Useful for executing a script that uses the hosts file
6          to keep a website or a database updated.
7  
8 +PlParam "service" "http://me.olsr:80|tcp|my little homepage"
9 +        Add a new service announcement to be spreaded in the mesh.
10 +
11 +PlParam "services-file" "/path/to/services_file"
12 +       File to write (default: /var/run/services_olsr)
13 +
14  PlParam "services-change-script" "/path/to/script"
15          Similar to the previous parameter. Script to execute when there
16          is a change in the services list propagated by the nameserver
17          plugin. Useful for executing a script that uses the services file
18          to keep a website or a database updated.
19  
20 +PlParam "mac" "xx:xx:xx:xx:xx:xx[,0-255]"
21 +        Add a new MAC addr to be spreaded in the mesh. This MAC addr
22 +        may be used to fine control nerve-wreck-page solutions based
23 +        on MAC adresses. The optional dec. number designates a class.
24 +
25 +PlParam "macs-file" "/path/to/macs_file"
26 +       File to write (default: /var/run/macs_olsr)
27 +
28 +PlParam "macs-change-script" "/path/to/script"
29 +        Similar to the previous parameter. Script to execute when there
30 +        is a change in the macs list propagated by the nameserver
31 +        plugin. Useful for executing a script that uses the services file
32 +        to keep a website or a database updated.
33 +
34  ---------------------------------------------------------------------
35  SAMPLE CONFIG
36  ---------------------------------------------------------------------
37 diff --exclude='.hg*' -Nur olsrd-0.5.6-r3/lib/nameservice/src/nameservice.c /home/sven-ola/olsrd-0.5.6/lib/nameservice/src/nameservice.c
38 --- olsrd-0.5.6-r3/lib/nameservice/src/nameservice.c    2008-12-02 11:50:01.000000000 +0100
39 +++ /home/sven-ola/olsrd-0.5.6/lib/nameservice/src/nameservice.c        2008-12-03 09:20:01.000000000 +0100
40 @@ -75,8 +75,10 @@
41  static double my_timeout = NAME_VALID_TIME;
42  static char my_resolv_file[MAX_FILE + 1];
43  static char my_services_file[MAX_FILE + 1];
44 +static char my_macs_file[MAX_FILE + 1];
45  static char my_name_change_script[MAX_FILE + 1];
46  static char my_services_change_script[MAX_FILE + 1];
47 +static char my_macs_change_script[MAX_FILE + 1];
48  static char latlon_in_file[MAX_FILE + 1];
49  static char my_latlon_file[MAX_FILE + 1];
50  float my_lat = 0.0, my_lon = 0.0;
51 @@ -96,6 +98,10 @@
52  static struct name_entry *my_services = NULL;
53  static olsr_bool service_table_changed = OLSR_TRUE;
54  
55 +static struct list_node mac_list[HASHSIZE];
56 +static struct name_entry *my_macs = NULL;
57 +static olsr_bool mac_table_changed = OLSR_TRUE;
58 +
59  static struct list_node forwarder_list[HASHSIZE];
60  static struct name_entry *my_forwarders = NULL;
61  static olsr_bool forwarder_table_changed = OLSR_TRUE;
62 @@ -131,6 +137,7 @@
63  
64    GetWindowsDirectory(my_hosts_file, MAX_FILE - 12);
65    GetWindowsDirectory(my_services_file, MAX_FILE - 12);
66 +  GetWindowsDirectory(my_macs_file, MAX_FILE - 12);
67    GetWindowsDirectory(my_resolv_file, MAX_FILE - 12);
68  
69    len = strlen(my_hosts_file);
70 @@ -143,6 +150,11 @@
71      strscat(my_services_file, "\\", sizeof(my_services_file));
72    strscat(my_services_file, "services_olsr", sizeof(my_services_file));
73  
74 +  len = strlen(my_macs_file);
75 +  if (my_macs_file[len - 1] != '\\')
76 +    strscat(my_macs_file, "\\", sizeof(my_macs_file));
77 +  strscat(my_macs_file, "macs_olsr", sizeof(my_macs_file));
78 +
79    len = strlen(my_resolv_file);
80    if (my_resolv_file[len - 1] != '\\')
81      strscat(my_resolv_file, "\\", sizeof(my_resolv_file));
82 @@ -150,6 +162,7 @@
83  #else
84    strscpy(my_hosts_file, "/var/run/hosts_olsr", sizeof(my_hosts_file));
85    strscpy(my_services_file, "/var/run/services_olsr", sizeof(my_services_file));
86 +  strscpy(my_macs_file, "/var/run/macs_olsr", sizeof(my_macs_file));
87    strscpy(my_resolv_file, "/var/run/resolvconf_olsr", sizeof(my_resolv_file));
88    *my_sighup_pid_file = 0;
89  #endif
90 @@ -160,12 +173,14 @@
91    latlon_in_file[0] = '\0';
92    my_name_change_script[0] = '\0';
93    my_services_change_script[0] = '\0';
94 +  my_macs_change_script[0] = '\0';
95  
96    /* init the lists heads */
97    for (i = 0; i < HASHSIZE; i++) {
98      list_head_init(&name_list[i]);
99      list_head_init(&forwarder_list[i]);
100      list_head_init(&service_list[i]);
101 +    list_head_init(&mac_list[i]);
102      list_head_init(&latlon_list[i]);
103    }
104  
105 @@ -232,58 +247,31 @@
106    return 0;
107  }
108  
109 +/* *INDENT-OFF* */
110  static const struct olsrd_plugin_parameters plugin_parameters[] = {
111 -  {.name = "interval",.set_plugin_parameter = &set_plugin_int,.data = &my_interval},
112 -  {.name = "timeout",.set_plugin_parameter = &set_nameservice_float,.data = &my_timeout},
113 -  {.name = "sighup-pid-file",.set_plugin_parameter = &set_plugin_string,.data = &my_sighup_pid_file,.addon =
114 -   {sizeof(my_sighup_pid_file)}
115 -   }
116 -  ,
117 -  {.name = "hosts-file",.set_plugin_parameter = &set_plugin_string,.data = &my_hosts_file,.addon = {sizeof(my_hosts_file)}
118 -   }
119 -  ,
120 -  {.name = "name-change-script",.set_plugin_parameter = &set_plugin_string,.data = &my_name_change_script,.addon =
121 -   {sizeof(my_name_change_script)}
122 -   }
123 -  ,
124 -  {.name = "services-change-script",.set_plugin_parameter = &set_plugin_string,.data = &my_services_change_script,.addon =
125 -   {sizeof(my_services_change_script)}
126 -   }
127 -  ,
128 -  {.name = "resolv-file",.set_plugin_parameter = &set_plugin_string,.data = &my_resolv_file,.addon = {sizeof(my_resolv_file)}
129 -   }
130 -  ,
131 -  {.name = "suffix",.set_plugin_parameter = &set_plugin_string,.data = &my_suffix,.addon = {sizeof(my_suffix)}
132 -   }
133 -  ,
134 -  {.name = "add-hosts",.set_plugin_parameter = &set_plugin_string,.data = &my_add_hosts,.addon = {sizeof(my_add_hosts)}
135 -   }
136 -  ,
137 -  {.name = "services-file",.set_plugin_parameter = &set_plugin_string,.data = &my_services_file,.addon = {sizeof(my_services_file)}
138 -   }
139 -  ,
140 -  {.name = "lat",.set_plugin_parameter = &set_nameservice_float,.data = &my_lat}
141 -  ,
142 -  {.name = "lon",.set_plugin_parameter = &set_nameservice_float,.data = &my_lon}
143 -  ,
144 -  {.name = "latlon-file",.set_plugin_parameter = &set_plugin_string,.data = &my_latlon_file,.addon = {sizeof(my_latlon_file)}
145 -   }
146 -  ,
147 -  {.name = "latlon-infile",.set_plugin_parameter = &set_plugin_string,.data = &latlon_in_file,.addon = {sizeof(latlon_in_file)}
148 -   }
149 -  ,
150 -  {.name = "dns-server",.set_plugin_parameter = &set_nameservice_server,.data = &my_forwarders,.addon = {NAME_FORWARDER}
151 -   }
152 -  ,
153 -  {.name = "name",.set_plugin_parameter = &set_nameservice_name,.data = &my_names,.addon = {NAME_HOST}
154 -   }
155 -  ,
156 -  {.name = "service",.set_plugin_parameter = &set_nameservice_name,.data = &my_services,.addon = {NAME_SERVICE}
157 -   }
158 -  ,
159 -  {.name = "",.set_plugin_parameter = &set_nameservice_host,.data = &my_names}
160 -  ,
161 +  { .name = "interval",               .set_plugin_parameter = &set_plugin_int,         .data = &my_interval },
162 +  { .name = "timeout",                .set_plugin_parameter = &set_nameservice_float,  .data = &my_timeout },
163 +  { .name = "sighup-pid-file",        .set_plugin_parameter = &set_plugin_string,      .data = &my_sighup_pid_file,        .addon = {sizeof(my_sighup_pid_file)} },
164 +  { .name = "hosts-file",             .set_plugin_parameter = &set_plugin_string,      .data = &my_hosts_file,             .addon = {sizeof(my_hosts_file)} },
165 +  { .name = "name-change-script",     .set_plugin_parameter = &set_plugin_string,      .data = &my_name_change_script,     .addon = {sizeof(my_name_change_script)} },
166 +  { .name = "services-change-script", .set_plugin_parameter = &set_plugin_string,      .data = &my_services_change_script, .addon = {sizeof(my_services_change_script)} },
167 +  { .name = "macs-change-script",     .set_plugin_parameter = &set_plugin_string,      .data = &my_macs_change_script,     .addon = {sizeof(my_macs_change_script)} },
168 +  { .name = "resolv-file",            .set_plugin_parameter = &set_plugin_string,      .data = &my_resolv_file,            .addon = {sizeof(my_resolv_file)} },
169 +  { .name = "suffix",                 .set_plugin_parameter = &set_plugin_string,      .data = &my_suffix,                 .addon = {sizeof(my_suffix)} },
170 +  { .name = "add-hosts",              .set_plugin_parameter = &set_plugin_string,      .data = &my_add_hosts,              .addon = {sizeof(my_add_hosts)} },
171 +  { .name = "services-file",          .set_plugin_parameter = &set_plugin_string,      .data = &my_services_file,          .addon = {sizeof(my_services_file)} },
172 +  { .name = "macs-file",              .set_plugin_parameter = &set_plugin_string,      .data = &my_macs_file,              .addon = {sizeof(my_macs_file)} },
173 +  { .name = "lat",                    .set_plugin_parameter = &set_nameservice_float,  .data = &my_lat },
174 +  { .name = "lon",                    .set_plugin_parameter = &set_nameservice_float,  .data = &my_lon },
175 +  { .name = "latlon-file",            .set_plugin_parameter = &set_plugin_string,      .data = &my_latlon_file,            .addon = {sizeof(my_latlon_file)} },
176 +  { .name = "latlon-infile",          .set_plugin_parameter = &set_plugin_string,      .data = &latlon_in_file,            .addon = {sizeof(latlon_in_file)} },
177 +  { .name = "dns-server",             .set_plugin_parameter = &set_nameservice_server, .data = &my_forwarders,             .addon = {NAME_FORWARDER} },
178 +  { .name = "name",                   .set_plugin_parameter = &set_nameservice_name,   .data = &my_names,                  .addon = {NAME_HOST} },
179 +  { .name = "service",                .set_plugin_parameter = &set_nameservice_name,   .data = &my_services,               .addon = {NAME_SERVICE} },
180 +  { .name = "mac",                    .set_plugin_parameter = &set_nameservice_name,   .data = &my_macs,                   .addon = {NAME_MACADDR} },
181 +  { .name = "",                       .set_plugin_parameter = &set_nameservice_host,   .data = &my_names },
182  };
183 +/* *INDENT-OFF* */
184  
185  void
186  olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
187 @@ -404,6 +392,7 @@
188    my_names = remove_nonvalid_names_from_list(my_names, NAME_HOST);
189    my_forwarders = remove_nonvalid_names_from_list(my_forwarders, NAME_FORWARDER);
190    my_services = remove_nonvalid_names_from_list(my_services, NAME_SERVICE);
191 +  my_macs = remove_nonvalid_names_from_list(my_macs, NAME_MACADDR);
192  
193    /* register functions with olsrd */
194    olsr_parser_add_function(&olsr_parser, PARSER_TYPE);
195 @@ -435,6 +424,9 @@
196    case NAME_SERVICE:
197      valid = allowed_service(my_list->name);
198      break;
199 +  case NAME_MACADDR:
200 +    valid = is_mac_wellformed(my_list->name);
201 +    break;
202    case NAME_LATLON:
203      valid = is_latlon_wellformed(my_list->name);
204      break;
205 @@ -470,10 +462,12 @@
206  
207    free_name_entry_list(&my_names);
208    free_name_entry_list(&my_services);
209 +  free_name_entry_list(&my_macs);
210    free_name_entry_list(&my_forwarders);
211  
212    free_all_list_entries(name_list);
213    free_all_list_entries(service_list);
214 +  free_all_list_entries(mac_list);
215    free_all_list_entries(forwarder_list);
216    free_all_list_entries(latlon_list);
217  
218 @@ -517,11 +511,12 @@
219  {
220    write_file_timer = NULL;
221  
222 -  write_resolv_file();          /* if forwarder_table_changed */
223 -  write_hosts_file();           /* if name_table_changed */
224 -  write_services_file();        /* if service_table_changed */
225 +  write_resolv_file();             /* if forwarder_table_changed */
226 +  write_hosts_file();              /* if name_table_changed */
227 +  write_services_file(OLSR_FALSE); /* if service_table_changed */
228 +  write_services_file(OLSR_TRUE);  /* if mac_table_changed */
229  #ifdef WIN32
230 -  write_latlon_file();          /* if latlon_table_changed */
231 +  write_latlon_file();             /* if latlon_table_changed */
232  #endif
233  }
234  
235 @@ -688,7 +683,6 @@
236  encap_namemsg(struct namemsg *msg)
237  {
238    struct name_entry *my_name;
239 -  struct name_entry *my_service;
240  
241    // add the hostname, service and forwarder entries after the namemsg header
242    char *pos = (char *)msg + sizeof(struct namemsg);
243 @@ -705,8 +699,13 @@
244      i++;
245    }
246    // services
247 -  for (my_service = my_services; my_service != NULL; my_service = my_service->next) {
248 -    pos = create_packet((struct name *)pos, my_service);
249 +  for (my_name = my_services; my_name != NULL; my_name = my_name->next) {
250 +    pos = create_packet((struct name *)pos, my_name);
251 +    i++;
252 +  }
253 +  // macs
254 +  for (my_name = my_macs; my_name != NULL; my_name = my_name->next) {
255 +    pos = create_packet((struct name *)pos, my_name);
256      i++;
257    }
258    // latlon
259 @@ -779,6 +778,7 @@
260    //XXX: should I check the from_packet->ip here? If so, why not also check the ip from HOST and SERVICE?
261    if ((type_of_from_packet == NAME_HOST && !is_name_wellformed(name))
262        || (type_of_from_packet == NAME_SERVICE && !is_service_wellformed(name))
263 +      || (type_of_from_packet == NAME_MACADDR && !is_mac_wellformed(name))
264        || (type_of_from_packet == NAME_LATLON && !is_latlon_wellformed(name))) {
265      OLSR_PRINTF(4, "NAME PLUGIN: invalid name [%s] received, skipping.\n", name);
266      return;
267 @@ -886,6 +886,9 @@
268      case NAME_SERVICE:
269        insert_new_name_in_list(originator, service_list, from_packet, &service_table_changed, vtime);
270        break;
271 +    case NAME_MACADDR:
272 +      insert_new_name_in_list(originator, mac_list, from_packet, &mac_table_changed, vtime);
273 +      break;
274      case NAME_LATLON:
275        insert_new_name_in_list(originator, latlon_list, from_packet, &latlon_table_changed, vtime);
276        break;
277 @@ -1128,45 +1131,47 @@
278  }
279  
280  /**
281 - * write services to a file in the format:
282 - * service  #originator ip
283 + * write services or macs to a file in the format:
284 + * service-or-mac  #originator ip
285   *
286   * since service has a special format
287   * each line will look similar to e.g.
288   * http://me.olsr:80|tcp|my little homepage
289 + * while a mac line will look similar to
290 + * 02:ca:ff:ee:ba:be,1
291   */
292  void
293 -write_services_file(void)
294 +write_services_file(olsr_bool writemacs)
295  {
296    int hash;
297    struct name_entry *name;
298    struct db_entry *entry;
299    struct list_node *list_head, *list_node;
300 -  FILE *services_file;
301 +  FILE *file;
302    time_t currtime;
303  
304 -  if (!service_table_changed)
305 +  if ((writemacs && !mac_table_changed) || (!writemacs && !service_table_changed))
306      return;
307  
308 -  OLSR_PRINTF(2, "NAME PLUGIN: writing services file\n");
309 +  OLSR_PRINTF(2, "NAME PLUGIN: writing %s file\n", writemacs ? "macs" : "services");
310  
311 -  services_file = fopen(my_services_file, "w");
312 -  if (services_file == NULL) {
313 -    OLSR_PRINTF(2, "NAME PLUGIN: cant write services_file file\n");
314 +  file = fopen(writemacs ? my_macs_file : my_services_file, "w");
315 +  if (file == NULL) {
316 +    OLSR_PRINTF(2, "NAME PLUGIN: cant write %s\n", writemacs ? my_macs_file : my_services_file);
317      return;
318    }
319  
320 -  fprintf(services_file, "### this file is overwritten regularly by olsrd\n");
321 -  fprintf(services_file, "### do not edit\n\n");
322 +  fprintf(file, "### this file is overwritten regularly by olsrd\n");
323 +  fprintf(file, "### do not edit\n\n");
324  
325 -  // write own services
326 -  for (name = my_services; name != NULL; name = name->next) {
327 -    fprintf(services_file, "%s\t# my own service\n", name->name);
328 +  // write own services or macs
329 +  for (name = writemacs ? my_macs : my_services; name != NULL; name = name->next) {
330 +    fprintf(file, "%s\t# my own %s\n", name->name, writemacs ? "mac" : "service");
331    }
332  
333 -  // write received services
334 +  // write received services or macs
335    for (hash = 0; hash < HASHSIZE; hash++) {
336 -    list_head = &service_list[hash];
337 +    list_head = writemacs ? &mac_list[hash] : &service_list[hash];
338      for (list_node = list_head->next; list_node != list_head; list_node = list_node->next) {
339  
340        entry = list2db(list_node);
341 @@ -1176,26 +1181,38 @@
342          OLSR_PRINTF(6, "%s\t", name->name);
343          OLSR_PRINTF(6, "\t#%s\n", olsr_ip_to_string(&strbuf, &entry->originator));
344  
345 -        fprintf(services_file, "%s\t", name->name);
346 -        fprintf(services_file, "\t#%s\n", olsr_ip_to_string(&strbuf, &entry->originator));
347 +        fprintf(file, "%s\t", name->name);
348 +        fprintf(file, "\t#%s\n", olsr_ip_to_string(&strbuf, &entry->originator));
349        }
350      }
351    }
352  
353    if (time(&currtime)) {
354 -    fprintf(services_file, "\n### written by olsrd at %s", ctime(&currtime));
355 +    fprintf(file, "\n### written by olsrd at %s", ctime(&currtime));
356    }
357  
358 -  fclose(services_file);
359 -  service_table_changed = OLSR_FALSE;
360 -
361 -  // Executes my_services_change_script after writing the services file
362 -  if (my_services_change_script[0] != '\0') {
363 -    if (system(my_services_change_script) != -1) {
364 -      OLSR_PRINTF(2, "NAME PLUGIN: Service changed, %s executed\n", my_services_change_script);
365 -    } else {
366 -      OLSR_PRINTF(2, "NAME PLUGIN: WARNING! Failed to execute %s on service change\n", my_services_change_script);
367 +  fclose(file);
368 +  if (writemacs) {
369 +    // Executes my_macs_change_script after writing the macs file
370 +    if (my_macs_change_script[0] != '\0') {
371 +      if (system(my_macs_change_script) != -1) {
372 +        OLSR_PRINTF(2, "NAME PLUGIN: Service changed, %s executed\n", my_macs_change_script);
373 +      } else {
374 +        OLSR_PRINTF(2, "NAME PLUGIN: WARNING! Failed to execute %s on mac change\n", my_macs_change_script);
375 +      }
376      }
377 +    mac_table_changed = OLSR_FALSE;
378 +  }
379 +  else {
380 +    // Executes my_services_change_script after writing the services file
381 +    if (my_services_change_script[0] != '\0') {
382 +      if (system(my_services_change_script) != -1) {
383 +        OLSR_PRINTF(2, "NAME PLUGIN: Service changed, %s executed\n", my_services_change_script);
384 +      } else {
385 +        OLSR_PRINTF(2, "NAME PLUGIN: WARNING! Failed to execute %s on service change\n", my_services_change_script);
386 +      }
387 +    }
388 +    service_table_changed = OLSR_FALSE;
389    }
390  }
391  
392 @@ -1348,6 +1365,9 @@
393      case NAME_SERVICE:
394        service_table_changed = OLSR_TRUE;
395        break;
396 +    case NAME_MACADDR:
397 +      mac_table_changed = OLSR_TRUE;
398 +      break;
399      case NAME_LATLON:
400        latlon_table_changed = OLSR_TRUE;
401        break;
402 @@ -1498,6 +1518,22 @@
403    return regexec(&regex_t_service, service_line, pmatch_service, regmatch_t_service, 0) == 0;
404  }
405  
406 +/*
407 + * check if the mac matches the syntax
408 + */
409 +olsr_bool
410 +is_mac_wellformed(const char *mac_line)
411 +{
412 +  size_t i;
413 +  olsr_bool ret;
414 +  int x[6], d = -1;
415 +  for(i = 0; i < ARRAYSIZE(x); i++) x[i] = -1;
416 +  sscanf(mac_line, "%02x:%02x:%02x:%02x:%02x:%02x,%d\n", &x[0], &x[1], &x[2], &x[3], &x[4], &x[5], &d);
417 +  ret = 0 <= d && d <= 0xffff;
418 +  for(i = 0; i < ARRAYSIZE(x); i++) ret = ret && 0 <= x[i];
419 +  return ret;
420 +}
421 +
422  /**
423   * check if the latlot matches the syntax
424   */
425 diff --exclude='.hg*' -Nur olsrd-0.5.6-r3/lib/nameservice/src/nameservice.h /home/sven-ola/olsrd-0.5.6/lib/nameservice/src/nameservice.h
426 --- olsrd-0.5.6-r3/lib/nameservice/src/nameservice.h    2008-12-02 11:50:01.000000000 +0100
427 +++ /home/sven-ola/olsrd-0.5.6/lib/nameservice/src/nameservice.h        2008-12-03 09:20:01.000000000 +0100
428 @@ -145,7 +145,7 @@
429  
430  void write_hosts_file(void);
431  
432 -void write_services_file(void);
433 +void write_services_file(olsr_bool writemacs);
434  
435  void write_resolv_file(void);
436  
437 @@ -161,7 +161,7 @@
438  
439  olsr_bool is_service_wellformed(const char *service_line);
440  
441 -olsr_bool is_service_wellformed(const char *service_line);
442 +olsr_bool is_mac_wellformed(const char *service_line);
443  
444  olsr_bool is_latlon_wellformed(const char *latlon_line);
445  
446 diff --exclude='.hg*' -Nur olsrd-0.5.6-r3/lib/nameservice/src/nameservice_msg.h /home/sven-ola/olsrd-0.5.6/lib/nameservice/src/nameservice_msg.h
447 --- olsrd-0.5.6-r3/lib/nameservice/src/nameservice_msg.h        2008-12-02 11:50:01.000000000 +0100
448 +++ /home/sven-ola/olsrd-0.5.6/lib/nameservice/src/nameservice_msg.h    2008-12-03 09:11:13.000000000 +0100
449 @@ -43,6 +43,7 @@
450    NAME_FORWARDER = 1,
451    NAME_SERVICE = 2,
452    NAME_LATLON = 3,
453 +  NAME_MACADDR = 4,
454  } NAME_TYPE;
455  
456  /**
457 diff --exclude='.hg*' -Nur olsrd-0.5.6-r3/lib/tas/src/lua/lobject.c /home/sven-ola/olsrd-0.5.6/lib/tas/src/lua/lobject.c
458 --- olsrd-0.5.6-r3/lib/tas/src/lua/lobject.c    2008-12-02 11:50:01.000000000 +0100
459 +++ /home/sven-ola/olsrd-0.5.6/lib/tas/src/lua/lobject.c        2008-12-03 09:19:32.000000000 +0100
460 @@ -42,11 +42,11 @@
461    return (m << 3) | cast(int, x);
462  }
463  
464 +/* *INDENT-OFF* */
465  int
466  luaO_log2(unsigned int x)
467  {
468    static const lu_byte log_8[255] = {
469 -/* *INDENT-OFF* */
470      0,
471      1,1,
472      2,2,2,2,
473 @@ -59,7 +59,6 @@
474      7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
475      7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
476      7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
477 -/* *INDENT-ON* */
478    };
479    if (x >= 0x00010000) {
480      if (x >= 0x01000000)
481 @@ -74,6 +73,7 @@
482      return -1;                  /* special `log' for 0 */
483    }
484  }
485 +/* *INDENT-ON* */
486  
487  int
488  luaO_rawequalObj(const TObject * t1, const TObject * t2)
489 diff --exclude='.hg*' -Nur olsrd-0.5.6-r3/Makefile /home/sven-ola/olsrd-0.5.6/Makefile
490 --- olsrd-0.5.6-r3/Makefile     2008-12-02 11:50:01.000000000 +0100
491 +++ /home/sven-ola/olsrd-0.5.6/Makefile 2008-12-03 09:11:10.000000000 +0100
492 @@ -39,7 +39,7 @@
493  # Please also write a new version to:
494  # gui/win32/Main/Frontend.rc (line 71, around "CAPTION [...]")
495  # gui/win32/Inst/installer.nsi (line 57, around "MessageBox MB_YESNO [...]")
496 -VERS =         0.5.6-r3
497 +VERS =         pre-0.5.6-r4
498  
499  TOPDIR = .
500  include Makefile.inc