Install RTP Proxy

After you have prepared the KVM host, and prepared the KVM guest virtual machine, install and configure the RTP Proxy on the active and standby guest VMs.

Before You Begin

  1. Download the latest version of JDK 25 from Java Downloads.
  2. Install the JDK 25.
    sudo dnf localinstall -y jdk-25_linux-x64_bin.rpm

Download Patchset 39305242

  1. Sign in to My Oracle Support, select Patches, and search for patch 39305242.
  2. Download and extract the zip file.
  3. Copy the rtp-proxy-8.3.0.0.0.tar.gz file to your RTP Proxy VM.

Install the Software on the Active Node

  1. SSH to your RTP Proxy VM.
  2. Elevate your user to the root user.
    sudo su

    The rest of this procedure should be done as the root user.

  3. Extract the file.
    tar -xvf rtp-proxy-8.3.0.0.0.tar.gz -C /opt

    The archive creates an ORACLE_HOME folder in the /opt directory.

  4. Set the RTP Proxy configuration and log paths.
    export ORACLE_HOME=/opt/ORACLE_HOME
    export RP_CONFIG_PATH=/opt/ORACLE_HOME/config
    export RP_LOG_PATH=/opt/ORACLE_HOME/log
  5. Create runtime configuration files from the samples.
    cd $RP_CONFIG_PATH
    cp config.json.sample config.json
    cp log4j2.xml.sample log4j2.xml
    cp tangosol-coherence-override.xml.sample tangosol-coherence-override.xml
  6. In the /opt/ORACLE_HOME/systemd/rtp-proxy-controller.env file, update the JAVA_HOME variable to match the exact path to your JAVA_HOME.

    For example, if you installed the JDK 25.0.3, you would change the JAVA_HOME variable to the following:

    JAVA_HOME="/usr/lib/jvm/jdk-25.0.3-oracle-x64"

Set the Config Parameters

Edit $RP_CONFIG_PATH/config.json for your deployment.

Controller

Table 8-9 Required Parameters

JSON Path Description
Controller.main.server.host Management IP address used by Converged Application Server to reach this RTP Proxy node.
Controller.main.server.port HTTP management port.

The default value is 8080.

Controller.main.server.httpsPort HTTPS management port.

The default value is 8443. This value is required only if TLS is enabled.

Controller.metrics.server.host IP address that serves metrics for this node.
Controller.metrics.server.port The port that serves metrics for this node.
Controller.vips List of VIPs owned by the active RTP Proxy node and moved during failover.

The VIPs are used by the RTP Proxy to allocate and assign IP addresses for RTP media sessions. When a new RTP session is created, the proxy selects a VIP from this list and uses it as the source/destination IP for media packets exchanged with the Session Border Controller or external endpoints.

Controller.jwt.enabled Enables or disables JWT validation for API security.
Controller.tls.enabled Set to true to enable HTTPS management traffic.

The default value is false.

Datapath

The two datapath ports configured under Datapath.spec.portConfig.ports should ideally use VFs created from PFs belonging to the same host NUMA node.

Table 8-10 Parameters

JSON Path Description
Datapath.spec.portConfig.ports[].vmac If the virtual MAC is known, you may retain the optional vmac field. If it is not known, remove the vmac parameter.
Datapath.spec.portConfig.ports[].pci.bdf Identify the BDF value for the external SBC-facing interface in the first ports item (where name is ext0). Identify the BDF value for the MFE-facing interface in the second ports item (where name is mfe0).

See the "Prepare KVM Host" section for how to find BDF values. The BDF values will be different on the active and standby nodes.

Datapath.spec.domains External and MFE domains, VLAN settings, and trusted IPv4 endpoints.
Datapath.spec.domains[].name Must be "external" or "mfe" (both required once).
Datapath.spec.domains[].ports Port IDs assigned to the domain. Must be valid and disjoint.
Datapath.spec.domains[].vlan Object defines VLAN-related configuration
Datapath.spec.domains[].vlan.enabled Set to true to enable; set to false to disable
Datapath.spec.domains[].vlan.tags Single-Tagged VLAN
Datapath.spec.domains[].vlan.tags[].tpid TPID (Tag Protocol Identifier): Tells network devices that the frame is tagged according to the IEEE 802.1Q standard. Single Tag: 0x8100 for standard 802.1Q VLAN tags.
Datapath.spec.domains[].vlan.tags[].vid VID (VLAN Identifier): Identifies which specific Virtual LAN a packet belongs to.

Range: 1 - 4094

Datapath.spec.domains[].vlan.tags[].pcp PCP (Priority Code Point): It is a field used to prioritize different types of network traffic (like voice, video, or data) to ensure important packets get through first.

Range: 0 - 7

Datapath.spec.domains[].vlan.tags[].dei DEI (Drop Eligible Indicator): It indicates whether a frame can be dropped if the network gets too crowded. Must be 0 or 1.
Datapath.spec.domains[].trusted.ipv4Endpoints If trusted.ipv4Endpoints is present and non-empty, only the listed IPv4 sources are accepted for that domain. Use an empty array to accept all endpoints. If VLAN tagging is enabled, configure tags in outer-to-inner order. QinQ supports a maximum of two tags.
Datapath.spec.vipEndpoints Set the IP address and port for the virtual IP endpoints.
Datapath.spec.vipEndpoints[].ip VIP address.
Datapath.spec.vipEndpoints[].port Port ID associated with VIP. Refers to the logical port ID defined in "portConfig.ports[]" section. It tells the RTP Proxy which interface (port) should be used to send and receive RTP media traffic for a given VIP.
Datapath.spec.nic.promiscuous Enables NIC promiscuous mode.
Datapath.spec.nic.rss.enabled Enables RSS (Receive Side Scaling).
Datapath.spec.nic.rss.randomizeKey Randomizes RSS key.
Datapath.spec.nic.udpCksumZero Sets UDP checksum to zero (optional).
Datapath.spec.nic.cksumOffload Hardware checksum offload. Accepts "auto", "on", "off".
Datapath.spec.nic.trustedOffload Set to true if trusted ipv4Endpoints is configured; set to false if trusted ipv4Endpoints is not configured.

Configure Coherence on the Active Node

In tangosol-coherence-override.xml, add the active and standby RTP Proxy management IP addresses used for REST communication with Converged Application Server.

<member-name system-property="coherence.member">RtpProxy1</member-name>
<well-known-addresses>
  <address id="1"><ACTIVE_RTP_PROXY_IP></address>
  <address id="2"><STANDBY_RTP_PROXY_IP></address>
</well-known-addresses>
<address system-property="coherence.localhost"><ACTIVE_RTP_PROXY_IP></address>

Example:

<member-name system-property="coherence.member">RtpProxy1</member-name>
<well-known-addresses>
  <address id="1">10.1.1.1</address>
  <address id="2">10.2.2.2</address>
</well-known-addresses>
<address system-property="coherence.localhost">10.1.1.1</address>

When editing this file on the standby node, use a different member name, such as RtpProxy2.

<member-name system-property="coherence.member">RtpProxy1</member-name>

Bind Guest NICs to DPDK

Bind one VF for the external domain and one VF for the MFE domain. Use the PCI BDF values configured in config.json.

  1. Load the VFIO PCI driver.
    sudo modprobe vfio-pci
  2. Check the current NIC binding status.
    cd /opt/ORACLE_HOME/rtp-proxy/dpdk/bin
    sudo python dpdk-devbind.py --status
  3. If a datapath interface is up, bring it down.
    sudo ip link set <interface_name> down
  4. Bind the VF to vfio-pci.
    sudo python dpdk-devbind.py -b vfio-pci <BDF>

    For example:

    sudo python dpdk-devbind.py -b vfio-pci 0000:00:06.0
  5. Verify the binding.
    sudo python dpdk-devbind.py --status | grep -i 0000:00:06.0

    The output should show the VF using drv=vfio-pci.

  6. Persist the BDF list in /opt/ORACLE_HOME/bin/setupDpdkHost.sh.
    BDF_LIST="0000:05:00.0 0000:06:00.0"

Install and Start Services

If you plan on using VLANs in your network, complete Configure VLANs in RTP Proxy first. If you plan on using TLS, follow the instructions in Configure TLS first. Then return to this procedure to start the RTP Proxy.

  1. Install the RTP Proxy systemd services.
    cd /opt/ORACLE_HOME/systemd
    sudo ./install-systemd.sh
  2. Start the RTP Proxy services.
    sudo systemctl enable --now rtp-proxy-datapath
    sudo systemctl enable --now rtp-proxy-controller
  3. Verify that both services are active.
    sudo systemctl status rtp-proxy-datapath
    sudo systemctl status rtp-proxy-controller
  4. If either service fails to start, review the logs.
    sudo journalctl -u rtp-proxy-datapath -u rtp-proxy-controller -f

Configure the Standby Node

Install the software on the standby node by following the active node steps. Use standby-specific values for the management IP address, metrics IP address, PCI BDF values, and Coherence member identity.

  1. In config.json, set these values to the standby management IP address:
    • Controller.main.server.host
    • Controller.metrics.server.host
  2. Use the standby node PCI BDF values in Datapath.spec.portConfig.ports. BDF values usually differ between the active and standby nodes.
  3. Set a distinct Coherence member name, such as RtpProxy2, and set coherence.localhost to the standby management IP address.
    <member-name system-property="coherence.member">RtpProxy2</member-name>
    <well-known-addresses>
      <address id="1">10.2.2.2</address>
      <address id="2">10.1.1.1</address>
    </well-known-addresses>
    <address system-property="coherence.localhost">10.2.2.2</address>

Connect to Converged Application Server

For instructions on connecting the RTP Proxy to your Converged Application Server, see the "Connect the RTP Proxy" chapter in the Intelligent Media Connector.