]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
xtables-monitor: fix build with older glibc
authorBaruch Siach <baruch@tkos.co.il>
Fri, 16 Nov 2018 05:23:32 +0000 (07:23 +0200)
committerFlorian Westphal <fw@strlen.de>
Fri, 16 Nov 2018 06:25:18 +0000 (07:25 +0100)
glibc older than 2.19 only expose BSD style fields of struct tcphdr when
_BSD_SOURCE is define. Current glibc however, warn that _BSD_SOURCE is
deprecated. Migrate to the GNU style of tcphdr fields to make the code
compatible with any glibc version.

Fix the following build failure:

xtables-monitor.c: In function 'trace_print_packet':
xtables-monitor.c:406:43: error: 'const struct tcphdr' has no member named 'th_sport'
    printf("SPORT=%d DPORT=%d ", ntohs(tcph->th_sport), ntohs(tcph->th_dport));
                                           ^
xtables-monitor.c:406:66: error: 'const struct tcphdr' has no member named 'th_dport'
    printf("SPORT=%d DPORT=%d ", ntohs(tcph->th_sport), ntohs(tcph->th_dport));
                                                                  ^
...

Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Florian Westphal <fw@strlen.de>
iptables/xtables-monitor.c

index 3b1ca777a28a0d60fca014c759186aa31860ad9b..5d1611122df520ac686b7e5d86561a45670bc02b 100644 (file)
@@ -403,26 +403,24 @@ static void trace_print_packet(const struct nftnl_trace *nlt, struct cb_arg *arg
                case IPPROTO_UDP:
                        if (len < 4)
                                break;
-                       printf("SPORT=%d DPORT=%d ", ntohs(tcph->th_sport), ntohs(tcph->th_dport));
+                       printf("SPORT=%d DPORT=%d ", ntohs(tcph->source), ntohs(tcph->dest));
                        break;
                case IPPROTO_TCP:
                        if (len < sizeof(*tcph))
                                break;
-                       printf("SPORT=%d DPORT=%d ", ntohs(tcph->th_sport), ntohs(tcph->th_dport));
-                       if (tcph->th_flags & (TH_FIN|TH_SYN|TH_RST|TH_PUSH|TH_ACK|TH_URG)) {
-                               if (tcph->th_flags & TH_SYN)
-                                       printf("SYN ");
-                               if (tcph->th_flags & TH_ACK)
-                                       printf("ACK ");
-                               if (tcph->th_flags & TH_FIN)
-                                       printf("FIN ");
-                               if (tcph->th_flags & TH_RST)
-                                       printf("RST ");
-                               if (tcph->th_flags & TH_PUSH)
-                                       printf("PSH ");
-                               if (tcph->th_flags & TH_URG)
-                                       printf("URG ");
-                       }
+                       printf("SPORT=%d DPORT=%d ", ntohs(tcph->source), ntohs(tcph->dest));
+                       if (tcph->syn)
+                               printf("SYN ");
+                       if (tcph->ack)
+                               printf("ACK ");
+                       if (tcph->fin)
+                               printf("FIN ");
+                       if (tcph->rst)
+                               printf("RST ");
+                       if (tcph->psh)
+                               printf("PSH ");
+                       if (tcph->urg)
+                               printf("URG ");
                        break;
                default:
                        break;