# netlab Plugins

*netlab* supports dynamically loadable plugins allowing you to implement custom data model transformations or other functionality without adding nerd knobs to the core topology transformation. You might want to [write your own plugins](dev/plugins.md) or use plugins shipped with _netlab_:

```eval_rst
.. toctree::
   :maxdepth: 1

   plugins/bgp.domain.md
   plugins/bgp.session.md
   plugins/bgp.policy.md
   plugins/ebgp.multihop.md
   plugins/bgp.originate.md
   plugins/fabric.md
   plugins/multilab.md
```

Plugins needed by a topology file are listed in the **plugin** top-level element, for example:

```
plugin: [ bgp.session ]

module: [ ospf, bgp ]
```

You can specify additional (system-wide) plugins in [system defaults](defaults.md) (**defaults.plugin**) or as a CLI parameter in **[netlab create](netlab/create.md)** or **[netlab up](netlab/up.md)** commands.

Plugins can define their own _netlab_ attributes that you can use to configure plugin-provided functionality. For example, the [BGP sessions](plugins/bgp.session.md) plugin defines **bgp.password** attribute that can be used to enable MD5 authentication of EBGP sessions:

```
---
provider: clab
defaults.device: eos
module: [ bgp ]
plugin: [ bgp.session ]

nodes:
  r1:
    bgp.as: 65101
  r2:
    bgp.as: 65000

links:
- r1:
  r2:
  bgp.password: Test
```

Plugins providing support for additional networking features usually rely on Jinja2 templates to configure those features, limiting their use to a subset of supported platforms. Please check the plugin documentation for more details.

```eval_rst
.. toctree::
   :maxdepth: 1
   :caption: More information

   dev/plugins.md
```