Silenced alignment warnings when compiling on ARM CPU
authorSven-Ola Tuecke <sven-ola@gmx.de>
Fri, 21 Aug 2009 16:29:49 +0000 (18:29 +0200)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Fri, 21 Aug 2009 16:29:49 +0000 (18:29 +0200)
18 files changed:
lib/bmf/src/Address.c
lib/bmf/src/Bmf.c
lib/bmf/src/NetworkInterfaces.c
lib/bmf/src/Packet.c
lib/bmf/src/PacketHistory.c
lib/mdns/src/NetworkInterfaces.c
lib/mdns/src/Packet.c
lib/mdns/src/mdns.c
lib/nameservice/src/nameservice.c
lib/secure/src/olsrd_secure.c
src/common/avl.h
src/defs.h
src/ipcalc.c
src/linux/kernel_routes.c
src/lq_packet.h
src/olsr_cookie.c
src/process_package.c
src/unix/ifnet.c

index fc3d1a1..392f016 100644 (file)
@@ -125,7 +125,7 @@ IsOlsrOrBmfPacket(unsigned char *ipPacket)
    * OLSR-Autodetect probe packets are UDP - port 51698 */
 
   /* Check if UDP */
-  ipHeader = (struct ip *)ipPacket;
+  ipHeader = (struct ip *)(ARM_NOWARN_ALIGN)ipPacket;
   if (ipHeader->ip_p != SOL_UDP) {
     /* Not UDP */
     return 0;
@@ -139,7 +139,7 @@ IsOlsrOrBmfPacket(unsigned char *ipPacket)
   }
 
   /* Go into the UDP header and check port number */
-  udpHeader = (struct udphdr *)(ipPacket + ipHeaderLen);
+  udpHeader = (struct udphdr *)(ARM_NOWARN_ALIGN)(ipPacket + ipHeaderLen);
   destPort = ntohs(udpHeader->dest);
 
   if (destPort == olsr_cnf->olsr_port || destPort == BMF_ENCAP_PORT || destPort == 51698)
index e118d80..d75f3ec 100644 (file)
@@ -962,13 +962,13 @@ DoBmf(void)
 
         /* if (pktAddr.sll_pkttype ...) */
         /* Check if the received packet is UDP - BMF port */
-        ipHeader = (struct ip *)rxBuffer;
+        ipHeader = (struct ip *)(ARM_NOWARN_ALIGN)rxBuffer;
         if (ipHeader->ip_p != SOL_UDP) {
           /* Not UDP */
           continue;             /* for */
         }
 
-        udpHeader = (struct udphdr *)(rxBuffer + GetIpHeaderLength(rxBuffer));
+        udpHeader = (struct udphdr *)(ARM_NOWARN_ALIGN)(rxBuffer + GetIpHeaderLength(rxBuffer));
         destPort = ntohs(udpHeader->dest);
         if (destPort != BMF_ENCAP_PORT) {
           /* Not BMF */
index 0dfffc8..ee98089 100644 (file)
@@ -857,15 +857,15 @@ CreateLocalEtherTunTap(void)
     EtherTunTapIp = ETHERTUNTAPDEFAULTIP;
   }
 
-  ((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr.s_addr = htonl(EtherTunTapIp);
+  ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifreq.ifr_addr)->sin_addr.s_addr = htonl(EtherTunTapIp);
   ioctlres = ioctl(ioctlSkfd, SIOCSIFADDR, &ifreq);
   if (ioctlres >= 0) {
     /* Set net mask */
-    ((struct sockaddr_in *)&ifreq.ifr_netmask)->sin_addr.s_addr = htonl(EtherTunTapIpMask);
+    ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifreq.ifr_netmask)->sin_addr.s_addr = htonl(EtherTunTapIpMask);
     ioctlres = ioctl(ioctlSkfd, SIOCSIFNETMASK, &ifreq);
     if (ioctlres >= 0) {
       /* Set broadcast IP */
-      ((struct sockaddr_in *)&ifreq.ifr_broadaddr)->sin_addr.s_addr = htonl(EtherTunTapIpBroadcast);
+      ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifreq.ifr_broadaddr)->sin_addr.s_addr = htonl(EtherTunTapIpBroadcast);
       ioctlres = ioctl(ioctlSkfd, SIOCSIFBRDADDR, &ifreq);
       if (ioctlres >= 0) {
         /* Bring EtherTunTap interface up (if not already) */
@@ -1039,7 +1039,7 @@ CreateInterface(const char *ifName, struct interface *olsrIntf)
       newIf->intAddr.v4.s_addr = inet_addr("0.0.0.0");
     } else {
       /* Downcast to correct sockaddr subtype */
-      newIf->intAddr.v4 = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
+      newIf->intAddr.v4 = ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr)->sin_addr;
     }
 
     /* For a non-OLSR interface, retrieve the IP broadcast address ourselves */
@@ -1052,7 +1052,7 @@ CreateInterface(const char *ifName, struct interface *olsrIntf)
       newIf->broadAddr.v4.s_addr = inet_addr("0.0.0.0");
     } else {
       /* Downcast to correct sockaddr subtype */
-      newIf->broadAddr.v4 = ((struct sockaddr_in *)&ifr.ifr_broadaddr)->sin_addr;
+      newIf->broadAddr.v4 = ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_broadaddr)->sin_addr;
     }
   }
 
@@ -1153,7 +1153,7 @@ CreateBmfNetworkInterfaces(struct interface *skipThisIntf)
     }
 
     /* ...find the OLSR interface structure, if any */
-    ipAddr.v4 = ((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr;
+    ipAddr.v4 = ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr->ifr_addr)->sin_addr;
     olsrIntf = if_ifwithaddr(&ipAddr);
 
     if (skipThisIntf != NULL && olsrIntf == skipThisIntf) {
@@ -1363,7 +1363,7 @@ CheckAndUpdateLocalBroadcast(unsigned char *ipPacket, union olsr_ip_addr *broadA
 
   assert(ipPacket != NULL && broadAddr != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   destIp.v4.s_addr = iph->daddr;
   if (!IsMulticast(&destIp)) {
     u_int32_t origDaddr, newDaddr;
@@ -1389,7 +1389,7 @@ CheckAndUpdateLocalBroadcast(unsigned char *ipPacket, union olsr_ip_addr *broadA
       /* Re-calculate UDP/IP checksum for new destination */
 
       int ipHeaderLen = GetIpHeaderLength(ipPacket);
-      struct udphdr *udph = (struct udphdr *)(ipPacket + ipHeaderLen);
+      struct udphdr *udph = (struct udphdr *)(ARM_NOWARN_ALIGN)(ipPacket + ipHeaderLen);
 
       /* RFC 1624, Eq. 3: HC' = ~(~HC - m + m') */
 
@@ -1427,13 +1427,13 @@ AddMulticastRoute(void)
 
   memset(&kernel_route, 0, sizeof(struct rtentry));
 
-  ((struct sockaddr_in *)&kernel_route.rt_dst)->sin_family = AF_INET;
-  ((struct sockaddr_in *)&kernel_route.rt_gateway)->sin_family = AF_INET;
-  ((struct sockaddr_in *)&kernel_route.rt_genmask)->sin_family = AF_INET;
+  ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_dst)->sin_family = AF_INET;
+  ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_gateway)->sin_family = AF_INET;
+  ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_genmask)->sin_family = AF_INET;
 
   /* 224.0.0.0/4 */
-  ((struct sockaddr_in *)&kernel_route.rt_dst)->sin_addr.s_addr = htonl(0xE0000000);
-  ((struct sockaddr_in *)&kernel_route.rt_genmask)->sin_addr.s_addr = htonl(0xF0000000);
+  ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_dst)->sin_addr.s_addr = htonl(0xE0000000);
+  ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_genmask)->sin_addr.s_addr = htonl(0xF0000000);
 
   kernel_route.rt_metric = 0;
   kernel_route.rt_flags = RTF_UP;
@@ -1470,13 +1470,13 @@ DeleteMulticastRoute(void)
 
     memset(&kernel_route, 0, sizeof(struct rtentry));
 
-    ((struct sockaddr_in *)&kernel_route.rt_dst)->sin_family = AF_INET;
-    ((struct sockaddr_in *)&kernel_route.rt_gateway)->sin_family = AF_INET;
-    ((struct sockaddr_in *)&kernel_route.rt_genmask)->sin_family = AF_INET;
+    ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_dst)->sin_family = AF_INET;
+    ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_gateway)->sin_family = AF_INET;
+    ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_genmask)->sin_family = AF_INET;
 
     /* 224.0.0.0/4 */
-    ((struct sockaddr_in *)&kernel_route.rt_dst)->sin_addr.s_addr = htonl(0xE0000000);
-    ((struct sockaddr_in *)&kernel_route.rt_genmask)->sin_addr.s_addr = htonl(0xF0000000);
+    ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_dst)->sin_addr.s_addr = htonl(0xE0000000);
+    ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&kernel_route.rt_genmask)->sin_addr.s_addr = htonl(0xF0000000);
 
     kernel_route.rt_metric = 0;
     kernel_route.rt_flags = RTF_UP;
index 9a977e4..b4561ff 100644 (file)
@@ -48,6 +48,8 @@
 #include <netinet/in.h>         /* ntohs(), htons() */
 #include <netinet/ip.h>         /* struct iphdr */
 
+#include "defs.h"               /* ARM_NOWARN_ALIGN */
+
 /* -------------------------------------------------------------------------
  * Function   : IsIpFragment
  * Description: Check if an IP packet is an IP fragment
@@ -63,7 +65,7 @@ IsIpFragment(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct ip *)ipPacket;
+  iph = (struct ip *)(ARM_NOWARN_ALIGN)ipPacket;
   if ((ntohs(iph->ip_off) & IP_OFFMASK) != 0) {
     return 1;
   }
@@ -86,7 +88,7 @@ GetIpTotalLength(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   return ntohs(iph->tot_len);
 }                               /* GetIpTotalLength */
 
@@ -105,7 +107,7 @@ GetIpHeaderLength(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   return iph->ihl << 2;
 }                               /* GetIpHeaderLength */
 
@@ -125,7 +127,7 @@ GetTtl(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   return iph->ttl;
 }                               /* GetTtl */
 
@@ -145,7 +147,7 @@ SaveTtlAndChecksum(unsigned char *ipPacket, struct TSaveTtl *sttl)
 
   assert(ipPacket != NULL && sttl != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   sttl->ttl = iph->ttl;
   sttl->check = ntohs(iph->check);
 }                               /* SaveTtlAndChecksum */
@@ -167,7 +169,7 @@ RestoreTtlAndChecksum(unsigned char *ipPacket, struct TSaveTtl *sttl)
 
   assert(ipPacket != NULL && sttl != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   iph->ttl = sttl->ttl;
   iph->check = htons(sttl->check);
 }                               /* RestoreTtlAndChecksum */
@@ -190,7 +192,7 @@ DecreaseTtlAndUpdateHeaderChecksum(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
 
   iph->ttl--;                   /* decrement ttl */
   sum = ntohs(iph->check) + 0x100;      /* increment checksum high byte */
@@ -208,7 +210,7 @@ DecreaseTtlAndUpdateHeaderChecksum(unsigned char *ipPacket)
 struct ip *
 GetIpHeader(unsigned char *encapsulationUdpData)
 {
-  return (struct ip *)(encapsulationUdpData + ENCAP_HDR_LEN);
+  return (struct ip *)(ARM_NOWARN_ALIGN)(encapsulationUdpData + ENCAP_HDR_LEN);
 }                               /* GetIpHeader */
 
 /* -------------------------------------------------------------------------
index 24ad6f5..ab366d4 100644 (file)
@@ -179,7 +179,7 @@ PacketCrc32(unsigned char *ipPacket, ssize_t len)
 
   SaveTtlAndChecksum(ipPacket, &sttl);
 
-  ipHeader = (struct ip *)ipPacket;
+  ipHeader = (struct ip *)(ARM_NOWARN_ALIGN)ipPacket;
   ipHeader->ip_ttl = 0xFF;      /* fixed value of TTL for CRC-32 calculation */
   ipHeader->ip_sum = 0x5A5A;    /* fixed value of IP header checksum for CRC-32 calculation */
 
index 2fb83a6..0b3cd52 100644 (file)
@@ -236,7 +236,7 @@ CreateInterface(const char *ifName, struct interface *olsrIntf)
       newIf->intAddr.v4.s_addr = inet_addr("0.0.0.0");
     } else {
       /* Downcast to correct sockaddr subtype */
-      newIf->intAddr.v4 = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
+      newIf->intAddr.v4 = ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr)->sin_addr;
     }
 
     /* For a non-OLSR interface, retrieve the IP broadcast address ourselves */
@@ -249,7 +249,7 @@ CreateInterface(const char *ifName, struct interface *olsrIntf)
       newIf->broadAddr.v4.s_addr = inet_addr("0.0.0.0");
     } else {
       /* Downcast to correct sockaddr subtype */
-      newIf->broadAddr.v4 = ((struct sockaddr_in *)&ifr.ifr_broadaddr)->sin_addr;
+      newIf->broadAddr.v4 = ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_broadaddr)->sin_addr;
     }
   }
 
@@ -356,7 +356,7 @@ CreateBmfNetworkInterfaces(struct interface *skipThisIntf)
     //}
 
     /* ...find the OLSR interface structure, if any */
-    ipAddr.v4 = ((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr;
+    ipAddr.v4 = ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr->ifr_addr)->sin_addr;
     olsrIntf = if_ifwithaddr(&ipAddr);
 
     if (skipThisIntf != NULL && olsrIntf == skipThisIntf) {
index 59690d6..1aca256 100644 (file)
@@ -31,6 +31,8 @@ Written by Saverio Proto <zioproto@gmail.com> and Claudio Pisa <clauz@ninux.org>
 #include <netinet/in.h>         /* ntohs(), htons() */
 #include <netinet/ip.h>         /* struct iphdr */
 
+#include "defs.h"               /* ARM_NOWARN_ALIGN */
+
 /* -------------------------------------------------------------------------
  * Function   : IsIpFragment
  * Description: Check if an IP packet is an IP fragment
@@ -46,7 +48,7 @@ IsIpFragment(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct ip *)ipPacket;
+  iph = (struct ip *)(ARM_NOWARN_ALIGN)ipPacket;
   if ((ntohs(iph->ip_off) & IP_OFFMASK) != 0) {
     return 1;
   }
@@ -69,7 +71,7 @@ GetIpTotalLength(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   return ntohs(iph->tot_len);
 }                               /* GetIpTotalLength */
 
@@ -88,7 +90,7 @@ GetIpHeaderLength(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   return iph->ihl << 2;
 }                               /* GetIpHeaderLength */
 
@@ -108,7 +110,7 @@ GetTtl(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   return iph->ttl;
 }                               /* GetTtl */
 
@@ -128,7 +130,7 @@ SaveTtlAndChecksum(unsigned char *ipPacket, struct TSaveTtl *sttl)
 
   assert(ipPacket != NULL && sttl != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   sttl->ttl = iph->ttl;
   sttl->check = ntohs(iph->check);
 }                               /* SaveTtlAndChecksum */
@@ -150,7 +152,7 @@ RestoreTtlAndChecksum(unsigned char *ipPacket, struct TSaveTtl *sttl)
 
   assert(ipPacket != NULL && sttl != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
   iph->ttl = sttl->ttl;
   iph->check = htons(sttl->check);
 }                               /* RestoreTtlAndChecksum */
@@ -173,7 +175,7 @@ DecreaseTtlAndUpdateHeaderChecksum(unsigned char *ipPacket)
 
   assert(ipPacket != NULL);
 
-  iph = (struct iphdr *)ipPacket;
+  iph = (struct iphdr *)(ARM_NOWARN_ALIGN)ipPacket;
 
   iph->ttl--;                   /* decrement ttl */
   sum = ntohs(iph->check) + 0x100;      /* increment checksum high byte */
@@ -191,7 +193,7 @@ DecreaseTtlAndUpdateHeaderChecksum(unsigned char *ipPacket)
 struct ip *
 GetIpHeader(unsigned char *encapsulationUdpData)
 {
-  return (struct ip *)(encapsulationUdpData + ENCAP_HDR_LEN);
+  return (struct ip *)(ARM_NOWARN_ALIGN)(encapsulationUdpData + ENCAP_HDR_LEN);
 }                               /* GetIpHeader */
 
 /* -------------------------------------------------------------------------
index 9f25b4d..88f5925 100644 (file)
@@ -76,8 +76,8 @@ PacketReceivedFromOLSR(unsigned char *encapsulationUdpData, int len)
   //union olsr_ip_addr mcDst;            /* Multicast destination of the encapsulated packet */
   struct TBmfInterface *walker;
   int stripped_len;
-  ipHeader = (struct ip *)encapsulationUdpData;
-  ip6Header = (struct ip6_hdr *)encapsulationUdpData;
+  ipHeader = (struct ip *)(ARM_NOWARN_ALIGN)encapsulationUdpData;
+  ip6Header = (struct ip6_hdr *)(ARM_NOWARN_ALIGN)encapsulationUdpData;
   //mcSrc.v4 = ipHeader->ip_src;
   //mcDst.v4 = ipHeader->ip_dst;
   OLSR_DEBUG(LOG_PLUGINS, "MDNS PLUGIN got packet from OLSR message\n");
@@ -326,7 +326,7 @@ BmfPacketCaptured(
 
   if ((encapsulationUdpData[0] & 0xf0) == 0x40) {       //IPV4
 
-    ipHeader = (struct ip *)encapsulationUdpData;
+    ipHeader = (struct ip *)(ARM_NOWARN_ALIGN)encapsulationUdpData;
 
     dst.v4 = ipHeader->ip_dst;
 
@@ -341,7 +341,7 @@ BmfPacketCaptured(
       //OLSR_PRINTF(1,"NON UDP PACKET\n");
       return;                   /* for */
     }
-    udpHeader = (struct udphdr *)(encapsulationUdpData + GetIpHeaderLength(encapsulationUdpData));
+    udpHeader = (struct udphdr *)(ARM_NOWARN_ALIGN)(encapsulationUdpData + GetIpHeaderLength(encapsulationUdpData));
     destPort = ntohs(udpHeader->dest);
     if (destPort != 5353) {
       return;
@@ -350,7 +350,7 @@ BmfPacketCaptured(
 
   else if ((encapsulationUdpData[0] & 0xf0) == 0x60) {  //IPv6
 
-    ipHeader6 = (struct ip6_hdr *)encapsulationUdpData;
+    ipHeader6 = (struct ip6_hdr *)(ARM_NOWARN_ALIGN)encapsulationUdpData;
     if (ipHeader6->ip6_dst.s6_addr[0] == 0xff)  //Multicast
     {
       //Continua
@@ -362,7 +362,7 @@ BmfPacketCaptured(
       //OLSR_PRINTF(1,"NON UDP PACKET\n");
       return;                   /* for */
     }
-    udpHeader = (struct udphdr *)(encapsulationUdpData + 40);
+    udpHeader = (struct udphdr *)(ARM_NOWARN_ALIGN)(encapsulationUdpData + 40);
     destPort = ntohs(udpHeader->dest);
     if (destPort != 5353) {
       return;
index 2138585..67137cc 100644 (file)
@@ -631,7 +631,7 @@ olsr_namesvc_gen(void *foo __attribute__ ((unused)))
     message->v4.hopcnt = 0;
     message->v4.seqno = htons(get_msg_seqno());
 
-    namesize = encap_namemsg((struct namemsg *)&message->v4.message);
+    namesize = encap_namemsg((struct namemsg *)(ARM_NOWARN_ALIGN)&message->v4.message);
     namesize = namesize + sizeof(struct olsrmsg);
 
     message->v4.olsr_msgsize = htons(namesize);
@@ -644,7 +644,7 @@ olsr_namesvc_gen(void *foo __attribute__ ((unused)))
     message->v6.hopcnt = 0;
     message->v6.seqno = htons(get_msg_seqno());
 
-    namesize = encap_namemsg((struct namemsg *)&message->v6.message);
+    namesize = encap_namemsg((struct namemsg *)(ARM_NOWARN_ALIGN)&message->v6.message);
     namesize = namesize + sizeof(struct olsrmsg6);
 
     message->v6.olsr_msgsize = htons(namesize);
@@ -689,11 +689,11 @@ olsr_parser(union olsr_message *m, struct interface *in_if __attribute__ ((unuse
   if (olsr_cnf->ip_version == AF_INET) {
     vtime = me_to_reltime(m->v4.olsr_vtime);
     size = ntohs(m->v4.olsr_msgsize);
-    namemessage = (struct namemsg *)&m->v4.message;
+    namemessage = (struct namemsg *)(ARM_NOWARN_ALIGN)&m->v4.message;
   } else {
     vtime = me_to_reltime(m->v6.olsr_vtime);
     size = ntohs(m->v6.olsr_msgsize);
-    namemessage = (struct namemsg *)&m->v6.message;
+    namemessage = (struct namemsg *)(ARM_NOWARN_ALIGN)&m->v6.message;
   }
 
   /* Check if message originated from this node.
@@ -732,22 +732,22 @@ encap_namemsg(struct namemsg *msg)
 
   // names
   for (my_name = my_names; my_name != NULL; my_name = my_name->next) {
-    pos = create_packet((struct name *)pos, my_name);
+    pos = create_packet((struct name *)(ARM_NOWARN_ALIGN)pos, my_name);
     i++;
   }
   // forwarders
   for (my_name = my_forwarders; my_name != NULL; my_name = my_name->next) {
-    pos = create_packet((struct name *)pos, my_name);
+    pos = create_packet((struct name *)(ARM_NOWARN_ALIGN)pos, my_name);
     i++;
   }
   // services
   for (my_name = my_services; my_name != NULL; my_name = my_name->next) {
-    pos = create_packet((struct name *)pos, my_name);
+    pos = create_packet((struct name *)(ARM_NOWARN_ALIGN)pos, my_name);
     i++;
   }
   // macs
   for (my_name = my_macs; my_name != NULL; my_name = my_name->next) {
-    pos = create_packet((struct name *)pos, my_name);
+    pos = create_packet((struct name *)(ARM_NOWARN_ALIGN)pos, my_name);
     i++;
   }
   // latlon
@@ -770,7 +770,7 @@ encap_namemsg(struct namemsg *msg)
     e.type = NAME_LATLON;
     e.name = s;
     lookup_defhna_latlon(&e.ip);
-    pos = create_packet((struct name *)pos, &e);
+    pos = create_packet((struct name *)(ARM_NOWARN_ALIGN)pos, &e);
     i++;
   }
   // write the namemsg header with the number of announced entries and the protocol version
@@ -930,7 +930,7 @@ update_name_entry(union olsr_ip_addr *originator, struct namemsg *msg, int msg_s
   end_pos = pos + msg_size - sizeof(struct name *);     // at least one struct name has to be left
 
   for (i = ntohs(msg->nr_names); i > 0 && pos < end_pos; i--) {
-    from_packet = (struct name *)pos;
+    from_packet = (struct name *)(ARM_NOWARN_ALIGN)pos;
 
     switch (ntohs(from_packet->type)) {
     case NAME_HOST:
index 029ac24..bed559a 100644 (file)
@@ -330,7 +330,7 @@ add_signature(uint8_t * pck, int *size)
 
   OLSR_DEBUG(LOG_PLUGINS, "[ENC]Adding signature for packet size %d\n", *size);
 
-  msg = (struct s_olsrmsg *)&pck[*size];
+  msg = (struct s_olsrmsg *)(ARM_NOWARN_ALIGN)&pck[*size];
   /* Update size */
   ((struct olsr *)pck)->olsr_packlen = htons(*size + sizeof(struct s_olsrmsg));
 
@@ -409,7 +409,7 @@ validate_packet(struct interface *olsr_if_config, const char *pck, int *size)
   if (packetsize < 4)
     return 0;
 
-  sig = (const struct s_olsrmsg *)&pck[packetsize];
+  sig = (const struct s_olsrmsg *)(const ARM_NOWARN_ALIGN)&pck[packetsize];
 
   //OLSR_PRINTF(1, "Size: %d\n", packetsize);
 
@@ -656,7 +656,7 @@ parse_cres(struct interface *olsr_if_config, char *in_msg)
   struct ipaddr_str buf;
 #endif
 
-  msg = (struct c_respmsg *)in_msg;
+  msg = (struct c_respmsg *)(ARM_NOWARN_ALIGN)in_msg;
 
   OLSR_DEBUG(LOG_PLUGINS, "[ENC]Challenge-response message received\n");
   OLSR_DEBUG(LOG_PLUGINS, "[ENC]To: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->destination));
@@ -750,7 +750,7 @@ parse_rres(char *in_msg)
   struct ipaddr_str buf;
 #endif
 
-  msg = (struct r_respmsg *)in_msg;
+  msg = (struct r_respmsg *)(ARM_NOWARN_ALIGN)in_msg;
 
   OLSR_DEBUG(LOG_PLUGINS, "[ENC]Response-response message received\n");
   OLSR_DEBUG(LOG_PLUGINS, "[ENC]To: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->destination));
@@ -840,7 +840,7 @@ parse_challenge(struct interface *olsr_if_config, char *in_msg)
   struct ipaddr_str buf;
 #endif
 
-  msg = (struct challengemsg *)in_msg;
+  msg = (struct challengemsg *)(ARM_NOWARN_ALIGN)in_msg;
 
   OLSR_DEBUG(LOG_PLUGINS, "[ENC]Challenge message received\n");
   OLSR_DEBUG(LOG_PLUGINS, "[ENC]To: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->destination));
index 75401ad..833854b 100644 (file)
@@ -135,7 +135,7 @@ static inline structname * funcname (struct avl_node *ptr)\
 {\
   return( \
     ptr ? \
-      (structname *) (((uint8_t *) ptr) - offsetof(structname, avlnodename)) : \
+      (structname *) (((size_t) ptr) - offsetof(structname, avlnodename)) : \
       NULL); \
 }
 
index a34d198..f407eb1 100644 (file)
@@ -85,6 +85,15 @@ extern FILE *EXPORT(debug_handle);
 #endif
 #endif
 
+/*
+ * On ARM, the compiler spits out additional warnings if called
+ * with -Wcast-align if you cast e.g. char* -> int*. While this
+ * is fine, most of that warnings are un-critical. Also the ARM
+ * CPU will throw BUS_ERROR if alignment does not fit. For this,
+ * we add an additional cast to (void *) to prevent the warning.
+ */
+#define ARM_NOWARN_ALIGN void *
+
 #define ROUND_UP_TO_POWER_OF_2(val, pow2) (((val) + (pow2) - 1) & ~((pow2) - 1))
 
 #ifdef WIN32
index 6867947..339cf79 100644 (file)
@@ -161,8 +161,8 @@ ip_in_net(const union olsr_ip_addr *ipaddr, const struct olsr_ip_prefix *net, in
   } else {
     /* IPv6 */
     uint32_t netmask;
-    const uint32_t *i = (const uint32_t *)&ipaddr->v6.s6_addr;
-    const uint32_t *n = (const uint32_t *)&net->prefix.v6.s6_addr;
+    const uint32_t *i = (const uint32_t *)(ARM_NOWARN_ALIGN)&ipaddr->v6.s6_addr;
+    const uint32_t *n = (const uint32_t *)(ARM_NOWARN_ALIGN)&net->prefix.v6.s6_addr;
     unsigned int prefix_len;
     /* First we compare whole unsigned int's */
     for (prefix_len = net->prefix_len; prefix_len > 32; prefix_len -= 32) {
@@ -183,7 +183,7 @@ static const char *
 sockaddr4_to_string(char *const buf, int bufsize, const struct sockaddr *const addr)
 {
   char addrbuf[INET6_ADDRSTRLEN];
-  const struct sockaddr_in *const sin4 = (const struct sockaddr_in *)addr;
+  const struct sockaddr_in *const sin4 = (const struct sockaddr_in *)(const ARM_NOWARN_ALIGN)addr;
   snprintf(buf, bufsize, "IPv4/%s:%d", inet_ntop(AF_INET, &sin4->sin_addr, addrbuf, sizeof(addrbuf)), sin4->sin_port);
   return buf;
 }
@@ -192,7 +192,7 @@ static const char *
 sockaddr6_to_string(char *const buf, int bufsize, const struct sockaddr *const addr)
 {
   char addrbuf[INET6_ADDRSTRLEN];
-  const struct sockaddr_in6 *const sin6 = (const struct sockaddr_in6 *)addr;
+  const struct sockaddr_in6 *const sin6 = (const struct sockaddr_in6 *)(const ARM_NOWARN_ALIGN)addr;
   snprintf(buf, bufsize,
            "IPv6/[%s]:%d/%x/%x",
            inet_ntop(AF_INET6, &sin6->sin6_addr, addrbuf, sizeof(addrbuf)),
index 9b75824..acb69e9 100644 (file)
@@ -77,7 +77,7 @@ struct olsr_ipadd_req {
 static void
 olsr_netlink_addreq(struct nlmsghdr *n, size_t reqSize __attribute__ ((unused)), int type, const void *data, int len)
 {
-  struct rtattr *rta = (struct rtattr *)(((char *)n) + NLMSG_ALIGN(n->nlmsg_len));
+  struct rtattr *rta = (struct rtattr *)(ARM_NOWARN_ALIGN)(((char *)n) + NLMSG_ALIGN(n->nlmsg_len));
   n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + RTA_LENGTH(len);
   //produces strange compile error
   //assert(n->nlmsg_len < reqSize);
@@ -113,7 +113,7 @@ olsr_netlink_send(struct nlmsghdr *n, char *buf, size_t bufSize, uint8_t flag, c
     iov.iov_len = bufSize;
     ret = recvmsg(olsr_cnf->rts_linux, &msg, 0);
     if (0 < ret) {
-      struct nlmsghdr *h = (struct nlmsghdr *)buf;
+      struct nlmsghdr *h = (struct nlmsghdr *)(ARM_NOWARN_ALIGN)buf;
       while (NLMSG_OK(h, (unsigned int)ret)) {
         if (NLMSG_DONE == h->nlmsg_type) {
           //seems to be never reached
@@ -214,7 +214,13 @@ olsr_netlink_send(struct nlmsghdr *n, char *buf, size_t bufSize, uint8_t flag, c
           }
           break;
         }
-        h = NLMSG_NEXT(h, ret);
+/*
+ * The ARM compile complains about alignment. Copied
+ * from /usr/include/linux/netlink.h and adapted for ARM
+ */
+#define MY_NLMSG_NEXT(nlh,len)  ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
+                                 (struct nlmsghdr*)(ARM_NOWARN_ALIGN)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
+        h = MY_NLMSG_NEXT(h, ret);
       }
     }
   }
index 4cbdeb0..dd05c5f 100644 (file)
@@ -186,37 +186,37 @@ pkt_ignore_prefixlen(const uint8_t ** p)
 static INLINE void
 pkt_put_u8(uint8_t ** p, uint8_t var)
 {
-  *(uint8_t *) (*p) = var;
+  **((uint8_t **)p) = var;
   *p += sizeof(uint8_t);
 }
 static INLINE void
 pkt_put_u16(uint8_t ** p, uint16_t var)
 {
-  *(uint16_t *) (*p) = htons(var);
+  **((uint16_t **)p) = htons(var);
   *p += sizeof(uint16_t);
 }
 static INLINE void
 pkt_put_u32(uint8_t ** p, uint32_t var)
 {
-  *(uint32_t *) (*p) = htonl(var);
+  **((uint32_t **)p) = htonl(var);
   *p += sizeof(uint32_t);
 }
 static INLINE void
 pkt_put_s8(uint8_t ** p, int8_t var)
 {
-  *(int8_t *) (*p) = var;
+  **((int8_t **)p) = var;
   *p += sizeof(int8_t);
 }
 static INLINE void
 pkt_put_s16(uint8_t ** p, int16_t var)
 {
-  *(int16_t *) (*p) = htons(var);
+  **((int16_t **)p) = htons(var);
   *p += sizeof(int16_t);
 }
 static INLINE void
 pkt_put_s32(uint8_t ** p, int32_t var)
 {
-  *(int32_t *) (*p) = htonl(var);
+  **((int32_t **)p) = htonl(var);
   *p += sizeof(int32_t);
 }
 static INLINE void
index 8d3dbf6..4c7f219 100644 (file)
@@ -309,7 +309,7 @@ olsr_cookie_malloc(struct olsr_cookie_info *ci)
    * When the block is freed to detect corruption.
    */
   branding = (struct olsr_cookie_mem_brand *)
-    ((unsigned char *)ptr + ci->ci_size);
+    (ARM_NOWARN_ALIGN)((unsigned char *)ptr + ci->ci_size);
   memcpy(&branding->cmb_sig, "cookie", 6);
   branding->id = ci->ci_membrand;
 
@@ -335,7 +335,7 @@ olsr_cookie_free(struct olsr_cookie_info *ci, void *ptr)
   bool reuse = false;
 #endif
   struct olsr_cookie_mem_brand *branding = (struct olsr_cookie_mem_brand *)
-    ((unsigned char *)ptr + ci->ci_size);
+    (ARM_NOWARN_ALIGN)((unsigned char *)ptr + ci->ci_size);
 
   /*
    * Verify if there has been a memory overrun, or
index addf286..80d5ebc 100644 (file)
@@ -232,7 +232,7 @@ deserialize_hello(struct lq_hello_message *hello, const void *ser)
   hello->neigh = NULL;
   limit = ((const unsigned char *)ser) + size;
   while (curr < limit) {
-    const struct lq_hello_info_header *info_head = (const struct lq_hello_info_header *)curr;
+    const struct lq_hello_info_header *info_head = (const struct lq_hello_info_header *)(const ARM_NOWARN_ALIGN)curr;
     const unsigned char *limit2 = curr + ntohs(info_head->size);
 
     curr = (const unsigned char *)(info_head + 1);
index 0de34cb..62c671a 100644 (file)
@@ -231,7 +231,7 @@ chk_if_changed(struct olsr_if_config *iface)
     }
   } else {
     /* IP version 4 */
-    const struct sockaddr_in *tmp_saddr4 = (struct sockaddr_in *)&ifr.ifr_addr;
+    const struct sockaddr_in *tmp_saddr4 = (struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr;
 
     /* Check interface address (IPv4) */
     if (ioctl(olsr_cnf->ioctl_s, SIOCGIFADDR, &ifr) < 0) {
@@ -248,7 +248,7 @@ chk_if_changed(struct olsr_if_config *iface)
                  "\tOld:%s\n\tNew:%s\n",
                  ifr.ifr_name, ip4_to_string(&buf, ifp->int_addr.sin_addr), ip4_to_string(&buf, tmp_saddr4->sin_addr));
 
-      ifp->int_addr = *(struct sockaddr_in *)&ifr.ifr_addr;
+      ifp->int_addr = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr;
       if (!olsr_cnf->fixed_origaddr && ip4cmp(&olsr_cnf->router_id.v4, &ifp->ip_addr.v4) == 0) {
         OLSR_INFO(LOG_INTERFACE, "New main address: %s\n", ip4_to_string(&buf, tmp_saddr4->sin_addr));
         olsr_cnf->router_id.v4 = tmp_saddr4->sin_addr;
@@ -266,17 +266,17 @@ chk_if_changed(struct olsr_if_config *iface)
       return 0;
     }
 
-    OLSR_DEBUG(LOG_INTERFACE, "\tNetmask:%s\n", ip4_to_string(&buf, ((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr));
+    OLSR_DEBUG(LOG_INTERFACE, "\tNetmask:%s\n", ip4_to_string(&buf, ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_netmask)->sin_addr));
 
-    if (ip4cmp(&ifp->int_netmask.sin_addr, &((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr) != 0) {
+    if (ip4cmp(&ifp->int_netmask.sin_addr, &((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_netmask)->sin_addr) != 0) {
       /* New address */
       OLSR_DEBUG(LOG_INTERFACE, "IPv4 netmask changed for %s\n"
                  "\tOld:%s\n\tNew:%s\n",
                  ifr.ifr_name,
                  ip4_to_string(&buf, ifp->int_netmask.sin_addr),
-                 ip4_to_string(&buf, ((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr));
+                 ip4_to_string(&buf, ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_netmask)->sin_addr));
 
-      ifp->int_netmask = *(struct sockaddr_in *)&ifr.ifr_netmask;
+      ifp->int_netmask = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_netmask;
 
       if_changes = 1;
     }
@@ -289,17 +289,17 @@ chk_if_changed(struct olsr_if_config *iface)
       }
 
       OLSR_DEBUG(LOG_INTERFACE, "\tBroadcast address:%s\n",
-                 ip4_to_string(&buf, ((struct sockaddr_in *)&ifr.ifr_broadaddr)->sin_addr));
+                 ip4_to_string(&buf, ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_broadaddr)->sin_addr));
 
-      if (ifp->int_broadaddr.sin_addr.s_addr != ((struct sockaddr_in *)&ifr.ifr_broadaddr)->sin_addr.s_addr) {
+      if (ifp->int_broadaddr.sin_addr.s_addr != ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_broadaddr)->sin_addr.s_addr) {
         /* New address */
         OLSR_DEBUG(LOG_INTERFACE, "IPv4 broadcast changed for %s\n"
                    "\tOld:%s\n\tNew:%s\n",
                    ifr.ifr_name,
                    ip4_to_string(&buf, ifp->int_broadaddr.sin_addr),
-                   ip4_to_string(&buf, ((struct sockaddr_in *)&ifr.ifr_broadaddr)->sin_addr));
+                   ip4_to_string(&buf, ((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_broadaddr)->sin_addr));
 
-        ifp->int_broadaddr = *(struct sockaddr_in *)&ifr.ifr_broadaddr;
+        ifp->int_broadaddr = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_broadaddr;
         if_changes = 1;
       }
     }
@@ -448,14 +448,14 @@ chk_if_up(struct olsr_if_config *iface)
       goto cleanup;
     }
 
-    ifp->int_addr = *(struct sockaddr_in *)&ifr.ifr_addr;
+    ifp->int_addr = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr;
 
     /* Find netmask */
     if (ioctl(olsr_cnf->ioctl_s, SIOCGIFNETMASK, &ifr) < 0) {
       OLSR_WARN(LOG_INTERFACE, "%s: ioctl (get netmask) failed", ifr.ifr_name);
       goto cleanup;
     }
-    ifp->int_netmask = *(struct sockaddr_in *)&ifr.ifr_netmask;
+    ifp->int_netmask = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_netmask;
 
     /* Find broadcast address */
     if (iface->cnf->ipv4_broadcast.v4.s_addr) {
@@ -468,7 +468,7 @@ chk_if_up(struct olsr_if_config *iface)
         goto cleanup;
       }
 
-      ifp->int_broadaddr = *(struct sockaddr_in *)&ifr.ifr_broadaddr;
+      ifp->int_broadaddr = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_broadaddr;
     }
 
     /* Deactivate IP spoof filter */