http support for PXE


Main purpose of this project - to write extendable (as much as possible - C) code wrappers to provided by PXE and UNDI APIs to support downloading of files via TCP-based protocols in preboot environment. Goal - to introduce code, able to download and prepare booting of FreeBSD kernel from remote server via direct connection or http proxy.

Current tasks


Hello PXE!

First project to test loading of user image, getting all usefull information and showing it. Use BTX and libstand.

state: completed

memory allocation

Used for memory managment to provide memory allocation for downloaded files and send/receive buffers. BTX memory allocation functions are used, pxe_mem module just a wrapper for them now.

state: to remove from project (reason - unnecessary module).

ip implementation

IP packet routing/sending. Includes ICMP protocol for general testing of ip code (provides pxe_ping() function). ARP resoltion of media addresses.

state: IPv4, ICMP echo ready. Need to update routing functions.

tcp implementation

Simple tcp implementation. Includes handshaking, transmitting data and disconnecting.

state: completed, needs more testing and optimizing.

udp implementation

UDP supported on level of sockets and lower. Currently is used by DHCP/DNS/NFS.

state: completed.

minimalistic sockets

Provides flexible interface for usage in higher level applications (DNS, DHCP and http-client) Similar to berkley sockets behaviour and function naming. Client side functions socket(), connect(), send(), recv(), close() are planned to implement now. Also added pxe_bind() and pxe_sendto() for DHCP and DNS clients.

state: completed, needs refactoring to be more similar to common sockets, testing.

DHCP client

There is own module to get information via DHCP from remote server. Added functionality to use bootp() from libstand for same purposes.

state: completed.

DNS client

This client provides domain resolution, using pxe_gethostbyname() function.

state: completed, needs support for IPv6 and currently not supported resource records for it.


This is practically last stage of project. Works with keep-alive connections (not keep-alive also supported, but not used now).

state: completed, both keep-alive and not keep-alive able servers supported.

kernel booting

Provide parameters to kernel and booting it. httpfs filesystem implemented as filesystem for pxe device to load from.

state: base functionality works. Need to add directory listings and solve problem with not compressed modules.

telnet support module

Provides simplified telnet client from loader's console.

state: developing.

GSoC Timeline



CategoryProject CategoryGsoc

AlexeyTarasov/http_support_for_PXE (last edited 2022-10-06T00:09:37+0000 by KubilayKocak)