MiniUPnP Project HomePage

Home | Downloads | Compatibility list | libnatpmp | MiniSSDPd | xchat upnp patch | Search | Forum

English | Français

Last modified on December 4th 2009.

Mirrors

If you experience problems with this web site, you have alternatives :

Mirror 1 : free.fr | Mirror 2 : tuxfamily.org

Foreword

The MiniUPnP project offers software which supports the UPnP Internet Gateway Device (IGD) specifications. Recently, NAT-PMP support was added to MiniUPnPd. For client side NAT-PMP support, use libnatpmp.
The MiniUPnP daemon (MiniUPnPd) supports OpenBSD, FreeBSD, NetBSD and (Open)Solaris in combination with pf or ipf and Linux with netfilter.
The MiniUPnP client (MiniUPnPc) and MiniSSDPd are portable and should work on any POSIX system. MiniUPnPc also works under MS Windows and Amiga OS (version 3 and 4).

UPnP IGD client lightweight library and UPnP IGD daemon

The UPnP protocol is supported by most home adsl/cable routers and Microsoft Windows 2K/XP. The aim of the MiniUPnP project is to bring a free software solution to support the "Internet Gateway Device" part of the protocol. The MediaServer/MediaRenderer UPnP protocol is also becoming very popular but here we are talking about IGD.

The Linux SDK for UPnP devices (libupnp) seems too heavy for me. I want the simplest library possible, with the smallest footprint and no dependencies to other libraries such as XML parsers or HTTP implementations. All the code is pure ANSI C.
Compiled on a x86 PC, the miniupnp client library have less than 20KB code size. For instance, the upnpc sample program is around 25KB.
The miniupnp daemon is much smaller than any other IGD daemon and is ideal for using on low memory device for this reason. It also uses only ONE process and no additional thread, does not use system() or exec() call, and therefore keeps system resources usage very low.

The project is divided in two main parts :

More recently, MiniSSDPd was developped to work together with MiniUPnPc : MiniSSDPd listen to SSDP traffic on the network so MiniUPnPc does not need to perform the discovery process and can work faster to set up a redirection. Later, MiniSSDPd became able to reply M-SEARCH on behalf on MiniUPnPd or other UPnP server software.

miniupnpd was first developped on OpenBSD 3.0+ with pf. You can see some of the work I have done to integrate with pf on this page.
As pf is also available under FreeBSD, guys at the pfSense project have ported miniupnpd to this system.
The daemon is now also available for linux 2.4.x and 2.6.x using netfilter. It is possible to make it run on router devices running OpenWRT.
Thanks to Darren Reed, we are currently working on an IP Filter (ipf) implementation. Darren also added support for Solaris/OpenSolaris. The ipfw port is under development. You are can help !

For some reasons, it may be not the good solution for you to use the code from the MiniUPnP project directly.
As the code is small and simple to understand, it is a good base to take inspiration for your own UPnP implementation. The KTorrent UPnP plugin in C++ is a good example.

If you are wondering which home router is working with the miniupnp client, you can find the answer here. In fact, you are more likely to help me fill the list by sending me an email :)

Usefulness of the MiniUPnP client library

The usage of the miniUPnP client library is useful whenever an application needs to listen for incoming connections.
Examples : P2P applications, FTP clients for active mode, IRC (for DCC) or IM applications, network games, any server.

The typical usage of UPnP capabilities of a router is a file tranfert using MSN messenger. The MSN Messenger software uses the UPnP API of Windows XP to open port for incoming connection. To mimic the MS software, it is a good idea to use UPnP as well.

I have made a patch for XChat to show how the miniupnp client library can be used by an application.

Transmission a free BitTorrent client is using miniupnpc and libnatpmp.

Usefulness of the MiniUPnP daemon

UPnP and NAT-PMP are used to improve internet connectivity for devices behind a NAT router. Any peer to peer network application such as games, IM, etc. can benefit from a NAT router supporting UPnP and/or NAT-PMP. By following this link (http://www.microsoft.com/windows/using/tools/igd/default.mspx) Microsoft Users can test their internet connectivity.

The latest generation Microsoft XBOX 360 and Sony Playstation 3 game machines use UPnP commands to enable the online play with the XBOX Live service and the Playstation Network. It has been reported that miniupnpd is correctly working with the two consoles. There is more details about this on the forum.

Update history

It is now available here.

If you get any issue or would like some feature to be implemented, go in the Forum.

I'm waiting for your comments and patches ! Thank you in advance for your feedback.

Donate

The best gift you can make is to submit a patch !

Site map

Links

Thomas Bernard
Use the forum or contact me by email: miniupnp _AT_ free _DOT_ fr

counter Valid XHTML 1.0 Transitional Valid CSS! freshmeat.net banner for http://www.eurobilltracker.com