# New Configuration Features for an Existing Device

If you want to fix a configuration template for an existing device supported by *netlab*, find the relevant configuration template ([initial configurations](devices.md#initial-device-configuration), [configuration modules](devices.md#configuration-modules)), fix it, test your changes, and [submit a PR](guidelines.md).

If you want to add support for a new configuration module (example: MPLS segment routing on Nexus OS):

* Read the [module documentation](../module-reference.md) to understand the configurable parameters;
* Using existing configuration templates as a rough guide create a new configuration template ([naming convention](devices.md#configuration-modules));
* Add new module under **features** parameter of device settings (see for example `netsim/devices/frr.yml`). If the device does not support any module-specific features (or if the module does not use features), set the value to **True**.
* Find relevant test topologies in `tests/topology/input` or `tests/integration` or create your own test topologies. The test topologies should (A) test all configurable parameters and (B) test devious parameter combinations.
* Create virtual labs using the selected test topologies and your device. The simplest way to achieve that is to set the device type with `-d` parameter of **netlab up** or **netlab create** command.
* If possible, create virtual labs with mixed device types to verify interoperability of your configuration settings (example: running OSPF on unnumbered interfaces requires an extra configuration command on Arista EOS).
* Update the [supported platforms](../platforms.md) documentation and add [caveats](../caveats.md) (if needed).
* [Submit a PR](guidelines.md).

```eval_rst
.. toctree::
   :maxdepth: 1
   :caption: Implementation Notes

   config/initial.md
   config/ospf.md
   config/bfd.md
   config/vlan.md
   config/vrf.md
```