ARM alignment warnings fixed
authorSven-Ola Tuecke <sven-ola@gmx.de>
Fri, 21 Aug 2009 12:00:32 +0000 (14:00 +0200)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Fri, 21 Aug 2009 12:00:32 +0000 (14:00 +0200)
25 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/nameservice/src/nameservice.c
lib/secure/src/olsrd_secure.c
lib/tas/src/lua/ldo.h
lib/tas/src/lua/llimits.h
lib/tas/src/lua/lobject.h
lib/tas/src/lua/lstate.c
lib/tas/src/lua/lstate.h
lib/tas/src/os_unix.c
lib/tas/src/plugin.c
src/build_msg.c
src/common/avl.h
src/defs.h
src/ipcalc.c
src/ipcalc.h
src/linux/kernel_routes.c
src/lq_packet.c
src/lq_packet.h
src/olsr_cookie.c
src/print_packet.c
src/unix/ifnet.c

index eefff50..7601958 100644 (file)
@@ -123,7 +123,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;
@@ -137,7 +137,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->olsrport || destPort == BMF_ENCAP_PORT || destPort == 51698)
index 7fcbb3f..dc91d43 100644 (file)
@@ -971,13 +971,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 6a8cd9f..042f4e8 100644 (file)
@@ -1063,15 +1063,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) */
@@ -1245,7 +1245,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 */
@@ -1258,7 +1258,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;
     }
   }
 
@@ -1358,7 +1358,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) {
@@ -1566,7 +1566,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;
@@ -1592,7 +1592,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') */
 
@@ -1630,13 +1630,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;
@@ -1673,13 +1673,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 129844e..bbba9c8 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 93a1bd6..856ce51 100644 (file)
@@ -177,7 +177,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 40ecbf1..965d4f5 100644 (file)
@@ -588,7 +588,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);
@@ -601,7 +601,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);
@@ -646,11 +646,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.
@@ -690,22 +690,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
@@ -727,7 +727,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
@@ -874,7 +874,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 e190730..a6adfe3 100644 (file)
@@ -316,7 +316,7 @@ add_signature(uint8_t * pck, int *size)
   olsr_printf(2, "[ENC]Adding signature for packet size %d\n", *size);
   fflush(stdout);
 
-  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));
 
@@ -394,7 +394,7 @@ validate_packet(struct interface *olsr_if, 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);
 
@@ -625,7 +625,7 @@ parse_cres(struct interface *olsr_if, char *in_msg)
   struct stamp *entry;
   struct ipaddr_str buf;
 
-  msg = (struct c_respmsg *)in_msg;
+  msg = (struct c_respmsg *)(ARM_NOWARN_ALIGN)in_msg;
 
   olsr_printf(1, "[ENC]Challenge-response message received\n");
   olsr_printf(3, "[ENC]To: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->destination));
@@ -713,7 +713,7 @@ parse_rres(char *in_msg)
   struct stamp *entry;
   struct ipaddr_str buf;
 
-  msg = (struct r_respmsg *)in_msg;
+  msg = (struct r_respmsg *)(ARM_NOWARN_ALIGN)in_msg;
 
   olsr_printf(1, "[ENC]Response-response message received\n");
   olsr_printf(3, "[ENC]To: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->destination));
@@ -797,7 +797,7 @@ parse_challenge(struct interface *olsr_if, char *in_msg)
   uint32_t hash;
   struct ipaddr_str buf;
 
-  msg = (struct challengemsg *)in_msg;
+  msg = (struct challengemsg *)(ARM_NOWARN_ALIGN)in_msg;
 
   olsr_printf(1, "[ENC]Challenge message received\n");
   olsr_printf(3, "[ENC]To: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->destination));
index 86c3c5f..1653023 100644 (file)
@@ -11,6 +11,8 @@
 #include "lstate.h"
 #include "lzio.h"
 
+#include "defs.h" /* ARM_NOWARN_ALIGN */
+
 /*
 ** macro to control inclusion of some hard tests on stack reallocation
 */
 #define incr_top(L) {luaD_checkstack(L,1); L->top++;}
 
 #define savestack(L,p)         ((char *)(p) - (char *)L->stack)
-#define restorestack(L,n)      ((TObject *)((char *)L->stack + (n)))
+#define restorestack(L,n)      ((TObject *)(ARM_NOWARN_ALIGN)((char *)L->stack + (n)))
 
 #define saveci(L,p)            ((char *)(p) - (char *)L->base_ci)
-#define restoreci(L,n)         ((CallInfo *)((char *)L->base_ci + (n)))
+#define restoreci(L,n)         ((CallInfo *)(ARM_NOWARN_ALIGN)((char *)L->base_ci + (n)))
 
 /* type of protected functions, to be ran by `runprotected' */
 typedef void (*Pfunc) (lua_State * L, void *ud);
index 1623a6f..9d603a4 100644 (file)
@@ -11,6 +11,7 @@
 #include <stddef.h>
 
 #include "lua.h"
+#include "defs.h" /* ARM_NOWARN_ALIGN */
 
 /*
 ** try to find number of bits in an integer
@@ -102,6 +103,10 @@ typedef LUA_UACNUMBER l_uacNumber;
 #define cast(t, exp)   ((t)(exp))
 #endif
 
+#ifndef cast_align
+#define cast_align(t, exp)     ((t)(ARM_NOWARN_ALIGN)(exp))
+#endif
+
 /*
 ** type for virtual-machine instructions
 ** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h)
index 2338450..b0aa841 100644 (file)
@@ -115,7 +115,7 @@ typedef struct lua_TObject {
 
 #define sethvalue(obj,x) \
   { TObject *i_o=(obj); i_o->tt=LUA_TTABLE; \
-    i_o->value.gc=cast(GCObject *, (x)); \
+    i_o->value.gc=cast_align(GCObject *, (x)); \
     lua_assert(i_o->value.gc->gch.tt == LUA_TTABLE); }
 
 #define setnilvalue(obj) ((obj)->tt=LUA_TNIL)
index c1408d8..ac279b3 100644 (file)
@@ -53,7 +53,7 @@ mallocstate(lua_State * L)
     return NULL;
   else {
     block += EXTRASPACE;
-    return cast(lua_State *, block);
+    return cast_align(lua_State *, block);
   }
 }
 
index b04b65e..ed90345 100644 (file)
@@ -170,7 +170,7 @@ union GCObject {
 #define gcototh(o)     check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th))
 
 /* macro to convert any value into a GCObject */
-#define valtogco(v)    (cast(GCObject *, (v)))
+#define valtogco(v)    (cast_align(GCObject *, (v)))
 
 lua_State *luaE_newthread(lua_State * L);
 void luaE_freethread(lua_State * L, lua_State * L1);
index 3101484..ef3dfc2 100644 (file)
@@ -49,6 +49,7 @@
 #include "http.h"
 #include "glua.h"
 #include "glua_ext.h"
+#include "defs.h" /* ARM_NOWARN_ALIGN */
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -409,7 +410,7 @@ createSockAddr(struct sockaddr *sockAddr, const struct ipAddr *addr, int port)
   memset(sockAddr, 0, sizeof(struct sockaddr));
 
   if (addr->domain == PF_INET) {
-    sockAddr4 = (struct sockaddr_in *)sockAddr;
+    sockAddr4 = (struct sockaddr_in *)(ARM_NOWARN_ALIGN)sockAddr;
 
     sockAddr4->sin_family = AF_INET;
     sockAddr4->sin_port = htons((short)port);
@@ -419,7 +420,7 @@ createSockAddr(struct sockaddr *sockAddr, const struct ipAddr *addr, int port)
   }
 
   if (addr->domain == PF_INET6) {
-    sockAddr6 = (struct sockaddr_in6 *)sockAddr;
+    sockAddr6 = (struct sockaddr_in6 *)(ARM_NOWARN_ALIGN)sockAddr;
 
     sockAddr6->sin6_family = AF_INET6;
     sockAddr6->sin6_port = htons((short)port);
@@ -435,8 +436,8 @@ createSockAddr(struct sockaddr *sockAddr, const struct ipAddr *addr, int port)
 static int
 addrFromSockAddr(struct ipAddr *addr, const struct sockaddr *sockAddr)
 {
-  const struct sockaddr_in *sockAddr4 = (const struct sockaddr_in *)sockAddr;
-  const struct sockaddr_in6 *sockAddr6 = (const struct sockaddr_in6 *)sockAddr;
+  const struct sockaddr_in *sockAddr4 = (const struct sockaddr_in *)(const ARM_NOWARN_ALIGN)sockAddr;
+  const struct sockaddr_in6 *sockAddr6 = (const struct sockaddr_in6 *)(const ARM_NOWARN_ALIGN)sockAddr;
 
   memset(addr, 0, sizeof(struct ipAddr));
 
index 84ee928..bf64150 100644 (file)
@@ -321,7 +321,7 @@ static bool
 parserFunc(union olsr_message *msg, struct interface *inInt __attribute__ ((unused)), union olsr_ip_addr *neighIntAddr)
 {
   char *mess = (char *)msg;
-  union olsr_ip_addr *orig = (union olsr_ip_addr *)(mess + 4);
+  union olsr_ip_addr *orig = (union olsr_ip_addr *)(ARM_NOWARN_ALIGN)(mess + 4);
   int len = (mess[2] << 8) | mess[3];
   char *service, *string;
   int i;
index b5c44bb..8430448 100644 (file)
@@ -372,7 +372,7 @@ serialize_hello4(struct hello_message *message, struct interface *ifp)
         *haddr = nb->address;
 
         /* Point to next address */
-        haddr = (union olsr_ip_addr *)&haddr->v6.s6_addr[4];
+        haddr += sizeof(haddr->v4);
         curr_size += olsr_cnf->ipsize;  /* IP address added */
 
         first_entry = false;
index 4f857eb..7a93c70 100644 (file)
@@ -136,7 +136,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 69e99a1..8cbf110 100644 (file)
@@ -112,6 +112,15 @@ extern FILE *debug_handle;
 
 #define INLINE inline __attribute__((always_inline))
 
+/*
+ * 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 *
+
 /*
  * A somewhat safe version of strncpy and strncat. Note, that
  * BSD/Solaris strlcpy()/strlcat() differ in implementation, while
index 86f4d64..6c23fed 100644 (file)
@@ -110,13 +110,13 @@ netmask_to_prefix(const uint8_t * adr, int len)
       prefix += 8;
       break;                    /* Shouldn't happen */
     default:
-      OLSR_PRINTF(0, "%s: Got bogus netmask %s\n", __func__, olsr_ip_to_string(&buf, (const union olsr_ip_addr *)adr));
+      OLSR_PRINTF(0, "%s: Got bogus netmask %s\n", __func__, olsr_ip_to_string(&buf, (const union olsr_ip_addr *)(const void *)adr));
       prefix = UCHAR_MAX;
       break;
     }
   }
 #ifdef DEBUG
-  OLSR_PRINTF(3, "Netmask: %s = Prefix %d\n", olsr_ip_to_string(&buf, (const union olsr_ip_addr *)adr), prefix);
+  OLSR_PRINTF(3, "Netmask: %s = Prefix %d\n", olsr_ip_to_string(&buf, (const union olsr_ip_addr *)(const void *)adr), prefix);
 #endif
   return prefix;
 }
index ed1cd3a..4df8829 100644 (file)
@@ -151,8 +151,12 @@ const char *olsr_ip_prefix_to_string(const struct olsr_ip_prefix *prefix);
 static INLINE const char *
 sockaddr4_to_string(struct ipaddr_str *const buf, const struct sockaddr *const addr)
 {
-  const struct sockaddr_in *const addr4 = (const struct sockaddr_in *)addr;
-  return ip4_to_string(buf, addr4->sin_addr);
+  union {
+    const struct sockaddr *a_sockaddr;
+    const struct sockaddr_in *a_sockaddr_in;
+  } nowarn;
+  nowarn.a_sockaddr = addr;
+  return ip4_to_string(buf, nowarn.a_sockaddr_in->sin_addr);
 }
 
 /* we need to handle one value specifically since shifting 32 bits of a 32 bit integer is the same as shifting 0 bits.
index c9c8a6c..9977ce8 100644 (file)
@@ -72,7 +72,7 @@ struct olsr_rtreq {
 static void
 olsr_netlink_addreq(struct olsr_rtreq *req, int type, const void *data, int len)
 {
-  struct rtattr *rta = (struct rtattr *)(((char *)req) + NLMSG_ALIGN(req->n.nlmsg_len));
+  struct rtattr *rta = (struct rtattr *)(ARM_NOWARN_ALIGN)(((char *)req) + NLMSG_ALIGN(req->n.nlmsg_len));
   req->n.nlmsg_len = NLMSG_ALIGN(req->n.nlmsg_len) + RTA_LENGTH(len);
   assert(req->n.nlmsg_len < sizeof(struct olsr_rtreq));
   rta->rta_type = type;
@@ -213,7 +213,7 @@ olsr_netlink_route_int(const struct rt_entry *rt, uint8_t family, uint8_t rttabl
     iov.iov_base = req.buf;
     iov.iov_len = sizeof(req.buf);
     if (0 < (ret = recvmsg(olsr_cnf->rtnl_s, &msg, 0))) {
-      struct nlmsghdr *h = (struct nlmsghdr *)req.buf;
+      struct nlmsghdr *h = (struct nlmsghdr *)(ARM_NOWARN_ALIGN)req.buf;
       while (NLMSG_OK(h, (unsigned int)ret)) {
         if (NLMSG_DONE == h->nlmsg_type) {
           /* seems to reached never */
@@ -320,7 +320,13 @@ olsr_netlink_route_int(const struct rt_entry *rt, uint8_t family, uint8_t rttabl
           olsr_syslog(OLSR_LOG_INFO,"_received %u Byte rtnetlink response of type %u with seqnr %u and flags %u from %u (%u)",
               h->nlmsg_len, h->nlmsg_type, h->nlmsg_seq, h->nlmsg_flags, h->nlmsg_pid, NLMSG_ERROR);
         }
-        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 29fae16..a354b7d 100644 (file)
@@ -62,7 +62,7 @@
 bool lq_tc_pending = false;
 
 static uint32_t msg_buffer_aligned[(MAXMESSAGESIZE - OLSR_HEADERSIZE) / sizeof(uint32_t) + 1];
-static unsigned char *msg_buffer = (unsigned char *)msg_buffer_aligned;
+static unsigned char *const msg_buffer = (unsigned char *)msg_buffer_aligned;
 
 static void
 create_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
@@ -292,7 +292,7 @@ serialize_common(struct olsr_common *comm)
 {
   if (olsr_cnf->ip_version == AF_INET) {
     // serialize an IPv4 OLSR message header
-    struct olsr_header_v4 *olsr_head_v4 = (struct olsr_header_v4 *)msg_buffer;
+    struct olsr_header_v4 *olsr_head_v4 = (struct olsr_header_v4 *)(ARM_NOWARN_ALIGN)msg_buffer;
 
     olsr_head_v4->type = comm->type;
     olsr_head_v4->vtime = reltime_to_me(comm->vtime);
@@ -305,7 +305,7 @@ serialize_common(struct olsr_common *comm)
     olsr_head_v4->seqno = htons(get_msg_seqno());
   } else {
     // serialize an IPv6 OLSR message header
-    struct olsr_header_v6 *olsr_head_v6 = (struct olsr_header_v6 *)msg_buffer;
+    struct olsr_header_v6 *olsr_head_v6 = (struct olsr_header_v6 *)(ARM_NOWARN_ALIGN)msg_buffer;
 
     olsr_head_v6->type = comm->type;
     olsr_head_v6->vtime = reltime_to_me(comm->vtime);
@@ -335,7 +335,7 @@ serialize_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
 
   // initialize the LQ_HELLO header
 
-  struct lq_hello_header *head = (struct lq_hello_header *)(msg_buffer + off);
+  struct lq_hello_header *head = (struct lq_hello_header *)(ARM_NOWARN_ALIGN)(msg_buffer + off);
 
   head->reserved = 0;
   head->htime = reltime_to_me(lq_hello->htime);
@@ -444,7 +444,7 @@ serialize_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
         // create a new info header
 
         if (is_first) {
-          info_head = (struct lq_hello_info_header *)(buff + size);
+          info_head = (struct lq_hello_info_header *)(ARM_NOWARN_ALIGN)(buff + size);
           size += sizeof(struct lq_hello_info_header);
 
           info_head->reserved = 0;
@@ -526,7 +526,7 @@ serialize_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
 
   // initialize the LQ_TC header
 
-  head = (struct lq_tc_header *)(msg_buffer + off);
+  head = (struct lq_tc_header *)(ARM_NOWARN_ALIGN)(msg_buffer + off);
 
   head->ansn = htons(lq_tc->ansn);
   head->lower_border = 0;
@@ -598,7 +598,7 @@ serialize_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
     genipcopy(buff + size, &neigh->address);
 
     // remember last ip
-    last_ip = (union olsr_ip_addr *)(buff + size);
+    last_ip = (union olsr_ip_addr *)(ARM_NOWARN_ALIGN)(buff + size);
 
     size += olsr_cnf->ipsize;
 
index 371f350..804f900 100644 (file)
@@ -231,37 +231,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 72af2f6..fc7c5fb 100644 (file)
@@ -247,7 +247,7 @@ olsr_cookie_malloc(struct olsr_cookie_info *ci)
    * indicating presence of a cookie. This will be checked against
    * When the block is freed to detect corruption.
    */
-  branding = (struct olsr_cookie_mem_brand *)((unsigned char *)ptr + ci->ci_size);
+  branding = (struct olsr_cookie_mem_brand *)(ARM_NOWARN_ALIGN)((unsigned char *)ptr + ci->ci_size);
   memcpy(&branding->cmb_sig, "cookie", 6);
   branding->cmb_id = ci->ci_id;
 
@@ -272,7 +272,7 @@ olsr_cookie_free(struct olsr_cookie_info *ci, void *ptr)
   struct list_node *free_list_node;
   bool reuse = false;
 
-  branding = (struct olsr_cookie_mem_brand *)((unsigned char *)ptr + ci->ci_size);
+  branding = (struct olsr_cookie_mem_brand *)(ARM_NOWARN_ALIGN)((unsigned char *)ptr + ci->ci_size);
 
   /*
    * Verify if there has been a memory overrun, or
index d20bdc8..faa956d 100644 (file)
@@ -184,7 +184,7 @@ print_hellomsg(FILE * handle, uint8_t * data, int16_t totsize)
               olsr_status_to_string(EXTRACT_STATUS(hinf->link_code)), ntohs(hinf->size));
 
       for (haddr = (union olsr_ip_addr *)&hinf->neigh_addr; (char *)haddr < (char *)hinf + ntohs(hinf->size);
-           haddr = (union olsr_ip_addr *)&haddr->v6.s6_addr[4]) {
+           haddr += sizeof(haddr->v4)) {
         struct ipaddr_str buf;
         fprintf(handle, "    ++ %s\n", olsr_ip_to_string(&buf, haddr));
       }
@@ -236,7 +236,7 @@ print_hellomsg_lq(FILE * handle, uint8_t * data, int16_t totsize)
               olsr_status_to_string(EXTRACT_STATUS(hinf->link_code)), ntohs(hinf->size));
 
       for (haddr = (union olsr_ip_addr *)&hinf->neigh_addr; (char *)haddr < (char *)hinf + ntohs(hinf->size);
-           haddr = (union olsr_ip_addr *)&haddr->v6.s6_addr[8]) {
+           haddr += sizeof(haddr->v4)) {
         struct ipaddr_str buf;
         uint8_t *quality = (uint8_t *) haddr + olsr_cnf->ipsize;
         fprintf(handle, "    ++ %s\n", olsr_ip_to_string(&buf, haddr));
@@ -279,7 +279,7 @@ print_olsr_tcmsg_lq(FILE * handle, uint8_t * data, int16_t totsize)
 
   while (remsize) {
     struct ipaddr_str buf;
-    fprintf(handle, "    +Neighbor: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)data));
+    fprintf(handle, "    +Neighbor: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)(ARM_NOWARN_ALIGN)data));
     data += olsr_cnf->ipsize;
     fprintf(handle, "    +LQ: %d, ", *data);
     data += 1;
@@ -302,7 +302,7 @@ print_olsr_tcmsg(FILE * handle, uint8_t * data, int16_t totsize)
 
   while (remsize) {
     struct ipaddr_str buf;
-    fprintf(handle, "    +Neighbor: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)data));
+    fprintf(handle, "    +Neighbor: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)(ARM_NOWARN_ALIGN)data));
     data += olsr_cnf->ipsize;
 
     remsize -= olsr_cnf->ipsize;
@@ -317,9 +317,9 @@ print_hnamsg(FILE * handle, uint8_t * data, int16_t totsize)
 
   while (remsize) {
     struct ipaddr_str buf;
-    fprintf(handle, "    +Network: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)data));
+    fprintf(handle, "    +Network: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)(ARM_NOWARN_ALIGN)data));
     data += olsr_cnf->ipsize;
-    fprintf(handle, "    +Netmask: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)data));
+    fprintf(handle, "    +Netmask: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)(ARM_NOWARN_ALIGN)data));
     data += olsr_cnf->ipsize;
 
     remsize -= (olsr_cnf->ipsize * 2);
@@ -334,7 +334,7 @@ print_midmsg(FILE * handle, uint8_t * data, int16_t totsize)
 
   while (remsize) {
     struct ipaddr_str buf;
-    fprintf(handle, "    +Alias: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)data));
+    fprintf(handle, "    +Alias: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)(ARM_NOWARN_ALIGN)data));
     data += olsr_cnf->ipsize;
     remsize -= olsr_cnf->ipsize;
   }
index 677a987..078935c 100644 (file)
@@ -289,14 +289,14 @@ chk_if_changed(struct olsr_if *iface)
 #endif
 
     if (memcmp
-        (&((struct sockaddr_in *)&ifp->int_addr)->sin_addr.s_addr, &((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr,
+        (&((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifp->int_addr)->sin_addr.s_addr, &((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr)->sin_addr.s_addr,
          olsr_cnf->ipsize) != 0) {
       /* New address */
       OLSR_PRINTF(1, "IPv4 address changed for %s\n", ifr.ifr_name);
       OLSR_PRINTF(1, "\tOld:%s\n", ip4_to_string(&buf, ifp->int_addr.sin_addr));
       OLSR_PRINTF(1, "\tNew:%s\n", sockaddr4_to_string(&buf, &ifr.ifr_addr));
 
-      ifp->int_addr = *(struct sockaddr_in *)&ifr.ifr_addr;
+      ifp->int_addr = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr;
       /* deactivated to prevent change of originator IP */
 #if 0
       if (memcmp(&olsr_cnf->main_addr, &ifp->ip_addr, olsr_cnf->ipsize) == 0) {
@@ -305,7 +305,7 @@ chk_if_changed(struct olsr_if *iface)
         memcpy(&olsr_cnf->main_addr, &((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr, olsr_cnf->ipsize);
       }
 #endif
-      memcpy(&ifp->ip_addr, &((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr, olsr_cnf->ipsize);
+      memcpy(&ifp->ip_addr, &((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr)->sin_addr.s_addr, olsr_cnf->ipsize);
 
       if_changes = 1;
     }
@@ -320,14 +320,14 @@ chk_if_changed(struct olsr_if *iface)
 #endif
 
     if (memcmp
-        (&((struct sockaddr_in *)&ifp->int_netmask)->sin_addr.s_addr, &((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr.s_addr,
+        (&((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifp->int_netmask)->sin_addr.s_addr, &((struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_netmask)->sin_addr.s_addr,
          olsr_cnf->ipsize) != 0) {
       /* New address */
       OLSR_PRINTF(1, "IPv4 netmask changed for %s\n", ifr.ifr_name);
       OLSR_PRINTF(1, "\tOld:%s\n", ip4_to_string(&buf, ifp->int_netmask.sin_addr));
       OLSR_PRINTF(1, "\tNew:%s\n", sockaddr4_to_string(&buf, &ifr.ifr_netmask));
 
-      ifp->int_netmask = *(struct sockaddr_in *)&ifr.ifr_netmask;
+      ifp->int_netmask = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_netmask;
 
       if_changes = 1;
     }
@@ -342,13 +342,13 @@ chk_if_changed(struct olsr_if *iface)
       OLSR_PRINTF(3, "\tBroadcast address:%s\n", sockaddr4_to_string(&buf, &ifr.ifr_broadaddr));
 #endif
 
-      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_PRINTF(1, "IPv4 broadcast changed for %s\n", ifr.ifr_name);
         OLSR_PRINTF(1, "\tOld:%s\n", ip4_to_string(&buf, ifp->int_broadaddr.sin_addr));
         OLSR_PRINTF(1, "\tNew:%s\n", sockaddr4_to_string(&buf, &ifr.ifr_broadaddr));
 
-        ifp->int_broadaddr = *(struct sockaddr_in *)&ifr.ifr_broadaddr;
+        ifp->int_broadaddr = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_broadaddr;
         if_changes = 1;
       }
     }
@@ -698,7 +698,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl __attribute__ ((unused)))
       return 0;
     }
 
-    ifs.int_addr = *(struct sockaddr_in *)&ifr.ifr_addr;
+    ifs.int_addr = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_addr;
 
     /* Find netmask */
 
@@ -707,7 +707,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl __attribute__ ((unused)))
       return 0;
     }
 
-    ifs.int_netmask = *(struct sockaddr_in *)&ifr.ifr_netmask;
+    ifs.int_netmask = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_netmask;
 
     /* Find broadcast address */
     if (iface->cnf->ipv4_broadcast.v4.s_addr) {
@@ -720,7 +720,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl __attribute__ ((unused)))
         return 0;
       }
 
-      ifs.int_broadaddr = *(struct sockaddr_in *)&ifr.ifr_broadaddr;
+      ifs.int_broadaddr = *(struct sockaddr_in *)(ARM_NOWARN_ALIGN)&ifr.ifr_broadaddr;
     }
 
     /* Deactivate IP spoof filter */