I spent some time searching the web for the specifics of the UPnP protocol, i.e. what kind of packet I have to send to open a port, but couldn't find anything.
There's already a graphical M$Windoze program available for doing this, so I'm gonna boot into WinXP, open up Wireshark, and then run the UPnP program. I'll keep Wireshark running as I open ports, close ports, query which ports are currently forwarded. I'm gonna save the frames I capture and copy them across to Linux, then boot back into Linux and work on writing the frames in C code