Skip to content

IanSeyler/minIP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

minIP

A minimalist IP stack written in ANSI C.

This needs to be run on a Linux machine with root access - ideally on a network interface that does not have an IP address already associated with it.

This also runs on top of the BareMetal exokernel.

Goals

Provide enough of a stack to serve a simple static webpage.

Building

Linux:

make

BareMetal:

This version uses hardcoded IP addresses. Make sure to update them if needed in main().

./build.sh

Usage

Linux:

./minIP eth1 192.168.0.99 255.255.255.0 192.168.0.1

BareMetal:

minIP.app

Why

If this can be done in Python (see teeceepee and its blog post), then it can be done in C!

Also, its a great proof of concept to learn the fundamentals in preparation for an x86-64 assembly re-write I plan on doing in the future.

What works

Protocol Functional
ARP yes
IP partially
ICMP yes
TCP partially
UDP no
TCPv6 no
UDPv6 no

Todo

  • Resending dropped packets
  • Large packet support
  • Handling more than one incoming connection at once