summaryrefslogtreecommitdiff
path: root/sys/netinet
diff options
context:
space:
mode:
authoryamt <yamt@NetBSD.org>2022-11-19 08:00:51 +0000
committeryamt <yamt@NetBSD.org>2022-11-19 08:00:51 +0000
commitf8cb308b9e9338977143ba0158d7b10d180809a4 (patch)
tree00c2dd6bfb60295e528aa82864b5958f0472127b /sys/netinet
parent53f1c44ab30704504780903415346b4f74ac531a (diff)
Make arp have its own mowner
This helped me to debug mbuf leaks in arp. (if_arp.c rev. 1.298)
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/in.c17
-rw-r--r--sys/netinet/in_var.h5
2 files changed, 17 insertions, 5 deletions
diff --git a/sys/netinet/in.c b/sys/netinet/in.c
index a7e4e5c2ec7..533cd1f4fd3 100644
--- a/sys/netinet/in.c
+++ b/sys/netinet/in.c
@@ -1,4 +1,4 @@
-/* $NetBSD: in.c,v 1.245 2022/11/17 05:02:11 knakahara Exp $ */
+/* $NetBSD: in.c,v 1.246 2022/11/19 08:00:51 yamt Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.245 2022/11/17 05:02:11 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.246 2022/11/19 08:00:51 yamt Exp $");
#include "arp.h"
@@ -2415,7 +2415,7 @@ in_sysctl_init(struct sysctllog **clog)
#if NARP > 0
static struct lltable *
-in_lltattach(struct ifnet *ifp)
+in_lltattach(struct ifnet *ifp, struct in_ifinfo *ii)
{
struct lltable *llt;
@@ -2431,6 +2431,12 @@ in_lltattach(struct ifnet *ifp)
llt->llt_fill_sa_entry = in_lltable_fill_sa_entry;
llt->llt_free_entry = in_lltable_free_entry;
llt->llt_match_prefix = in_lltable_match_prefix;
+#ifdef MBUFTRACE
+ struct mowner *mowner = &ii->ii_mowner;
+ mowner_init_owner(mowner, ifp->if_xname, "arp");
+ MOWNER_ATTACH(mowner);
+ llt->llt_mowner = mowner;
+#endif
lltable_link(llt);
return (llt);
@@ -2446,7 +2452,7 @@ in_domifattach(struct ifnet *ifp)
ii = kmem_zalloc(sizeof(struct in_ifinfo), KM_SLEEP);
#if NARP > 0
- ii->ii_llt = in_lltattach(ifp);
+ ii->ii_llt = in_lltattach(ifp, ii);
#endif
#ifdef IPSELSRC
@@ -2467,6 +2473,9 @@ in_domifdetach(struct ifnet *ifp, void *aux)
#endif
#if NARP > 0
lltable_free(ii->ii_llt);
+#ifdef MBUFTRACE
+ MOWNER_DETACH(&ii->ii_mowner);
+#endif
#endif
kmem_free(ii, sizeof(struct in_ifinfo));
}
diff --git a/sys/netinet/in_var.h b/sys/netinet/in_var.h
index 1e4a149a5e6..924ba898f21 100644
--- a/sys/netinet/in_var.h
+++ b/sys/netinet/in_var.h
@@ -1,4 +1,4 @@
-/* $NetBSD: in_var.h,v 1.102 2021/03/08 22:01:18 christos Exp $ */
+/* $NetBSD: in_var.h,v 1.103 2022/11/19 08:00:51 yamt Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -357,6 +357,9 @@ in_get_ia_from_ifp_psref(struct ifnet *ifp, struct psref *psref)
struct in_ifinfo {
struct lltable *ii_llt; /* ARP state */
struct in_ifsysctl *ii_selsrc;
+#ifdef MBUFTRACE
+ struct mowner ii_mowner;
+#endif
};
#endif /* _KERNEL */