+int
+mbuf_get_class(struct mbuf *m)
+{
+ if (m->m_flags & M_EXT) {
+ uint32_t composite = (MEXT_FLAGS(m) & EXTF_COMPOSITE);
+ m_ext_free_func_t m_free_func = m_get_ext_free(m);
+
+ if (m_free_func == NULL) {
+ if (composite) {
+ return MC_MBUF_CL;
+ } else {
+ return MC_CL;
+ }
+ } else if (m_free_func == m_bigfree) {
+ if (composite) {
+ return MC_MBUF_BIGCL;
+ } else {
+ return MC_BIGCL;
+ }
+ } else if (m_free_func == m_16kfree) {
+ if (composite) {
+ return MC_MBUF_16KCL;
+ } else {
+ return MC_16KCL;
+ }
+ }
+ }
+
+ return MC_MBUF;
+}
+
+bool
+mbuf_class_under_pressure(struct mbuf *m)
+{
+ int mclass = mbuf_get_class(m); // TODO - how can we get the class easily???
+
+ if (m_total(mclass) >= (m_maxlimit(mclass) * mb_memory_pressure_percentage) / 100) {
+ os_log(OS_LOG_DEFAULT,
+ "%s memory-pressure on mbuf due to class %u, total %u max %u",
+ __func__, mclass, m_total(mclass), m_maxlimit(mclass));
+ return true;
+ }
+
+ return false;
+}
+