An OCaml library for constructing Wake-on-LAN magic packets
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

update

+28 -14
+1 -1
.ocamlformat
··· 1 - version=0.26.0 1 + version=0.26.2
+21 -7
bin/owol.ml
··· 1 - let send_wol mac port broadcast = 2 - let mac = Macaddr.of_string_exn mac in 3 - Eio_posix.run @@ fun env -> Wol_eio.send ~net:env#net ~port ~broadcast mac 1 + let send_wol mac port address broadcast = 2 + Eio_posix.run @@ fun env -> 3 + Wol_eio.send ~net:env#net ~port ~address ~broadcast mac 4 4 5 5 let () = 6 6 let open Cmdliner in 7 7 let mac_address = 8 8 let doc = "The MAC address to send the magic packet to." in 9 - Arg.(required & pos 0 (some string) None & info [] ~docv:"MAC_ADDRESS" ~doc) 9 + Arg.( 10 + required 11 + & pos 0 (some (Cmdliner.Arg.conv (Macaddr.of_string, Macaddr.pp))) None 12 + & info [] ~docv:"MAC_ADDRESS" ~doc) 10 13 in 11 14 let port = 12 15 let doc = "Port to send the packet too (default 9)." in 13 16 Arg.(value & opt int 9 & info [ "p"; "port" ] ~docv:"PORT" ~doc) 14 17 in 15 - let broadcast = 18 + let address = 16 19 let doc = 17 20 "Address to send the packet too (default broadcast to 255.255.255.255)." 18 21 in 19 22 Arg.( 20 23 value 21 - & opt string "255.255.255.255" 24 + & opt 25 + (Cmdliner.Arg.conv (Ipaddr.V4.of_string, Ipaddr.V4.pp)) 26 + (Ipaddr.V4.of_string_exn "255.255.255.255") 22 27 & info [ "a"; "address" ] ~docv:"ADDRESS" ~doc) 23 28 in 29 + let broadcast = 30 + let doc = 31 + "Whether to set the SO_BROADCAST socket option to enable broadcasting \ 32 + (default true)." 33 + in 34 + Arg.(value & opt bool true & info [ "a"; "address" ] ~docv:"ADDRESS" ~doc) 35 + in 24 36 let cmd = 25 - let term = Term.(const send_wol $ mac_address $ port $ broadcast) in 37 + let term = 38 + Term.(const send_wol $ mac_address $ port $ address $ broadcast) 39 + in 26 40 let doc = "Send a Wake-on-LAN magic packet with a specified MAC address." in 27 41 let info = Cmd.info "wol" ~doc in 28 42 Cmd.v info term
+6 -6
src/eio/wol_eio.ml
··· 1 - let send ~net ?(port = 9) ?(broadcast = "255.255.255.255") mac_str = 1 + let send ~net ?(port = 9) ?(address = Ipaddr.V4.of_string_exn "255.255.255.255") 2 + ?(broadcast = true) mac_str = 2 3 Eio.Switch.run @@ fun sw -> 3 - let addr = 4 - Ipaddr.V4.of_string_exn broadcast 5 - |> Ipaddr.V4.to_octets |> Eio.Net.Ipaddr.of_raw 6 - in 4 + let addr = address |> Ipaddr.V4.to_octets |> Eio.Net.Ipaddr.of_raw in 7 5 let sock = 8 6 let proto = 9 7 Eio.Net.Ipaddr.fold ~v4:(fun _v4 -> `UdpV4) ~v6:(fun _v6 -> `UdpV6) addr ··· 11 9 Eio.Net.datagram_socket ~sw net proto 12 10 in 13 11 let fd = Option.get (Eio_unix.Resource.fd_opt sock) in 14 - Eio_unix.Fd.use_exn "broadcast" fd (fun fd -> Unix.setsockopt fd Unix.SO_BROADCAST true); 12 + if broadcast then 13 + Eio_unix.Fd.use_exn "broadcast" fd (fun fd -> 14 + Unix.setsockopt fd Unix.SO_BROADCAST true); 15 15 let packet = Wol.magic_packet mac_str in 16 16 Eio.Net.send sock ~dst:(`Udp (addr, port)) [ packet ]