New stack: Difference between revisions
mNo edit summary |
|||
(81 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
; | ;This page describes the development of the new network stack for KolibriOS | ||
; | ; Since SVN #3556, the code has been merged in trunk and is now available in the english, russian spanish and italian builds of kolibrios! | ||
;You can find the latest source code on svn://kolibrios.org/kernel/trunk ([http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fkernel%2Ftrunk%2F websvn]) | |||
;You can download an image file with pre-compiled library, applications, kernel and drivers on the [http://builds.kolibrios.org/ builds page]''<br /> | |||
;All bugs may be reported to [http://bugs.kolibrios.org KolibriOS bug tracker] | |||
== | == Progress == | ||
System functions 52, 53 have been replaced by functions 74 (Network hardware access), 75 (BSD sockets) and 76 (Network settings and statistics). ''See sysfuncs.txt for details. <br /> | |||
Internally, the stack has been completely rewritten (mostly from scratch)<br /> | Internally, the network stack has been completely rewritten (mostly from scratch).<br /> | ||
All network drivers have been converted and or rewritten to operate with the new network stack.<br /> | |||
*; | *;Working: | ||
**Attaching multiple network drivers/devices to the kernel | **Attaching multiple network drivers/devices to the kernel | ||
**Sending and receiving Ethernet/IPv4/UDP/ICMP/ARP/TCP packets | **Sending and receiving Ethernet/IPv4/UDP/ICMP/ARP/TCP packets | ||
**Queuing of packets when | **Queuing of packets when necessary | ||
**UDP/TCP/RAW(ICMP/..) sockets (POSIX compatible) | **UDP/TCP/RAW(ICMP/IP..) sockets (POSIX compatible) | ||
**Blocking sockets | |||
**IPC/local sockets '' (needs testing) | |||
**Dedicated network buffers '' (NET_buff_alloc, NET_buff_free) | |||
**IP address assignment for all network interfaces | |||
*; | *;TODO: | ||
**Link detection for all network drivers (Currently works on RTL8139, RTL8169, forcedeth, mtd80x, i8254x) | |||
**Improved routing | |||
**network drivers | **TCP: reassembly queue, testing (timestamps, RTT, PAWS, ...), ... | ||
** | **PPP '' (need help developing/testing) | ||
* | |||
* | |||
** | |||
== Drivers == | == Drivers == | ||
Line 34: | Line 33: | ||
The specifications of the new network drivers can be found in the article [[Writing_network_drivers_for_KolibriOS]].<br /> | The specifications of the new network drivers can be found in the article [[Writing_network_drivers_for_KolibriOS]].<br /> | ||
'''[[Hardware_Support#Network | Currently supported network hardware]]''' | |||
'''Unsupported PCI card?''' If you have a PCI/PCI-X/PCI-express ethernet card which is not listed above, and would like to acces the internet in KolibriOS, you may send me the card, and I'll send you one back that is already supported.<br> | |||
=== | == Programs == | ||
=== | === FTPc === | ||
[[Image:ftpc.gif]]<br> | |||
CLI FTP client. <br /> | |||
''Uses console.obj''<br /> | |||
<br /> | |||
Also see: [[Using kolibrios.org with ftpc]] | |||
== | === FTPd === | ||
Full fledged FTP daemon. Fully configureable through ini files. <br /> | |||
Status: Basic commands work. <br /> | |||
''uses libini.obj, libio.obj and console.obj, TODO: STOR command, dont use libio, ...'' | |||
=== | === IRCc === | ||
[[Image:Ircc.gif]]<br> | |||
New IRC client. Under construction. <br /> | |||
''uses network.obj, libini.obj and box_lib.obj'' | |||
''uses network.obj, libini.obj and | |||
=== NetCFG === | === NetCFG === | ||
[[Image:netcfg.gif]]<br> | |||
This program is used to load the network drivers.<br /> | |||
You can run it with | You can run it with parameter 'F' to silently load first detected card, or parameter 'A' to load all cards. <br /> | ||
No parameters will load the GUI. | |||
=== Netstat === | === Netstat === | ||
This program allows you to read | [[Image:ipv4.png]]<br> | ||
This program allows you to read the status of ethernet, ipv4, icmp, arp udp and tcp.<br /> | |||
''TODO: allow user to set ARP settings, and save those to .ini file.'' | |||
=== nslookup === | === nslookup === | ||
Commandline DNS client | Commandline DNS client.<br /> | ||
''This program uses network.obj and console.obj'' | ''This program uses network.obj and console.obj'' | ||
=== ping === | |||
[[Image:ping.gif]]<br /> | |||
A program to ping a remote host using the ICMP protocol<br /> | |||
Only fixed packet size for now.<br /> | |||
''uses network.obj, libini.obj and console.obj'' | |||
=== SSH === | |||
[[Image:Ssh.png]]<br /> | |||
SSH client | |||
''uses network.obj, libcrash.obj and console.obj'' | |||
=== SynergyC === | === SynergyC === | ||
Software KM-switch, (Synergy - client) for windows/unix/.. versions, see http:// | Software KM-switch, (Synergy - client) for windows/unix/.. versions, see http://synergy-foss.org <br /> | ||
This version is compatible with version 1.3.1<br /> | This version is compatible with version 1.3.1<br /> | ||
Only mouse events are accepted in | Only mouse events are accepted in the current version.<br /> | ||
''There is a bug in the loading of | ''There is a bug in the loading of libraries which might cause program to crash on loading''<br /> | ||
''uses network.obj, libini.obj and console.obj'' | ''uses network.obj, libini.obj and console.obj'' | ||
=== Telnet === | === Telnet === | ||
A | [[Image:telnet.gif]]<br> | ||
A simple telnet client<br /> | |||
''This program uses network.obj and console.obj'' | ''This program uses network.obj and console.obj'' | ||
=== TFTPc === | === TFTPc === | ||
[[Image:tftpc.gif]]<br> | |||
A TFTP client with a GUI. <br /> | A TFTP client with a GUI. <br /> | ||
'' uses libio.obj, network.obj and box_lib.obj'' | '' uses libio.obj, network.obj and box_lib.obj'' | ||
=== VNCclient === | === VNCclient === | ||
This program allows you to control a remote computer. The remote computer must be running a VNC server that support the RFB 3.3 protocol.<br> | |||
The client currently supports RAW, CopyRect, RRE and TRLE encodings.<br> | |||
Authentication to a password protected VNC server is possible through the "VNC Authentication" algorithm.<br> | |||
There is currently no support for encryption.<br> | |||
''TODO: ZRLE, ..'' | |||
=== Zeroconf === | === Zeroconf === | ||
This program | This program reads settings from network.ini and configures the tcp/ip stack accordingly <br /> | ||
You may choose for a manual setup, or dhcp / link-local.<br /> | |||
''TODO: keep listening for DHCP release packets etc.'' | |||
=== NetSurf === | === NetSurf === | ||
Under construction <br /> | |||
''TODO: Improve front-end, ...'' | |||
=== SocketDBG === | |||
Program that can be used for printing socket variables, usefull for debugging. | |||
=== PPPoE === | |||
PPPoE dialer - unfinished | |||
=== TCPserv === | |||
TCP server demo program, this program can be used with iperf client to measure performance of the stack. | |||
== Libraries == | == Libraries == | ||
=== | === network.obj === | ||
Network library for KolibriOS, written by Clevermouse. Primary functions are getaddrinfo, inet_ntoa. | |||
=== http.obj === | |||
HTTP client library, can be used to fetch content from the web. <br> | |||
Currently support HTTP/1.1 GET, POST and HEAD methods. HTTP proxy's are also supported (settings in network.ini). | |||
== Applications, old vs new == | |||
== | {| class="wikitable" border="1" | ||
|'''old''' | |||
|'''new''' | |||
|'''remarks''' | |||
|- | |||
|airc | |||
|ircc | |||
|IRC client (rewritten from scratch) | |||
|- | |||
|arpstat | |||
|netstat | |||
|ARP configuration utility (rewritten) | |||
|- | |||
|chess | |||
|/ | |||
|may be ported | |||
|- | |||
|dhcp | |||
|/ | |||
|replaced by zeroconf | |||
|- | |||
|dnsr | |||
|nslookup | |||
|Name service lookup (DNS resolver) | |||
|- | |||
|downloader | |||
|downloader | |||
|rewritten | |||
|- | |||
|ethstat | |||
|/ | |||
|N/A | |||
|- | |||
|ftps | |||
|ftpd | |||
|FTP daemon (server) | |||
|- | |||
|https | |||
|/ | |||
|may be ported, better to rewrite | |||
|- | |||
|icq | |||
|/ | |||
|may be ported | |||
|- | |||
|ipc | |||
|/ | |||
|may be ported | |||
|- | |||
|local | |||
|/ | |||
|may be ported | |||
|- | |||
|mp3s | |||
|/ | |||
|may be ported | |||
|- | |||
|netsendc | |||
|/ | |||
|may be ported | |||
|- | |||
|netsends | |||
|/ | |||
|may be ported | |||
|- | |||
|nntpc | |||
|/ | |||
|may be ported | |||
|- | |||
|popc | |||
|/ | |||
|may be ported (or replaced with liza?) | |||
|- | |||
|ppp | |||
|/ | |||
|N/A (a new utility should be made) | |||
|- | |||
|rccc | |||
|/ | |||
|may be ported | |||
|- | |||
|rccs | |||
|/ | |||
|may be ported | |||
|- | |||
|remote | |||
|/ | |||
|may be ported | |||
|- | |||
|smtps | |||
|/ | |||
|may be ported | |||
|- | |||
|stackcfg | |||
|netstat | |||
|Network configuration utility (rewritten from scratch) | |||
|- | |||
|telnet | |||
|telnet | |||
|rewritten from scratch | |||
|- | |||
|terminal | |||
|/ | |||
|N/A | |||
|- | |||
|tftpa | |||
|/ | |||
|may be ported | |||
|- | |||
|tftpc | |||
|tftpc | |||
|Trivial File Transer Protocol Client | |||
|- | |||
|VNCclient | |||
|vncc | |||
|ported | |||
|- | |||
|ym | |||
|/ | |||
|may be ported | |||
|- | |||
|zeroconf | |||
|zeroconf | |||
|ported | |||
|} | |||
== We need your help! == | |||
;If you think you can help with further development of networking applications, driver or kernel code in any way, please let us know through the forum or IRC channel. | |||
[[Category:Coding]] | [[Category:Coding]] | ||
[[Category:System_documentation]] | [[Category:System_documentation]] |
Latest revision as of 12:42, 10 July 2021
- This page describes the development of the new network stack for KolibriOS
- Since SVN #3556, the code has been merged in trunk and is now available in the english, russian spanish and italian builds of kolibrios!
- You can find the latest source code on svn://kolibrios.org/kernel/trunk (websvn)
- You can download an image file with pre-compiled library, applications, kernel and drivers on the builds page
- All bugs may be reported to KolibriOS bug tracker
Progress
System functions 52, 53 have been replaced by functions 74 (Network hardware access), 75 (BSD sockets) and 76 (Network settings and statistics). See sysfuncs.txt for details.
Internally, the network stack has been completely rewritten (mostly from scratch).
All network drivers have been converted and or rewritten to operate with the new network stack.
- Working
- Attaching multiple network drivers/devices to the kernel
- Sending and receiving Ethernet/IPv4/UDP/ICMP/ARP/TCP packets
- Queuing of packets when necessary
- UDP/TCP/RAW(ICMP/IP..) sockets (POSIX compatible)
- Blocking sockets
- IPC/local sockets (needs testing)
- Dedicated network buffers (NET_buff_alloc, NET_buff_free)
- IP address assignment for all network interfaces
- TODO
- Link detection for all network drivers (Currently works on RTL8139, RTL8169, forcedeth, mtd80x, i8254x)
- Improved routing
- TCP: reassembly queue, testing (timestamps, RTT, PAWS, ...), ...
- PPP (need help developing/testing)
Drivers
In net-branch, the network drivers are external drivers, as described in Writing_drivers_for_KolibriOS.
The specifications of the new network drivers can be found in the article Writing_network_drivers_for_KolibriOS.
Currently supported network hardware
Unsupported PCI card? If you have a PCI/PCI-X/PCI-express ethernet card which is not listed above, and would like to acces the internet in KolibriOS, you may send me the card, and I'll send you one back that is already supported.
Programs
FTPc
CLI FTP client.
Uses console.obj
Also see: Using kolibrios.org with ftpc
FTPd
Full fledged FTP daemon. Fully configureable through ini files.
Status: Basic commands work.
uses libini.obj, libio.obj and console.obj, TODO: STOR command, dont use libio, ...
IRCc
New IRC client. Under construction.
uses network.obj, libini.obj and box_lib.obj
NetCFG
This program is used to load the network drivers.
You can run it with parameter 'F' to silently load first detected card, or parameter 'A' to load all cards.
No parameters will load the GUI.
Netstat
This program allows you to read the status of ethernet, ipv4, icmp, arp udp and tcp.
TODO: allow user to set ARP settings, and save those to .ini file.
nslookup
Commandline DNS client.
This program uses network.obj and console.obj
ping
A program to ping a remote host using the ICMP protocol
Only fixed packet size for now.
uses network.obj, libini.obj and console.obj
SSH
SSH client
uses network.obj, libcrash.obj and console.obj
SynergyC
Software KM-switch, (Synergy - client) for windows/unix/.. versions, see http://synergy-foss.org
This version is compatible with version 1.3.1
Only mouse events are accepted in the current version.
There is a bug in the loading of libraries which might cause program to crash on loading
uses network.obj, libini.obj and console.obj
Telnet
A simple telnet client
This program uses network.obj and console.obj
TFTPc
A TFTP client with a GUI.
uses libio.obj, network.obj and box_lib.obj
VNCclient
This program allows you to control a remote computer. The remote computer must be running a VNC server that support the RFB 3.3 protocol.
The client currently supports RAW, CopyRect, RRE and TRLE encodings.
Authentication to a password protected VNC server is possible through the "VNC Authentication" algorithm.
There is currently no support for encryption.
TODO: ZRLE, ..
Zeroconf
This program reads settings from network.ini and configures the tcp/ip stack accordingly
You may choose for a manual setup, or dhcp / link-local.
TODO: keep listening for DHCP release packets etc.
NetSurf
Under construction
TODO: Improve front-end, ...
SocketDBG
Program that can be used for printing socket variables, usefull for debugging.
PPPoE
PPPoE dialer - unfinished
TCPserv
TCP server demo program, this program can be used with iperf client to measure performance of the stack.
Libraries
network.obj
Network library for KolibriOS, written by Clevermouse. Primary functions are getaddrinfo, inet_ntoa.
http.obj
HTTP client library, can be used to fetch content from the web.
Currently support HTTP/1.1 GET, POST and HEAD methods. HTTP proxy's are also supported (settings in network.ini).
Applications, old vs new
old | new | remarks |
airc | ircc | IRC client (rewritten from scratch) |
arpstat | netstat | ARP configuration utility (rewritten) |
chess | / | may be ported |
dhcp | / | replaced by zeroconf |
dnsr | nslookup | Name service lookup (DNS resolver) |
downloader | downloader | rewritten |
ethstat | / | N/A |
ftps | ftpd | FTP daemon (server) |
https | / | may be ported, better to rewrite |
icq | / | may be ported |
ipc | / | may be ported |
local | / | may be ported |
mp3s | / | may be ported |
netsendc | / | may be ported |
netsends | / | may be ported |
nntpc | / | may be ported |
popc | / | may be ported (or replaced with liza?) |
ppp | / | N/A (a new utility should be made) |
rccc | / | may be ported |
rccs | / | may be ported |
remote | / | may be ported |
smtps | / | may be ported |
stackcfg | netstat | Network configuration utility (rewritten from scratch) |
telnet | telnet | rewritten from scratch |
terminal | / | N/A |
tftpa | / | may be ported |
tftpc | tftpc | Trivial File Transer Protocol Client |
VNCclient | vncc | ported |
ym | / | may be ported |
zeroconf | zeroconf | ported |
We need your help!
- If you think you can help with further development of networking applications, driver or kernel code in any way, please let us know through the forum or IRC channel.