Parsing fixes.
diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c
index 6ad521c..03cf3cd 100644
--- a/pimd/pim_igmp.c
+++ b/pimd/pim_igmp.c
@@ -288,7 +288,8 @@
   uint16_t              checksum;
   int                   i;
 
-  group_addr = *(struct in_addr *)(igmp_msg + 4);
+  //group_addr = *(struct in_addr *)(igmp_msg + 4);
+  memcpy(&group_addr, igmp_msg + 4, sizeof(struct in_addr));
 
   ifp = igmp->interface;
   pim_ifp = ifp->info;
@@ -421,8 +422,12 @@
 	  /* Scan sources in query and lower their timers to LMQT */
 	  struct in_addr *sources = (struct in_addr *)(igmp_msg + IGMP_V3_SOURCES_OFFSET);
 	  for (i = 0; i < recv_num_sources; ++i) {
-	    struct in_addr src_addr = sources[i];
-	    struct igmp_source *src = igmp_find_source_by_addr(group, src_addr);
+	    //struct in_addr src_addr = sources[i];
+	    //struct igmp_source *src = igmp_find_source_by_addr(group, src_addr);
+	    struct in_addr src_addr;
+	    struct igmp_source *src;
+            memcpy(&src_addr, sources + i, sizeof(struct in_addr));
+	    src = igmp_find_source_by_addr(group, src_addr);
 	    if (src) {
 	      igmp_source_timer_lower_to_lmqt(src);
 	    }
@@ -506,7 +511,8 @@
     rec_auxdatalen  = group_record[IGMP_V3_GROUP_RECORD_AUXDATALEN_OFFSET];
     rec_num_sources = ntohs(* (uint16_t *) (group_record + IGMP_V3_GROUP_RECORD_NUMSOURCES_OFFSET));
 
-    rec_group = *(struct in_addr *)(group_record + IGMP_V3_GROUP_RECORD_GROUP_OFFSET);
+    //rec_group = *(struct in_addr *)(group_record + IGMP_V3_GROUP_RECORD_GROUP_OFFSET);
+    memcpy(&rec_group, group_record + IGMP_V3_GROUP_RECORD_GROUP_OFFSET, sizeof(struct in_addr));
 
     if (PIM_DEBUG_IGMP_PACKETS) {
       zlog_debug("Recv IGMP report v3 from %s on %s: record=%d type=%d auxdatalen=%d sources=%d group=%s",
@@ -599,7 +605,8 @@
 	      __FILE__, __PRETTY_FUNCTION__);
   }
 
-  group_addr = *(struct in_addr *)(igmp_msg + 4);
+  //group_addr = *(struct in_addr *)(igmp_msg + 4);
+  memcpy(&group_addr, igmp_msg + 4, sizeof(struct in_addr));
 
   /* non-existant group is created as INCLUDE {empty} */
   group = igmp_add_group_by_addr(igmp, group_addr, ifp->name);
@@ -655,7 +662,8 @@
 	      __FILE__, __PRETTY_FUNCTION__);
   }
 
-  group_addr = *(struct in_addr *)(igmp_msg + 4);
+  //group_addr = *(struct in_addr *)(igmp_msg + 4);
+  memcpy(&group_addr, igmp_msg + 4, sizeof(struct in_addr));
 
   /* non-existant group is created as INCLUDE {empty} */
   group = igmp_add_group_by_addr(igmp, group_addr, ifp->name);