implement minimal NIF to create and read from a TUN device
This commit is contained in:
parent
72a4f2ff8f
commit
7b4d355d1a
12 changed files with 963 additions and 1 deletions
33
lib/p2p_chat/transport/tuntap.ex
Normal file
33
lib/p2p_chat/transport/tuntap.ex
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
defmodule P2pChat.Transport.TunTap do
|
||||
use GenServer
|
||||
|
||||
defstruct [:tun_fd]
|
||||
|
||||
@impl true
|
||||
def init(args) do
|
||||
{:ok, io_device} = setup_tap_device()
|
||||
{:ok, {}}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def terminate(_reason, state) do
|
||||
|
||||
end
|
||||
|
||||
def setup_tap_device(name \\ "tunP2P") do
|
||||
{:ok, io_device} = :file.open(~c"/dev/net/tun", [:read, :write, :raw])
|
||||
:ok = :file.close(io_device)
|
||||
:ok
|
||||
end
|
||||
|
||||
def teardown_tap_device(io_device) do
|
||||
end
|
||||
|
||||
#
|
||||
# Client API
|
||||
#
|
||||
|
||||
def start_link(args) do
|
||||
GenServer.start_link(__MODULE__, args)
|
||||
end
|
||||
end
|
||||
8
lib/p2p_chat/transport/tuntapport.ex
Normal file
8
lib/p2p_chat/transport/tuntapport.ex
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
defmodule P2pChat.Transport.TunTapPort do
|
||||
use Rustler, otp_app: :p2p_chat, crate: "p2pchat_transport_tuntapport"
|
||||
|
||||
def make_tun_device(), do: :erlang.nif_error(:nif_not_loaded)
|
||||
|
||||
def read(_handle, _length \\ 2**16), do: :erlang.nif_error(:nif_not_loaded)
|
||||
end
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue