#ifdef __KERNEL__
 
-#define NF_CT_DUMP_TUPLE(tp)                                                \
-pr_debug("tuple %p: %u %u " NIP6_FMT " %hu -> " NIP6_FMT " %hu\n",          \
-        (tp), (tp)->src.l3num, (tp)->dst.protonum,                          \
-        NIP6(*(struct in6_addr *)(tp)->src.u3.all), ntohs((tp)->src.u.all), \
-        NIP6(*(struct in6_addr *)(tp)->dst.u3.all), ntohs((tp)->dst.u.all))
+static inline void nf_ct_dump_tuple_ip(const struct nf_conntrack_tuple *t)
+{
+#ifdef DEBUG
+       printk("tuple %p: %u " NIPQUAD_FMT ":%hu -> " NIPQUAD_FMT ":%hu\n",
+              t, t->dst.protonum,
+              NIPQUAD(t->src.u3.ip), ntohs(t->src.u.all),
+              NIPQUAD(t->dst.u3.ip), ntohs(t->dst.u.all));
+#endif
+}
+
+static inline void nf_ct_dump_tuple_ipv6(const struct nf_conntrack_tuple *t)
+{
+#ifdef DEBUG
+       printk("tuple %p: %u " NIP6_FMT " %hu -> " NIP6_FMT " %hu\n",
+              t, t->dst.protonum,
+              NIP6(*(struct in6_addr *)t->src.u3.all), ntohs(t->src.u.all),
+              NIP6(*(struct in6_addr *)t->dst.u3.all), ntohs(t->dst.u.all));
+#endif
+}
+
+static inline void nf_ct_dump_tuple(const struct nf_conntrack_tuple *t)
+{
+       switch (t->src.l3num) {
+       case AF_INET:
+               nf_ct_dump_tuple_ip(t);
+               break;
+       case AF_INET6:
+               nf_ct_dump_tuple_ipv6(t);
+               break;
+       }
+}
+
+#define NF_CT_DUMP_TUPLE(tp)   nf_ct_dump_tuple(tp)
 
 /* If we're the first tuple, it's the original dir. */
 #define NF_CT_DIRECTION(h)                                             \