optimize 16- and 32-bit moves

function                                             old     new   delta
udhcpd_main                                         1239    1257     +18
udhcp_add_simple_option                               93      92      -1
buffer_read_le_u32                                    19      18      -1
unpack_gz_stream_with_info                           526     520      -6
dnsd_main                                           1470    1463      -7
udhcp_run_script                                    1208    1186     -22
send_ACK                                             255     229     -26
arping_main                                         1661    1623     -38
send_offer                                           470     428     -42
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/8 up/down: 18/-143)          Total: -125 bytes

diff --git a/networking/libiproute/libnetlink.c b/networking/libiproute/libnetlink.c
index 01454fb..6d51d8d 100644
--- a/networking/libiproute/libnetlink.c
+++ b/networking/libiproute/libnetlink.c
@@ -341,7 +341,7 @@
 	rta = (struct rtattr*)(((char*)n) + NLMSG_ALIGN(n->nlmsg_len));
 	rta->rta_type = type;
 	rta->rta_len = len;
-	memcpy(RTA_DATA(rta), &data, 4);
+	move_to_unaligned32(RTA_DATA(rta), data);
 	n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + len;
 	return 0;
 }
@@ -372,7 +372,7 @@
 	subrta = (struct rtattr*)(((char*)rta) + RTA_ALIGN(rta->rta_len));
 	subrta->rta_type = type;
 	subrta->rta_len = len;
-	memcpy(RTA_DATA(subrta), &data, 4);
+	move_to_unaligned32(RTA_DATA(subrta), data);
 	rta->rta_len = NLMSG_ALIGN(rta->rta_len) + len;
 	return 0;
 }
diff --git a/networking/libiproute/ll_addr.c b/networking/libiproute/ll_addr.c
index e732efd..f50e371 100644
--- a/networking/libiproute/ll_addr.c
+++ b/networking/libiproute/ll_addr.c
@@ -43,6 +43,8 @@
 
 int ll_addr_a2n(unsigned char *lladdr, int len, char *arg)
 {
+	int i;
+
 	if (strchr(arg, '.')) {
 		inet_prefix pfx;
 		if (get_addr_1(&pfx, arg, AF_INET)) {
@@ -54,26 +56,24 @@
 		}
 		memcpy(lladdr, pfx.data, 4);
 		return 4;
-	} else {
-		int i;
-
-		for (i=0; i<len; i++) {
-			int temp;
-			char *cp = strchr(arg, ':');
-			if (cp) {
-				*cp = 0;
-				cp++;
-			}
-			if (sscanf(arg, "%x", &temp) != 1 || (temp < 0 || temp > 255)) {
-				bb_error_msg("\"%s\" is invalid lladdr", arg);
-				return -1;
-			}
-			lladdr[i] = temp;
-			if (!cp) {
-				break;
-			}
-			arg = cp;
-		}
-		return i+1;
 	}
+
+	for (i = 0; i < len; i++) {
+		int temp;
+		char *cp = strchr(arg, ':');
+		if (cp) {
+			*cp = 0;
+			cp++;
+		}
+		if (sscanf(arg, "%x", &temp) != 1 || (temp < 0 || temp > 255)) {
+			bb_error_msg("\"%s\" is invalid lladdr", arg);
+			return -1;
+		}
+		lladdr[i] = temp;
+		if (!cp) {
+			break;
+		}
+		arg = cp;
+	}
+	return i+1;
 }