Use POSIX instead of Linux fields. Glibc has both, musl only has POSIX.

--- a/ioctl.c
+++ b/ioctl.c
@@ -25,6 +25,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
 #include <linux/if.h>
--- a/ping.c
+++ b/ping.c
@@ -30,6 +30,7 @@
 #include <fcntl.h>
 #include <string.h>
 #include <math.h>
+#include <linux/types.h>
 
 #include "main.h"
 #include "ping.h"
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -36,6 +36,7 @@
 #include <netinet/udp.h>
 #include <netinet/ip_icmp.h>
 #include <netinet/if_ether.h>
+#include <linux/types.h>
 
 #include "main.h"
 #include "tcpdump.h"
@@ -230,7 +231,7 @@ static void dump_ip(unsigned char *packet_buff, ssize_t buff_len, int time_print
 				printf("%s: ICMP ", inet_ntoa(*(struct in_addr *)&iphdr->daddr));
 				printf("%s udp port %hu unreachable, length %zu\n",
 					inet_ntoa(*(struct in_addr *)&tmp_iphdr->daddr),
-					ntohs(tmp_udphdr->dest), (size_t)buff_len - (iphdr->ihl * 4));
+					ntohs(tmp_udphdr->uh_dport), (size_t)buff_len - (iphdr->ihl * 4));
 				break;
 			default:
 				printf("%s: ICMP unreachable %hhu, length %zu\n",
@@ -261,25 +262,25 @@ static void dump_ip(unsigned char *packet_buff, ssize_t buff_len, int time_print
 		break;
 	case IPPROTO_TCP:
 		tcphdr = (struct tcphdr *)(packet_buff + (iphdr->ihl * 4));
-		tcp_header_len = tcphdr->doff * 4;
+		tcp_header_len = tcphdr->th_off * 4;
 		LEN_CHECK((size_t)buff_len - (iphdr->ihl * 4),
 			  (size_t)tcp_header_len, "TCP");
 
-		printf("IP %s.%i > ", inet_ntoa(*(struct in_addr *)&iphdr->saddr), ntohs(tcphdr->source));
+		printf("IP %s.%i > ", inet_ntoa(*(struct in_addr *)&iphdr->saddr), ntohs(tcphdr->th_sport));
 		printf("%s.%i: TCP, flags [%c%c%c%c%c%c], length %zu\n",
-			inet_ntoa(*(struct in_addr *)&iphdr->daddr), ntohs(tcphdr->dest),
-			(tcphdr->fin ? 'F' : '.'), (tcphdr->syn ? 'S' : '.'),
-			(tcphdr->rst ? 'R' : '.'), (tcphdr->psh ? 'P' : '.'),
-			(tcphdr->ack ? 'A' : '.'), (tcphdr->urg ? 'U' : '.'),
+			inet_ntoa(*(struct in_addr *)&iphdr->daddr), ntohs(tcphdr->th_dport),
+			(tcphdr->th_flags & TH_FIN ? 'F' : '.'), (tcphdr->th_flags & TH_SYN ? 'S' : '.'),
+			(tcphdr->th_flags & TH_RST ? 'R' : '.'), (tcphdr->th_flags & TH_PUSH ? 'P' : '.'),
+			(tcphdr->th_flags & TH_ACK ? 'A' : '.'), (tcphdr->th_flags & TH_URG ? 'U' : '.'),
 			(size_t)buff_len - (iphdr->ihl * 4) - tcp_header_len);
 		break;
 	case IPPROTO_UDP:
 		LEN_CHECK((size_t)buff_len - (iphdr->ihl * 4), sizeof(struct udphdr), "UDP");
 
 		udphdr = (struct udphdr *)(packet_buff + (iphdr->ihl * 4));
-		printf("IP %s.%i > ", inet_ntoa(*(struct in_addr *)&iphdr->saddr), ntohs(udphdr->source));
+		printf("IP %s.%i > ", inet_ntoa(*(struct in_addr *)&iphdr->saddr), ntohs(udphdr->uh_sport));
 
-		switch (ntohs(udphdr->dest)) {
+		switch (ntohs(udphdr->uh_dport)) {
 		case 67:
                         LEN_CHECK((size_t)buff_len - (iphdr->ihl * 4) - sizeof(struct udphdr), (size_t) 44, "DHCP");
 			printf("%s.67: BOOTP/DHCP, Request from %s, length %zu\n",
@@ -294,7 +295,7 @@ static void dump_ip(unsigned char *packet_buff, ssize_t buff_len, int time_print
 			break;
 		default:
 			printf("%s.%i: UDP, length %zu\n",
-				inet_ntoa(*(struct in_addr *)&iphdr->daddr), ntohs(udphdr->dest),
+				inet_ntoa(*(struct in_addr *)&iphdr->daddr), ntohs(udphdr->uh_dport),
 				(size_t)buff_len - (iphdr->ihl * 4) - sizeof(struct udphdr));
 			break;
 		}
--- a/traceroute.c
+++ b/traceroute.c
@@ -28,6 +28,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <string.h>
+#include <linux/types.h>
 
 #include "main.h"
 #include "traceroute.h"
