diff --git a/inarp.c b/inarp.c
index 9a6e679..68e99ff 100644
--- a/inarp.c
+++ b/inarp.c
@@ -33,20 +33,24 @@
 #include <linux/if_ether.h>
 #include <linux/if_packet.h>
 
+struct eth_addr {
+	uint8_t		eth_addr[ETH_ALEN];
+} __attribute__((packed));
+
 struct arp_packet {
 	struct ethhdr	eh;
 	struct arphdr	arp;
-	uint8_t		src_mac[ETH_ALEN];
+	struct eth_addr	src_mac;
 	struct in_addr	src_ip;
-	uint8_t		dest_mac[ETH_ALEN];
+	struct eth_addr	dest_mac;
 	struct in_addr	dest_ip;
 } __attribute__((packed));
 
 static int send_arp_packet(int fd,
 		int ifindex,
-		const unsigned char *src_mac,
+		const struct eth_addr *src_mac,
 		const struct in_addr *src_ip,
-		const unsigned char *dest_mac,
+		const struct eth_addr *dest_mac,
 		const struct in_addr *dest_ip)
 {
 	struct sockaddr_ll addr;
@@ -93,14 +97,15 @@
 	return rc;
 }
 
-static const char *eth_mac_to_str(const unsigned char *mac_addr)
+static const char *eth_mac_to_str(const struct eth_addr *mac_addr)
 {
 	static char mac_str[ETH_ALEN * (sizeof("00:") - 1)];
+	const uint8_t *addr = mac_addr->eth_addr;
 
 	snprintf(mac_str, sizeof(mac_str),
 			"%02x:%02x:%02x:%02x:%02x:%02x",
-			mac_addr[0], mac_addr[1], mac_addr[2],
-			mac_addr[3], mac_addr[4], mac_addr[5]);
+			addr[0], addr[1], addr[2],
+			addr[3], addr[4], addr[5]);
 
 	return mac_str;
 }
@@ -137,7 +142,7 @@
 	return 0;
 }
 
-static int get_local_hwaddr(int fd, const char *ifname, uint8_t *addr)
+static int get_local_hwaddr(int fd, const char *ifname, struct eth_addr *addr)
 {
 	struct ifreq ifreq;
 	int rc;
@@ -174,7 +179,7 @@
 
 int main(int argc, char **argv)
 {
-	static unsigned char local_mac[6];
+	static struct eth_addr local_mac;
 	static struct in_addr local_ip;
 	struct arp_packet inarp_req;
 	int fd, ret, ifindex;
@@ -200,11 +205,11 @@
 	if (ret)
 		exit(EXIT_FAILURE);
 
-	ret = get_local_hwaddr(fd, ifname, local_mac);
+	ret = get_local_hwaddr(fd, ifname, &local_mac);
 	if (ret)
 		exit(EXIT_FAILURE);
 
-	printf("%s MAC address: %s\n", ifname, eth_mac_to_str(local_mac));
+	printf("%s MAC address: %s\n", ifname, eth_mac_to_str(&local_mac));
 
 	while (1) {
 		len = recvfrom(fd, &inarp_req, sizeof(inarp_req), 0,
@@ -224,10 +229,10 @@
 			continue;
 
 		/* ... for us? */
-		if (memcmp(local_mac, inarp_req.eh.h_dest, ETH_ALEN))
+		if (memcmp(&local_mac, inarp_req.eh.h_dest, ETH_ALEN))
 			continue;
 
-		printf("src mac:  %s\n", eth_mac_to_str(inarp_req.src_mac));
+		printf("src mac:  %s\n", eth_mac_to_str(&inarp_req.src_mac));
 		printf("src ip:   %s\n", inet_ntoa(inarp_req.src_ip));
 
 		ret = get_local_ipaddr(fd, ifname, &local_ip);
@@ -239,9 +244,9 @@
 		printf("local ip: %s\n", inet_ntoa(local_ip));
 
 		send_arp_packet(fd, ifindex,
-				inarp_req.dest_mac,
+				&inarp_req.dest_mac,
 				&local_ip,
-				inarp_req.src_mac,
+				&inarp_req.src_mac,
 				&inarp_req.src_ip);
 	}
 	close(fd);
