This project is implement TCP/IP Network Stack on xv6.
The network stack uses https://github.com/pandax381/microps
microps is a user-mode TCP/IP stack that I'm developing. This project ported it to the xv6 kernel.
- Network device
- PCI
- Bus scan
- Find device driver
- Intel 8254x (e1000) driver
- Initialization
- Basic operation of RX/TX with DMA
- Interrupt trap
- Detect interrupt souce (if multiple NICs)
- Device abstraction
- Define structure for physical device abstraction (struct netdev)
- Support multiple link protocols and physical devices
- PCI
- Protocols
- Ethernet
- ARP
- IP
- ICMP
- UDP
- TCP
- Network Interface
- Interface abstraction
- Define structure for logical interface abstraction (struct netif)
- Support multiple address family and logical interfaces
- Configuration
- ifconfig
- Interface abstraction
- Socket API
- Systemcalls
- socket
- bind
- connect
- listen
- accept
- recv
- send
- recvfrom
- sendto
- Socket descriptor (compatible with File descriptor)
- Socket address (struct sockaddr)
- Systemcalls
- ARP resolution waiting queue (Currently discards data)
- TCP timer (Currently retransmission timer is not working)
- DHCP client
- DNS stub resolver
Build & Run
$ sudo make docker-build
$ sudo make docker-run
...(xv6-net starts on qemu in the container)...
$ ifconfig net1 172.16.100.2 netmask 255.255.255.0
$ ifconfig net1 up
$ tcpechoserver
Starting TCP Echo Server
socket: success, soc=3
bind: success, self=0.0.0.0:7
waiting for connection...
...(client connection information and received data are output)...
(switch to qemu monitor with Ctrl-a + c and exit by typing `quit`)
Ping Test (at another terminal)
$ sudo docker exec -it xv6-net ping 172.16.100.2
TCP Test (at another terminal)
$ sudo docker exec -it xv6-net nc 172.16.100.2 7
xv6: Under the MIT License. See LICENSE file.
Additional code: Under the MIT License. See header of each source code.