# DevelopmentSupportConfig

Platform configuration options for enabling development support.

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="vsock_development">
            <td><code>vsock_development</code></td>
            <td><code>bool</code></td>
            <td></td>
            <td></td>
        </tr>
        <tr id="tracing">
            <td><code>tracing</code></td>
            <td><code><a class='link' href="../TracingConfig">TracingConfig</code></td>
            <td>Configure tracing. Note: \[`DevelopmentSupportConfig::include_tracing`] must be `true` for tracing to be available.</td>
            <td></td>
        </tr>
        <tr id="tools">
            <td><code>tools</code></td>
            <td><code><a class='link' href="../ToolsConfig">ToolsConfig</code></td>
            <td>Tools to enable along with development support</td>
            <td></td>
        </tr>
        <tr id="include_tracing">
            <td><code>include_tracing</code></td>
            <td><code>bool</code></td>
            <td>Override tracing inclusion on the target.</td>
            <td></td>
        </tr>
        <tr id="include_sl4f">
            <td><code>include_sl4f</code></td>
            <td><code>bool</code></td>
            <td>Whether to include sl4f.</td>
            <td></td>
        </tr>
        <tr id="include_netsvc">
            <td><code>include_netsvc</code></td>
            <td><code>bool</code></td>
            <td>Override netsvc inclusion on the target.

Follows the same resolution as `enabled` if absent.</td>
            <td></td>
        </tr>
        <tr id="include_bootstrap_testing_framework">
            <td><code>include_bootstrap_testing_framework</code></td>
            <td><code>bool</code></td>
            <td>Whether to include the bootstrap testing framework which will allow running tests in a bringup-like environment using the run-test-suite command line tool.</td>
            <td></td>
        </tr>
        <tr id="include_bin_clock">
            <td><code>include_bin_clock</code></td>
            <td><code>bool</code></td>
            <td>Include the bin/clock program on the target to get the monotonic time from the device. TODO(b/309452964): Remove once e2e tests use: `ffx target get-time`</td>
            <td></td>
        </tr>
        <tr id="heapdump">
            <td><code>heapdump</code></td>
            <td><code><a class='link' href="../HeapdumpConfig">HeapdumpConfig</code></td>
            <td>Configure Heapdump memory profiling.</td>
            <td></td>
        </tr>
        <tr id="enabled">
            <td><code>enabled</code></td>
            <td><code>\[bool]</code></td>
            <td>Override the build-type enablement of development support, to include development support in userdebug which doesn't have full development access. If nothing is provided, a reasonable default is used based on the build type.</td>
            <td></td>
        </tr>
        <tr id="enable_userboot_next_component_manager">
            <td><code>enable_userboot_next_component_manager</code></td>
            <td><code>bool</code></td>
            <td>Enable userboot.next for running a boot-time test.

Only valid on eng builds.</td>
            <td></td>
        </tr>
        <tr id="enable_netsvc_netboot">
            <td><code>enable_netsvc_netboot</code></td>
            <td><code>bool</code></td>
            <td>Enable the netboot feature of the netsvc</td>
            <td></td>
        </tr>
        <tr id="authorized_ssh_keys_path">
            <td><code>authorized_ssh_keys_path</code></td>
            <td><code>Option<Utf8PathBuf></code></td>
            <td>Path to a file containing ssh keys that are authorized to connect to the device.</td>
            <td></td>
        </tr>
        <tr id="authorized_ssh_ca_certs_path">
            <td><code>authorized_ssh_ca_certs_path</code></td>
            <td><code>Option<Utf8PathBuf></code></td>
            <td>Path to a file containing CA certs that are trusted roots for signed ssh keys that are authorized to connect to the device.</td>
            <td></td>
        </tr>
</table>
