merge quagga-plugin with http://git.acinonyx.ath.cx/?p=olsr-quagga.git
authorAcinonyx <acinonyxs@yahoo.gr>
Mon, 23 Jun 2008 06:52:06 +0000 (08:52 +0200)
committerAcinonyx <acinonyxs@yahoo.gr>
Mon, 23 Jun 2008 06:52:06 +0000 (08:52 +0200)
lib/quagga/ChangeLog
lib/quagga/Makefile
lib/quagga/src/quagga.c
lib/quagga/src/quagga.h
lib/quagga/test/foo.pl [changed mode: 0644->0755]
lib/quagga/version-script.txt

index 90f9622..7439fc6 100644 (file)
@@ -5,6 +5,10 @@
          drop me a note if you test it on any other platform!)
        * lot of bugfixes (now support for redistribute with
          ZEBRA_HEADER_MARKER), etc
          drop me a note if you test it on any other platform!)
        * lot of bugfixes (now support for redistribute with
          ZEBRA_HEADER_MARKER), etc
+       * lot of code-cleanups improvements (most to the work of Acinonyx)
+       * updated plugin interface to version 5
+       * updated to new routing core (olsrd-0.5.4)
+
 
 0.2.1: Immo 'FaUl' Wehrenberg <immo@chaostreff-dortmund.de>:
        * now check (most of the) return-values of syscalls, improvement still
 
 0.2.1: Immo 'FaUl' Wehrenberg <immo@chaostreff-dortmund.de>:
        * now check (most of the) return-values of syscalls, improvement still
index 1129150..edbfc5a 100644 (file)
@@ -57,7 +57,7 @@ default_target install clean:
 else
 default_target: $(PLUGIN_FULLNAME)
 
 else
 default_target: $(PLUGIN_FULLNAME)
 
-$(PLUGIN_FULLNAME): $(OBJS)
+$(PLUGIN_FULLNAME): $(OBJS) version-script.txt
                $(CC) $(LDFLAGS) -o $(PLUGIN_FULLNAME) $(OBJS) $(LIBS)
 
 install:       $(PLUGIN_FULLNAME)
                $(CC) $(LDFLAGS) -o $(PLUGIN_FULLNAME) $(OBJS) $(LIBS)
 
 install:       $(PLUGIN_FULLNAME)
index 60375de..7a87779 100644 (file)
@@ -25,7 +25,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
-#include <quagga/zebra.h>
+#include <fcntl.h>
 
 #include "quagga.h"
 #include "olsr.h"
 
 #include "quagga.h"
 #include "olsr.h"
 #define ZEBRA_SOCKET "/var/run/quagga/zserv.api"
 #endif
 
 #define ZEBRA_SOCKET "/var/run/quagga/zserv.api"
 #endif
 
+#define ZEBRA_IPV4_ROUTE_ADD           7
+#define ZEBRA_IPV4_ROUTE_DELETE                8
+#define ZEBRA_REDISTRIBUTE_ADD         11
+#define ZEBRA_REDISTRIBUTE_DELETE      12
+#define ZEBRA_MESSAGE_MAX              23
+
+#define ZEBRA_ROUTE_OLSR               11
+#define ZEBRA_ROUTE_MAX                        12
+
+#define ZEBRA_FLAG_SELECTED            0x10
+
+#define ZEBRA_NEXTHOP_IPV4             3
+#define ZEBRA_NEXTHOP_IPV4_IFINDEX     4
+
 #define ZAPI_MESSAGE_NEXTHOP  0x01
 #define ZAPI_MESSAGE_IFINDEX  0x02
 #define ZAPI_MESSAGE_DISTANCE 0x04
 #define ZAPI_MESSAGE_NEXTHOP  0x01
 #define ZAPI_MESSAGE_IFINDEX  0x02
 #define ZAPI_MESSAGE_DISTANCE 0x04
@@ -158,7 +172,7 @@ void *my_realloc (void *buf, size_t s, const char *c) {
 
 void init_zebra (void) {
   zebra_connect();
 
 void init_zebra (void) {
   zebra_connect();
-  if (!zebra.status&STATUS_CONNECTED)
+  if (!(zebra.status&STATUS_CONNECTED))
     olsr_exit ("(QUAGGA) AIIIII, could not connect to zebra! is zebra running?", 
               EXIT_FAILURE);
 }
     olsr_exit ("(QUAGGA) AIIIII, could not connect to zebra! is zebra running?", 
               EXIT_FAILURE);
 }
@@ -183,7 +197,7 @@ static void zebra_reconnect (void) {
   int i;
 
   zebra_connect();
   int i;
 
   zebra_connect();
-  if (!zebra.status & STATUS_CONNECTED) return; // try again next time
+  if (!(zebra.status & STATUS_CONNECTED)) return; // try again next time
 
   if (zebra.options & OPTION_EXPORT) {
     OLSR_FOR_ALL_RT_ENTRIES(tmp) {
 
   if (zebra.options & OPTION_EXPORT) {
     OLSR_FOR_ALL_RT_ENTRIES(tmp) {
@@ -242,19 +256,24 @@ static void zebra_connect (void) {
 unsigned char zebra_send_command (unsigned char command, 
                                   unsigned char *options, int optlen) {
 
 unsigned char zebra_send_command (unsigned char command, 
                                   unsigned char *options, int optlen) {
 
+  char *p, *pnt;
+  uint16_t len;
+  int ret;
+
 #ifdef ZEBRA_HEADER_MARKER
 #ifdef ZEBRA_HEADER_MARKER
-  char *p = olsr_malloc (optlen + 6, "zebra_send_command");
+  uint16_t cmd;
   uint16_t length = optlen + 6; /* length of option + command + packet_length +
                                   marker + zserv-version */
   uint16_t length = optlen + 6; /* length of option + command + packet_length +
                                   marker + zserv-version */
-  uint16_t cmd;
 #else
 #else
-  char *p = olsr_malloc (optlen + 3, "zebra_send_command");
   uint16_t length = optlen + 3;  // length of option + command + packet_length
   uint16_t length = optlen + 3;  // length of option + command + packet_length
-#endif
-  char *pnt = p;
-  int ret;
+#endif  
+
+  if (!(zebra.status & STATUS_CONNECTED)) return 0;
+
+  p = olsr_malloc (length, "zebra_send_command");
+  pnt = p;
   
   
-  uint16_t len = htons(length);
+  len = htons(length);
 
   memcpy (p, &len, 2);
 
 
   memcpy (p, &len, 2);
 
@@ -263,11 +282,10 @@ unsigned char zebra_send_command (unsigned char command,
   p[3] = ZSERV_VERSION;
   cmd = htons (command);
   memcpy (p + 4, &cmd, 2);
   p[3] = ZSERV_VERSION;
   cmd = htons (command);
   memcpy (p + 4, &cmd, 2);
-  memcpy (p + 6, options, optlen);
 #else
   p[2] = command;
 #else
   p[2] = command;
-  memcpy (p + 3, options, optlen);
 #endif
 #endif
+  memcpy (p + length-optlen, options, optlen);
 
   errno = 0;
 
 
   errno = 0;
 
@@ -439,9 +457,14 @@ static unsigned char *try_read (ssize_t *len) {
       free (buf);
       return NULL;
     }
       free (buf);
       return NULL;
     }
-    if (ret < 0 && errno != EAGAIN) { // oops - we got disconnected
-      olsr_printf (1, "(QUAGGA) Disconnected from zebra\n");
-      zebra.status &= ~STATUS_CONNECTED;
+
+    if (ret < 0) {
+      if (errno != EAGAIN) { // oops - we got disconnected
+        olsr_printf (1, "(QUAGGA) Disconnected from zebra\n");
+        zebra.status &= ~STATUS_CONNECTED;
+      }
+      free (buf);
+      return NULL;
     }
 
     *len += ret;
     }
 
     *len += ret;
@@ -499,8 +522,8 @@ int zebra_parse_packet (unsigned char *packet, ssize_t maxlen) {
 #ifdef ZEBRA_HEADER_MARKER
   if (packet[2] == 255) { // found header marker!!
     //packet[3] == ZSERV_VERSION: FIXME: HANDLE THIS!
 #ifdef ZEBRA_HEADER_MARKER
   if (packet[2] == 255) { // found header marker!!
     //packet[3] == ZSERV_VERSION: FIXME: HANDLE THIS!
-    memcpy (command, packet + 4, sizeof command); // two bytes command now!
-    command-- = ntohs (command)
+    memcpy (&command, packet + 4, sizeof command); // two bytes command now!
+    command = ntohs (command) - 1
     skip = 6;
   }
 #else
     skip = 6;
   }
 #else
@@ -709,7 +732,7 @@ static void free_ipv4_route (struct ipv4_route r) {
 
 /*
 static uint8_t masktoprefixlen (uint32_t mask) {
 
 /*
 static uint8_t masktoprefixlen (uint32_t mask) {
-  
   uint8_t prefixlen = 0;
 
   mask = htonl (mask);
   uint8_t prefixlen = 0;
 
   mask = htonl (mask);
@@ -777,13 +800,13 @@ int zebra_del_olsr_v4_route (const struct rt_entry *r) {
   route.flags = zebra.flags;
   route.prefixlen = r->rt_dst.prefix_len;
   route.prefix = r->rt_dst.prefix.v4.s_addr;
   route.flags = zebra.flags;
   route.prefixlen = r->rt_dst.prefix_len;
   route.prefix = r->rt_dst.prefix.v4.s_addr;
-  if ((r->rt_best->rtp_nexthop.gateway.v4.s_addr == r->rt_dst.prefix.v4.s_addr && 
+  if ((r->rt_nexthop.gateway.v4.s_addr == r->rt_dst.prefix.v4.s_addr && 
        route.prefixlen == 32)){
     route.message |= ZAPI_MESSAGE_IFINDEX;
     route.ind_num = 1;
     route.index = olsr_malloc (sizeof *route.index, 
                               "zebra_add_olsr_v4_route");
        route.prefixlen == 32)){
     route.message |= ZAPI_MESSAGE_IFINDEX;
     route.ind_num = 1;
     route.index = olsr_malloc (sizeof *route.index, 
                               "zebra_add_olsr_v4_route");
-    *route.index = htonl (r->rt_best->rtp_nexthop.iif_index);
+    *route.index = htonl (r->rt_nexthop.iif_index);
     route.nexthops = olsr_malloc (sizeof route.nexthops->type +
                                  sizeof route.nexthops->payload,
                                  "zebra_add_olsr_v4_route");
     route.nexthops = olsr_malloc (sizeof route.nexthops->type +
                                  sizeof route.nexthops->payload,
                                  "zebra_add_olsr_v4_route");
@@ -798,10 +821,9 @@ int zebra_del_olsr_v4_route (const struct rt_entry *r) {
                                   sizeof route.nexthops->payload), 
                                  "zebra_add_olsr_v4_route");
     route.nexthops->type = ZEBRA_NEXTHOP_IPV4;
                                   sizeof route.nexthops->payload), 
                                  "zebra_add_olsr_v4_route");
     route.nexthops->type = ZEBRA_NEXTHOP_IPV4;
-    route.nexthops->payload.v4 = r->rt_best->rtp_nexthop.gateway.v4.s_addr;
+    route.nexthops->payload.v4 = r->rt_nexthop.gateway.v4.s_addr;
   }
   }
-  route.metric = r->rt_best->rtp_metric.hops;
-  route.metric = htonl (route.metric);
+  route.metric = 0;
   
   if (zebra.distance) {
     route.message |= ZAPI_MESSAGE_DISTANCE;
   
   if (zebra.distance) {
     route.message |= ZAPI_MESSAGE_DISTANCE;
index 4334ebb..5f2ef57 100644 (file)
@@ -19,7 +19,6 @@
 #include <stdlib.h>
 #include "routing_table.h"
 #define HAVE_SOCKLEN_T
 #include <stdlib.h>
 #include "routing_table.h"
 #define HAVE_SOCKLEN_T
-#include <quagga/zebra.h>
 
 #ifndef ZEBRA_PORT
 #define ZEBRA_PORT 2600
 
 #ifndef ZEBRA_PORT
 #define ZEBRA_PORT 2600
@@ -31,6 +30,7 @@
 #endif
 #endif
 
 #endif
 #endif
 
+
 struct ipv4_route {
   uint8_t type;
   uint8_t flags;
 struct ipv4_route {
   uint8_t type;
   uint8_t flags;
old mode 100644 (file)
new mode 100755 (executable)
index 3d09da3..a145659 100644 (file)
@@ -2,8 +2,8 @@ VERS_1.0
 {
   global:
     olsrd_plugin_interface_version;
 {
   global:
     olsrd_plugin_interface_version;
-    olsrd_plugin_register_param;
     olsrd_plugin_init;
     olsrd_plugin_init;
+    olsrd_get_plugin_parameters;
 
   local:
     *;
 
   local:
     *;