Skip to content

Commit 0f3d743

Browse files
authored
Merge pull request #286 from CESNET/update_readme
Updating Readme
2 parents a80a30d + 65f6f3a commit 0f3d743

File tree

1 file changed

+111
-67
lines changed

1 file changed

+111
-67
lines changed

README.md

Lines changed: 111 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
1-
<p align="center">
2-
<img src="https://raw.githubusercontent.com/CESNET/ipfixprobe/refs/heads/master/docs/images/ipfixprobe-horizontal.svg" width="450">
3-
</p>
1+
<div align="center">
2+
<picture>
3+
<source srcset="https://raw.githubusercontent.com/CESNET/ipfixprobe/refs/heads/master/docs/images/logo/logo_horizontal_white.svg" width="450" media="(prefers-color-scheme: dark)">
4+
<img src="https://raw.githubusercontent.com/CESNET/ipfixprobe/refs/heads/master/docs/images/logo/logo_horizontal_color.svg" width="450">
5+
</picture>
6+
</div>
7+
</br>
8+
9+
The ipfixprobe is a high-performance flow exporter. It creates bidirectional flows from packet input and exports them to output interface. The ipfixprobe support vide variety of flow extenstion for application layer protocol information. The flow extension can be turned on with process plugins. We support TLS, QUIC, HTTP, DNS and many more. Just check our [documentation](https://ipfixprobe.cesnet.cz).
410

511
[![](https://img.shields.io/badge/license-BSD-blue.svg)](https://github.com/CESNET/ipfixprobe/blob/master/LICENSE)
12+
[![](https://img.shields.io/badge/docs-ipfixprobe-blue.svg)](https://ipfixprobe.cesnet.cz)
613
![Coverity Scan](https://img.shields.io/coverity/scan/22112)
714
![GitHub top language](https://img.shields.io/github/languages/top/CESNET/ipfixprobe)
815

9-
ipfixprobe is a high-performance flow exporter. It creates bidirectional flows from packet input and exports them to output interface. The ipfixprobe support vide variety of flow extenstion for application layer protocol information. The flow extension can be turned on with process plugins. We support TLS, QUIC, HTTP, DNS and many more. Just check our [documentation](https://ipfixprobe.cesnet.cz).
1016

11-
## Installation
12-
The RPM packages for RHEL based distributions can be downloaded from our [copr repository](https://copr.fedorainfracloud.org/coprs/g/CESNET/NEMEA/package/ipfixprobe/). Or just simply run:
17+
## 🛠️ Installation
18+
The RPM packages for RHEL based distributions can be downloaded from our [copr repository](https://copr.fedorainfracloud.org/coprs/g/CESNET/ipfixprobe/package/ipfixprobe/). Or just simply run:
1319

1420
```
15-
dnf install -y dnf-plugins-core && dnf copr -y enable @CESNET/NEMEA
21+
dnf install -y dnf-plugins-core &&dnf copr enable @CESNET/ipfixprobe
1622
dnf install ipfixprobe
1723
```
1824

19-
## Parameters
25+
## 🔧 Parameters
2026
### Module specific parameters
2127
- `-i ARGS` Activate input plugin (-h input for help)
2228
- `-s ARGS` Activate storage plugin (-h storage for help)
@@ -34,13 +40,13 @@ dnf install ipfixprobe
3440
- `-h [PLUGIN]` Print help text. Supported help for input, storage, output and process plugins
3541
- `-V` Show version and exit
3642

37-
### Help
43+
### Help
3844
Printing general help is done using the `-h` parameter. To print help for specific plugins, `-h` with parameter is used.
3945
This parameter accepts `input`, `storage`, `process`, `output` or name of a plugin (or path to a .so file with plugin).
4046

41-
## Example
47+
## 📖 Example
4248
Here are the examples of various plugins usage:
43-
```
49+
```bash
4450
# Capture from wlp2s0 interface using raw sockets, print flows to console
4551
./ipfixprobe -i 'raw;ifc=wlp2s0' -o 'text'
4652

@@ -73,61 +79,105 @@ Here are the examples of various plugins usage:
7379

7480
## Build
7581

76-
### Requirements
77-
- libatomic
78-
- [telemetry](https://github.com/CESNET/telemetry) (mandatory) — can be installed from the [COPR repository](https://copr.fedorainfracloud.org/coprs/g/CESNET/NEMEA-stable/package/telemetry/) or built from source code
79-
- kernel version at least 3.19 when using raw sockets input plugin enabled by default (disable with `--without-raw` parameter for `./configure`)
80-
- [libpcap](http://www.tcpdump.org/) when compiling with pcap plugin (`--with-pcap` parameter)
81-
- netcope-common [COMBO cards](https://www.liberouter.org/technologies/cards/) when compiling with ndp plugin (`--with-ndp` parameter)
82-
- libunwind-devel when compiling with stack unwind on crash feature (`--with-unwind` parameter)
83-
- [nemea](http://github.com/CESNET/Nemea-Framework) when compiling with unirec output plugin (`--with-nemea` parameter)
84-
- cloned submodule with googletest framework to enabled optional tests (`--with-gtest` parameter)
82+
### 📦 Requirements
8583

86-
To compile DPDK interfaces, make sure you have DPDK libraries (and development files) installed and set the `PKG_CONFIG_PATH` environment variable if necessary. You can obtain the latest DPDK at http://core.dpdk.org/download/ Use `--with-dpdk` parameter of the `configure` script to enable it.
84+
- `libatomic`
85+
- [telemetry](https://github.com/CESNET/telemetry) (**required**) Installable from the [COPR repository](https://copr.fedorainfracloud.org/coprs/g/CESNET/NEMEA-stable/package/telemetry/) or buildable from source
86+
- Linux kernel version **≥ 3.19**
87+
- [libpcap](http://www.tcpdump.org/) — required for PCAP input plugin (`-DENABLE_INPUT_PCAP`)
88+
- `netcope-common` — required for NDP input plugin with [COMBO cards](https://www.liberouter.org/technologies/cards/) (`-DENABLE_INPUT_NFB`)
89+
- `libunwind-devel`
90+
- [NEMEA](http://github.com/CESNET/Nemea-Framework) — required for UniRec output plugin (`-DENABLE_NEMEA`, `-DENABLE_OUTPUT_UNIREC`)
91+
- [DPDK](http://core.dpdk.org/download/) — required for DPDK input plugin (`-DENABLE_INPUT_DPDK`)
8792

88-
### Source codes
93+
> For most conventional monitoring use-cases (not requiring high-speed packet libraries like DPDK or NDP), you can install required dependencies using the following commands:
8994
90-
This project uses a standard process of:
95+
#### 🐧 RHEL9-based distributions
9196

97+
```bash
98+
sudo yum-config-manager --add-repo https://yum.oracle.com/repo/OracleLinux/OL9/codeready/builder/x86_64/
99+
sudo dnf copr enable @CESNET/NEMEA-stable
100+
sudo dnf install -y git wget curl net-tools gcc gcc-c++ \
101+
libtool lz4-devel rpm-build fuse3-devel make cmake rpm \
102+
libatomic libunwind-devel openssl-devel pkgconf-pkg-config \
103+
telemetry gcc-toolset-14-libatomic-devel
92104
```
105+
106+
---
107+
108+
### ⚙️ Project build with CMake
109+
110+
This project uses the standard CMake build system. Example setup:
111+
112+
```bash
93113
git clone --recurse-submodules https://github.com/CESNET/ipfixprobe
94114
cd ipfixprobe
95-
autoreconf -i
96-
./configure
97-
make
98-
sudo make install
115+
mkdir build && cd build
116+
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
117+
```
118+
119+
#### 🔧 Notable CMake Build Options
120+
121+
Run the command to view all available build options:
122+
123+
```bash
124+
cmake -LAH
125+
```
126+
127+
The most notable options are:
128+
129+
| Option | Description |
130+
|--------------------------------|--------------------------------------------------------------------------|
131+
| `ENABLE_MILISECONDS_TIMESTAMPS`| Enable millisecond timestamp precision |
132+
| `ENABLE_NEMEA` | Enable support for NEMEA modules |
133+
| `ENABLE_RPMBUILD` | Enable building of RPM packages (enabled by default) |
134+
| `ENABLE_TESTS` | Enable building of unit and integration tests |
135+
| `ENABLE_INPUT_PCAP` | Build PCAP input plugin (requires `libpcap`) |
136+
| `ENABLE_INPUT_NFB` | Build NFB input plugin (requires `netcope-common`) |
137+
| `ENABLE_INPUT_DPDK` | Build DPDK input plugin (requires `dpdk`) |
138+
139+
140+
---
141+
142+
#### 🛠️ Build from Source
143+
144+
Once the CMake project is configured, build the project using:
145+
146+
```bash
147+
make -j
99148
```
100149

101-
Check `./configure --help` for more details and settings.
150+
The resulting binary will be located at:
102151

103-
### RPM packages
152+
```bash
153+
ipfixprobe/build/src/core/ipfixprobe
154+
```
155+
156+
To install the binary system-wide:
104157

105-
RPM package can be created in the following versions using `--with` parameter of `rpmbuild`:
106-
- `--with pcap` enables RPM with pcap input plugin
107-
- `--with ndp` enables RPM with netcope-common, i.e., ndp input plugin
108-
- `--with nemea` enables RPM with unirec output plugin
109-
- `--without raw` disables RPM with default raw socket input plugin
110-
- `--with unwind` enables RPM with stack unwinding feature
158+
```bash
159+
make install
160+
```
111161

112-
These parameters affect required dependencies of the RPM and build process.
162+
---
113163

114-
The default configuration of the RPM can be created using simply: `make rpm`
164+
#### 📦 Build RPM Packages
115165

116-
Alternative versions (described in the following section) can be created by:
117-
- NEMEA version of RPM: `make rpm-nemea`
118-
- NDP version of RPM: `make rpm-ndp`
166+
RPM packages are created automatically based on the enabled CMake options.
119167

120-
We use [COPR infrastructure](https://copr.fedorainfracloud.org/coprs/g/CESNET/NEMEA/) to build and serve RPM packages for EPEL9.
121-
It is not possible to pass arguments to rpmbuild, so there is an option in configure to enforce NEMEA dependency:
168+
If the project is configured with `ENABLE_RPMBUILD` (enabled by default), you can build RPM packages using:
122169

123-
`./configure --enable-coprrpm && make srpm`
170+
```bash
171+
make -j rpm
172+
```
124173

125-
The output source RPM can be uploaded to copr.
174+
The resulting RPM files will be located in:
126175

127-
To install ipfixprobe with NEMEA dependency from binary RPM packages, it is possible to follow instructions on:
128-
[https://copr.fedorainfracloud.org/coprs/g/CESNET/NEMEA/](https://copr.fedorainfracloud.org/coprs/g/CESNET/NEMEA/)
176+
```
177+
ipfixprobe/build/pkg/rpm/rpmbuild/
178+
```
129179

130-
## Telemetry
180+
## 📈 Telemetry
131181

132182
`ipfixprobe` exports statistics and other diagnostic information through a telemetry interface based on appFs library, which leverages the fuse3 library (filesystem in userspace) to allow telemetry data to be accessed and manipulated
133183
through standard filesystem operations.
@@ -223,40 +273,34 @@ The pipeline directory provides statistics for all worker queues. Each queue is
223273
```
224274
225275
226-
## Input / Output of the flow exporter
276+
## 📥 Input / Output of the flow exporter
227277
228-
The availability of the input and output interfaces depends on the ipfixprobe build settings. By default, we provide RPM package with pcap and raw inputs. The default provided outpus are ipfix and text.
278+
The availability of input and output types depends on the installed packages or enabled build options (see section of README Project Setup with CMake).
279+
By default, installing the `ipfixprobe` package enables standard raw socket output.
229280
230-
When the project is configured with `./configure --with-nemea`, the flow
231-
exporter supports NEMEA output via TRAP IFC besides the default IPFIX output.
232-
For more information about NEMEA, visit
233-
[https://nemea.liberouter.org](https://nemea.liberouter.org).
281+
To enable additional input capabilities, install the corresponding input plugin packages:
234282
235-
The flow exporter supports compilation with libpcap (`./configure --with-pcap`), which allows for receiving packets
236-
from PCAP file or network interface card.
283+
- `ipfixprobe-input-dpdk` – enables DPDK input support
284+
- `ipfixprobe-input-nfb` – enables NFB input support
285+
- `ipfixprobe-input-pcap` – enables libpcap input support
237286
238-
When the project is configured with `./configure --with-ndp`, it is prepared for high-speed packet transfer
239-
from special HW acceleration FPGA cards. For more information about the cards,
240-
visit [COMBO cards](https://www.liberouter.org/technologies/cards/) or contact
241-
us.
287+
For more information, visit the [input plugin documentation](https://ipfixprobe.cesnet.cz/en/plugins) or run `ipfixprobe -h input` for more information and complete list of input plugins and their parameters.
242288
243-
### Output
244289
245-
There are several currently available output plugins, such as:
290+
### 📤 Output
246291
247-
- `ipfix` standard IPFIX [RFC 5101](https://tools.ietf.org/html/rfc5101)
248-
- `unirec` data source for the [NEMEA system](https://nemea.liberouter.org), the output is in the UniRec format sent via a configurable interface using [https://nemea.liberouter.org/trap-ifcspec/](https://nemea.liberouter.org/trap-ifcspec/)
249-
- `text` output in human readable text format on standard output file descriptor (stdout)
292+
Similarly as in input, the output availability also depends on the installed packages.
293+
By default, installed the `ipfixprobe` package enables standard `ipfix` and `text` output.
250294
251-
The output flow records are composed of information provided by the enabled plugins (using `-p` parameter, see [Flow Data Extension - Processing Plugins](./README.md#flow-data-extension---processing-plugins)).
295+
To add [NEMEA system](https://nemea.liberouter.org) output capability, you should install `ipfixprobe-nemea` instead of ipfixprobe
252296
253297
See `ipfixprobe -h output` for more information and complete list of output plugins and their parameters.
254298
255-
LZ4 compression:
299+
#### LZ4 compression:
256300
ipfix plugin supports LZ4 compression algorithm over tcp. See plugin's help for more information.
257301
258302
259-
## Possible issues
303+
## ⚠️ Possible issues
260304
### Flows are not send to output interface when reading small pcap file (NEMEA output)
261305
262306
Turn off message buffering using `buffer=off` option and set `timeout=WAIT` on output interfaces.

0 commit comments

Comments
 (0)