--- /dev/null
+---
+name: Network Address Translation (NAT)
+maintainer:
+ - Ole Troan <ot@cisco.com>
+ - Filip Varga <fivarga@cisco.com>
+features:
+ - NAT44:
+ - 1:1 NAT
+ - 1:1 NAT with ports
+ - VRF awareness
+ - Multiple inside interfaces
+ - Hairpinning
+ - IPFIX
+ - Syslog
+ - Endpoint dependent NAT
+ - TCP MSS clamping
+ - Local bypass (DHCP)
+ - CGN - deterministic NAT
+ - NAT64
+ - NAT66
+ - DS-lite
+ - 464XLAT
+description: "The NAT plugin offers a multiple address translation functions.
+ These can be used in a raft of different scenarios. CPE, CGN,
+ etc."
+state: production
+properties: [API, CLI, STATS, MULTITHREAD]
"properties": {
"name": {"type": "string"},
"description": {"type": "string"},
- "maintainer": {"type": "string"},
+ "maintainer": {"$ref": "#/definitions/maintainers"},
"state": {"type": "string",
- "enum": ["production", "experimental"]},
+ "enum": ["production", "experimental", "development"]},
"features": {"$ref": "#/definitions/features"},
"missing": {"$ref": "#/definitions/features"},
"properties": {"type": "array",
},
"additionalProperties": False,
"definitions": {
+ "maintainers": {
+ "anyof": [{
+ "type": "array",
+ "items": {"type": "string"},
+ "minItems": 1,
+ },
+ {"type": "string"}],
+ },
"featureobject": {
"type": "object",
"patternProperties": {
def output_markdown(features):
for k, v in features.items():
print('# {}'.format(v['name']))
- print('Maintainer: {} '.format(v['maintainer']))
+ if type(v['maintainer']) is list:
+ print('Maintainers: ' +
+ ', '.join('{}'.format(m) for m in v['maintainer']))
+ else:
+ print('Maintainer: {} '.format(v['maintainer']))
print('State: {}\n'.format(v['state']))
print('{}\n'.format(v['description']))
output_features(0, v['features'])