# intel/ipu-opi-plugins architecture

> Architecture diagram of the GitHub repository intel/ipu-opi-plugins, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/intel/ipu-opi-plugins
- Repository: https://github.com/intel/ipu-opi-plugins

## Overview

IPU OPI Plugins expose IPU offload capabilities to Kubernetes. The principal workflow starts at the plugin command, which configures bridge and P4 clients and runs the plugin manager; lifecycle and network-function services then manage interfaces, bridges, and forwarding rules. The repository also includes P4 runtime pod provisioning, firewall configuration, and a sample packet-forwarding network function. Some manager wiring and deployment details are unsampled, so those links are limited to documented or directly visible interactions.

Main entry points: [`ipu-plugin/ipuplugin/cmd/rootcmd.go`](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/ipuplugin/cmd/rootcmd.go) (Plugin command), [`ipu-plugin/pkg/ipuplugin/lifecycleservice.go`](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/lifecycleservice.go) (Lifecycle service), [`ipu-plugin/pkg/ipuplugin/ipuplugin.go`](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/ipuplugin.go) (Bridge controller), [`ipu-plugin/pkg/ipuplugin/networkfunctionservice.go`](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/networkfunctionservice.go) (Network function API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["Plugin control"]
  node_command["Plugin command<br/>[rootcmd.go]"]
  node_entry["Executable entry<br/>[main.go]"]
  node_manager["Plugin manager<br/>[ipuplugin.go]"]
end

subgraph group_services["Offload services"]
  node_lifecycle["Lifecycle service"]
  node_nfservice["Network function API"]
  node_bridge["Bridge controller<br/>[ipuplugin.go]"]
  node_linuxbridge["Linux bridge<br/>[linuxbridge.go]"]
  node_ovsbridge["OVS bridge<br/>[ovsbridge.go]"]
  node_p4client["Linux P4 client<br/>[p4rtclient.go]"]
  node_rhp4client["Red Hat P4 client<br/>[rh_p4client.go]"]
  node_firewall["Host firewall<br/>[firewall.go]"]
end

subgraph group_provision["Runtime provisioning"]
  node_infrapod["P4 runtime pod manager<br/>[infrapod.go]"]
  node_renderer["Resource renderer<br/>[render.go]"]
  node_manifests["Pod manifests"]
end

subgraph group_datapath["Packet datapath"]
  node_nfapp["Packet forwarder<br/>[nf.c]"]
end

node_operator(("Cluster operator"))
node_kubernetes(("Kubernetes API"))
node_p4runtime(("P4 runtime"))
node_host(("IPU host"))

node_operator -->|"starts"| node_entry
node_entry -->|"executes"| node_command
node_command -->|"creates and runs"| node_manager
node_manager -->|"coordinates"| node_lifecycle
node_manager -->|"coordinates"| node_nfservice
node_manager -->|"manages runtime"| node_infrapod
node_command -->|"selects bridge"| node_bridge
node_command -->|"selects Linux client"| node_p4client
node_command -->|"selects Red Hat client"| node_rhp4client
node_bridge -->|"uses"| node_linuxbridge
node_bridge -->|"uses"| node_ovsbridge
node_lifecycle -->|"configures ports"| node_bridge
node_lifecycle -->|"programs rules"| node_p4client
node_lifecycle -->|"programs rules"| node_rhp4client
node_lifecycle -->|"configures interfaces"| node_host
node_nfservice -->|"adds and deletes ports"| node_bridge
node_nfservice -->|"programs rules"| node_p4client
node_nfservice -->|"programs rules"| node_rhp4client
node_p4client -->|"writes rules"| node_p4runtime
node_rhp4client -->|"writes rules"| node_p4runtime
node_infrapod -->|"renders resources"| node_renderer
node_infrapod -->|"creates and monitors"| node_kubernetes
node_renderer -->|"reads templates"| node_manifests
node_renderer -->|"applies resources"| node_kubernetes
node_firewall -->|"configures firewalld"| node_host
node_nfapp -->|"forwards packets"| node_host

click node_command "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/ipuplugin/cmd/rootcmd.go"
click node_entry "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/ipuplugin/main.go"
click node_manager "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/ipuplugin.go"
click node_lifecycle "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/lifecycleservice.go"
click node_nfservice "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/networkfunctionservice.go"
click node_bridge "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/ipuplugin.go"
click node_linuxbridge "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/linuxbridge.go"
click node_ovsbridge "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/ovsbridge.go"
click node_p4client "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/p4rtclient/p4rtclient.go"
click node_rhp4client "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/p4rtclient/rh_p4client.go"
click node_infrapod "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/infrapod/infrapod.go"
click node_renderer "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/k8s/render/render.go"
click node_manifests "https://github.com/intel/ipu-opi-plugins/tree/main/ipu-plugin/pkg/infrapod/bindata"
click node_firewall "https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/firewall/firewall.go"
click node_nfapp "https://github.com/intel/ipu-opi-plugins/blob/main/network_function/nf.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_command,node_entry,node_manager toneBlue
class node_lifecycle,node_nfservice,node_bridge,node_linuxbridge,node_ovsbridge,node_p4client,node_rhp4client,node_firewall toneAmber
class node_infrapod,node_renderer,node_manifests,node_kubernetes toneMint
class node_nfapp toneRose
class node_operator,node_p4runtime,node_host toneIndigo
```

## Components

### Plugin control

- [Plugin command](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/ipuplugin/cmd/rootcmd.go): `ipu-plugin/ipuplugin/cmd/rootcmd.go`
- [Executable entry](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/ipuplugin/main.go): `ipu-plugin/ipuplugin/main.go`
- [Plugin manager](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/ipuplugin.go): `ipu-plugin/pkg/ipuplugin/ipuplugin.go`

### Offload services

- [Lifecycle service](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/lifecycleservice.go): `ipu-plugin/pkg/ipuplugin/lifecycleservice.go`
- [Network function API](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/networkfunctionservice.go): `ipu-plugin/pkg/ipuplugin/networkfunctionservice.go`
- [Bridge controller](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/ipuplugin.go): `ipu-plugin/pkg/ipuplugin/ipuplugin.go`
- [Linux bridge](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/linuxbridge.go): `ipu-plugin/pkg/ipuplugin/linuxbridge.go`
- [OVS bridge](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/ipuplugin/ovsbridge.go): `ipu-plugin/pkg/ipuplugin/ovsbridge.go`
- [Linux P4 client](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/p4rtclient/p4rtclient.go): `ipu-plugin/pkg/p4rtclient/p4rtclient.go`
- [Red Hat P4 client](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/p4rtclient/rh_p4client.go): `ipu-plugin/pkg/p4rtclient/rh_p4client.go`
- [Host firewall](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/firewall/firewall.go): `ipu-plugin/pkg/firewall/firewall.go`

### Runtime provisioning

- [P4 runtime pod manager](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/infrapod/infrapod.go): `ipu-plugin/pkg/infrapod/infrapod.go`
- [Resource renderer](https://github.com/intel/ipu-opi-plugins/blob/main/ipu-plugin/pkg/k8s/render/render.go): `ipu-plugin/pkg/k8s/render/render.go`
- [Pod manifests](https://github.com/intel/ipu-opi-plugins/tree/main/ipu-plugin/pkg/infrapod/bindata): `ipu-plugin/pkg/infrapod/bindata`

### Packet datapath

- [Packet forwarder](https://github.com/intel/ipu-opi-plugins/blob/main/network_function/nf.c): `network_function/nf.c`

### Other components

- **Cluster operator**
- **Kubernetes API**
- **P4 runtime**
- **IPU host**

## Connections

- Cluster operator → Executable entry: starts
- Executable entry → Plugin command: executes
- Plugin command → Plugin manager: creates and runs
- Plugin manager → Lifecycle service: coordinates
- Plugin manager → Network function API: coordinates
- Plugin manager → P4 runtime pod manager: manages runtime
- Plugin command → Bridge controller: selects bridge
- Plugin command → Linux P4 client: selects Linux client
- Plugin command → Red Hat P4 client: selects Red Hat client
- Bridge controller → Linux bridge: uses
- Bridge controller → OVS bridge: uses
- Lifecycle service → Bridge controller: configures ports
- Lifecycle service → Linux P4 client: programs rules
- Lifecycle service → Red Hat P4 client: programs rules
- Lifecycle service → IPU host: configures interfaces
- Network function API → Bridge controller: adds and deletes ports
- Network function API → Linux P4 client: programs rules
- Network function API → Red Hat P4 client: programs rules
- Linux P4 client → P4 runtime: writes rules
- Red Hat P4 client → P4 runtime: writes rules
- P4 runtime pod manager → Resource renderer: renders resources
- P4 runtime pod manager → Kubernetes API: creates and monitors
- Resource renderer → Pod manifests: reads templates
- Resource renderer → Kubernetes API: applies resources
- Host firewall → IPU host: configures firewalld
- Packet forwarder → IPU host: forwards packets
