C++ developer · network software · DPDK · Linux
I build network software in C++ for Linux. At T-Argos I work on a next-generation firewall (NGFW) with a DPDK data plane and a Clixon (NETCONF/RESTCONF/YANG) management plane: transceiver diagnostics, cluster session sync, DHCP relay, CPU isolation for the data plane, kernel modules and configuration migration between YANG model versions.
I also contribute upstream to the projects I use at work.
systemd (systemd-networkd, sd-dhcp-client, sd-dhcp6-client), merged:
- networkd: follow system hostname changes in DHCP clients:
the new hostname is sent to DHCPv4/DHCPv6 servers without reconfiguring the interface, the DHCPv4
lease is renewed immediately, new
SendHostnameUpdates=option (fixes #36440, #36792) - networkd: renew DHCPv6 lease on hostname change and on
networkctl renew: newsd_dhcp6_client_send_renew(), the new hostname reaches DHCPv6 servers immediately,networkctl renewnow renews the DHCPv6 lease too - networkd: request DHCPv6 information again on
networkctl renew: stateless DHCPv6 (Information-Request) clients refresh DNS/NTP servers on demand instead of waiting for the information refresh time (one day by default) - networkd: show why a link is still in the configuring state:
new
ConfiguringReasonsfield in the VarlinkDescribereply, shown bynetworkctl status(fixes #18222) - networkd: enable IPv6 link-local addressing on WireGuard interfaces: the address generation mode reset by the WireGuard driver on every link up is restored, so routing protocols like Babel work over WireGuard out of the box (fixes #44005)
- DHCP server: do not refuse a host with a static lease whose client ID changed: the host gets its static address again instead of being ignored until the old lease expires (fixes #44120)
DPDK (lib/ethdev, app/testpmd), 18 patches accepted into dpdk-next-net for DPDK 26.11:
- Public API to decode pluggable module EEPROM (SFP/QSFP):
rte_eth_module_eeprom_parse() - testpmd command
show port <id> module_eeprom decode - SFF-8636 per-lane LOS / LOL / Tx fault flags, SFF-8472 Rx LOS and Tx fault state
- Newer SFF compliance codes: Fibre Channel 1600/3200/6400 MBytes/sec, SAS 12G/24G
- Decoder fixes: out-of-bounds read of SFF-8636 thresholds, unaligned access, undefined behavior in SFF-8472 external calibration, Rx power calibration and rounding
- In review: RFC to move the decoders into a new
lib/transceiverlibrary (to be maintained by me), module EEPROM decoding indpdk-proc-info
Clixon (NETCONF/RESTCONF/YANG):
- Replace
select()withpoll()in the event loop cli_start_program(): run external programs (Python, Bash) from the CLI- In review: XPath and leafref validation fixes, NACM group lookup helpers
CLIgen: version target in Makefile, Debian packages built in CI
Eclipse iceoryx (zero-copy IPC):
ssize_t refactoring for Windows compatibility
| Project | Description |
|---|---|
| dpdk_informer | C++ library that reports DPDK port state, link, hardware properties and Rx/Tx statistics as JSON |
| Interface_informer | C++ library over netlink: interfaces, addresses, routes and ARP/NDP neighbors as JSON, network namespaces supported |
| net-map | Service that discovers hosts in local subnets with ARP, detects IP conflicts and DHCP servers, shows a web map |
| wifi-air | Terminal tool that shows Wi-Fi networks on air with the real occupied spectrum, to pick non-overlapping channels |
| vpn | VPN tunnel over TUN and UDP with XChaCha20-Poly1305 encryption, plus an Android client |
| service-monitor | Web dashboard for systemd services over D-Bus and system resources from /proc and /sys |
Languages: C++17/20, C, Python, Bash
Networking: DPDK, netlink, ethtool, TCP/IP, VLAN, LACP, OSPF, VPN, SFF-8472/8636 transceivers, MikroTik (MTCNA), Cisco, Huawei
Management plane: NETCONF, RESTCONF, YANG, Clixon, CLIgen, D-Bus
Linux: kernel modules, io_uring, POSIX, systemd
Libraries: Boost.Asio, nlohmann/json, spdlog, fmt, sdbus-c++
Tools: CMake, GoogleTest, GitLab CI, Docker, Ansible, gdb, perf, Valgrind, tcpdump, Wireshark
- Email: roma55592@yandex.ru
- Telegram: @KhromenokRoman

