PCE Tunnels with ONOS Goldeneye: A Packet Design How-to

ONOS (Open Network Operating System) Project released its seventh version – Goldeneye – on June 24 of this year. Goldeneye includes various bug fixes and new features, including PCE and PCECC that enable IP/MPLS SDN capabilities in customer networks. The PCE extensions help to initiate Label Switched Paths (LSP) through RSVP-TE and Segment Routing. In this post, we will go step by step into how to use the new BGP-LS and PCE capabilities with ONOS, including how to configure them on IOS-XR 6.0.1.

Configuring ONOS

ONOS implements the BGP Link State RFC and stateful PCE drafts. BGP-LS and PCE capabilities can be enabled by activating the BGP and BGPCEP apps. The apps can be activated either from the ONOS WEB GUI or from the ONOS command line.  The app ids are “org.onosproject.bgp” and “org.onosproject.bgpcep.”

PCE Tunnels with ONOS Goldeneye

After activating the app, the BGP peer can be configured through the REST API interface.

POST http://:8181/onos/v1/network/configuration/

   "apps": { 
       "org.onosproject.provider.bgp.cfg": { 
               "bgpapp": { 
                    "routerId": "", 
                    "localAs": 1, 
                    "maxSession": 20, 
                    "lsCapability": true, 
                    "holdTime": 180, 
                    "largeAsCapability": false, 
                    "bgpPeer":[ {"peerIp": "", "remoteAs": 1, "peerHoldTime": 
120, "connectMode":"active", "exportRoute": false}

Configuring IOS-XR

The BGP Link state peering, IGP, and PCE information have to be configured on the peering IOS-XR router. PCE peering has to be configured in all the ingress routers in the network.  An example configuration is shown below:


router bgp 1
 bgp router-id
 address-family ipv4 unicast
 address-family link-state link-state
  remote-as 1
  update-source Loopback0
  address-family ipv4 unicast
  address-family link-state link-state


router ospf core
 distribute bgp-ls
 network point-to-point
 area 0
  mpls traffic-eng
  interface Loopback0
  interface GigabitEthernet0/0/0/0
   network point-to-point
  interface GigabitEthernet0/0/0/1
   network point-to-point
  interface GigabitEthernet0/0/0/2
   network point-to-point
 mpls traffic-eng router-id


mpls traffic-eng
  peer source ipv4
  peer ipv4
   timers redelegation-timeout 0
   timers state-timeout 0


Once the BGP-LS peering is established, the ONOS WEB-GUI will be able to show the link state topology. From the GUI, one can create PCE tunnels with bandwidth, cost, and signalling constraints.

PCE Tunnels with ONOS Goldeneye

The PCE created tunnel in the ingress IOS-XR router will look as below:

Name: tunnel-te1006  Destination:  Ifhandle:0xb80 (auto-tunnel pcc)
  Signalled-Name: traffic-matrix-core_tunnel-policy_192.168.1.113_0
    Admin:    up Oper:   up   Path:  valid   Signalling: connected

    path option 10, (verbatim) type explicit (autopcc_te1006) (Basis for Setup, path weight 0)
    G-PID: 0x0800 (derived from egress interface properties)
    Bandwidth Requested: 0 kbps  CT0
    Creation Time: Wed Aug 10 21:27:46 2016 (00:00:14 ago)
  Config Parameters:
    Bandwidth:        0 kbps (CT0) Priority:  0  0 Affinity: 0x0/0xffff
    Metric Type: TE (global)
    Path Selection:
      Tiebreaker: Min-fill (default)
    Hop-limit: disabled
    Cost-limit: disabled
    Path-invalidation timeout: 10000 msec (default), Action: Tear (default)
    AutoRoute: disabled  LockDown: disabled   Policy class: not set
    Forward class: 0 (default)
    Forwarding-Adjacency: disabled
    Autoroute Destinations: 0
    Loadshare:          0 equal loadshares
    Auto-bw: disabled
    Fast Reroute: Disabled, Protection Desired: None
    Path Protection: Not Enabled
    BFD Fast Detection: Disabled
    Reoptimization after affinity failure: Enabled
    Soft Preemption: Disabled
  Auto PCC: 
    Symbolic name: traffic-matrix-core_tunnel-policy_192.168.1.113_0
    PCEP ID: 1007
    Delegated to:
    Created by:
    Tunnel has been up for: 00:00:12 (since Wed Aug 10 21:27:48 UTC 2016)
    Current LSP:
      Uptime: 00:00:12 (since Wed Aug 10 21:27:48 UTC 2016)

  Path info (PCE controlled):

At Packet Design, we are excited to lead and embrace the evolution of SDN. We are eagerly looking forward to REST API support for creating and maintaining PCE-based tunnels in the upcoming ONOS release, which would enable us to integrate ONOS in our SDN analytics and automation platform.

For the ONOS aficionados and ornithologists reading this post, please forgive the artistic license we exercised with the blog post image above. And in particular, apologies to the goldeneye duck after which the ONOS release was named.

Explorer Suite | Resources | Request Demo | About Packet Design | Follow us on Twitter


  • Vasilios Pasias

    Thank you for this very helpfull guide.
    Can you please indicate which other ONOS applications, except BGP and BGPCEP, have you activated? Please also indicate which version of IOS-XR have you applied.
    Thank you in advance.

    • Thank you Vasillos.

      To answer your question, other than default ONOS applications, we only need BGP and BGPPCEP apps. The version was IOS-XRv version is 6.1.1

      Hari (Packet Design)

  • Pingback: The Current and Future Status of TE Part 2: Segment Routing | Packet Design()

  • KAVI

    can you tell me installation steps for goldeneye onos? if possible give me guidance setting up virtual machine for Goldeneye ONOS.. please help me..

    • Hey Kavi, The ONOS wiki page holds numerous resources on various ONOS projects including the Goldeneye. Check this link for some details:

      • KAVI

        my network configuration json file look like this.. and i can’t able to see topology view in GUI.. please help me

        “apps”: {
        “org.onosproject.provider.lldp”: {
        “suppression”: {
        “deviceTypes”: [
        “annotation”: “{“no-lldp”:null}”
        “org.onosproject.provider.bgp.cfg”: {
        “bgpapp”: {
        “routerId”: “”,
        “localAs”: 100,
        “maxSession”: 20,
        “lsCapability”: true,
        “holdTime”: 180,
        “largeAsCapability”: false,
        “flowSpecCapability”: “IPV4”,
        “bgpPeer”: [
        “peerIp”: “”,
        “remoteAs”: 100,
        “peerHoldTime”: 120,
        “connectMode”: “active”
        “ports”: {

        “hosts”: {

        “devices”: {

        “links”: {


        • Hey Kavi-
          While the config does look right, it could be something to do with the router that ONOS is peering with, or an incompatibility issue, or one of the many other possible reasons. A better option would be raise this in a ONOS dedicated forum such as the ONOS mailing list:

  • Deepankar

    I am trying to configure BGP-LS between ONOS and IOS-XR 6.0.0

    For me BGP-LS session is UP between ONOS and IOS-XR but i am not able to see the topology, Bgp neighbors on ONOS Web-ui.

    Could you please help me in this to figure out.


    Thanks and Regards
    Deepankar RP/0/0/CPU0:Router2#SHO BGp NEighbor
    Tue May 16 10:16:57.830 UTC

    BGP neighbor is
    Remote AS 10, local AS 10, internal link
    Remote router ID
    BGP state = Established, up for 00:33:06
    NSR State: None
    Last read 00:33:06, Last read before reset 00:39:41
    Hold time is 0, keepalive interval is 0 seconds
    Configured hold time: 0, keepalive: 0, min acceptable hold time: 3
    Last write 00:33:01, attempted 2344, written 2344
    Second last write 00:33:06, attempted 19, written 19
    Last write before reset 00:39:36, attempted 2344, written 2344
    Second last write before reset 00:39:41, attempted 19, written 19
    Last write pulse rcvd May 16 09:43:56.275 last full not set pulse count 40
    Last write pulse rcvd before reset 00:39:36
    Socket not armed for io, armed for read, armed for write
    Last write thread event before reset 00:39:36, second last 00:39:36
    Last KA expiry before reset 00:00:00, second last 00:00:00
    Last KA error before reset 00:00:00, KA not sent 00:00:00
    Last KA start before reset 00:00:00, second last 00:00:00
    Precedence: internet
    Non-stop routing is enabled
    Multi-protocol capability received
    Neighbor capabilities:
    Route refresh: advertised (old + new)
    4-byte AS: advertised
    Address family Link-state Link-state: advertised and received
    Received 12 messages, 0 notifications, 0 in queue
    Sent 76 messages, 4 notifications, 0 in queue
    Minimum time between advertisement runs is 0 secs
    Inbound message logging enabled, 3 messages buffered
    Outbound message logging enabled, 3 messages buffered

    For Address Family: Link-state Link-state
    BGP neighbor version 19
    Update group: 0.1 Filter-group: 0.2 No Refresh request being processed
    Route refresh request: received 0, sent 0
    0 accepted prefixes, 0 are bestpaths
    Cumulative no. of prefixes denied: 0.
    Prefix advertised 18, suppressed 0, withdrawn 0
    Maximum prefixes allowed 131072
    Threshold for warning message 75%, restart interval 0 min
    AIGP is enabled
    An EoR was not received during read-only mode
    Last ack version 19, Last synced ack version 0
    Outstanding version objects: current 0, max 1
    Additional-paths operation: None
    Send Multicast Attributes
    Advertise VPNv4 routes enabled with defaultReoriginate,disable option
    Advertise VPNv6 routes is enabled with defaultReoriginate,disable option

    Connections established 6; dropped 5
    Local host:, Local port: 54674, IF Handle: 0x00000000
    Foreign host:, Foreign port: 179
    Last reset 00:33:32, due to User clear requested (CEASE notification sent – administrative reset)
    Time since last notification sent to neighbor: 00:33:32
    Error Code: administrative reset
    Notification data sent:

    onos> bgp-neighbors
    onos> bgp-routes
    Network Next Hop Origin LocalPref MED BGP-ID
    Total BGP IPv4 routes = 0

    Network Next Hop Origin LocalPref MED BGP-ID
    Total BGP IPv6 routes = 0

  • Pingback: More about PCE: Path Computation in the SDN World | Packet Design()

  • Pingback: Top 10 Network Management Blog Posts of 2016 | Packet Design()