FortiGate
FortiGate Next Generation Firewall utilizes purpose-built security processors and threat intelligence security services from FortiGuard labs to deliver top-rated protection and high performance, including encrypted traffic.
vsharma
Staff
Staff
Article Id 419901
Description This article describes how to modify the interfaces used by DPDK on FortiGate and how to verify that the changes have been successfully applied.
Scope FortiOS.
Solution

DPDK (Data Plane Development Kit) is used to accelerate packet processing by bypassing the Linux kernel network stack. Changing DPDK-assigned ports requires a system reboot.

 

config dpdk global

(global) # show
config dpdk global
    set status enable
    set interface "port1"
    set multiqueue disable
    set sleep-on-idle disable
    set elasticbuffer disable
    set protects ''
    set per-session-accounting traffic-log-only
    set ipsec-offload disable
    set hugepage-percentage 30
    set mbufpool-percentage 25
    set session-table-percentage 5
end

 

(global) # append interface port3 <-- Adding port3 to DPDK interfaces.

(global) # show
config dpdk global
    set status enable
    set interface "port1" "port3"
    set multiqueue disable
    set sleep-on-idle disable
    set elasticbuffer disable
    set protects ''
    set per-session-accounting traffic-log-only
    set ipsec-offload disable
    set hugepage-percentage 30
    set mbufpool-percentage 25
    set session-table-percentage 5
end

(global) # end
interface change will trigger system reboot and will take effect after the reboot.
Do you want to continue? (y/n)y

 

Verification:

  1. Check Active DPDK Configuration

 

diagnose dpdk config show

 

Current DPDK config in CMDB:
dpdk.global
status=enable
multiqueue=disable
sleep-on-idle=disable
elasticbuffer=disable
per-session-accounting=1
ipsec-offload=0
hugepage-percentage=30
nr_hugepages=1196
mbufpool-percentage=25
session-table-percentage=5
protects=
dpdk.cpus
en-cpus=2,3
rx-cpus=2,3
vnp-cpus=2,3
vnpsp-cpus=2,3
ips-cpus=2,3
tx-cpus=2,3
isolated-cpus= none
system.interface
Interface "port1"
dpdk=enable
Interface "port3"
dpdk=enable


Current working DPDK config:
dpdk.global
status=enable
multiqueue=disable
sleep-on-idle=disable
elasticbuffer=disable
per-session-accounting=1
ipsec-offload=0
hugepage-percentage=30
nr_hugepages=1196
mbufpool-percentage=25
session-table-percentage=5
protects=
dpdk.cpus
en-cpus=2,3
rx-cpus=2,3
vnp-cpus=2,3
vnpsp-cpus=2,3
ips-cpus=2,3
tx-cpus=2,3
isolated-cpus= none
system.interface
Interface "port1"
dpdk=enable
Interface "port3"
dpdk=enable

 

NO ACTION NEEDED:
Current config in CMDB contains no changes.

 

  1. Check DPDK Initialization Log.

DPDK Initialization logs confirm

  1. Correct config parsing.
  2. Ports bound to DPDK.
  3. Sanity test passed.

 

diagnose dpdk log show early-init

-----------------------------------------------------------------
DPDK early initialization starts at 2025-11-20 17:23:30(UTC)
-----------------------------------------------------------------
Content of DPDK configuration:(Use cmdb configuration)

config dpdk global
    set status enable
    set interface "port1" "port3"
    set multiqueue disable
    set sleep-on-idle disable
    set elasticbuffer disable
    set protects ''
    set per-session-accounting traffic-log-only
    set ipsec-offload disable
    set hugepage-percentage 30
    set mbufpool-percentage 25
    set session-table-percentage 5
end
config dpdk cpus
    set rx-cpus "2-3"
    set vnp-cpus "2-3"
    set vnpsp-cpus "2-3"
    set ips-cpus "2-3"
    set tx-cpus "2-3"
end

Parse config success!

VM is configured with 1 NUMA node.
Check CPU definitions 'rx-cpus'
Check CPU definitions 'vnp-cpus'
Check CPU definitions 'vnpsp-cpus'
Check CPU definitions 'ips-cpus'
Check CPU definitions 'tx-cpus'
Check CPU definitions 'isolated-cpus'
Check CPUs success!

Huge page allocation done

Ports enabled for DPDK:
port1
port3
Port name to device name mapping:
port1: eth0
port2: eth1
port3: eth2
port4: eth3
port5: eth4
port6: eth5
port7: eth6
port8: eth7
port9: eth8
port10: eth9
port11: eth10
port12: eth11
port13: eth12
port14: eth13
port15: eth14
port16: eth15
port17: eth16
port18: eth17
port19: eth18
port20: eth19
port21: eth20
port22: eth21
port23: eth22
port24: eth23

 

Start enabling DPDK kernel driver for port 'port1'...
Getting PCI device info for eth0...
reading pci dev /sys/class/net/eth0
link path: ../../devices/pci0000:00/0000:00:06.0/virtio3/net/eth0
Device info of eth0:
dev_name: eth0
macaddr: 00:65:72:62:46:01
pci_vendor: 0x1af4
pci_device: 0x1000
pci_id: 0000:00:06.0
pci_domain: 0
pci_bus: 0
pci_devid: 6
pci_function: 0
dev_port: 0
guid: n/a
Unbinding device eth0 from kernel driver...
Device eth0 unbind from kernel driver successful
Binding device eth0 to DPDK driver...
Device eth0 bind to DPDK driver successful
Creating DPDK kernel driver for device eth0...
Add VNP dev: eth0 PCI: 0000:00:06.0#0, Succeeded
DPDK kernel driver for eth0 successfully created
DPDK kernel driver enabled for port 'port1' (device name 'eth0')

 

Start enabling DPDK kernel driver for port 'port3'...
Getting PCI device info for eth2...
reading pci dev /sys/class/net/eth2
link path: ../../devices/pci0000:00/0000:00:08.0/virtio5/net/eth2
Device info of eth2:
dev_name: eth2
macaddr: 00:65:72:62:46:03
pci_vendor: 0x1af4
pci_device: 0x1000
pci_id: 0000:00:08.0
pci_domain: 0
pci_bus: 0
pci_devid: 8
pci_function: 0
dev_port: 0
guid: n/a
Unbinding device eth2 from kernel driver...
Device eth2 unbind from kernel driver successful
Binding device eth2 to DPDK driver...
Device eth2 bind to DPDK driver successful
Creating DPDK kernel driver for device eth2...
Add VNP dev: eth2 PCI: 0000:00:08.0#0, Succeeded
DPDK kernel driver for eth2 successfully created
DPDK kernel driver enabled for port 'port3' (device name 'eth2')


Bind ports success!

mknod for uio0 (252, 0) done.
mknod for uio1 (252, 1) done.
Make UIO nodes success!

#---------------EAL INIT-----------------
#----------------------------------------

#----------------------------------------
# port oid dev_name pci_id
#----------------------------------------
0 0 eth0 0000:00:06.0
1 1 eth2 0000:00:08.0
#----------------------------------------
DPDK sanity test passed