A screencast of *unmodified* UMIP (Linux Mobile IPv6 daemon) running from IPv4-only networks (ethernet, WiFi and 3G) using m6t protocol. More details are available on http://natisbad.org/m6t/
Both MIPv6 signaling and data traffic between the laptop and its Home Agent are protected using IPsec and IKE (racoon). Dynamic updates of IPsec and IKE states upon movement are performed via MIGRATE
For the demonstration, the laptop has IPv4 connectivity via ethernet (eth0), wifi (wlan0) and 3G (wwan0) simultaneously. 3 instances of m6t client are running, one for each interface (m6t_eth0, m6t_wlan0, m6t_wwan0). UMIP is configured to use only m6t interfaces, i.e. will never use IPv6 connectivity even if its available on one of the physical interfaces.
Then, in the demo, we start the download of a large file over IPv6. This is used to monitor current bandwidth. We also start a continuous ping6 to a host located behind our HA. The ping6 is used to monitor latency of current connection to our HA. 3 tcpdump are also started on the 3 physical interfaces (eth0, wlan0 and wwan0) with an "ip6" filter to show that no IPv6 traffic is directly exchanged via physical interfaces: at every moment, MIPv6 traffic leaves the host only via one of the m6t interfaces.
Then, we start shutting down and restarting interfaces to see what happens ... The bmon instance running in the main window gives a somewhat visual feedback of the result.