3.5 KiB
#MIP TCP / IP stack over pcap
This example allows to use Mongoose's MIP built-in TCP/IP stack on systems
that support pcap API, i.e. have libpcap library installed. The application
opens an interface and uses pcap_next_ex()
for reading packets from the
interface, and pcap_inject()
to write packets to the interface.
NOTE: depending on the libcap implementation, the injected packets may or may not be looped back to the interface's TCP/IP stack. If they are not looped back, then it is necessary to create a separate interface that is bridged to the target interface - see MacOS example below.
MacOS setup
MacOS has support for feth
(fake ethernet) interfaces. One can create a pair
of feth
interfaces and interlink them. Once a feth
interface is assigned
a peer and an IP address, anything that gets injected to it, appears on a
peer interface and vice versa.
$ sudo ifconfig feth0 create
$ sudo ifconfig feth1 create
$ sudo ifconfig feth1 peer feth 0 # Link two fake ethernet ifaces together
$ sudo ifconfig feth1 10.10 # Assign 10.0.0.10 to feth1
$ sudo ifconfig feth0 up
$ sudo ifconfig feth1 up
Now we have two Ethernet interfaces, feth0
and feth1
, interlinked and active.
On your Mac, go to "System Preferences" / Sharing, enable "Internet Sharing"
and choose "Thunderbolt bridge". This enables DHCP on the bridge0
interface.
On my system it gets 192.168.2.1
IP address, and serves 192.168.2/24
net.
which is bridge for all Thunderbolt devices, and adds necessary routes to the
WiFi interface. We should add one of our fake interfaces to this bridge:
$ sudo ifconfig bridge0 addm feth1
We cat start an example using the feth0
:
$ make -C examples/mip-pcap/ clean all ARGS="-i feth0"
...
2386718 3 mip.c:279:arp_cache_add ARP cache: added 0xc0a80201 @ 36:77:4d:be:e0:80
2386718 2 mip.c:300:onstatechange READY, IP: 192.168.2.17
The diagram of the setup is below:
┼
┌──────────► 192.168.2.1 bridge0
│ routing DHCP │
│ ┌──────────────────┴──────────────────┐
▼ │ │ 192.168.2.17
│ ┌─────────┐ fake ethernet pair ┌─────────┐
192.168.0.10 │ │ feth1 ├────────────┬───────┤ feth0 │
┌─────────┐ │ └─────────┘ │ └────┬────┘
│ en0 │ │ │ │
└────┬────┘ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ en1 │ │ en2 │ │ en3 │ │ mip-pcap
│ └────┬────┘ └────┬────┘ └────┬────┘ │
WiFi │ │ │ │ │
└──────┼───────────┼───────────┼──────┘
│ │ │ │
▼
Internets Thunderbolt Ethernet