Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΡΠΊΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° wolfSSL ΡΠ°Π·Π²ΠΈΠ²Π°Ρ TCP/IP ΡΡΠ΅ΠΊΠ° wolfIP, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ ΠΏΠΎΠ²ΠΈΡΠ΅Π½Π° Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡ (Safety-Critical). ΠΠ° ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π² wolfIP Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° β Π²ΡΠΈΡΠΊΠΈΡΠ΅ Π±ΡΡΠ΅ΡΠΈ ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ Π·Π° ΡΠΎΠΊΠ΅ΡΠΈ ΠΈΠΌΠ°Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Ρ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π΅Π·ΠΈΠΊΠ° Π‘ΠΈ ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠΈΡ GPLv3.
ΠΡΠΎΠ΅ΠΊΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΡΠ°Π±ΠΎΡΠ΅Ρ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ TCP/IP ΡΡΠ΅ΠΊ, Π·Π°ΠΌΠ΅Π½ΡΡ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ Π½Π° Linux, FreeBSD ΠΈ macOS, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π²ΡΠ² Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° FreeRTOS, SafeRTOS, Zephyr, Azure RTOS ThreadX, NuttX, RTEMS, VxWorks ΠΈ QNX. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π½Π° Π±Π°Π·Π° wolfIP ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π°Ρ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠ°ΡΡΠΈΡΠ°ΡΠΈ Π²ΡΡΡ Ρ ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½Π΅ (bare-metal). Π ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° wolfSSL ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° TLS 1.3, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΡΡΠΈ HTTPS.
ΠΡΠ½ΠΎΠ²Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° wolfIP:
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°Π΄Π΅Π»Π΅Π½ΠΈ Π² ΡΡΠ°ΡΠΈΡΠ½Π° ΠΏΠ°ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ Π½Π° malloc ΠΈ free Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΠ΅ΠΊΠ° Π½Π° POSIX ΡΠΈΡΡΠ΅ΠΌΠΈ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° BSD ΡΠΎΠΊΠ΅ΡΠΈ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Ρ ΠΈ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ ΡΠ΅ΠΆΠΈΠΌ.
- ΠΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ (4200 ΡΠ΅Π΄Π° ΠΊΠΎΠ΄, ΡΠ΅ΡΠΈΡΠΈ ΠΏΡΡΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ TCP/IP ΡΡΠ΅ΠΊΠ° lwIP).
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ STM32 Ethernet.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ TAP Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π±Π΅Π· ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½Π΅.
- Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΠΎΠ³Π»Π΅Π΄ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ ΠΏΠΎΠ²ΠΈΡΠ΅Π½ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ: Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ°Π½Π° ΠΈ Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ; ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ (Secure-by-default); ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²Π΅ΡΡΠΈΠΈ; Π΄ΡΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅.
- ΠΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π·Π° Π²ΠΈΡΠΎΠΊΠΎ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ: Π»ΠΈΠΏΡΠ° Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ; ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΈ ΠΏΡΠ»ΠΎΠ²Π΅ ΠΏΠ°ΠΌΠ΅Ρ; ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ; ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅; ΠΎΠΏΡΠΎΡΡΠ΅Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°; ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ Π·Π° Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ.
- Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ IPv4, UDP, TCP, IPSEC, ARP, ICMP, DHCP-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, DNS-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ HTTP/HTTPS-ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° TCP RFC 7323 (TCP Timestamps, RTT ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½Π΅, PAWS, Window Scaling), MSS (Maximum Segment Size), RTO (Retransmission timeout) ΠΈ SACK (Selective Acknowledgment). ΠΡΠΊΠΎΠ»ΠΊΠΎ Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΠΏΡΠ΅Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ (congestion control).
ΠΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π½Π° wolfIP ΡΠ΅ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° wolfIP Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠΎ ΠΊΠ°ΡΠΎ ΠΊΡΠ°ΠΉΠ½Π° ΡΠΎΡΠΊΠ°, ΡΠΏΠΎΡΠΎΠ±Π½Π° Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π° Π²ΡΡΠ·ΠΊΠΈ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΡΡΡΠΈΡ TCP/IP ΡΡΠ΅ΠΊ passt, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΎΡ ΡΠ»ΡΠΆΠΈΡΠ΅Π» Π½Π° Red Hat, ΡΠ°Π±ΠΎΡΠ΅Ρ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈ Π±Π΅Π· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠΎΠ΅ΠΊΡΡΡ passt ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π΅Π½ ΠΊΠ°Π½Π°Π» ΠΌΠ΅ΠΆΠ΄Ρ Ρ ΠΎΡΡ ΡΡΠ΅Π΄Π°ΡΠ° ΠΈ Π³ΠΎΡΡΡΠ²Π°ΡΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ Π² QEMU ΠΊΠ°ΡΠΎ ΠΏΠΎ-ΡΠΈΠ³ΡΡΠ½Π° Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π» Π½Π° libslirp. ΠΠΎΠ΄ΡΡ Π½Π° passt Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C, Π²ΠΊΠ»ΡΡΠ²Π° ΠΎΠΊΠΎΠ»ΠΎ 5000 ΡΠ΅Π΄Π° ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π· GPLv2+.
Π‘ΡΠ΅Π΄ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° passt ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈΠΌ: ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° IPv6 ΠΎΡΠ²Π΅Π½ IPv4, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ AVX2, Π·Π°ΡΠΈΡΠ° ΠΎΡ synflood, Π²Π³ΡΠ°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° QEMU, libvirt ΠΈ Podman, ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ, ARP proxy ΡΡΠ»ΡΠ³Π°, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΠΈ DHCPD, DHCPv6 ΠΈ NDP ΡΡΡΠ²ΡΡΠΈ, seccomp ΠΏΡΠΎΡΠΈΠ» Π·Π° Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° NAT, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ·ΡΠ°ΡΠ΅Π½ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π» Π½Π° slirp4netns.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
