+#define _BT_ASSERT_PRE_MIP_VERSION_VALID_ID "mip-version-is-valid"
+
+/* Asserts that the MIP version `_mip_version` is equal to `_val`. */
+#define BT_ASSERT_PRE_MIP_VERSION_EQ(_mip_version, _val) \
+ BT_ASSERT_PRE(_BT_ASSERT_PRE_MIP_VERSION_VALID_ID, \
+ _mip_version == _val, \
+ "MIP version is not equal to %" PRIu64, _val)
+
+/* Asserts that the MIP version `_mip_version` is equal to `_val`. */
+#define BT_ASSERT_PRE_DEV_MIP_VERSION_EQ(_mip_version, _val) \
+ BT_ASSERT_PRE_DEV(_BT_ASSERT_PRE_MIP_VERSION_VALID_ID, \
+ _mip_version == _val, \
+ "MIP version is not equal to %" PRIu64, _val)
+
+/*
+ * Asserts that the given MIP version `_mip_version` is greater than or equal
+ * to `_val`.
+ */
+#define BT_ASSERT_PRE_MIP_VERSION_GE(_mip_version, _val) \
+ BT_ASSERT_PRE(_BT_ASSERT_PRE_MIP_VERSION_VALID_ID, \
+ _mip_version >= _val, \
+ "MIP version is less than %" PRIu64, _val)
+
+/*
+ * Asserts that the given MIP version `_mip_version` is greater than or equal
+ * to `_val`.
+ */
+#define BT_ASSERT_PRE_DEV_MIP_VERSION_GE(_mip_version, _val) \
+ BT_ASSERT_PRE_DEV(_BT_ASSERT_PRE_MIP_VERSION_VALID_ID, \
+ _mip_version >= _val, \
+ "MIP version is less than %" PRIu64, _val)
+
+/*
+ * Asserts that the effective MIP version for `_clock_class` is equal to `_val`.
+ */
+#define BT_ASSERT_PRE_CC_MIP_VERSION_EQ(_clock_class, _val) \
+ BT_ASSERT_PRE_MIP_VERSION_EQ((_clock_class)->mip_version, _val)
+
+/*
+ * Asserts that the effective MIP version for `_clock_class` is greater than or
+ * equal to `_val`.
+ */
+#define BT_ASSERT_PRE_CC_MIP_VERSION_GE(_clock_class, _val) \
+ BT_ASSERT_PRE_MIP_VERSION_GE((_clock_class)->mip_version, _val)
+
+/*
+ * Asserts that the effective MIP version for `_trace_class` is equal to `_val`.
+ */
+#define BT_ASSERT_PRE_TC_MIP_VERSION_EQ(_trace_class, _val) \
+ BT_ASSERT_PRE_MIP_VERSION_EQ((_trace_class)->mip_version, _val)
+
+/*
+ * Asserts that the effective MIP version for `_trace_class` is greater than or
+ * equal to `_val`.
+ */
+#define BT_ASSERT_PRE_TC_MIP_VERSION_GE(_trace_class, _val) \
+ BT_ASSERT_PRE_MIP_VERSION_GE((_trace_class)->mip_version, _val)
+
+/*
+ * Asserts that the effective MIP version for `_trace` is greater than or
+ * equal to `_val`.
+ */
+#define BT_ASSERT_PRE_TRACE_MIP_VERSION_GE(_trace, _val) \
+ BT_ASSERT_PRE_MIP_VERSION_GE((_trace)->class->mip_version, _val)
+
+/*
+ * Asserts that the effective MIP version for `_stream_class` is greater than or
+ * equal to `_val`.
+ */
+#define BT_ASSERT_PRE_SC_MIP_VERSION_GE(_stream_class, _val) \
+ BT_ASSERT_PRE_TC_MIP_VERSION_GE( \
+ bt_stream_class_borrow_trace_class_inline(_stream_class), \
+ _val)
+
+/*
+ * Asserts that the effective MIP version for `_event_class` is greater than or
+ * equal to `_val`.
+ */
+#define BT_ASSERT_PRE_EC_MIP_VERSION_GE(_event_class, _val) \
+ BT_ASSERT_PRE_SC_MIP_VERSION_GE( \
+ bt_event_class_borrow_stream_class_inline(_event_class), \
+ _val)
+
+/*
+ * Asserts that the effective MIP version for `_field_class` is equal to `_val`.
+ */
+#define BT_ASSERT_PRE_FC_MIP_VERSION_EQ(_field_class, _val) \
+ BT_ASSERT_PRE_MIP_VERSION_EQ((_field_class)->mip_version, _val)
+
+/*
+ * Asserts that the effective MIP version for `_field_class` is equal to `_val`.
+ */
+#define BT_ASSERT_PRE_DEV_FC_MIP_VERSION_EQ(_field_class, _val) \
+ BT_ASSERT_PRE_DEV_MIP_VERSION_EQ((_field_class)->mip_version, _val)
+
+/*
+ * Asserts that the effective MIP version for `_field_class` is greator than or
+ * equal to `_val`.
+ */
+#define BT_ASSERT_PRE_FC_MIP_VERSION_GE(_field_class, _val) \
+ BT_ASSERT_PRE_MIP_VERSION_GE((_field_class)->mip_version, _val)
+
+/*
+ * Asserts that the effective MIP version for `_field_class` is greator than or
+ * equal to `_val`.
+ */
+#define BT_ASSERT_PRE_DEV_FC_MIP_VERSION_GE(_field_class, _val) \
+ BT_ASSERT_PRE_DEV_MIP_VERSION_GE((_field_class)->mip_version, _val)
+