///|
extern "c" fn raw_socket_adapter_implemented_ffi() -> Int = "lockwire_native_raw_socket_adapter_implemented"

///|
extern "c" fn raw_socket_list_interfaces_text_ffi() -> Bytes = "lockwire_native_raw_socket_list_interfaces_text"

///|
#borrow(name)
extern "c" fn raw_socket_open_ffi(
  name : Bytes,
  ethertype : Int,
  promiscuous : Int,
  timeout_ms : Int,
) -> Int = "lockwire_native_raw_socket_open"

///|
#borrow(frame)
extern "c" fn raw_socket_send_packet_ffi(fd : Int, frame : Bytes) -> Int = "lockwire_native_raw_socket_send_packet"

///|
extern "c" fn raw_socket_capture_one_ffi(fd : Int, timeout_ms : Int) -> Bytes = "lockwire_native_raw_socket_capture_one"

///|
extern "c" fn raw_socket_close_ffi(fd : Int) -> Int = "lockwire_native_raw_socket_close"

///|
fn ffi_raw_socket_adapter_implemented() -> Int {
  raw_socket_adapter_implemented_ffi()
}

///|
fn ffi_raw_socket_list_interfaces_text() -> Bytes {
  raw_socket_list_interfaces_text_ffi()
}

///|
fn ffi_raw_socket_open(
  name : Bytes,
  ethertype : Int,
  promiscuous : Int,
  timeout_ms : Int,
) -> Int {
  raw_socket_open_ffi(name, ethertype, promiscuous, timeout_ms)
}

///|
fn ffi_raw_socket_send_packet(fd : Int, frame : Bytes) -> Int {
  raw_socket_send_packet_ffi(fd, frame)
}

///|
fn ffi_raw_socket_capture_one(fd : Int, timeout_ms : Int) -> Bytes {
  raw_socket_capture_one_ffi(fd, timeout_ms)
}

///|
fn ffi_raw_socket_close(fd : Int) -> Int {
  raw_socket_close_ffi(fd)
}

///|
#borrow(name)
extern "c" fn raw_socket_local_mac_ffi(name : Bytes) -> Bytes = "lockwire_native_raw_socket_local_mac"

///|
extern "c" fn raw_socket_last_capture_micros_ffi() -> Int64 = "lockwire_native_raw_socket_last_capture_micros"

///|
extern "c" fn raw_socket_set_nonblock_ffi(fd : Int, enable : Int) -> Int = "lockwire_native_raw_socket_set_nonblock"

///|
fn ffi_raw_socket_local_mac(name : Bytes) -> Bytes {
  raw_socket_local_mac_ffi(name)
}

///|
fn ffi_raw_socket_last_capture_micros() -> Int64 {
  raw_socket_last_capture_micros_ffi()
}

///|
fn ffi_raw_socket_set_nonblock(fd : Int, enable : Int) -> Int {
  raw_socket_set_nonblock_ffi(fd, enable)
}