net: ipv4: Remove in_addr from packed net_ipv4_hdr struct

Replace unpacked in_addr structures with raw buffers in net_ipv4_hdr
struct, to prevent compiler warnings about unaligned access.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
index a225021..24039a4 100644
--- a/drivers/net/loopback.c
+++ b/drivers/net/loopback.c
@@ -86,10 +86,10 @@
 	} else {
 		struct in_addr addr;
 
-		net_ipaddr_copy(&addr, &NET_IPV4_HDR(pkt)->src);
-		net_ipaddr_copy(&NET_IPV4_HDR(pkt)->src,
-				&NET_IPV4_HDR(pkt)->dst);
-		net_ipaddr_copy(&NET_IPV4_HDR(pkt)->dst, &addr);
+		net_ipv4_addr_copy_raw((uint8_t *)&addr, NET_IPV4_HDR(pkt)->src);
+		net_ipv4_addr_copy_raw(NET_IPV4_HDR(pkt)->src,
+				       NET_IPV4_HDR(pkt)->dst);
+		net_ipv4_addr_copy_raw(NET_IPV4_HDR(pkt)->dst, (uint8_t *)&addr);
 	}
 
 	/* We should simulate normal driver meaning that if the packet is
diff --git a/include/net/net_ip.h b/include/net/net_ip.h
index e3b9d71..a0f4052 100644
--- a/include/net/net_ip.h
+++ b/include/net/net_ip.h
@@ -486,8 +486,8 @@
 	uint8_t ttl;
 	uint8_t proto;
 	uint16_t chksum;
-	struct in_addr src;
-	struct in_addr dst;
+	uint8_t src[NET_IPV4_ADDR_SIZE];
+	uint8_t dst[NET_IPV4_ADDR_SIZE];
 } __packed;
 
 struct net_icmp_hdr {
diff --git a/samples/net/zperf/src/zperf_session.c b/samples/net/zperf/src/zperf_session.c
index 663fa07..0d46e04 100644
--- a/samples/net/zperf/src/zperf_session.c
+++ b/samples/net/zperf/src/zperf_session.c
@@ -50,7 +50,7 @@
 	if (net_pkt_family(pkt) == AF_INET6) {
 		net_ipaddr_copy(&ipv6, &ip_hdr->ipv6->src);
 	} else if (net_pkt_family(pkt) == AF_INET) {
-		net_ipaddr_copy(&ipv4, &ip_hdr->ipv4->src);
+		net_ipv4_addr_copy_raw((uint8_t *)&ipv4, ip_hdr->ipv4->src);
 	} else {
 		printk("Error! unsupported protocol %d\n",
 		       net_pkt_family(pkt));
diff --git a/samples/net/zperf/src/zperf_udp_receiver.c b/samples/net/zperf/src/zperf_udp_receiver.c
index f4b1eed..82cec14 100644
--- a/samples/net/zperf/src/zperf_udp_receiver.c
+++ b/samples/net/zperf/src/zperf_udp_receiver.c
@@ -44,8 +44,8 @@
 	}
 
 	if (IS_ENABLED(CONFIG_NET_IPV4) && family == AF_INET) {
-		net_ipaddr_copy(&net_sin(dst_addr)->sin_addr,
-				&ip_hdr->ipv4->src);
+		net_ipv4_addr_copy_raw((uint8_t *)&net_sin(dst_addr)->sin_addr,
+				       ip_hdr->ipv4->src);
 		net_sin(dst_addr)->sin_family = AF_INET;
 		net_sin(dst_addr)->sin_port = udp_hdr->src_port;
 	}
diff --git a/subsys/net/ip/connection.c b/subsys/net/ip/connection.c
index 7141979..a95716c 100644
--- a/subsys/net/ip/connection.c
+++ b/subsys/net/ip/connection.c
@@ -440,17 +440,17 @@
 	} else if (IS_ENABLED(CONFIG_NET_IPV4) &&
 		   net_pkt_family(pkt) == AF_INET &&
 		   addr->sa_family == AF_INET) {
-		struct in_addr *addr4;
+		uint8_t *addr4;
 
 		if (is_remote) {
-			addr4 = &ip_hdr->ipv4->src;
+			addr4 = ip_hdr->ipv4->src;
 		} else {
-			addr4 = &ip_hdr->ipv4->dst;
+			addr4 = ip_hdr->ipv4->dst;
 		}
 
 		if (net_sin(addr)->sin_addr.s_addr) {
-			if (!net_ipv4_addr_cmp(&net_sin(addr)->sin_addr,
-					       addr4)) {
+			if (!net_ipv4_addr_cmp_raw((uint8_t *)&net_sin(addr)->sin_addr,
+						   addr4)) {
 				return false;
 			}
 		}
@@ -494,9 +494,9 @@
 	}
 
 	if (IS_ENABLED(CONFIG_NET_IPV4) && net_pkt_family(pkt) == AF_INET) {
-		if (net_ipv4_addr_cmp(&ip_hdr->ipv4->src,
-				      &ip_hdr->ipv4->dst) ||
-		    net_ipv4_is_my_addr(&ip_hdr->ipv4->src)) {
+		if (net_ipv4_addr_cmp_raw(ip_hdr->ipv4->src,
+					  ip_hdr->ipv4->dst) ||
+		    net_ipv4_is_my_addr((struct in_addr *)ip_hdr->ipv4->src)) {
 			my_src_addr = true;
 		}
 	} else if (IS_ENABLED(CONFIG_NET_IPV6) &&
@@ -614,10 +614,10 @@
 	 * need to deliver the packet to multiple recipients.
 	 */
 	if (IS_ENABLED(CONFIG_NET_IPV4) && net_pkt_family(pkt) == AF_INET) {
-		if (net_ipv4_is_addr_mcast(&ip_hdr->ipv4->dst)) {
+		if (net_ipv4_is_addr_mcast((struct in_addr *)ip_hdr->ipv4->dst)) {
 			is_mcast_pkt = true;
-		} else if (net_if_ipv4_is_addr_bcast(pkt_iface,
-						     &ip_hdr->ipv4->dst)) {
+		} else if (net_if_ipv4_is_addr_bcast(
+				pkt_iface, (struct in_addr *)ip_hdr->ipv4->dst)) {
 			is_bcast_pkt = true;
 		}
 	} else if (IS_ENABLED(CONFIG_NET_IPV6) &&
diff --git a/subsys/net/ip/icmpv4.c b/subsys/net/ip/icmpv4.c
index addb87a..0b4b71b 100644
--- a/subsys/net/ip/icmpv4.c
+++ b/subsys/net/ip/icmpv4.c
@@ -418,7 +418,7 @@
 	/* If interface can not select src address based on dst addr
 	 * and src address is unspecified, drop the echo request.
 	 */
-	if (net_ipv4_is_addr_unspecified(&ip_hdr->src)) {
+	if (net_ipv4_is_addr_unspecified((struct in_addr *)ip_hdr->src)) {
 		NET_DBG("DROP: src addr is unspecified");
 		goto drop;
 	}
@@ -445,15 +445,16 @@
 		goto drop;
 	}
 
-	if (net_ipv4_is_addr_mcast(&ip_hdr->dst) ||
-	    net_ipv4_is_addr_bcast(net_pkt_iface(pkt), &ip_hdr->dst)) {
+	if (net_ipv4_is_addr_mcast((struct in_addr *)ip_hdr->dst) ||
+	    net_ipv4_is_addr_bcast(net_pkt_iface(pkt),
+				   (struct in_addr *)ip_hdr->dst)) {
 		src = net_if_ipv4_select_src_addr(net_pkt_iface(pkt),
-						  &ip_hdr->dst);
+						  (struct in_addr *)ip_hdr->dst);
 	} else {
-		src = &ip_hdr->dst;
+		src = (struct in_addr *)ip_hdr->dst;
 	}
 
-	if (net_ipv4_create(reply, src, &ip_hdr->src)) {
+	if (net_ipv4_create(reply, src, (struct in_addr *)ip_hdr->src)) {
 		goto drop;
 	}
 
@@ -618,7 +619,8 @@
 		goto drop_no_pkt;
 	}
 
-	if (net_ipv4_create(pkt, &ip_hdr->dst, &ip_hdr->src) ||
+	if (net_ipv4_create(pkt, (struct in_addr *)ip_hdr->dst,
+			    (struct in_addr *)ip_hdr->src) ||
 	    icmpv4_create(pkt, type, code) ||
 	    net_pkt_memset(pkt, 0, NET_ICMPV4_UNUSED_LEN) ||
 	    net_pkt_copy(pkt, orig, copy_len)) {
@@ -680,7 +682,8 @@
 		goto drop;
 	}
 
-	if (net_ipv4_is_addr_bcast(net_pkt_iface(pkt), &ip_hdr->dst) &&
+	if (net_ipv4_is_addr_bcast(net_pkt_iface(pkt),
+				   (struct in_addr *)ip_hdr->dst) &&
 	    (!IS_ENABLED(CONFIG_NET_ICMPV4_ACCEPT_BROADCAST) ||
 	     icmp_hdr->type != NET_ICMPV4_ECHO_REQUEST)) {
 		NET_DBG("DROP: broadcast pkt");
diff --git a/subsys/net/ip/igmp.c b/subsys/net/ip/igmp.c
index 9135e4b..8ddc43c 100644
--- a/subsys/net/ip/igmp.c
+++ b/subsys/net/ip/igmp.c
@@ -189,7 +189,7 @@
 	/* TODO: receive from arbitrary group address instead of
 	 * all_systems
 	 */
-	if (!net_ipv4_addr_cmp(&ip_hdr->dst, &all_systems)) {
+	if (!net_ipv4_addr_cmp_raw(ip_hdr->dst, (uint8_t *)&all_systems)) {
 		NET_DBG("DROP: Invalid dst address");
 		return NET_DROP;
 	}
diff --git a/subsys/net/ip/ipv4.c b/subsys/net/ip/ipv4.c
index 308cc50..59e04f3 100644
--- a/subsys/net/ip/ipv4.c
+++ b/subsys/net/ip/ipv4.c
@@ -63,8 +63,8 @@
 	ipv4_hdr->proto     = 0U;
 	ipv4_hdr->chksum    = 0U;
 
-	net_ipaddr_copy(&ipv4_hdr->dst, dst);
-	net_ipaddr_copy(&ipv4_hdr->src, src);
+	net_ipv4_addr_copy_raw(ipv4_hdr->dst, (uint8_t *)dst);
+	net_ipv4_addr_copy_raw(ipv4_hdr->src, (uint8_t *)src);
 
 	net_pkt_set_ip_hdr_len(pkt, sizeof(struct net_ipv4_hdr));
 
@@ -268,17 +268,17 @@
 		net_pkt_update_length(pkt, pkt_len);
 	}
 
-	if (net_ipv4_is_addr_mcast(&hdr->src)) {
+	if (net_ipv4_is_addr_mcast((struct in_addr *)hdr->src)) {
 		NET_DBG("DROP: src addr is %s", "mcast");
 		goto drop;
 	}
 
-	if (net_ipv4_is_addr_bcast(net_pkt_iface(pkt), &hdr->src)) {
+	if (net_ipv4_is_addr_bcast(net_pkt_iface(pkt), (struct in_addr *)hdr->src)) {
 		NET_DBG("DROP: src addr is %s", "bcast");
 		goto drop;
 	}
 
-	if (net_ipv4_is_addr_unspecified(&hdr->src)) {
+	if (net_ipv4_is_addr_unspecified((struct in_addr *)hdr->src)) {
 		NET_DBG("DROP: src addr is %s", "unspecified");
 		goto drop;
 	}
@@ -289,16 +289,16 @@
 		goto drop;
 	}
 
-	if ((!net_ipv4_is_my_addr(&hdr->dst) &&
-	     !net_ipv4_is_addr_mcast(&hdr->dst) &&
+	if ((!net_ipv4_is_my_addr((struct in_addr *)hdr->dst) &&
+	     !net_ipv4_is_addr_mcast((struct in_addr *)hdr->dst) &&
 	     !(hdr->proto == IPPROTO_UDP &&
-	       (net_ipv4_addr_cmp(&hdr->dst, net_ipv4_broadcast_address()) ||
+	       (net_ipv4_addr_cmp((struct in_addr *)hdr->dst, net_ipv4_broadcast_address()) ||
 		/* RFC 1122 ch. 3.3.6 The 0.0.0.0 is non-standard bcast addr */
 		(IS_ENABLED(CONFIG_NET_IPV4_ACCEPT_ZERO_BROADCAST) &&
-		 net_ipv4_addr_cmp(&hdr->dst,
+		 net_ipv4_addr_cmp((struct in_addr *)hdr->dst,
 				   net_ipv4_unspecified_address()))))) ||
 	    (hdr->proto == IPPROTO_TCP &&
-	     net_ipv4_is_addr_bcast(net_pkt_iface(pkt), &hdr->dst))) {
+	     net_ipv4_is_addr_bcast(net_pkt_iface(pkt), (struct in_addr *)hdr->dst))) {
 		NET_DBG("DROP: not for me");
 		goto drop;
 	}
@@ -355,7 +355,7 @@
 		struct net_addr remote_addr;
 
 		remote_addr.family = AF_INET;
-		net_ipaddr_copy(&remote_addr.in_addr, &hdr->src);
+		net_ipv4_addr_copy_raw((uint8_t *)&remote_addr.in_addr, hdr->src);
 
 		/* Get rid of the old IP header */
 		net_pkt_cursor_restore(pkt, &hdr_start);
diff --git a/subsys/net/ip/net_core.c b/subsys/net/ip/net_core.c
index c66101a..279a1d0 100644
--- a/subsys/net/ip/net_core.c
+++ b/subsys/net/ip/net_core.c
@@ -246,7 +246,7 @@
 
 #if defined(CONFIG_NET_IPV4)
 	if (net_pkt_family(pkt) == AF_INET) {
-		if (net_ipv4_addr_cmp(&NET_IPV4_HDR(pkt)->dst,
+		if (net_ipv4_addr_cmp((struct in_addr *)NET_IPV4_HDR(pkt)->dst,
 				      net_ipv4_unspecified_address())) {
 			NET_DBG("IPv4 dst address missing");
 			return -EADDRNOTAVAIL;
@@ -255,19 +255,19 @@
 		/* If the destination address is our own, then route it
 		 * back to us.
 		 */
-		if (net_ipv4_is_addr_loopback(&NET_IPV4_HDR(pkt)->dst) ||
+		if (net_ipv4_is_addr_loopback((struct in_addr *)NET_IPV4_HDR(pkt)->dst) ||
 		    (net_ipv4_is_addr_bcast(net_pkt_iface(pkt),
-				     &NET_IPV4_HDR(pkt)->dst) == false &&
-		     net_ipv4_is_my_addr(&NET_IPV4_HDR(pkt)->dst))) {
+				     (struct in_addr *)NET_IPV4_HDR(pkt)->dst) == false &&
+		     net_ipv4_is_my_addr((struct in_addr *)NET_IPV4_HDR(pkt)->dst))) {
 			struct in_addr addr;
 
 			/* Swap the addresses so that in receiving side
 			 * the packet is accepted.
 			 */
-			net_ipaddr_copy(&addr, &NET_IPV4_HDR(pkt)->src);
-			net_ipaddr_copy(&NET_IPV4_HDR(pkt)->src,
-					&NET_IPV4_HDR(pkt)->dst);
-			net_ipaddr_copy(&NET_IPV4_HDR(pkt)->dst, &addr);
+			net_ipv4_addr_copy_raw((uint8_t *)&addr, NET_IPV4_HDR(pkt)->src);
+			net_ipv4_addr_copy_raw(NET_IPV4_HDR(pkt)->src,
+					       NET_IPV4_HDR(pkt)->dst);
+			net_ipv4_addr_copy_raw(NET_IPV4_HDR(pkt)->dst, (uint8_t *)&addr);
 
 			return 1;
 		}
@@ -276,7 +276,7 @@
 		 * as having src 127.0.0.0/8 is perfectly ok if dst is in
 		 * localhost subnet too.
 		 */
-		if (net_ipv4_is_addr_loopback(&NET_IPV4_HDR(pkt)->src)) {
+		if (net_ipv4_is_addr_loopback((struct in_addr *)NET_IPV4_HDR(pkt)->src)) {
 			NET_DBG("IPv4 loopback src address");
 			return -EADDRNOTAVAIL;
 		}
diff --git a/subsys/net/ip/tcp.c b/subsys/net/ip/tcp.c
index 4b3decf..fceefca 100644
--- a/subsys/net/ip/tcp.c
+++ b/subsys/net/ip/tcp.c
@@ -161,9 +161,9 @@
 
 			ep->sin.sin_port = src == TCP_EP_SRC ? th_sport(th) :
 							       th_dport(th);
-			net_ipaddr_copy(&ep->sin.sin_addr,
-					src == TCP_EP_SRC ?
-							&ip->src : &ip->dst);
+			net_ipv4_addr_copy_raw((uint8_t *)&ep->sin.sin_addr,
+					       src == TCP_EP_SRC ?
+							ip->src : ip->dst);
 			ep->sa.sa_family = AF_INET;
 		} else {
 			ret = -EINVAL;
@@ -828,8 +828,10 @@
 static bool is_destination_local(struct net_pkt *pkt)
 {
 	if (IS_ENABLED(CONFIG_NET_IPV4) && net_pkt_family(pkt) == AF_INET) {
-		if (net_ipv4_is_addr_loopback(&NET_IPV4_HDR(pkt)->dst) ||
-		    net_ipv4_is_my_addr(&NET_IPV4_HDR(pkt)->dst)) {
+		if (net_ipv4_is_addr_loopback(
+				(struct in_addr *)NET_IPV4_HDR(pkt)->dst) ||
+		    net_ipv4_is_my_addr(
+				(struct in_addr *)NET_IPV4_HDR(pkt)->dst)) {
 			return true;
 		}
 	}
diff --git a/subsys/net/l2/ethernet/ethernet.c b/subsys/net/l2/ethernet/ethernet.c
index 2953088..edf62ef 100644
--- a/subsys/net/l2/ethernet/ethernet.c
+++ b/subsys/net/l2/ethernet/ethernet.c
@@ -179,9 +179,9 @@
 						struct net_eth_hdr *hdr)
 {
 	if (net_eth_is_addr_broadcast(&hdr->dst) &&
-	    !(net_ipv4_is_addr_mcast(&NET_IPV4_HDR(pkt)->dst) ||
+	    !(net_ipv4_is_addr_mcast((struct in_addr *)NET_IPV4_HDR(pkt)->dst) ||
 	      net_ipv4_is_addr_bcast(net_pkt_iface(pkt),
-				     &NET_IPV4_HDR(pkt)->dst))) {
+				     (struct in_addr *)NET_IPV4_HDR(pkt)->dst))) {
 		return NET_DROP;
 	}
 
@@ -353,8 +353,8 @@
 static inline bool ethernet_ipv4_dst_is_broadcast_or_mcast(struct net_pkt *pkt)
 {
 	if (net_ipv4_is_addr_bcast(net_pkt_iface(pkt),
-				   &NET_IPV4_HDR(pkt)->dst) ||
-	    net_ipv4_is_addr_mcast(&NET_IPV4_HDR(pkt)->dst)) {
+				   (struct in_addr *)NET_IPV4_HDR(pkt)->dst) ||
+	    net_ipv4_is_addr_mcast((struct in_addr *)NET_IPV4_HDR(pkt)->dst)) {
 		return true;
 	}
 
@@ -365,9 +365,10 @@
 					       struct net_eth_addr *dst)
 {
 	if (net_pkt_family(pkt) == AF_INET &&
-	    net_ipv4_is_addr_mcast(&NET_IPV4_HDR(pkt)->dst)) {
+	    net_ipv4_is_addr_mcast((struct in_addr *)NET_IPV4_HDR(pkt)->dst)) {
 		/* Multicast address */
-		net_eth_ipv4_mcast_to_mac_addr(&NET_IPV4_HDR(pkt)->dst, dst);
+		net_eth_ipv4_mcast_to_mac_addr(
+			(struct in_addr *)NET_IPV4_HDR(pkt)->dst, dst);
 
 		return true;
 	}
@@ -385,7 +386,7 @@
 	if (IS_ENABLED(CONFIG_NET_ARP)) {
 		struct net_pkt *arp_pkt;
 
-		arp_pkt = net_arp_prepare(pkt, &NET_IPV4_HDR(pkt)->dst, NULL);
+		arp_pkt = net_arp_prepare(pkt, (struct in_addr *)NET_IPV4_HDR(pkt)->dst, NULL);
 		if (!arp_pkt) {
 			return NULL;
 		}
@@ -461,7 +462,7 @@
 	if (net_pkt_family(pkt) == AF_INET) {
 		struct net_if *target;
 
-		if (net_if_ipv4_addr_lookup(&NET_IPV4_HDR(pkt)->src,
+		if (net_if_ipv4_addr_lookup((struct in_addr *)NET_IPV4_HDR(pkt)->src,
 					    &target)) {
 			if (target != iface) {
 				NET_DBG("Iface %p should be %p", iface,
diff --git a/subsys/net/l2/virtual/ipip/ipip.c b/subsys/net/l2/virtual/ipip/ipip.c
index 236ae82..d44b0ec 100644
--- a/subsys/net/l2/virtual/ipip/ipip.c
+++ b/subsys/net/l2/virtual/ipip/ipip.c
@@ -368,7 +368,7 @@
 			return NET_DROP;
 		}
 
-		iface = net_if_ipv4_select_src_iface(&hdr->dst);
+		iface = net_if_ipv4_select_src_iface((struct in_addr *)hdr->dst);
 		if (iface == NULL) {
 			NET_DBG("DROP: not for me (dst %s)",
 				net_sprint_ipv4_addr(&hdr->dst));
diff --git a/subsys/net/lib/dns/llmnr_responder.c b/subsys/net/lib/dns/llmnr_responder.c
index c1fcb6c..8aeeb1f 100644
--- a/subsys/net/lib/dns/llmnr_responder.c
+++ b/subsys/net/lib/dns/llmnr_responder.c
@@ -104,7 +104,7 @@
 	addr->sin_family = AF_INET;
 	addr->sin_port = udp_hdr->src_port;
 
-	net_ipaddr_copy(&addr->sin_addr, &NET_IPV4_HDR(pkt)->src);
+	net_ipv4_addr_copy_raw((uint8_t *)&addr->sin_addr, NET_IPV4_HDR(pkt)->src);
 }
 #endif
 
@@ -352,7 +352,7 @@
 	} else if (qtype == DNS_RR_TYPE_A) {
 #if defined(CONFIG_NET_IPV4)
 		addr = get_ipv4_src(net_pkt_iface(pkt),
-				    &ip_hdr->ipv4->src);
+				    (struct in_addr *)ip_hdr->ipv4->src);
 		if (!addr) {
 			return -ENOENT;
 		}
diff --git a/subsys/net/lib/dns/mdns_responder.c b/subsys/net/lib/dns/mdns_responder.c
index 7948c1c..6ee3b70 100644
--- a/subsys/net/lib/dns/mdns_responder.c
+++ b/subsys/net/lib/dns/mdns_responder.c
@@ -253,7 +253,7 @@
 		const struct in_addr *addr;
 
 		addr = net_if_ipv4_select_src_addr(net_pkt_iface(pkt),
-						   &ip_hdr->ipv4->src);
+						   (struct in_addr *)ip_hdr->ipv4->src);
 
 		ret = create_answer(ctx, query, qtype,
 				      sizeof(struct in_addr), (uint8_t *)addr);
@@ -347,7 +347,7 @@
 	if (IS_ENABLED(CONFIG_NET_IPV4)) {
 		/* Look up the local IPv4 address */
 		addr4 = net_if_ipv4_select_src_addr(net_pkt_iface(pkt),
-					   &ip_hdr->ipv4->src);
+						    (struct in_addr *)ip_hdr->ipv4->src);
 	}
 
 	if (IS_ENABLED(CONFIG_NET_IPV6)) {
diff --git a/subsys/net/lib/sockets/sockets.c b/subsys/net/lib/sockets/sockets.c
index 7b8c58a..c7bbea9 100644
--- a/subsys/net/lib/sockets/sockets.c
+++ b/subsys/net/lib/sockets/sockets.c
@@ -866,7 +866,7 @@
 			goto error;
 		}
 
-		net_ipaddr_copy(&addr4->sin_addr, &ipv4_hdr->src);
+		net_ipv4_addr_copy_raw((uint8_t *)&addr4->sin_addr, ipv4_hdr->src);
 		port = &addr4->sin_port;
 	} else if (IS_ENABLED(CONFIG_NET_IPV6) &&
 		   net_pkt_family(pkt) == AF_INET6) {
diff --git a/tests/net/arp/src/main.c b/tests/net/arp/src/main.c
index 25dec2b..460d2f2 100644
--- a/tests/net/arp/src/main.c
+++ b/tests/net/arp/src/main.c
@@ -369,12 +369,12 @@
 
 	ipv4 = (struct net_ipv4_hdr *)net_buf_add(pkt->buffer,
 						  sizeof(struct net_ipv4_hdr));
-	net_ipaddr_copy(&ipv4->src, &src);
-	net_ipaddr_copy(&ipv4->dst, &dst);
+	net_ipv4_addr_copy_raw(ipv4->src, (uint8_t *)&src);
+	net_ipv4_addr_copy_raw(ipv4->dst, (uint8_t *)&dst);
 
 	memcpy(net_buf_add(pkt->buffer, len), app_data, len);
 
-	pkt2 = net_arp_prepare(pkt, &NET_IPV4_HDR(pkt)->dst, NULL);
+	pkt2 = net_arp_prepare(pkt, &dst, NULL);
 
 	/* pkt2 is the ARP packet and pkt is the IPv4 packet and it was
 	 * stored in ARP table.
@@ -431,7 +431,7 @@
 	}
 
 	if (!net_ipv4_addr_cmp_raw(arp_hdr->dst_ipaddr,
-				   (uint8_t *)&NET_IPV4_HDR(pkt)->dst)) {
+				   NET_IPV4_HDR(pkt)->dst)) {
 		printk("ARP IP dest invalid %s, should be %s",
 			net_sprint_ipv4_addr(&arp_hdr->dst_ipaddr),
 			net_sprint_ipv4_addr(&NET_IPV4_HDR(pkt)->dst));
@@ -439,7 +439,7 @@
 	}
 
 	if (!net_ipv4_addr_cmp_raw(arp_hdr->src_ipaddr,
-				   (uint8_t *)&NET_IPV4_HDR(pkt)->src)) {
+				   NET_IPV4_HDR(pkt)->src)) {
 		printk("ARP IP src invalid %s, should be %s",
 			net_sprint_ipv4_addr(&arp_hdr->src_ipaddr),
 			net_sprint_ipv4_addr(&NET_IPV4_HDR(pkt)->src));
@@ -455,9 +455,9 @@
 		"ARP cache should own the original packet");
 
 	/* Then a case where target is not in the same subnet */
-	net_ipaddr_copy(&ipv4->dst, &dst_far);
+	net_ipv4_addr_copy_raw(ipv4->dst, (uint8_t *)&dst_far);
 
-	pkt2 = net_arp_prepare(pkt, &NET_IPV4_HDR(pkt)->dst, NULL);
+	pkt2 = net_arp_prepare(pkt, &dst_far, NULL);
 
 	zassert_not_equal((void *)(pkt2), (void *)(pkt),
 		"ARP cache should not find anything");
@@ -481,14 +481,14 @@
 	/* Try to find the same destination again, this should fail as there
 	 * is a pending request in ARP cache.
 	 */
-	net_ipaddr_copy(&ipv4->dst, &dst_far);
+	net_ipv4_addr_copy_raw(ipv4->dst, (uint8_t *)&dst_far);
 
 	/* Make sure prepare will not free the pkt because it will be
 	 * needed in the later test case.
 	 */
 	net_pkt_ref(pkt);
 
-	pkt2 = net_arp_prepare(pkt, &NET_IPV4_HDR(pkt)->dst, NULL);
+	pkt2 = net_arp_prepare(pkt, &dst_far, NULL);
 
 	zassert_not_null(pkt2,
 		"ARP cache is not sending the request again");
@@ -498,14 +498,14 @@
 	/* Try to find the different destination, this should fail too
 	 * as the cache table should be full.
 	 */
-	net_ipaddr_copy(&ipv4->dst, &dst_far2);
+	net_ipv4_addr_copy_raw(ipv4->dst, (uint8_t *)&dst_far2);
 
 	/* Make sure prepare will not free the pkt because it will be
 	 * needed in the next test case.
 	 */
 	net_pkt_ref(pkt);
 
-	pkt2 = net_arp_prepare(pkt, &NET_IPV4_HDR(pkt)->dst, NULL);
+	pkt2 = net_arp_prepare(pkt, &dst_far2, NULL);
 
 	zassert_not_null(pkt2,
 		"ARP cache did not send a req");
@@ -513,7 +513,7 @@
 	/* Restore the original address so that following test case can
 	 * work properly.
 	 */
-	net_ipaddr_copy(&ipv4->dst, &dst);
+	net_ipv4_addr_copy_raw(ipv4->dst, (uint8_t *)&dst);
 
 	/* The arp request packet is now verified, create an arp reply.
 	 * The previous value of pkt is stored in arp table and is not lost.
diff --git a/tests/net/checksum_offload/src/main.c b/tests/net/checksum_offload/src/main.c
index b80d8b3..a1dcf82 100644
--- a/tests/net/checksum_offload/src/main.c
+++ b/tests/net/checksum_offload/src/main.c
@@ -170,10 +170,10 @@
 		} else {
 			struct in_addr addr;
 
-			net_ipaddr_copy(&addr, &NET_IPV4_HDR(pkt)->src);
-			net_ipaddr_copy(&NET_IPV4_HDR(pkt)->src,
-					&NET_IPV4_HDR(pkt)->dst);
-			net_ipaddr_copy(&NET_IPV4_HDR(pkt)->dst, &addr);
+			net_ipv4_addr_copy_raw((uint8_t *)&addr, NET_IPV4_HDR(pkt)->src);
+			net_ipv4_addr_copy_raw(NET_IPV4_HDR(pkt)->src,
+					       NET_IPV4_HDR(pkt)->dst);
+			net_ipv4_addr_copy_raw(NET_IPV4_HDR(pkt)->dst, (uint8_t *)&addr);
 		}
 
 		udp_hdr = net_udp_get_hdr(pkt, &hdr);
diff --git a/tests/net/context/src/main.c b/tests/net/context/src/main.c
index 1b45adf..b279057 100644
--- a/tests/net/context/src/main.c
+++ b/tests/net/context/src/main.c
@@ -921,10 +921,10 @@
 		} else {
 			struct in_addr addr;
 
-			net_ipaddr_copy(&addr, &NET_IPV4_HDR(pkt)->src);
-			net_ipaddr_copy(&NET_IPV4_HDR(pkt)->src,
-					&NET_IPV4_HDR(pkt)->dst);
-			net_ipaddr_copy(&NET_IPV4_HDR(pkt)->dst, &addr);
+			net_ipv4_addr_copy_raw((uint8_t *)&addr, NET_IPV4_HDR(pkt)->src);
+			net_ipv4_addr_copy_raw(NET_IPV4_HDR(pkt)->src,
+					       NET_IPV4_HDR(pkt)->dst);
+			net_ipv4_addr_copy_raw(NET_IPV4_HDR(pkt)->dst, (uint8_t *)&addr);
 		}
 
 		udp_hdr = net_udp_get_hdr(pkt, &hdr);