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, systemd-userdbd), 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)
- DHCP server: static leases by client identifier:
new
ClientIdentifier=,IAID=,DUIDType=andDUIDRawData=options in[DHCPServerStaticLease], so hosts that share a hardware address (e.g. ipvlan in L2 mode) get their own static addresses - userdbd: stop respawning workers when the worker binary is broken:
new
execvp_safe()that does not run a truncated binary as an empty shell script via/bin/sh;systemd-userdbd,systemd-mountfsdandsystemd-nsresourcedexit with an error instead of respawning workers in a loop (fixes #44280) - tree-wide: use
execvp_safe()instead ofexecvp(),execvpe()andexeclp(): all remaining callers converted, so a truncated binary is never run as an empty shell script via/bin/sh; scripts without a shebang (e.g. via$SYSTEMD_EDITOR,$PAGERorsystemd-run) are no longer executed
DPDK (lib/ethdev, app/testpmd), 18 patches merged into DPDK main for the 26.11 release (since v26.11-rc1):
- 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 (the out-of-bounds read and SFF-8472 calibration fixes are backported to the 24.11 LTS branch, 24.11.9)
- 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 CLIclixon_cli -e: exit on the first failed command: scripts run from stdin or a file (-F) stop at the first command that fails to parse or whose validate/commit fails, and exit with an error instead of applying a partial configuration- XPath
modwith a zero divisor no longer crashes (SIGFPE);xml_diff()handles an empty first tree - In review: leafref validation fixes, NACM group lookup helpers
CLIgen: version target in Makefile, Debian packages built in CI
sdbus-c++ (C++ D-Bus library):
sdbus::Trackfor tracking D-Bus peers: a wrapper oversd_bus_track, a service gets notified once its clients disconnect from the bus and releases resources held on their behalf (locks, sessions, subscriptions) (fixes #57)- Valid C++ identifiers for argument names in the
xml2cppcode generator, with compile tests for the generated bindings (fixes #550) - Convenience API for watching property changes:
IProxy::uponPropertyChange()subscribes toPropertiesChangedfor a single property and delivers its typed value, orstd::optional<T>for invalidated properties (fixes #500) - Typed property value in the
getPropertyAsync()callback: the reply handler may take the property value asTinstead ofsdbus::Variant, type mismatches are reported through thestd::optional<Error>parameter (fixes #552)
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

