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)); ^ ... Cc: Florian Westphal <fw@xxxxxxxxx> Signed-off-by: Baruch Siach <baruch@xxxxxxxxxx> --- v2: Use GNU tcphdr fields Note: build tested only. --- iptables/xtables-monitor.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/iptables/xtables-monitor.c b/iptables/xtables-monitor.c index 3b1ca777a28a..5d1611122df5 100644 --- a/iptables/xtables-monitor.c +++ b/iptables/xtables-monitor.c @@ -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; -- 2.19.1