Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΡΠΊΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° wolfSSL ΡΠ°Π·Π²ΠΈΠ²Π°Ρ TCP/IP ΡΡΠ΅ΠΊΠ° wolfIP, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ ΠΏΠΎΠ²ΠΈΡΠ΅Π½Π° Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡ (Safety-Critical). ΠΠ° ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π² wolfIP Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° β Π²ΡΠΈΡΠΊΠΈ Π±ΡΡΠ΅ΡΠΈ ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ Π·Π° ΡΠΎΠΊΠ΅ΡΠΈ ΠΈΠΌΠ°Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Ρ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ 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 ΡΠ΅Π΄Π° ΠΊΠΎΠ΄, 4 ΠΏΡΡΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ TCP/IP ΡΡΠ΅ΠΊΠ° lwIP).
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ STM32 Ethernet.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ TAP Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π±Π΅Π· ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½Π΅.
- Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΠΎΠ³Π»Π΅Π΄ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ Π²ΠΈΡΠΎΠΊΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ: Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ°Π½Π° ΠΈ Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ; ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ (Secure-by-default); ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅; Π΄ΡΠ»Π³ΠΎΡΡΠΎΡΠ½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°.
- ΠΠ·Π΅ΠΌΠ°Π½Π΅ ΠΏΠΎΠ΄ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π·Π° Π²ΠΈΡΠΎΠΊΠΎ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ: ΠΎΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ; ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΈ ΠΏΡΠ»ΠΎΠ²Π΅ ΠΏΠ°ΠΌΠ΅Ρ; ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ; ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅; ΠΎΠΏΡΠΎΡΡΠ΅Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°; ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ Π·Π° Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ.
- Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° IPv4, UDP, TCP, IPSEC, ARP, ICMP, DHCP ΠΊΠ»ΠΈΠ΅Π½Ρ, DNS ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ HTTP/HTTPS ΡΡΡΠ²ΡΡ. ΠΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° TCP RFC 7323 (TCP ΡΠ°ΠΉΠΌΠΏΠ΅ΡΠ°ΡΠΊΠΈ, ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½Π΅ Π½Π° RTT, PAWS, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ), MSS (ΠΠ°ΠΊΡΠΈΠΌΠ°Π»Π΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°), RTO (ΠΡΠ΅ΠΌΠ΅ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅) ΠΈ SACK (ΠΠ·Π±ΠΈΡΠ°ΡΠ΅Π»Π½ΠΎ ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅). ΠΡΠΊΠΎΠ»ΠΊΠΎ Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π·Π°Π΄ΡΡΡΡΠ²Π°Π½ΠΈΡΡΠ°.
ΠΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π½Π° wolfIP ΡΠ΅ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠΎ Π² ΡΠΎΠ»Ρ Π½Π° ΠΊΡΠ°Π΅Π½ Π²ΡΠ·Π΅Π», ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π° Π²ΡΡΠ·ΠΊΠΈ, Π½ΠΎ Π±Π΅Π· ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ.
Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡΡΡ passt ΠΎΡ ΡΠ»ΡΠΆΠΈΡΠ΅Π» Π½Π° Red Hat, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° TCP/IP ΡΡΠ΅ΠΊΠ° ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠΎΠ΅ΠΊΡΡΡ 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
