README.md

# Wol

Wake-on-LAN (WoL) magic packet sender with optional SecureOn support.

## Installation

Add `:wol` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:wol, "~> 0.1.0"}
  ]
end
```

## Usage

Send a magic packet to the default broadcast address on UDP port 9:

```elixir
:ok = Wol.send("00:11:22:33:44:55")
```

## Options

`Wol.send/2` accepts:

- `:port` (default `9`)
- `:broadcast_ip` (default `{255, 255, 255, 255}`)
- `:secure_on` - 4- or 6-byte binary appended to the packet
- `:ifaddr` - binds the *local* address used to send (`:gen_udp.open/2` `{:ip, ip}`)
- `:interface` - Linux-only bind to device (`SO_BINDTODEVICE`) via `{:bind_to_device, ~c"eth0"}`

Example:

```elixir
:ok =
  Wol.send("00-11-22-33-44-55",
    port: 7,
    broadcast_ip: {192, 168, 1, 255},
    secure_on: <<1, 2, 3, 4>>,
    ifaddr: {192, 168, 1, 10},
    interface: "eth0"
  )
```

## Errors

`Wol.send/2` returns `{:error, reason}` for invalid inputs or UDP failures.
Common reasons:

- `:invalid_mac`
- `:invalid_port`
- `:invalid_broadcast_ip`
- `:invalid_secure_on`
- `:invalid_ifaddr`
- `:invalid_interface`

UDP errors (from `:gen_udp`) may also be returned.

Docs can be found at <https://hexdocs.pm/wol>.