The ROAM user-level proxy translates between existing Internet packets
and packets, and inserts/refreshes triggers on behalf of the
applications. Applications do not need to be modified, and are
unaware of the ROAM proxy. The ROAM proxy uses a virtual link-level
interface (similar to [29]), called TUN7, to transparently capture packets at user-level, and to hide
host mobility from applications. The TUN interface receives
packets from user-level applications instead of from a physical media,
and sends them to user-level applications instead of sending packets
via physical media.
Users can specify a set of criteria, using the iptables tool, that determines whether a packet is redirected to the TUN virtual interface or passed directly to the IP routing table. For example, if the user specifies the filter ``-p udp -dport domain -j ACCEPT'', then iptables will pass all DNS query and reply packets directly to the routing table.
![]() |
Figure 9 illustrates the organization of our software
when sending out a packet from the end host. The ROAM proxy reads
and translates packets from tun0. To ensure that the translated packet
does not get routed to tun0 again, the proxy adds a rule to iptables
such that all packets from itself are passed directly to the routing
table. Incoming packets from the correspondent host's proxy
will arrive at the physical interface and be addressed to the ROAM
proxy. The proxy will strip off the and proxy headers and send it
to TUN, from which the applications will receive the packet (thus
taking the reverse of the dashed path shown in
Figure 9).