Services¶
Connect provides six service types, each managed through Inmanta’s Lifecycle Service Manager (LSM). This page describes each service, its API attributes, and how it works.
Network Element¶
The Network Element service manages a device through the LSM API. It deploys base device configuration and caches high-level device information (name, management IP, vendor, model, OS, role, …) for other services to consume. On creation, attributes are populated from the configured inventory resolver based on the identifier. Operator overrides are supported: attributes carry rw+ modifiers, so the resolved values can be edited through the LSM API after creation.
This service is useful to:
Make device data queryable through the same API surface as connectivity services.
Carry a per-device
role(PE, P, Border, CPE, RR) that other services can consume in their decomposition.Apply and update base device configuration.
Attributes¶
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
Reference to the device in the inventory. May include an inventory scheme prefix (e.g. |
|
|
|
Role this device plays in the network. Resolved from the inventory. |
|
|
string |
Device name. Matches the |
|
|
IPv4 address |
The device loopback / router IP address. Resolved. |
|
|
string |
Link to an external resource representing the device. Resolved. |
|
|
dict |
Free-form vendor or deployment-specific options. |
|
|
object (embedded) |
Managed device backing this network element. Resolved (see below). |
Device attributes (embedded, all resolved from the inventory):
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
IPv4 address |
Management IP at which the orchestrator can reach the device. |
|
|
port |
Management port at which the orchestrator can reach the device. |
|
|
string |
Vendor of the device (e.g. |
|
|
string |
Model of the device. |
|
|
string |
Operating system of the device. |
|
|
string |
Software version running on the device. |
|
|
dict |
Free-form vendor or deployment-specific options. |
Example¶
{
"identifier": "router-east"
}
All other attributes are populated by the orchestrator from the inventory resolver selected by the identifier scheme prefix (or the default inventory if no prefix is given). Resolved attributes can subsequently be overridden by the operator through the LSM API.
User Network Interface (UNI)¶
A UNI represents a customer’s attachment point to the provider network. It maps to one or more physical ports on provider-edge routers. UNIs are prerequisites for all other connectivity services – you must create UNIs before creating connections between them.
Attributes¶
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
Unique name identifying the UNI |
|
|
positive int |
Maximum transmission unit |
|
|
|
VLAN encapsulation type |
|
|
list |
Port references (see below) |
|
|
object |
LAG configuration (optional, see below) |
Port attributes:
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
Physical port name (e.g., |
|
|
string |
Device hosting the port |
|
|
string |
Port speed (optional) |
|
|
bool |
Enable auto-negotiation (optional) |
During updates, ports can only be added or removed when a lag is configured on the UNI. When a LAG is present, added/removed ports must remain on the same device(s) as the existing ports.
LAG attributes:
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
LAG interface name. Auto-generated as |
|
|
int |
LAG ID used to resolve LACP parameters. Auto-allocated from configured range if not provided. |
|
|
bool |
Whether to manage the LAG parameters. If |
|
|
dict |
Additional vendor-specific options (e.g., |
Single-Homed vs LAG¶
Single-homed: One port, no
lagattribute needed.LAG (Link Aggregation): Set the
lagattribute to configure a LAG across the UNI ports. Usemanage: true(default) to let the orchestrator allocate the LAG ID and manage the LAG. On Nokia SR OS a managed LAG is configured on the device (admin-state, encap-type, mode, LACP keyed on the LAG ID, and the UNI ports as members). Usemanage: falseto reference an existing unmanaged LAG.
Example: Single-Homed UNI¶
{
"name": "customer-east",
"mtu": 9212,
"encapsulation": "qinq",
"ports": [
{
"port_name": "1/1/c2/1",
"device_name": "router-east"
}
]
}
Example: Multi-Homed UNI with LAG¶
{
"name": "customer-west",
"mtu": 9212,
"encapsulation": "dot1q",
"ports": [
{
"port_name": "1/1/c2/1",
"device_name": "router-west-1"
},
{
"port_name": "1/1/c2/1",
"device_name": "router-west-2"
}
],
"lag": {
"manage": true
}
}
L2 Connect¶
L2 Connect provides Layer 2 point-to-point and multipoint connectivity between UNIs. It is the most sophisticated service in Connect, using segment decomposition to support connections across heterogeneous network domains.
Attributes¶
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
Unique service identifier |
|
|
int |
Bandwidth in kbps (0 = unlimited) |
|
|
positive int |
Auto-allocated service ID |
|
|
string |
|
|
|
list (2+) |
Endpoint definitions (see below) |
|
|
object |
Backend parameters (see below) |
|
|
object |
Auto-populated segments and nodes (read-only) |
Endpoint attributes:
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
Endpoint identifier (unique within the service) |
|
|
ref |
Reference to an existing UNI service instance |
|
|
string |
VLAN tag expression (e.g., |
Parameters attributes:
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
|
MPLS backend technology |
|
|
|
Service type for point-to-point connections |
|
|
list of MAC |
MAC addresses to block on the service |
VLAN Tag Expressions¶
The vlan field on endpoints supports several formats:
Expression |
Encapsulation |
Meaning |
|---|---|---|
|
dot1q |
Outer VLAN 100 |
|
qinq |
Outer VLAN 100, any inner VLAN |
|
qinq |
Outer VLAN 100, inner VLAN 200 |
|
untagged |
No VLAN tagging |
|
(any) |
Auto-allocate a VLAN from the available pool |
Segment Details (Read-Only)¶
After allocation, the details field is populated with the decomposed service structure:
segments: List of network segments, each with a type, identifier, and set of network elements with their interfaces.nodes: List of junction points between segments, each with VLAN allocation and encapsulation.network_elements: Information about each device participating in the service.
Example¶
{
"identifier": "east-west-evpn",
"bandwidth": 1000000,
"connection_type": "POINT_TO_POINT",
"endpoints": [
{
"identifier": "ep-east",
"uni": "customer-east",
"vlan": "1730.*"
},
{
"identifier": "ep-west",
"uni": "customer-west",
"vlan": "1731.*"
}
],
"parameters": {
"mpls_backend": "EVPN",
"mpls_p2p_service": "vpws"
}
}
Carrier Ethernet EVC¶
The Carrier Ethernet EVC provides a MEF-compliant API for Ethernet Virtual Connections. It supports point-to-point (E-Line) and multipoint (E-LAN) service types with bandwidth profiles and VLAN mapping, following the MEF 10.4 specification.
Attributes¶
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string (1-45 chars) |
Unique EVC identifier |
|
|
|
Service topology |
|
|
list (2+) |
EVC endpoint definitions |
|
|
object |
Backend selection ( |
EVC Endpoint attributes:
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
ref |
Reference to subscriber UNI |
|
|
string |
Endpoint identifier |
|
|
string |
Class of Service identifier |
|
|
object |
Egress bandwidth profile (CIR in kbps) |
|
|
object |
VLAN mapping configuration |
VLAN mapping (evcEndPointMap) supports:
ALL: All VLANs on the UNILIST: Specific VLAN IDs (with optional inner VLAN for Q-in-Q)UNTAGGED: Untagged frames only
Example¶
{
"identifier": "evc-east-west",
"connectionType": "POINT_TO_POINT",
"ext_networkBackend": {
"type": "EVPN"
},
"evcEndPoints": [
{
"evcEndPointId": "ep-1",
"subscriberUniRef": {
"href": "inmanta:456-852-789"
},
"evcEndPointMap": {
"type": "LIST",
"vlanIdList": [
{"vlanId": 100}
]
},
"egressBwpFlow": {
"cir": 1000000
}
},
{
"evcEndPointId": "ep-2",
"subscriberUniRef": {
"href": "inmanta:123-852-456"
},
"evcEndPointMap": {
"type": "LIST",
"vlanIdList": [
{"vlanId": 200}
]
},
"egressBwpFlow": {
"cir": 1000000
}
}
]
}
L3 VPN¶
L3 VPN provides Layer 3 Virtual Private Network connectivity with MPLS transport. It creates a VPN routing instance (VRF) on each endpoint device and establishes routing sessions with customer-edge equipment.
Attributes¶
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
Unique service identifier |
|
|
int (opt) |
Route Distinguisher (auto-allocated if omitted) |
|
|
int (opt) |
Route Target (auto-allocated if omitted) |
|
|
int |
Bandwidth per endpoint in kbps (0 = unlimited) |
|
|
list |
IPv4 firewall allow-list |
|
|
list |
IPv6 firewall allow-list |
|
|
list (1+) |
Endpoint definitions (see below) |
|
|
object |
Service parameters |
Endpoint attributes:
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
Endpoint identifier |
|
|
ref |
Reference to existing UNI service |
|
|
int (1-4094) |
VLAN for PE-CE communication |
|
|
|
Routing protocol with customer |
|
|
int (opt) |
Customer BGP AS number (required for BGP) |
|
|
int |
BFD interval in ms (0 = disabled) |
|
|
object |
IPv4 configuration |
|
|
object (opt) |
IPv6 configuration (dual-stack) |
IPv4/IPv6 configuration:
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
IP network |
PE-CE point-to-point network (auto-allocated if omitted) |
|
|
list |
Customer prefixes to route into the VPN |
Parameters:
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
|
MPLS transport technology |
Example¶
{
"identifier": "vpn-customer-a",
"bandwidth": 100000,
"allowed_ipv4_networks": ["10.0.0.0/8", "172.16.0.0/12"],
"endpoints": [
{
"identifier": "site-east",
"uni": "customer-east",
"vlan_id": 500,
"routing_protocol": "bgp",
"bgp_remote_as": 65001,
"bfd_interval": 300,
"ipv4": {
"p2p_network": "192.168.1.0/30",
"prefixes": ["10.1.0.0/16"]
},
"ipv6": {
"p2p_network": "2001:db8:1::/126",
"prefixes": ["2001:db8:100::/48"]
}
},
{
"identifier": "site-west",
"uni": "customer-west",
"vlan_id": 501,
"routing_protocol": "bgp",
"bgp_remote_as": 65001,
"ipv4": {
"prefixes": ["10.2.0.0/16"]
}
}
],
"parameters": {
"transport_technology": "LDP"
}
}
Direct Internet Access (DIA)¶
DIA provides internet connectivity for a customer by creating a dedicated VRF and leaking routes between the customer VRF and the default routing table. Customer prefixes are advertised and internet routes are made available to the customer.
Attributes¶
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
Unique service identifier |
|
|
|
Routing protocol with customer |
|
|
list |
Customer IP prefixes |
|
|
int (opt) |
Customer BGP AS (required for BGP) |
|
|
positive int |
Auto-allocated service ID |
|
|
list (1+) |
Endpoint definitions (see below) |
Endpoint attributes:
Attribute |
Modifier |
Type |
Description |
|---|---|---|---|
|
|
string |
Endpoint identifier |
|
|
ref |
Reference to existing UNI service |
|
|
int (1-4094) |
VLAN for PE-CE communication |
|
|
IP network |
Auto-allocated PE-CE point-to-point network |
|
|
int |
BFD interval in ms (0 = disabled) |
Example¶
{
"identifier": "dia-customer-a",
"routing_protocol": "bgp",
"bgp_remote_as": 65001,
"prefixes": ["203.0.113.0/24"],
"endpoints": [
{
"identifier": "ep-1",
"uni": "customer-east",
"vlan_id": 600
}
]
}
Operational verification (Nokia Lightspan)¶
On the Nokia Lightspan (fiber access / OLT) platform, the Network Element (ONT) and UNI services do not stop at pushing configuration: once the config is deployed, the orchestrator reads operational state back from the OLT and fails the deploy if the link is not actually healthy. This is implemented with yang::NetconfVerify resources that run read-only NETCONF gets and compare the result against a threshold.
Behavior is the same for every check:
The verify
requiresthe service’s configuration resource, so it only runs after the config has been pushed.While the service is still
creating, a failing check is skipped (the ONT may not be ranged yet, the customer may not have connected the CPE). Once the service reachesup, a failing check fails the deploy.A failed verify does not block provisioning of other services on the element: a connectivity service such as l2Connect only needs an existing UNI, not a fully compliant one.
There is one verify resource per service, carrying one entry per checked item.
Optical values are expressed in 0.1 dBm (e.g. -280 means -28.0 dBm).
Network Element (ONT) checks¶
Check |
Passes when |
Read from |
|---|---|---|
Upstream optical power |
OLT-measured |
OLT pon transceiver-link diagnostics ( |
Operational state |
ONT is present on its intended channel-termination |
v-ani |
Ranging distance |
measured fiber distance is below |
v-ani |
Transmission quality |
uncorrectable FEC codewords in the current 15-min interval |
v-ani 15-min performance counters |
Downstream optical power |
optical power the ONT receives is within |
ONT optics, via the OLT’s emulated-onu mount (ANIPORT) |
The operational-state check verifies the intended channel-termination, so it also catches an ONT that has ranged on the wrong PON (a cross-connect). The upstream and downstream power checks together verify the optical budget in both directions.
UNI (iHub) checks¶
Check |
Passes when |
Read from |
|---|---|---|
Port up |
the port is operationally up |
SR OS |
Negotiated speed |
the port negotiated the configured speed (fixed-speed ports only; skipped when |
SR OS |
Configurable thresholds¶
The thresholds live in the module configuration under lightspan.verify and can be tuned per deployment (the defaults below are sensible starting points; the per-PON-tech upstream ranges differ because OLT receiver sensitivity and overload points differ between 25GS-PON and XGS-PON):
Config key |
Default ( |
Meaning |
|---|---|---|
|
|
Accepted OLT-measured upstream rssi range for 25GS-PON ONTs. |
|
|
Accepted OLT-measured upstream rssi range for XGS-PON ONTs. |
|
|
Accepted downstream optical power received at the ONT. |
|
|
Maximum accepted ONT ranging distance, in meters. |
|
|
Maximum uncorrectable FEC codewords in the current 15-min interval. |
See the configuration reference for the full schema and how to set these values.
Operational verification (Nokia SR OS)¶
On the Nokia SR OS platform, a UNI service applies the same operational verification as the Lightspan iHub UNI: once the port configuration is pushed, the orchestrator reads the port state back from the router and fails the deploy if the port is not actually healthy. This uses a yang::NetconfVerify resource with the same behavior as described above (it requires the config resource, is skipped while the uni is creating, and fails the deploy once the uni is up). There is one verify resource per uni service, with one entry per port.
Check |
Passes when |
Read from |
|---|---|---|
Port up |
the port is operationally up |
SR OS |
Negotiated speed |
the port negotiated the configured speed (fixed-speed ports only; skipped when |
SR OS |
When the uni port is a lag member, it reports oper-state down (e.g. down - Active in lag-608) while traffic flows over the lag, so verifying the port oper-state would always fail. In that case the lag oper-state is verified instead, reading state/lag/oper-state. The negotiated-speed check still applies to the physical member port.
Operational status in the documentation tab¶
Beyond failing a deploy, every verified value is also surfaced for visibility in the documentation tab of the service it belongs to. Each verify entry publishes its result as a fact, and the documentation renders an Operational status table with one row per verified value:
Check |
Current status |
|---|---|
Port |
✅ |
The status column holds a reference that is resolved on the orchestrator every time the service is (re)deployed, so the tab always reflects the value last read back from the device (a green check with the observed value when the check passes, a red cross with the observed and expected values otherwise). This is why the documentation is rendered with future::std::jinja (via connect::get_template_value_as_string) rather than std::template: only the former can carry references through to deploy time. The table is wired into every service (uni, network element, l2Connect, l3vpn, DIA) but the whole section is omitted from services that currently have no operational checks. The template path of each service is operator-tunable through its <service>.documentation_template config key.
Service Dependencies¶
Services have dependencies that must be respected during creation and deletion:
UNIs must be created before any connectivity service that references them.
A UNI cannot be deleted while connectivity services still reference it (enforced by deletion validation when enabled).
Multiple connectivity services can share the same UNI, each using a different VLAN.
Network Element is independent of the other services: it carries device-level data and base configuration, but has no runtime dependency on the connectivity services.
Attribute Modifiers¶
The modifier column in the attribute tables refers to LSM attribute modifiers that control when an attribute can be set. See the LSM documentation for details.