When I was studying networking we used a network simulation tool called cnet[0], which has the nice property that it can do network simulation at different protocol layers as well as having different topologies. It can also simulate things like wide-area networks, noisy connections and so on.
Most of the assignments built around cnet were of the form of "Here is a network protocol that is half-completed. Write the transport layer", or "here is a fully completed network protocol that works with this topology. Now we introduce wireless nodes, modify the protocol to support wireless mobility".
At the TU Ilmenau we used OMNeT++ (http://www.omnetpp.org/) which had the benefit of having built-in classes for statistics collection and looking at graphs while the simulation ran - mininet doesn't seem to offer such functionality (yet?). But then it sometimes felt like omnet had too many layers of indirection and C++ was not everybodys language of choice.
Our assignments were similar, I remember doing stuff with link state and distance vector routing, implementing parts of a tcp state machine and others.
Most of the assignments built around cnet were of the form of "Here is a network protocol that is half-completed. Write the transport layer", or "here is a fully completed network protocol that works with this topology. Now we introduce wireless nodes, modify the protocol to support wireless mobility".
[0] http://www.csse.uwa.edu.au/cnet/