CCIE SPv5.1 Labs
  • Intro
    • Setup
  • Purpose
  • Video Demonstration
  • Containerlab Tips
  • Labs
    • ISIS
      • Start
      • Topology
      • Prefix Suppression
      • Hello padding
      • Overload Bit
      • LSP size
      • Default metric
      • Hello/Hold Timer
      • Mesh groups
      • Prefix Summarization
      • Default Route Preference
      • ISIS Timers
      • Log Neighbor Changes
      • Troubleshooting 1 - No routes
      • Troubleshooting 2 - Adjacency
      • IPv6 Single Topology
      • IPv6 Single Topology Challenge
      • IPv6 Multi Topology
      • IPv6 Single to Multi Topology
      • Wide Metrics Explained
      • Route Filtering
      • Backdoor Link
      • Non-Optimal Intra-Area routing
      • Multi Area
      • Authentication
      • Conditional ATT Bit
      • Troubleshooting iBGP
      • Troubleshooting TE Tunnel
    • LDP
      • Start
      • Topology
      • LDP and ECMP
      • LDP and Static Routes
      • LDP Timers
      • LDP Authentication
      • LDP Session Protection
      • LDP/IGP Sync (OSPF)
      • LDP/IGP Sync (ISIS)
      • LDP Local Allocation Filtering
      • LDP Conditional Label Advertisement
      • LDP Inbound Label Advertisement Filtering
      • LDP Label Advertisement Filtering Challenge
      • LDP Implicit Withdraw
      • LDP Transport Address Troubleshooting
      • LDP Static Labels
    • MPLS-TE
      • Start
      • Topology
      • Basic TE Tunnel w/ OSPF
      • Basic TE Tunnel w/ ISIS
      • TE Tunnel using Admin Weight
      • TE Tunnel using Link Affinity
      • TE Tunnel with Explicit-Null
      • TE Tunnel with Conditional Attributes
      • RSVP message pacing
      • Reoptimization timer
      • IGP TE Flooding Thresholds
      • CSPF Tiebreakers
      • TE Tunnel Preemption
      • TE Tunnel Soft Preemption
      • Tunneling LDP inside RSVP
      • PE to P TE Tunnel
      • Autoroute Announce Metric (XE)
      • Autoroute Announce Metric (XR)
      • Autoroute Announce Absolute Metric
      • Autoroute Announce Backup Path
      • Forwarding Adjacency
      • Forwarding Adjacency with OSPF
      • TE Tunnels with UCMP
      • Auto-Bandwidth
      • FRR Link Protection (XE, BFD)
      • FRR Link Protection (XE, RSVP Hellos)
      • FRR Node Protection (XR)
      • FRR Path Protection
      • FRR Multiple Backup Tunnels (Node Protection)
      • FRR Multiple Backup Tunnels (Link Protection)
      • FRR Multiple Backup Tunnels (Backwidth/Link Protection)
      • FRR Backup Auto-Tunnels
      • FRR Backup Auto-Tunnels with SRLG
      • Full Mesh Auto-Tunnels
      • Full Mesh Dynamic Auto-Tunnels
      • One-Hop Auto-Tunnels
      • CBTS/PBTS
      • Traditional DS-TE
      • IETF DS-TE with MAM
      • IETF DS-TE with RDM
      • RDM w/ FRR Troubleshooting
      • Per-VRF TE Tunnels
      • Tactical TE Issues
      • Multicast and MPLS-TE
    • SR
      • Start
      • Topology
      • Basic SR with ISIS
      • Basic SR with OSPF
      • SRGB Modifcation
      • SR with ExpNull
      • SR Anycast SID
      • SR Adjacency SID
      • SR LAN Adjacency SID (Walkthrough)
      • SR and RSVP-TE interaction
      • SR Basic Inter-area with ISIS
      • SR Basic Inter-area with OSPF
      • SR Basic Inter-IGP (redistribution)
      • SR Basic Inter-AS using BGP
      • SR BGP Data Center (eBGP)
      • SR BGP Data Center (iBGP)
      • LFA
      • LFA Tiebreakers (ISIS)
      • LFA Tiebreakers (OSPF)
      • Remote LFA
      • RLFA Tiebreakers?
      • TI-LFA
      • Remote LFA or TILFA?
      • TI-LFA Node Protection
      • TI-LFA SRLG Protection
      • TI-LFA Protection Priorities (ISIS)
      • TI-LFA Protection Priorities (OSPF)
      • Microloop Avoidance
      • SR/LDP Interworking
      • SR/LDP SRMS OSPF Inter-Area
      • SR/LDP Design Challenge #1
      • SR/LDP Design Challenge #2
      • Migrate LDP to SR (ISIS)
      • OAM with SR
      • SR-MPLS using IPv6
      • Basic SR-TE with AS
      • Basic SR-TE with AS and ODN
      • SR-TE with AS Primary/Secondary Paths
      • SR-TE Dynamic Policies
      • SR-TE Dynamic Policy with Margin
      • SR-TE Explicit Paths
      • SR-TE Disjoint Planes using Anycast SIDs
      • SR-TE Flex-Algo w/ Latency
      • SR-TE Flex-Algo w/ Affinity
      • SR-TE Disjoint Planes using Flex-Algo
      • SR-TE BSIDs
      • SR-TE RSVP-TE Stitching
      • SR-TE Autoroute Include
      • SR Inter-IGP using PCE
      • SR-TE PCC Features
      • SR-TE PCE Instantiated Policy
      • SR-TE PCE Redundancy
      • SR-TE PCE Redundancy w/ Sync
      • SR-TE Basic BGP EPE
      • SR-TE BGP EPE for Unified MPLS
      • SR-TE Disjoint Paths
      • SR Converged SDN Transport Challenge
      • SR OAM DPM
      • SR OAM Tools
      • Performance-Measurement (Interface Delay)
    • SRv6
      • Start
      • Topology
      • Basic SRv6
      • SRv6 uSID
      • SRv6 uSID w/ EVPN-VPWS and BGP IPv4/IPv6
      • SRv6 uSID w/ SR-TE
      • SRv6 uSID w/ SR-TE Explicit Paths
      • SRv6 uSID w/ L3 IGW
      • SRv6 uSID w/ Dual-Connected PE
      • SRv6 uSID w/ Flex Algo
      • SRv6 uSID - Scale (Pt. 1)
      • SRv6 uSID - Scale (Pt. 2)
      • SRv6 uSID - Scale (Pt. 3) (UPA Walkthrough)
      • SRv6 uSID - Scale (Pt. 4) (Flex Algo)
      • SRv6 uSID w/ TI-LFA
    • Multicast
      • Start
      • Topology
      • Basic PIM-SSM
      • PIM-SSM Static Mapping
      • Basic PIM-SM
      • PIM-SM with Anycast RP
      • PIM-SM with Auto-RP
      • PIM-SM with BSR
      • PIM-SM with BSR for IPv6
      • PIM-BiDir
      • PIM-BiDir for IPv6
      • PIM-BiDir with Phantom RP
      • PIM Security
      • PIM Boundaries with AutoRP
      • PIM Boundaries with BSR
      • PIM-SM IPv6 using Embedded RP
      • PIM SSM Range Note
      • PIM RPF Troubleshooting #1
      • PIM RPF Troubleshooting #2
      • PIM RP Troubleshooting
      • PIM Duplicate Traffic Troubleshooting
      • Using IOS-XR as a Sender/Receiver
      • PIM-SM without Receiver IGMP Joins
      • RP Discovery Methods
      • Basic Interdomain Multicast w/o MSDP
      • Basic Interdomain Multicast w/ MSDP
      • MSDP Filtering
      • MSDP Flood Reduction
      • MSDP Default Peer
      • MSDP RPF Check (IOS-XR)
      • MSDP RPF Check (IOS-XE)
      • Interdomain MBGP Policies
      • PIM Boundaries using MSDP
    • MVPN
      • Start
      • Topology
      • Profile 0
      • Profile 0 with data MDTs
      • Profile 1
      • Profile 1 w/ Redundant Roots
      • Profile 1 with data MDTs
      • Profile 6
      • Profile 7
      • Profile 3
      • Profile 3 with S-PMSI
      • Profile 11
      • Profile 11 with S-PMSI
      • Profile 11 w/ Receiver-only Sites
      • Profile 9 with S-PMSI
      • Profile 12
      • Profile 13
      • UMH (Upstream Multicast Hop) Challenge
      • Profile 13 w/ Configuration Knobs
      • Profile 13 w/ PE RP
      • Profile 12 w/ PE Anycast RP
      • Profile 14 (Partitioned MDT)
      • Profile 14 with Extranet option #1
      • Profile 14 with Extranet option #2
      • Profile 14 w/ IPv6
      • Profile 17
      • Profile 19
      • Profile 21
    • MVPN SR
      • Start
      • Topology
      • Profile 27
      • Profile 27 w/ Constraints
      • Profile 27 w/ FRR
      • Profile 28
      • Profile 28 w/ Constraints and FRR
      • Profile 28 w/ Data MDTs
      • Profile 29
    • VPWS
      • Start
      • Topology
      • Basic VPWS
      • VPWS with Tag Manipulation
      • Redundant VPWS
      • Redundant VPWS (IOS-XR)
      • VPWS with PW interfaces
      • Manual VPWS
      • VPWS with Sequencing
      • Pseudowire Logging
      • VPWS with FAT-PW
      • MS-PS (Pseudowire stitching)
      • VPWS with BGP AD
    • VPLS
      • Start
      • Topology
      • Basic VPLS with LDP
      • VPLS with LDP and BGP
      • VPLS with BGP only
      • Hub and Spoke VPLS
      • Tunnel L2 Protocols over VPLS
      • Basic H-VPLS
      • H-VPLS with BGP
      • H-VPLS with QinQ
      • H-VPLS with Redundancy
      • VPLS with Routing
      • VPLS MAC Protection
      • Basic E-TREE
      • VPLS with LDP/BGP-AD and XRv RR
      • VPLS with BGP and XRv RR
      • VPLS with Storm Control
    • EVPN
      • Start
      • Topology
      • EVPN VPWS
      • EVPN VPWS Multihomed
      • EVPN VPWS Multihomed Single-Active
      • Basic Single-homed EVPN E-LAN
      • EVPN E-LAN Service Label Allocation
      • EVPN E-LAN Ethernet Tag
      • EVPN E-LAN Multihomed
      • EVPN E-LAN on XRv
      • EVPN IRB
      • EVPN-VPWS Multihomed IOS-XR (All-Active)
      • EVPN-VPWS Multihomed IOS-XR (Port-Active)
      • EVPN-VPWS Multihomed IOS-XR (Single-Active)
      • EVPN-VPWS Multihomed IOS-XR (Non-Bundle)
      • PBB-EVPN (Informational)
    • BGP Multi-Homing (XE)
      • Start
      • Topology
      • Lab1 ECMP
      • Lab2 UCMP
      • Lab3 Backup Path
      • Lab4 Shadow Session
      • Lab5 Shadow RR
      • Lab6 RR with Add-Path
      • Lab7 MPLS + Add Path ECMP
      • Lab8 MPLS + Shadow RR
      • Lab9 MPLS + RDs + UCMP
    • BGP Multi-Homing (XR)
      • Start
      • Topology
      • Lab1 ECMP
      • Lab2 UCMP
      • Lab3 Backup Path
      • Lab4 “Shadow Session”
      • Lab5 “Shadow RR”
      • Lab6 RR with Add-Path
      • Lab7 MPLS + Add Path ECMP
      • Lab8 MPLS + “Shadow RR”
      • Lab9 MPLS + RDs + UCMP
      • Lab10 MPLS + Same RD + Add-Path + UCMP
      • Lab11 MPLS + Same RD + Add-Path + Repair Path
    • BGP
      • Start
      • Conditional Advertisement
      • Aggregation and Deaggregation
      • Local AS
      • BGP QoS Policy Propagation
      • Non-Optimal eBGP Routing
      • Multihomed Enterprise Challenge
      • Provider Communities
      • Destination-Based RTBH
      • Destination-Based RTBH (Community-Based)
      • Source-Based RTBH
      • Source-Based RTBH (Community-Based)
      • Multihomed Enterprise Challenge (XRv)
      • Provider Communities (XRv)
      • DMZ Link BW Lab1
      • DMZ Link BW Lab2
      • PIC Edge in the Global Table
      • PIC Edge Troubleshooting
      • PIC Edge for VPNv4
      • AIGP
      • AIGP Translation
      • Cost-Community (iBGP)
      • Cost-Community (confed eBGP)
      • Destination-Based RTBH (VRF Provider-triggered)
      • Destination-Based RTBH (VRF CE-triggered)
      • Source-Based RTBH (VRF Provider-triggered)
      • Flowspec (Global IPv4/6PE)
      • Flowspec (VRF)
      • Flowspec (Global IPv4/6PE w/ Redirect)
      • Flowspec (Global IPv4/6PE w/ Redirect) T-Shoot
      • Flowspec (VRF w/ Redirect)
      • Flowspec (Global IPv4/6PE w/ CE Advertisement)
    • Intra-AS L3VPN
      • Start
      • Partitioned RRs
      • Partitioned RRs with IOS-XR
      • RT Filter
      • Non-Optimal Multi-Homed Routing
      • Troubleshoot #1 (BGP)
      • Troubleshoot #2 (OSPF)
      • Troubleshoot #3 (OSPF)
      • Troubleshoot #4 (OSPF Inter-AS)
      • VRF to Global Internet Access (IOS-XE)
      • VRF to Global Internet Access (IOS-XR)
    • Inter-AS L3VPN
      • Start
      • Inter-AS Option A
      • Inter-AS Option B
      • Inter-AS Option C
      • Inter-AS Option AB (D)
      • CSC
      • CSC with Option AB (D)
      • Inter-AS Option C - iBGP LU
      • Inter-AS Option B w/ RT Rewrite
      • Inter-AS Option C w/ RT Rewrite
      • Inter-AS Option A Multi-Homed
      • Inter-AS Option B Multi-Homed
      • Inter-AS Option C Multi-Homed
    • Russo Inter-AS
      • Start
      • Topology
      • Option A L3NNI
      • Option A L2NNI
      • Option A mVPN
      • Option B L3NNI
      • Option B mVPN
      • Option C L3NNI
      • Option C L3NNI w/ L2VPN
      • Option C mVPN
    • BGP RPKI
      • Start
      • RPKI on IOS-XE (Enabling the feature)
      • RPKI on IOS-XE (Validation)
      • RPKI on IOS-XR (Enabling the feature)
      • Enable SSH in Routinator
      • RPKI on IOS-XR (Validation)
      • RPKI on IOS-XR (RPKI Routes)
      • RPKI on IOS-XR (VRF)
      • RPKI iBGP Mesh (No Signaling)
      • RPKI iBGP Mesh (iBGP Signaling)
    • NAT
      • Start
      • Egress PE NAT44
      • NAT44 within an INET VRF
      • Internet Reachability between VRFs
      • CGNAT
      • NAT64 Stateful
      • NAT64 Stateful w/ Static NAT
      • NAT64 Stateless
      • MAP-T BR
    • BFD
      • Start
      • Topology
      • OSPF Hellos
      • ISIS Hellos
      • BGP Keepalives
      • PIM Hellos
      • Basic BFD for all protocols
      • BFD Asymmetric Timers
      • BFD Templates
      • BFD Tshoot #1
      • BFD for Static Routes
      • BFD Multi-Hop
      • BFD for VPNv4 Static Routes
      • BFD for VPNv6 Static Routes
      • BFD for Pseudowires
    • QoS
      • Start
      • QoS on IOS-XE
      • Advanced QoS on IOS-XE Pt. 1
      • Advanced QoS on IOS-XE Pt. 2
      • MPLS QoS Design
      • Notes - QoS on IOS-XR
    • NSO
      • Start
      • Basic NSO Usage
      • Basic NSO Template Service
      • Advanced NSO Template Service
      • Advanced NSO Template Service #2
      • NSO Template vs. Template Service
      • NSO API using Python
      • NSO API using Python #2
      • NSO API using Python #3
      • Using a NETCONF NED
      • Python Service
      • Nano Services
    • MDT
      • Start
      • MDT Server Setup
      • Basic Dial-Out
      • Filtering Data using XPATH
      • Finding the correct YANG model
      • Finding the correct YANG model #2
      • Event-Driven MDT
      • Basic Dial-In using gNMI
      • Dial-Out with TLS
      • Dial-In with TLS
      • Dial-In with two-way TLS
    • App-Hosting
      • Start
      • Lab - iperf3 Docker Container
      • Notes - LXC Container
      • Notes - Native Applications
      • Notes - Process Scripts
    • ZTP
      • Notes - Classic ZTP
      • Notes - Secure ZTP
    • L2 Connectivity Notes
      • 802.1ad (Q-in-Q)
      • MST-AG
      • MC-LAG
      • G.8032
    • Ethernet OAM
      • Start
      • Topology
      • CFM
      • y1731
      • Notes - y1564
    • Security
      • Start
      • Notes - Security ACLs
      • Notes - Hybrid ACLs
      • Notes - MPP (IOS-XR)
      • Notes - MPP (IOS-XE)
      • Notes - CoPP (IOS-XE)
      • Notes - LPTS (IOS-XR)
      • Notes - WAN MACsec White Paper
      • Notes - WAN MACsec Config Guide
      • Notes - AAA
      • Notes - uRPF
      • Notes - VTY lines (IOS-XR)
      • Lab - uRPF
      • Lab - MPP
      • Lab - AAA (IOS-XE)
      • Lab - AAA (IOS-XR)
      • Lab - CoPP and LPTS
    • Assurance
      • Start
      • Notes - Syslog on IOS-XE
      • Notes - Syslog on IOS-XR
      • Notes - SNMP Traps
      • Syslog (IOS-XR)
      • RMON
      • Netflow (IOS-XE)
      • Netflow (IOS-XR)
Powered by GitBook
On this page
  • Build the iperf3 RPM
  • Transfer the RPM
  • Prompt
  • Answer
  • Explanation
  • A note on networking with the underlying bash system
  • A note on signed apps
  • TPA Security
  1. Labs
  2. App-Hosting

Lab - iperf3 Docker Container

Build the iperf3 RPM

Install Docker on the Ubuntu server:

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# Install docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Install build-essential

sudo apt install build-essential -y

Configure the LAN interface on the Ubuntu server:

sudo ip addr add 10.100.100.1/24 dev enp1s2
sudo apt install net-tools
sudo ifconfig ens2 up

Clone the xr-aggmgr-build git repo:

git clone https://github.com/ios-xr/xr-appmgr-build.git

Create a directory called iperf3, and create a file called build.yaml

mkdir xr-appmgr-build/iperf3
cd xr-appmgr-build/iperf3
touch build.yaml

Edit the build.yaml file, and paste the following:

packages:
- name: "iperf3"
  release: "eXR_7.3.1"
  version: "3"
  sources:
    - name: iperf3
      file: iperf3/iperf3.tar

Pull the iperf3 container, and save it as iperf3.tar within the iperf3 build directory.

sudo docker pull networkstatic/iperf3
sudo docker save networkstatic/iperf3 > iperf3.tar

Move up one level, and build the app. If you see an error, see the note below.

cd ..
sudo ./appmgr_build -b iperf3/build.yaml

For some reason, I had to edit the file appmgr_build and change :-7 to :-4 on line 756. Otherwise I got an error that the filename does not match the source name.

Transfer the RPM

On XR1, add the LAN interface:

int gi0/0/0/0
 no shut
int gi0/0/0/0.100
 encapsulation dot1q 100
 ip address 10.100.100.101/24

On the Ubuntu node, transfer the file at ~/xr-appmgr-build/RPMS/x86_64/iperf3-3-eXR_7.3.1.x86_64.rpm to XR1 using scp.

scp RPMS/x86_64/iperf3-3-eXR_7.3.1.x86_64.rpm clab@10.100.100.101:/misc/scratch

Prompt

Run the iperf3 container in server mode on XR1, and perform an iperf test from the Ubuntu server as the client.

Answer

#XR1
# Install package from exec mode
appmgr package install rpm /misc/scratch/iperf3-3-eXR_7.3.1.x86_64.rpm

config
appmgr
 application iperf3
  activate type docker source iperf3 docker-run-opts "--net=host" docker-run-cmd "iperf3 -s"

Explanation

App hosting on IOS-XR is exactly what it sounds like - it is a feature that allows you to run third-party linux apps directly on the IOS-XR hardware.

There are two variants of app-hosting on IOS-XR:

  • Native

    • Apps are hosted inside the same container that is running native IOS-XR apps - the XR control plane container. This gives the app direct access to the same namespace as the IOS-XR apps such as BGP, OSPF etc.

    • Due to this, the app has full access to all resources shared by internal IOS-XR processes, which is dangerous.

    • The app must be built with a special linux distro (Wind River Linux 7).

  • Container

    • The app can be developed using any linux distro.

    • Resources can be constrained.

    • The app runs in its own separate namespace, independent from internal IOS-XR processes.

    • You can use LXC (linux containers) or docker.

IOS-XR runs the control plane as a container itself using LXC. Native apps run directly in the same control plane container, giving them full access to the IOS-XR control plane. A separate container space is also created for third party apps, which is where docker/LXC containers run. This gives them complete separation from the IOS-XR control plane.

While it might seem that running native apps is not a good idea, they do have their use cases. For example, the xr-auditor app requires access to the running IOS-XR processes to be able to actually run the audit of the system. If the xr-auditor app was run as a separate docker container, it would not have access to actually perform the audit.

A major change to app-hosting for docker containers was introduced in 7.5.1. Previously, you could run docker containers directly from the bash terminal using docker commands. Now this is no longer possible. In fact, the docker process does not automatically start anymore in version 7.5.1+. The only way to deploy docker containers now is using the AppMgr.

The AppMgr allows you to deploy and manage docker containers directly from the IOS-XR CLI. It also handles automatically respawning a container during an RP failover or after a reload. The AppMgr has CLI commands and YANG APIs for all capabilities provided by the AppMgr, such as starting/stopping/killing containers.

appmgr package install rpm /misc/scratch/iperf3-3-eXR_7.3.1.x86_64.rpm

Next, we configure the AppMgr to run the container. The syntax is:

appmgr
 application <your-app-name>
  activate type docker source <package-name> docker-run-opts "<docker options>" docker-run-cmd "<container commands>"

The package name comes from the build.yaml file used when building the RPM package:

ubuntu@nso:~/xr-appmgr-build/iperf3$ cat build.yaml
packages:
- name: "iperf3"       <--- package name
  release: "eXR_7.3.1"
  version: "3"
  sources:
    - name: iperf3
      file: iperf3/iperf3.tar

The docker-run-opts are the same options used when launching a container, such as:

--it   interactive
--rm   remove the container upon exit (not necessary when using appmgr?)
--net=host   required to map the host's network stack to the container

The docker-run-cmds are commands that are ran on the container. For example, with iperf3 we can simply use “-s” to run in server mode, or “-c 1.1.1.1” to connect to a specific client.

Once the appmgr configuration is commited, the container will automatically start. We can check that it is running using show appmgr application-table

We should be able to run an iperf test to the XRv9000 from the Ubuntu server.

On the XRv9000, we can see the results as well by looking at the logs for the app:

The appmgr application exec command gives us the ability to manipulate the running container. The exec command runs the “docker exec” command. The copy command is used to copy files between the container and the XR filesystem.

For example, we can kill the container using appmgr application kill name iperf3

If we start the container back up using appmgr application start name iperf3, we can also see the CPU/memory resources the app is consuming.

A note on networking with the underlying bash system

By default, only mgmt routes and a default route are programmed into the routing table of the bash environment. The loopback0 interface is used as the source interface by default as well. Actually in my environment, I see no default or mgmt routes at all currently. Even with this, the iperf3 app is still working.

The reason the routing table is so sparely populated is that the IOS-XR control plane programs the FIB with routes, but not the separate bash environemnt.

You change the source address from the loopback0 to another interface by setting the TPA (third-party app) source address. The below example uses an XRv9K that has a Mgmt IP address in 10.200.10.0/24, and is in the default VRF.

tpa
 vrf clab-mgmt
  address-family ipv4
   update-source dataports MgmtEth0/RP0/CPU0/0

Above, the default route points to fwdintf, which is a special interface that simply forwards to the IOS-XR RIB for routing.

A note on signed apps

As of 7.5.1, application hosting now requires that applications be signed in order to be installed and used. However, I can’t tell if this was really the case with my XRv9000. Either the RPM package actually doesn’t need to be signed, or using the tool to build the RPM package also signs the package.

Either way, we still need to know the workflow for signing apps. The steps to do app hosting on 7.5.1+ are now as follows:

  1. The RPM is signed using a GPG key (Gnu Privacy Guard) and key package which uses the owner cert.

  2. The owner cert is onboarded onto the hardware TAm (Trust Anchor module) and is used to validate app signatures

    1. The TAm appears to be like a certificate store, but rooted in the hardware itself, not software

  3. The key package is installed, and then the RPM package is installed.

The CLI, NETCONF, or gRPC can be used to onboard the artifacts such as the ownership voucher, owner cert (burned into TAm), the RPM GPG key package, and the app package RPM itself. SZTP can be used to onboard the owner cert and OV, plus SZTP can run a script that onboards the app and key packages.

You can also create what’s called a GISO (golden ISO) which contains the XR7 image but with the app RPMs and key packages already loaded. The owner cert and OV must still be onboarded outside the GISO (using SZTP or the CLI/API).

TPA Security

This says that IOS-XR restricts a third-party app to 1/4 CPU per core, 1G RAM, and limited disk based on the size of /misc/app_host.

Additionally, all packages are subjected to policing by LPTS.

This article says that “signed applications are supported,” not that they are required. The basic idea is that apps are signed by onboarding an OC (owner certificate) using ownership voucher workflows. Once the OC is generated, the apps can be signed with GPG keys.

PreviousStartNextNotes - LXC Container

Last updated 1 month ago

You will see that the AppMgr is essentially a front-end for docker commands. To start, we must install the container as a package using AppMgr. With the introduction of AppMgr, we now have to package all containers into an RPM package. The tool “xr-appmgr-build” can be used to package a docker container .tar ball into an IOS-XR RPM package.

This blog seems to provide more clarity about the app signatures:

https://github.com/ios-xr/xr-appmgr-build
https://xrdocs.io/application-hosting/tutorials/application-hosting-with-appmgr