This page explains how to use Pola PCE.
go install github.com/nttcom/pola/cmd/polad@latestgit clone https://github.com/nttcom/pola.git
cd pola
go install ./cmd/polad
# or, install with cli command
go install ./...See the Docker page.
Configure the IP address and port for PCEP and gRPC.
address must be a literal IPv4 or IPv6 address; hostnames are not resolved.
See JSON schema for config details.
To manage SR Policy without using TED, disable TED as follows.
global:
pcep:
address: "2001:0db8::254"
port: 4189
grpcServer:
address: "127.0.0.1"
port: 50051
log:
path: "/var/log/pola/"
name: "polad.log"
ted:
enable: false
usidMode: falseglobal.pcep.keepalive and global.pcep.deadTimer configure the timers Pola
advertises in its Open message (RFC 5440 §7.3). They default to 30 and 120
seconds. If keepalive is 0, deadTimer must also be 0.
global:
pcep:
address: "192.0.2.254"
port: 4189
keepalive: 30
deadTimer: 120global.pcep.minKeepalive and global.pcep.maxKeepalive limit the Keepalive
value that Pola accepts from a peer's Open message (RFC 7420). Both are
optional; omitting them disables validation.
If both are set, minKeepalive must be less than or equal to maxKeepalive.
global.pcep.allowNegotiation controls behavior when a peer's Keepalive is
outside the configured range. It defaults to true, allowing Pola to negotiate
the value; when false, the session is rejected.
global:
pcep:
address: "192.0.2.254"
port: 4189
keepalive: 30
deadTimer: 120
minKeepalive: 10
maxKeepalive: 60To manage SR Policy using TED, enable TED as follows. This also enables dynamic path calculation.
TED updates require a supported BGP-LS source. Currently, only GoBGP is supported.
Path computation runs on an underlay plane, a combination of address family and data plane.
Supported combinations:
| underlayFamily | dataPlane | Status |
|---|---|---|
| ipv4 | sr-mpls | Supported |
| ipv6 | sr-mpls | Supported |
| ipv6 | srv6 | Supported |
| ipv4 | srv6 | Not applicable |
A dynamic candidate path selects the plane with underlayFamily and
dataPlane. If both are unspecified, Pola uses the headend's unique viable
plane and rejects the request when multiple planes are available.
The endpoint and underlay address families are independent, so cross-AF policies are supported.
global:
pcep:
address: "192.0.2.254"
port: 4189
grpcServer:
address: "127.0.0.1"
port: 50052
log:
path: "/var/log/pola/"
name: "polad.log"
ted:
enable: true
source: "gobgp"
asn: 65000
gobgp:
grpcClient:
address: "127.0.0.1"
port: 50051Configure GoBGP as follows to enable BGP-LS.
global:
config:
as: 65000
router-id: 10.255.0.254
neighbors:
- config:
neighbor-address: 10.100.0.1
peer-as: 65000
transport:
config:
local-address: 10.100.0.254
afi-safis:
- config:
afi-safi-name: ls- IOS-XR interoperability: IOS-XR 24.4.1 rejected IPv6-endpoint
PCE-initiated SR-MPLS policies (
pcinitiate: bad sock info). - Junos interoperability: Junos 25.2R1.9 rejected IPv6-endpoint
PCE-initiated SR-MPLS policies (
IPv6 SRPAG received for non SRv6 LSP).
Start polad. Specify the created configuration file with the -f option.
$ sudo polad -f polad.yaml
2022-06-05T22:57:59.823Z info gRPC listen {"listenInfo": "127.0.0.1:50052", "server": "grpc"}
2022-06-05T22:57:59.823Z info PCEP listen {"listenInfo": "192.0.2.254:4189"}After Polad is running, use the pola CLI or gRPC client to manage the daemon.