# README
ProtocolStack
This repository is for learning network programming in Go and mainly aims to implement TCP/IP stack.
Requirements
- OS: Linux
- Go: 1.14.x or higher
Instructions
ProtocolStack needs a TAP device for its capability. For the reason, this project uses a virtual machine (Linux) to run the application.
1. Preparing for using the virtual machine
Software required is as follows:
Note: Mutagen synchronizes files between local system and virtual machine.
2. Controlling the virtual machine
vm.sh
controls the virtual machine. The available commands are as follows:
start
stop
restart
You can perform the commands below:
> ./vm.sh start # Start the VM and create a Mutagen session.
> ./vm.sh stop # Stop the VM and terminate the Mutagen session.
> ./vm.sh restart # Restart the VM and recreate the Mutagen session.
Note: Remote debugging with GoLand
- See the instruction for more detail.
- Related information:
3. Compile
It is able to compile the application with make
:
> make compile
4. Running application
Start as echo server
./bin/pstack server
Start as client
Send ICMP request:
./bin/pstack ping -c 192.0.2.1
Note: make
supports the commands below:
build
build projectclean
clean up cachescompile
resolve dependencies, and build the programfmt
run formattergen
generate source codelint
run linters (golangci-lint)resolve
resolve dependenciestest
run all tests
Supported Protocols
- Ethernet
- ARP
- Request
- Reply
- IP
- v4
- v6
- ICMP
- Echo Request
- Echo Reply
- TCP
- UDP
Examples
References
- Articles
- Blogs
- Books
- Docs
- Codecov
- Docker
- fedora
- GitHub Actions
- Mutagen
- Slack
- UI
- Vagrant
- Go
- Makefile
- Papers
- RFC
- Open Source Software
- Wikipedia
- Computer Network
- Memory
- Others
- Architectural pattern
- Communicating sequential processes
- Continuation
- Cooperative multitasking
- Critical section
- Ellipsis (computer programming)
- Fair-share scheduling
- Fork-join model
- Generic programming
- Monitor (synchronization)
- Pipeline stall
- Preemption (computing)
- Process substitution
- Reflective programming
- Software design pattern
- Task (computing)
- Template metaprogramming
- Thread pool
- Threading models
- Work stealing
Notes
- Computer Network
- GO
- Asynchronous Preemption
- Context
- Programming
- Question and answer site
Memos
- Use the context types properly acording to the rubric.
- Definition of errno in Go
# Packages
No description provided by the author