8d88bcdbf8
This commit is based on work by Meisaka Yukara <Meisaka.Yukara@gmail.com> contributed as the commit bbf7f1e8a5238a2bd1fe8eb1d2cc5c9c2421e2c4. See the individual file headers for which files contain remnants of this work. This change adds all the kernel parts of a network stack. The network stack is partial but implements many of the important parts. Add if(4) network interface abstraction. Network interfaces are registered in a global list that can be iterated and each assigned an unique integer identifier. Add reference counted packets with a cache that recycles recent packets. Add support for lo(4) loopback and ether(4) ethernet network interfaces. The /dev/lo0 loopback device is created automatically on boot. Add arp(4) address resolution protocol driver for translation of inet(4) network layer addresses into ether(4) link layer addresses. arp(4) entries are cached and evicted from the cache when needed or when the entry has not been used for a while. The cache is limited to 256 entries for now. Add ip(4) internet protocol version 4 support. IP fragmentation and options are not implemented yet. Add tcp(4) transmission control protocol sockets for a reliable transport layer protocol that provides a reliable byte stream connection between two hosts. The implementation is incomplete and does not yet implement out of band data, options, and high performance extensions. Add udp(4) user datagram protocol sockets for a connectionless transport layer that provides best-effort delivery of datagrams. Add ping(4) sockets for a best-effort delivery echo of datagrams. Change type of sa_family_t from unsigned short to uint16_t. Add --disable-network-drivers to the kernel(7) options and expose it with a bootloader menu. tix-iso-bootconfig can set this option by default. Import CRC32 code from libz for the Ethernet checksum. This is a compatible ABI change that adds features to socket(2) (AF_INET, IPPROTO_TCP, IPPROTO_UDP, IPPROTO_PING), the ioctls for if(4), socket options, and the lo0 loopback interface.
126 lines
3.7 KiB
Groff
126 lines
3.7 KiB
Groff
.Dd October 5, 2015
|
|
.Dt KERNEL 7
|
|
.Os
|
|
.Sh NAME
|
|
.Nm kernel
|
|
.Nd operating system kernel
|
|
.Sh SYNOPSIS
|
|
.Pa /boot/sortix.bin
|
|
.Op Fl \-disable-network-drivers
|
|
.Op Fl \-enable-network-drivers
|
|
.Op Fl \-no-random-seed
|
|
.Op Fl \-
|
|
.Op Ar init ...
|
|
.Sh DESCRIPTION
|
|
.Pa /boot/sortix.bin
|
|
is the operating system
|
|
.Nm kernel .
|
|
It initializes and manages the hardware to provide a multitasking computing
|
|
environment.
|
|
The kernel is a
|
|
.Xr multiboot 7
|
|
compatible executable loaded by the bootloader along with a companion
|
|
.Xr initrd 7
|
|
that contains a userland.
|
|
.Pp
|
|
The kernel extracts the initrd into the initial kernel memory root filesystem.
|
|
The specified
|
|
.Ar init
|
|
program is invoked with the given arguments, defaulting to the
|
|
.Xr init 8
|
|
at
|
|
.Pa /sbin/init
|
|
if
|
|
.Ar init
|
|
is not specified.
|
|
If the
|
|
.Nm init
|
|
is to receive any argument starting with a dash, first pass the
|
|
.Fl \-
|
|
delimiter to stop kernel option parsing.
|
|
The computer is powered off if the
|
|
.Nm init
|
|
process exits 0, rebooted if it exits 1,
|
|
halted with an complaint about an
|
|
.Nm init
|
|
fatality if it exits 2, and halted with a complaint about an unexpected exit code
|
|
otherwise.
|
|
.Pp
|
|
The options are as follows:
|
|
.Bl -tag -width "12345678"
|
|
.It Fl \-disable-networking-drivers
|
|
Don't initialize any networking drivers.
|
|
This option ensures the booted system is not networked.
|
|
.It Fl \-enable-networking-drivers
|
|
Do initialize network drivers.
|
|
This is the default behavior.
|
|
.It Fl \-no-random-seed
|
|
Don't warn if no random seed file was loaded by the bootloader (usually from
|
|
.Pa /boot/random.seed ) .
|
|
This option is useful for live environments where this situation is unavoidable.
|
|
.El
|
|
.Pp
|
|
The kernel accepts multiboot modules from the bootloader, which are processed
|
|
in order.
|
|
The
|
|
.Xr initrd 7
|
|
must be passed through this mechanism.
|
|
.Pp
|
|
The format of each multiboot module is automatically detected by default:
|
|
.Pp
|
|
.Bl -bullet -compact
|
|
.It
|
|
Initialization ramdisks produced by
|
|
.Xr mkinitrd 8
|
|
are extracted in the root directory.
|
|
.It
|
|
.Xr tar 7
|
|
archives in the ustar format are extracted into the root directory.
|
|
The bootloader must already have decompressed the archive.
|
|
If the archive contains the
|
|
.Pa tix/tixinfo
|
|
file, it is instead installed into the root directory as a
|
|
.Xr tix 7
|
|
binary package.
|
|
.El
|
|
.Pp
|
|
Each multiboot module has its own command line where the options are as follows:
|
|
.Bl -tag -width "12345678"
|
|
.It Fl \-append-to Ns "=" Ns Ar file
|
|
Append the contents of the module to the specifed
|
|
.Ar file ,
|
|
creating it with mode 644 if it doesn't exist.
|
|
Non-existent parent directories are created with mode 755 as needed.
|
|
.It Fl \-create-to Ns "=" Ns Ar file
|
|
Create the specified
|
|
.Ar file
|
|
with mode 644 with contents of the module, but only if it doesn't already exist.
|
|
No action is taken if the file already existed.
|
|
Non-existent parent directories are created with mode 755 as needed.
|
|
.It Fl \-random-seed
|
|
The module contains random data used to seed the kernel entropy gathering.
|
|
This file is supposed to contain 256 bytes of secret randomness that hasn't been
|
|
used before.
|
|
Recycling the random seed is dangerous and insecure.
|
|
Omitting the random seed will cause the kernel entropy to be insecurely seeded
|
|
with the current time and other readily available information.
|
|
The bootloader normally loads the random seed from
|
|
.Pa /boot/random.seed .
|
|
.It Fl \-tar
|
|
The module is a
|
|
.Xr tar 7
|
|
archive that is extracted into the root directory.
|
|
.It Fl \-tix
|
|
The module is a
|
|
.Xr tix 7
|
|
binary package that is installed into the root directory.
|
|
.It Fl \-to Ns "=" Ns Ar file
|
|
Write the contents of the module to the specifed
|
|
.Ar file ,
|
|
creating it with mode 644 if it doesn't exist, and truncating it if it does exist.
|
|
Non-existent parent directories are created with mode 755 as needed.
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr initrd 7 ,
|
|
.Xr init 8
|