diff --git a/rcl/include/rcl/init_options.h b/rcl/include/rcl/init_options.h
index 1d33a0739..a2bd384e4 100644
--- a/rcl/include/rcl/init_options.h
+++ b/rcl/include/rcl/init_options.h
@@ -127,6 +127,50 @@ RCL_WARN_UNUSED
rcl_ret_t
rcl_init_options_fini(rcl_init_options_t * init_options);
+/// Return domain_id which is stored in rmw_init_options.
+/**
+ * Get the domain id from specifid rcl_init_options_t object.
+ *
+ *
+ * Attribute | Adherence
+ * ------------------ | -------------
+ * Allocates Memory | No
+ * Thread-Safe | Yes
+ * Uses Atomics | No
+ * Lock-Free | Yes
+ *
+ * \param[in] init_options rcl_init_options_t object to get domain id.
+ * \param[inout] domain_id domain id to be copied from rcl_init_options_t object.
+ * \return `RCL_RET_OK` if successful, or
+ * \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid.
+ */
+RCL_PUBLIC
+RCL_WARN_UNUSED
+rcl_ret_t
+rcl_init_options_get_domain_id(rcl_init_options_t * init_options, size_t * domain_id);
+
+/// Set domain_id to rmw_init_options.
+/**
+ * Store the domain id to specified rcl_init_options_t object.
+ *
+ *
+ * Attribute | Adherence
+ * ------------------ | -------------
+ * Allocates Memory | No
+ * Thread-Safe | Yes
+ * Uses Atomics | No
+ * Lock-Free | Yes
+ *
+ * \param[in] init_options rcl_init_options_t object to be set domain id.
+ * \param[in] domain_id domain id to be set into rcl_init_options_t object.
+ * \return `RCL_RET_OK` if successful, or
+ * \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid.
+ */
+RCL_PUBLIC
+RCL_WARN_UNUSED
+rcl_ret_t
+rcl_init_options_set_domain_id(rcl_init_options_t * init_options, size_t domain_id);
+
/// Return the rmw init options which are stored internally.
/**
* This function can fail and return `NULL` if:
diff --git a/rcl/src/rcl/init_options.c b/rcl/src/rcl/init_options.c
index 713337d60..fbdd00f15 100644
--- a/rcl/src/rcl/init_options.c
+++ b/rcl/src/rcl/init_options.c
@@ -131,6 +131,25 @@ rcl_init_options_fini(rcl_init_options_t * init_options)
return RCL_RET_OK;
}
+rcl_ret_t
+rcl_init_options_get_domain_id(rcl_init_options_t * init_options, size_t * domain_id)
+{
+ RCL_CHECK_ARGUMENT_FOR_NULL(init_options, RCL_RET_INVALID_ARGUMENT);
+ RCL_CHECK_ARGUMENT_FOR_NULL(init_options->impl, RCL_RET_INVALID_ARGUMENT);
+ RCL_CHECK_ARGUMENT_FOR_NULL(domain_id, RCL_RET_INVALID_ARGUMENT);
+ *domain_id = init_options->impl->rmw_init_options.domain_id;
+ return RCL_RET_OK;
+}
+
+rcl_ret_t
+rcl_init_options_set_domain_id(rcl_init_options_t * init_options, size_t domain_id)
+{
+ RCL_CHECK_ARGUMENT_FOR_NULL(init_options, RCL_RET_INVALID_ARGUMENT);
+ RCL_CHECK_ARGUMENT_FOR_NULL(init_options->impl, RCL_RET_INVALID_ARGUMENT);
+ init_options->impl->rmw_init_options.domain_id = domain_id;
+ return RCL_RET_OK;
+}
+
rmw_init_options_t *
rcl_init_options_get_rmw_init_options(rcl_init_options_t * init_options)
{