Napatech: Difference between revisions

From VoIPmonitor.org
(Add troubleshooting section for Napatech drivers not capturing traffic - ntstop/ntstart restart procedure)
(Rewrite: consolidated structure, added quick reference table, streamlined config sections)
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Configuration & building ==
= Napatech Integration =
[[Category:Installation]]
[[Category:Configuration]]


= First Installation =
This guide covers building VoIPmonitor sniffer with Napatech SmartNIC support, configuration, and troubleshooting.


<kroki lang="mermaid">
%%{init: {'flowchart': {'nodeSpacing': 15, 'rankSpacing': 30}}}%%
flowchart LR
    A[Install Drivers] --> B[Build VoIPmonitor]
    B --> C[Configure]
    C --> D[Set systemd deps]
    D --> E[Start Service]
</kroki>


== Steps ==
== Prerequisites ==


* download latest Napatech drivers and untar it into e.g. /opt/napatech3
* Napatech drivers installed in <code>/opt/napatech3</code> (built per vendor documentation)
* build the driver
* Development libraries for compilation
* download the the sniffer's source
* Root access for driver operations


cd /usr/src
== Building VoIPmonitor with Napatech Support ==
git clone -b master https://github.com/voipmonitor/sniffer.git
    OR
git clone -b develop https://github.com/voipmonitor/sniffer.git
cd sniffer
./configure --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib


'''Note:''' The development branch is named <code>develop</code> (NOT "development"). Use <code>git checkout develop</code> to switch to it.
<syntaxhighlight lang="bash">
# Clone source and build
cd /usr/src
git clone -b develop https://github.com/voipmonitor/sniffer.git
cd sniffer


If you already have the repository cloned and want to switch to the develop branch:
# Configure with Napatech library paths
<pre>
./configure --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib
cd /usr/src/sniffer
make
git fetch origin
git checkout develop
git pull
</pre>


Install all libraries that the configure needs.
# Verify linkage (MUST show /opt/napatech3/lib/libpcap.so.1)
ldd ./voipmonitor | grep pcap


* run make
# Install
* check it's built properly
cp ./voipmonitor /usr/local/sbin/voipmonitor
systemctl restart voipmonitor
</syntaxhighlight>


root@server:/usr/src/sniffer# ldd ./voipmonitor | grep pcap
{{Note|1=The development branch is named <code>develop</code> (not "development"). Use <code>git checkout develop</code> to switch to it.}}
libpcap.so.1 => /opt/napatech3/lib/libpcap.so.1 (0x00007fc0b69b0000)


* replace original binary in the /usr/local/sbin
== Upgrading ==
* run it


= Upgrade =
=== GUI Upgrade (v24.23+) ===


==The GUI way (from the sensor's version 24.23)==
Add to <code>/etc/voipmonitor.conf</code>:
<syntaxhighlight lang="ini">
upgrade_by_git = yes
git_folder = /usr/src/sniffer
configure_param = --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib
</syntaxhighlight>


After restart, click '''UPGRADE''' in the GUI. The sniffer automatically performs: git pull → configure → make → install → restart.


Until sensor's version 24.23 was not possible to do the sensor's upgrade via 'upgrade_by_git' option because the configure script
=== Manual Upgrade ===
overwritten the adjusted Makefile and you built a binary with standard pcap libs (until you overwritten the orig libs). With 'configure_param' option you can adjust the Makefile creation for appropriate includes/libs


<syntaxhighlight lang="bash">
cd /usr/src/sniffer
git pull
./configure --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib
make && make install
systemctl restart voipmonitor
</syntaxhighlight>


* set these options into voipmonitor.conf
== Configuration ==


upgrade_by_git = yes
=== VoIPmonitor Configuration ===
git_folder = /usr/src/sniffer
configure_param = --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib


* restart sniffer
In <code>/etc/voipmonitor.conf</code>:
* do the upgrade via clicking in the GUI
<syntaxhighlight lang="ini">
interface = napa0


The sniffer will perform (after click on UPGRADE in GUI) git pull,configure,make_clean,make, service voipmonitor stop, make install, service voipmonitor start.
# CRITICAL: BPF filter MUST be disabled - not compatible with Napatech NTPL
#filter = udp or (vlan and udp)
</syntaxhighlight>


{{Warning|1=The BPF <code>filter</code> option MUST be commented out when using Napatech. Use NTPL filtering instead (see [[#Traffic Filtering|Traffic Filtering]]).}}


==The manual way==
=== ntpcap.ini ===
cd /usr/src/sniffer
git checkout develop
git pull
./configure --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib
make


* copy to the original directory and restart sensor
File: <code>/opt/napatech3/config/ntpcap.ini</code>
<syntaxhighlight lang="ini">
[Common]
Ntpl1 = "Assign[streamid=0;txport=0;txignore=true]=all"


[napa0]
StreamId = 0
Tx = 0
</syntaxhighlight>


= napatech drivers =
For older drivers, use:
<syntaxhighlight lang="ini">
[napa0]
Rx1="Assign[streamid=252;txport=0;txignore=true]=all"
Tx=0
</syntaxhighlight>


== Settings sample ==
=== ntservice.ini (Key Settings) ===


* in voipmonitor.conf
File: <code>/opt/napatech3/config/ntservice.ini</code>
interface = napa0


# filter option must be commented out !!! E.g.
Essential settings:
#filter = udp or (vlan and udp)
<syntaxhighlight lang="ini">
[System]
TimestampFormat = NATIVE_UNIX
TimestampMethod = EOF


* /opt/napatech3/config/ntpcap.ini
[Adapter0]
AdapterType = NT4E          # Match your card type
BusId = 00:07:00:00        # Match your PCI address
Profile = Capture
MaxFrameSize = 9018
</syntaxhighlight>


# Napatech default ntpcap.ini file
'''Time source configuration''' (to avoid 1970-01-01 timestamps):
[Common]
<syntaxhighlight lang="ini">
Ntpl1 = "Assign[streamid=0;txport=0;txignore=true]=all"
# Newer drivers:
timeSource = OS


[napa0 ]
# Older drivers (in [Adapter0] section):
StreamId = 0
OsTimeSyncFailover = ENABLE
Tx = 0
</syntaxhighlight>


* old version
=== Systemd Dependencies ===
[napa0]
Rx1="Assign[streamid=252;txport=0;txignore=true]=all"
Tx=0


* /opt/napatech3/config/ntservice.ini
VoIPmonitor must start AFTER Napatech drivers. Configure dependency:
<syntaxhighlight lang="bash">
systemctl edit voipmonitor
</syntaxhighlight>


[System]
Add:
TimestampFormat = NATIVE_UNIX
<syntaxhighlight lang="ini">
TimestampMethod = EOF
[Unit]
HostBufferWaitMethod = 0
After=ntservice.service
SDRAMFillLevelWarning = 0
Requires=ntservice.service
</syntaxhighlight>


For init.d systems, add to <code>/etc/init.d/voipmonitor</code> before binary execution:
<syntaxhighlight lang="bash">
/opt/napatech3/bin/ntstart.sh
sleep 60
</syntaxhighlight>


[logging]
See [[Systemd_for_voipmonitor_service_management#Dependency_Customization|systemd documentation]] for details.
LogMask = 0x07
LogToFile = 0
LogFileName = /tmp/Log3G_%s.log
LogBufferWrap = wrap


[Adapter0]
== Traffic Filtering ==
AdapterType = NT4E
BusId = 00:07:00:00
PacketDescriptor = NT
HostBuffersRx = [8,16,0]
HostBuffersTx = [8,16,0]
TimeSyncProtocol = NT
TimeSyncConnectorIn = Ext
TimeSyncConnectorOut = None
TimeSyncConnectorRepeat = None
TimeSyncTimeJumpThreshold = 1
TimeSyncTimeOffset = 0
MaxFrameSize = 9018
AltTPID = 0x8100
Profile = Capture
DiscardSize = 16
OsTimeSyncFailover = DISABLE


Timing source
To filter traffic on the Napatech card (hardware filtering), create an NTPL file.
In napatech where timestamp of packets is shifted to GMT and you want use system time instead:
GMT:
TimeSyncConnectorExt1 = PpsIn
System dependent:
TimeSyncConnectorExt1 = NttsIn


For new napatech drivers use following to set OS time for packets from napatech
Example <code>/opt/napatech3/myfilter.ntpl</code>:
TimesynConnectorExt1  = None
<syntaxhighlight lang="text">
TimeSyncReferencePrioroity =OSTime
delete = all


== Hints ==
# UDP port macros
=== service file for voipmonitor ===
DefineMacro("mUdpSrcPort", "Data[DynOffset=DynOffUDPFrame;Offset=0;DataType=ByteStr2]")
You need to add to voipmonitor's service file that napatech drivers (ntservice) needs to be started before the voipmonitor
DefineMacro("mUdpDestPort", "Data[DynOffset=DynOffUDPFrame;Offset=2;DataType=ByteStr2]")
[https://www.voipmonitor.org//doc/Systemd_for_voipmonitor_service_management#service_file_and_napatech_drivers by modifiyng the service file]


=== Filter traffic on Napatech card ===
# SIP filter (ports 5060, 5061)
If you want to filter a data directly in the Napatech card you can use this example as a starting point.
Assign[StreamId = 0] = (mUdpSrcPort == 5060, 5061) AND (mUdpDestPort == 5060, 5061)
(many thanks to Distributel for the example)


Create a file e.g /opt/napatech3/myfilter.ntpl
# RTP filter (ports 10000-61743)
Assign[StreamId = 0] = (mUdpSrcPort == (0x2710..0xF12F))


# Start NTPL
# Deduplication
# Delete all existing filter
DeduplicationConfig[drop=duplicate] = GroupID == 0
delete = all
Define ckRecipe = CorrelationKey(Begin=StartOfFrame[0], End=EndOfFrame[0], DeduplicationGroupID=0)
Assign[StreamID=0; CorrelationKey=ckRecipe] = Port == 0
</syntaxhighlight>


# Setup UDP macros
Apply filter:
 
<syntaxhighlight lang="bash">
DefineMacro("mUdpSrcPort", "Data[DynOffset=DynOffUDPFrame;Offset=0;DataType=ByteStr2]")
/opt/napatech3/bin/ntstart.sh -n myfilter.ntpl
DefineMacro("mUdpDestPort", "Data[DynOffset=DynOffUDPFrame;Offset=2;DataType=ByteStr2]")
</syntaxhighlight>
 
# Setup filters
# The first line is the SIP filter. The second line is the RTP filter for our specific ports in HEX (10000-61743)
 
Assign[StreamId = 0] = (mUdpSrcPort == 5060, 5061) AND (mUdpDestPort == 5060, 5061)
Assign[StreamId = 0] = (mUdpSrcPort == (0x2710..0xF12F))
Assign[StreamId = 1] = (mUdpSrcPort == 5060, 5061) AND (mUdpDestPort == 5060, 5061)
Assign[StreamId = 1] = (mUdpSrcPort == (0x2710..0xF12F))
Assign[StreamId = 2] = (mUdpSrcPort == 5060, 5061) AND (mUdpDestPort == 5060, 5061)
Assign[StreamId = 2] = (mUdpSrcPort == (0x2710..0xF12F))
Assign[StreamId = 3] = (mUdpSrcPort == 5060, 5061) AND (mUdpDestPort == 5060, 5061)
Assign[StreamId = 3] = (mUdpSrcPort == (0x2710..0xF12F))
# End NTPL
 
# Enable Deduplication
DeduplicationConfig[drop=duplicate] = GroupID == 0
Define ckRecipe = CorrelationKey(Begin=StartOfFrame[0], End=EndOfFrame[0], DeduplicationGroupID=0)
Assign[StreamID=0,1,2,3; CorrelationKey=ckRecipe] = Port == 0,1,2,3
 
 
Start it with the command
 
/opt/napatech3/bin/ntstart.sh -n myfilters.ntpl


=== Troubleshooting: Spool Directories with Date 1970-01-01 ===
== Troubleshooting ==
If spool directories are created with incorrect timestamps (e.g., <code>1970-01-01</code> instead of the current date) on sensors using Napatech cards, this indicates the Napatech card is providing Unix Epoch time (timestamp = 0) instead of the actual system time.


<strong>Solution:</strong>
=== Quick Reference ===


;1. Edit the Napatech configuration file:
{| class="wikitable"
Edit <code>/opt/napatech/bin3/ntservice.ini</code> (or <code>/opt/napatech3/config/ntservice.ini</code> on some installations).
! Problem !! Cause !! Solution
|-
| Spool directories dated 1970-01-01 || Time source misconfigured || Set <code>timeSource = OS</code> in ntservice.ini
|-
| No packets captured || Wrong libpcap linked || Verify <code>ldd voipmonitor</code> shows Napatech libpcap
|-
| Sensor DOWN in GUI || ntservice not running || Start ntservice, add systemd dependency
|-
| <code>RTE_ETH_MQ_TX_NONE</code> error || DPDK conflict || Set <code>#define HAVE_LIBDPDK 0</code> in config.h
|-
| <code>libpcap error no such device</code> || Driver not initialized || Add ntservice dependency, restart services
|}


;2. Add or modify the timeSource settings:
=== Spool Directories with Date 1970-01-01 ===
For newer Napatech drivers, add this parameter to force the card to use system time:
<pre>
timeSource = OS
</pre>


For older driver configurations in the <code>[Adapter0]</code> section, you may need to adjust:
The Napatech card is providing Unix Epoch time instead of system time.
<pre>
OsTimeSyncFailover = ENABLE
</pre>


;3. Restart the Napatech service:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Fix in ntservice.ini (see Configuration section above)
# Then restart:
systemctl stop ntservice
systemctl stop ntservice
systemctl start ntservice
systemctl start ntservice
</syntaxhighlight>
;4. Restart the voipmonitor sniffer service:
<syntaxhighlight lang="bash">
systemctl restart voipmonitor
systemctl restart voipmonitor
</syntaxhighlight>


;5. Verify the fix:
# Verify:
<syntaxhighlight lang="bash">
# Check that new directories have correct dates
ls -ltd /var/spool/voipmonitor/*
ls -ltd /var/spool/voipmonitor/*
</syntaxhighlight>
</syntaxhighlight>


=== Troubleshooting: Napatech Interfaces in DOWN State ===
=== Napatech Interfaces Not Capturing ===
If standard capture tools like <code>tcpdump</code> or <code>tshark</code> show no packets on Napatech interfaces, verify that the Napatech interfaces are not in a DOWN state.


;1. Check interface status:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Check if Napatech interfaces are UP
# Check interface status
ip link show napa0
ip link show napa0


# Check all Napatech interfaces
# Verify correct libpcap (MUST show /opt/napatech3/lib/libpcap.so.1)
ip link show | grep napa
ldd /usr/local/sbin/voipmonitor | grep pcap
</syntaxhighlight>
If the interfaces show a DOWN state instead of UP, continue with step 2.


;2. Verify Napatech drivers are loaded:
# Restart drivers
<syntaxhighlight lang="bash">
systemctl stop voipmonitor
# Check if ntpcap module is loaded
cd /opt/napatech3/bin/ && ./ntstop && ./ntstart
lsmod | grep ntpcap
systemctl start voipmonitor


# Check Napatech driver service status
# Verify capture
systemctl status ntservice
tshark -i napa0 -Y "sip || rtp" -n -c 10
</syntaxhighlight>
</syntaxhighlight>
If the drivers are not loaded, start the service:
<syntaxhighlight lang="bash">systemctl start ntservice</syntaxhighlight>


;3. Check if custom libpcap is being used:
If libpcap shows system path instead of Napatech path, rebuild VoIPmonitor (see [[#Building VoIPmonitor with Napatech Support|Build section]]).
The Napatech setup requires linking against a custom <code>libpcap</code> library provided by Napatech. Standard system libpcap will not work correctly with Napatech cards.


<syntaxhighlight lang="bash">
=== Sensor Shows as Down in GUI ===
# Verify voipmonitor is linked against Napatech libpcap
ldd /usr/local/sbin/voipmonitor | grep pcap
</syntaxhighlight>
Expected output should show something like:
<pre>
libpcap.so.1 => /opt/napatech3/lib/libpcap.so.1 (0x00007f00b69b0000)
</pre>


If it shows system libpcap (e.g., <code>/lib/x86_64-linux-gnu/libpcap.so.1</code>), you need to rebuild using the custom library.
Error: '''"The requested response from the sensor could not be retrieved"'''
 
;4. Rebuild with custom libpcap:
If voipmonitor is not using the Napatech libpcap, rebuild the sniffer:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd /usr/src/sniffer
# Start ntservice
git pull
systemctl start ntservice
./configure --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib
systemctl status ntservice
make
make install
systemctl restart voipmonitor
</syntaxhighlight>


After rebuilding, verify again with <code>ldd /usr/local/sbin/voipmonitor | grep pcap</code>.
# Configure dependency (see Systemd Dependencies section)
systemctl edit voipmonitor
# Add After= and Requires= for ntservice.service


;5. Check ntpcap configuration:
# Reboot to apply
Incorrect ntpcap configuration can prevent interfaces from coming up properly. Review <code>/opt/napatech3/config/ntpcap.ini</code>:
reboot
 
<syntaxhighlight lang="bash">
cat /opt/napatech3/config/ntpcap.ini
</syntaxhighlight>
</syntaxhighlight>


Ensure:
{{Note|1=The <code>ntservice</code> must be running BEFORE <code>voipmonitor</code> starts. The systemd dependency configuration is critical.}}
* Stream IDs are properly assigned
* Interface names (e.g., <code>napa0</code>) match what you use in <code>voipmonitor.conf</code>


=== Troubleshooting: Napatech Drivers Not Capturing Traffic ===
=== Compilation Errors (DPDK Conflict) ===
If the VoIPmonitor sniffer is running but no calls are being captured, and you are using Napatech cards, the issue may be with the Napatech driver state. This can happen after driver crashes, system updates, or hardware resets.


<strong>Symptoms:</strong>
If build fails with <code>RTE_ETH_MQ_TX_NONE was not declared</code>:
* VoIPmonitor GUI shows no calls (CDR list or Active Calls are empty)
* <code>tshark -i napa0</code> shows no packets
* Napatech interfaces are UP but not receiving data
* Restarting only VoIPmonitor service does not resolve the issue
 
<strong>Solution:</strong>
 
Restart the Napatech drivers to reset the capture engine:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Step 1: Stop VoIPmonitor sniffer service
# After running ./configure, edit config.h
systemctl stop voipmonitor
# Change: #define HAVE_LIBDPDK 1
# To:     #define HAVE_LIBDPDK 0


# Step 2: Navigate to Napatech binary directory
make
cd /opt/napatech3/bin/
 
# Step 3: Stop Napatech drivers
./ntstop
 
# Step 4: Start Napatech drivers
./ntstart
 
# Step 5: Restart VoIPmonitor sniffer service
systemctl start voipmonitor
</syntaxhighlight>
</syntaxhighlight>


If your system uses a different path for Napatech (e.g., <code>/opt/napatech</code> or <code>/opt/napatech3</code>), adjust the path in step 2 accordingly. You can locate the drivers with:
== See Also ==
<syntaxhighlight lang="bash">
find /opt -name "ntstart" 2>/dev/null
</syntaxhighlight>


<strong>Verification:</strong>
* [[Sniffer_installation]] - General sniffer installation
* [[DPDK]] - DPDK high-performance capture (alternative to Napatech)
* [[Systemd_for_voipmonitor_service_management]] - Service management details
* [[Scaling]] - Performance optimization


After restarting the drivers, verify that traffic is being captured:
== AI Summary for RAG ==
<syntaxhighlight lang="bash">
# Check if packets are being captured on the Napatech interface
tshark -i napa0 -Y "sip || rtp" -n -c 10


# Verify VoIPmonitor is processing calls
'''Summary:''' Guide for building VoIPmonitor sniffer with Napatech SmartNIC support. Build process: clone source with <code>git clone -b develop</code>, configure with <code>--with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib</code>, and make. Verify build with <code>ldd voipmonitor | grep pcap</code> - must show Napatech libpcap path. For GUI upgrades (v24.23+), set <code>upgrade_by_git=yes</code> and <code>configure_param</code> in voipmonitor.conf. Configuration requires: <code>interface=napa0</code> in voipmonitor.conf (BPF filter must be disabled/commented), ntpcap.ini for stream assignment, ntservice.ini for adapter and time settings. Critical: set <code>timeSource=OS</code> in ntservice.ini to avoid 1970-01-01 timestamps. Systemd dependency on ntservice is mandatory - voipmonitor must start after ntservice. Troubleshooting covers: 1970-01-01 spool directories (time source), interfaces not capturing (wrong libpcap), sensor DOWN in GUI (ntservice not running), DPDK compilation errors (set HAVE_LIBDPDK=0).
tail -f /var/log/syslog | grep voipmonitor
</syntaxhighlight>


If the issue persists after restarting the drivers, check the Napatech logs for error messages:
'''Keywords:''' Napatech, SmartNIC, high-performance capture, compilation, configure, upgrade_by_git, configure_param, ntpcap.ini, ntservice.ini, timeSource, 1970-01-01, NTPL filter, hardware filtering, libpcap, ntstop, ntstart, HAVE_LIBDPDK, systemd dependency, ntservice, sensor down, "The requested response from the sensor could not be retrieved"
<syntaxhighlight lang="bash">
# View Napatech service logs
journalctl -u ntservice -n 50


# Or check log file if configured
tail -f /tmp/Log3G_*.log
</syntaxhighlight>
== AI Summary for RAG ==
'''Summary:''' Instructions for building VoIPmonitor sniffer with Napatech support. Clone with <code>git clone -b develop</code> or switch branch with <code>git checkout develop</code>, then configure with --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib and make. For GUI upgrades (v24.23+), set upgrade_by_git=yes and configure_param options. Includes ntpcap.ini, ntservice.ini config samples, time source configuration for correct timestamps, NTPL filtering, and troubleshooting for: spool directories with 1970-01-01 dates (set timeSource=OS), Napatech interfaces in DOWN state (requires custom libpcap), and drivers not capturing traffic (restart with ntstop/ntstart commands).
'''Keywords:''' Napatech, compilation, git checkout develop, configure, upgrade_by_git, configure_param, ntpcap.ini, ntservice.ini, timeSource, 1970-01-01, timestamp, epoch time, NTPL filter, DOWN state, custom libpcap, interfaces, troubleshooting, ntstop, ntstart, no calls captured, driver restart
'''Key Questions:'''
'''Key Questions:'''
* How do I compile VoIPmonitor with Napatech support?
* How do I compile VoIPmonitor with Napatech support?
* How do I switch to the develop branch?
* What configure options are needed for Napatech?
* What configure options are needed for Napatech?
* Napatech interfaces are in DOWN state, how do I fix it?
* How do I upgrade VoIPmonitor with Napatech via GUI?
* Why is tcpdump showing no packets on Napatech interfaces?
* Why are spool directories created with date 1970-01-01?
* How do I verify voipmonitor is using Napatech libpcap?
* How do I fix Napatech interfaces in DOWN state?
* VoIPmonitor not capturing calls with Napatech, how do I restart the drivers?
* VoIPmonitor not capturing calls with Napatech, how to fix?
* What do I do when ntstop or ntstart are located?
* How do I restart Napatech drivers?
* How to fix RTE_ETH_MQ_TX_NONE compilation error?
* How to configure Napatech driver dependency in systemd?
* What does libpcap error no such device exists mean?
* Sensor shows as down in GUI with "The requested response from the sensor could not be retrieved"?
* How do I verify VoIPmonitor is using Napatech libpcap?
* How do I configure NTPL hardware filtering on Napatech?

Latest revision as of 16:48, 8 January 2026

Napatech Integration

This guide covers building VoIPmonitor sniffer with Napatech SmartNIC support, configuration, and troubleshooting.

Prerequisites

  • Napatech drivers installed in /opt/napatech3 (built per vendor documentation)
  • Development libraries for compilation
  • Root access for driver operations

Building VoIPmonitor with Napatech Support

# Clone source and build
cd /usr/src
git clone -b develop https://github.com/voipmonitor/sniffer.git
cd sniffer

# Configure with Napatech library paths
./configure --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib
make

# Verify linkage (MUST show /opt/napatech3/lib/libpcap.so.1)
ldd ./voipmonitor | grep pcap

# Install
cp ./voipmonitor /usr/local/sbin/voipmonitor
systemctl restart voipmonitor

ℹ️ Note: The development branch is named develop (not "development"). Use git checkout develop to switch to it.

Upgrading

GUI Upgrade (v24.23+)

Add to /etc/voipmonitor.conf:

upgrade_by_git = yes
git_folder = /usr/src/sniffer
configure_param = --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib

After restart, click UPGRADE in the GUI. The sniffer automatically performs: git pull → configure → make → install → restart.

Manual Upgrade

cd /usr/src/sniffer
git pull
./configure --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib
make && make install
systemctl restart voipmonitor

Configuration

VoIPmonitor Configuration

In /etc/voipmonitor.conf:

interface = napa0

# CRITICAL: BPF filter MUST be disabled - not compatible with Napatech NTPL
#filter = udp or (vlan and udp)

⚠️ Warning: The BPF filter option MUST be commented out when using Napatech. Use NTPL filtering instead (see Traffic Filtering).

ntpcap.ini

File: /opt/napatech3/config/ntpcap.ini

[Common]
Ntpl1 = "Assign[streamid=0;txport=0;txignore=true]=all"

[napa0]
StreamId = 0
Tx = 0

For older drivers, use:

[napa0]
Rx1="Assign[streamid=252;txport=0;txignore=true]=all"
Tx=0

ntservice.ini (Key Settings)

File: /opt/napatech3/config/ntservice.ini

Essential settings:

[System]
TimestampFormat = NATIVE_UNIX
TimestampMethod = EOF

[Adapter0]
AdapterType = NT4E          # Match your card type
BusId = 00:07:00:00         # Match your PCI address
Profile = Capture
MaxFrameSize = 9018

Time source configuration (to avoid 1970-01-01 timestamps):

# Newer drivers:
timeSource = OS

# Older drivers (in [Adapter0] section):
OsTimeSyncFailover = ENABLE

Systemd Dependencies

VoIPmonitor must start AFTER Napatech drivers. Configure dependency:

systemctl edit voipmonitor

Add:

[Unit]
After=ntservice.service
Requires=ntservice.service

For init.d systems, add to /etc/init.d/voipmonitor before binary execution:

/opt/napatech3/bin/ntstart.sh
sleep 60

See systemd documentation for details.

Traffic Filtering

To filter traffic on the Napatech card (hardware filtering), create an NTPL file.

Example /opt/napatech3/myfilter.ntpl:

delete = all

# UDP port macros
DefineMacro("mUdpSrcPort", "Data[DynOffset=DynOffUDPFrame;Offset=0;DataType=ByteStr2]")
DefineMacro("mUdpDestPort", "Data[DynOffset=DynOffUDPFrame;Offset=2;DataType=ByteStr2]")

# SIP filter (ports 5060, 5061)
Assign[StreamId = 0] = (mUdpSrcPort == 5060, 5061) AND (mUdpDestPort == 5060, 5061)

# RTP filter (ports 10000-61743)
Assign[StreamId = 0] = (mUdpSrcPort == (0x2710..0xF12F))

# Deduplication
DeduplicationConfig[drop=duplicate] = GroupID == 0
Define ckRecipe = CorrelationKey(Begin=StartOfFrame[0], End=EndOfFrame[0], DeduplicationGroupID=0)
Assign[StreamID=0; CorrelationKey=ckRecipe] = Port == 0

Apply filter:

/opt/napatech3/bin/ntstart.sh -n myfilter.ntpl

Troubleshooting

Quick Reference

Problem Cause Solution
Spool directories dated 1970-01-01 Time source misconfigured Set timeSource = OS in ntservice.ini
No packets captured Wrong libpcap linked Verify ldd voipmonitor shows Napatech libpcap
Sensor DOWN in GUI ntservice not running Start ntservice, add systemd dependency
RTE_ETH_MQ_TX_NONE error DPDK conflict Set #define HAVE_LIBDPDK 0 in config.h
libpcap error no such device Driver not initialized Add ntservice dependency, restart services

Spool Directories with Date 1970-01-01

The Napatech card is providing Unix Epoch time instead of system time.

# Fix in ntservice.ini (see Configuration section above)
# Then restart:
systemctl stop ntservice
systemctl start ntservice
systemctl restart voipmonitor

# Verify:
ls -ltd /var/spool/voipmonitor/*

Napatech Interfaces Not Capturing

# Check interface status
ip link show napa0

# Verify correct libpcap (MUST show /opt/napatech3/lib/libpcap.so.1)
ldd /usr/local/sbin/voipmonitor | grep pcap

# Restart drivers
systemctl stop voipmonitor
cd /opt/napatech3/bin/ && ./ntstop && ./ntstart
systemctl start voipmonitor

# Verify capture
tshark -i napa0 -Y "sip || rtp" -n -c 10

If libpcap shows system path instead of Napatech path, rebuild VoIPmonitor (see Build section).

Sensor Shows as Down in GUI

Error: "The requested response from the sensor could not be retrieved"

# Start ntservice
systemctl start ntservice
systemctl status ntservice

# Configure dependency (see Systemd Dependencies section)
systemctl edit voipmonitor
# Add After= and Requires= for ntservice.service

# Reboot to apply
reboot

ℹ️ Note: The ntservice must be running BEFORE voipmonitor starts. The systemd dependency configuration is critical.

Compilation Errors (DPDK Conflict)

If build fails with RTE_ETH_MQ_TX_NONE was not declared:

# After running ./configure, edit config.h
# Change: #define HAVE_LIBDPDK 1
# To:     #define HAVE_LIBDPDK 0

make

See Also

AI Summary for RAG

Summary: Guide for building VoIPmonitor sniffer with Napatech SmartNIC support. Build process: clone source with git clone -b develop, configure with --with-dpdk-include=/opt/napatech3/include --with-dpdk-lib=/opt/napatech3/lib, and make. Verify build with ldd voipmonitor | grep pcap - must show Napatech libpcap path. For GUI upgrades (v24.23+), set upgrade_by_git=yes and configure_param in voipmonitor.conf. Configuration requires: interface=napa0 in voipmonitor.conf (BPF filter must be disabled/commented), ntpcap.ini for stream assignment, ntservice.ini for adapter and time settings. Critical: set timeSource=OS in ntservice.ini to avoid 1970-01-01 timestamps. Systemd dependency on ntservice is mandatory - voipmonitor must start after ntservice. Troubleshooting covers: 1970-01-01 spool directories (time source), interfaces not capturing (wrong libpcap), sensor DOWN in GUI (ntservice not running), DPDK compilation errors (set HAVE_LIBDPDK=0).

Keywords: Napatech, SmartNIC, high-performance capture, compilation, configure, upgrade_by_git, configure_param, ntpcap.ini, ntservice.ini, timeSource, 1970-01-01, NTPL filter, hardware filtering, libpcap, ntstop, ntstart, HAVE_LIBDPDK, systemd dependency, ntservice, sensor down, "The requested response from the sensor could not be retrieved"

Key Questions:

  • How do I compile VoIPmonitor with Napatech support?
  • What configure options are needed for Napatech?
  • How do I upgrade VoIPmonitor with Napatech via GUI?
  • Why are spool directories created with date 1970-01-01?
  • How do I fix Napatech interfaces in DOWN state?
  • VoIPmonitor not capturing calls with Napatech, how to fix?
  • How do I restart Napatech drivers?
  • How to fix RTE_ETH_MQ_TX_NONE compilation error?
  • How to configure Napatech driver dependency in systemd?
  • What does libpcap error no such device exists mean?
  • Sensor shows as down in GUI with "The requested response from the sensor could not be retrieved"?
  • How do I verify VoIPmonitor is using Napatech libpcap?
  • How do I configure NTPL hardware filtering on Napatech?