···11-21let send_wol mac port broadcast =
33- Eio_posix.run @@ fun env ->
44- Wol.send ~net:env#net ~port ~broadcast mac
22+ Eio_posix.run @@ fun env -> Wol_eio.send ~net:env#net ~port ~broadcast mac
5364let () =
75 let open Cmdliner in
···119 in
1210 let port =
1311 let doc = "Port to send the packet too (default 9)." in
1414- Arg.(value & opt int 9 & info ["p"; "port"] ~docv:"PORT" ~doc)
1212+ Arg.(value & opt int 9 & info [ "p"; "port" ] ~docv:"PORT" ~doc)
1513 in
1614 let broadcast =
1717- let doc = "Address to send the packet too (default broadcast to 255.255.255.255)." in
1818- Arg.(value & opt string "255.255.255.255" & info ["a"; "address"] ~docv:"ADDRESS" ~doc)
1515+ let doc =
1616+ "Address to send the packet too (default broadcast to 255.255.255.255)."
1717+ in
1818+ Arg.(
1919+ value
2020+ & opt string "255.255.255.255"
2121+ & info [ "a"; "address" ] ~docv:"ADDRESS" ~doc)
1922 in
2023 let cmd =
2124 let term = Term.(const send_wol $ mac_address $ port $ broadcast) in
+17-1
dune-project
···1919 (name wol)
2020 (synopsis "A short synopsis")
2121 (description "A longer description")
2222- (depends ocaml dune eio_main ipaddr)
2222+ (depends ipaddr)
2323+ (tags
2424+ (topics "to describe" your project)))
2525+2626+(package
2727+ (name wol-mirage)
2828+ (synopsis "A short synopsis")
2929+ (description "A longer description")
3030+ (depends wol tcpip)
3131+ (tags
3232+ (topics "to describe" your project)))
3333+3434+(package
3535+ (name wol-eio)
3636+ (synopsis "A short synopsis")
3737+ (description "A longer description")
3838+ (depends wol eio eio_main)
2339 (tags
2440 (topics "to describe" your project)))
2541
···11+let magic_packet (mac : Macaddr.t) =
22+ let mac = Macaddr.to_octets mac |> Cstruct.of_string in
33+ let buf = Cstruct.create 102 in
44+ Cstruct.BE.set_uint32 buf 0 0xFFFFFFFFl;
55+ Cstruct.BE.set_uint16 buf 4 0xFFFF;
66+ for i = 0 to 15 do
77+ Cstruct.blit mac 0 buf (6 + (i * 6)) 6
88+ done;
99+ buf
···11+module Make (D : Tcpip.Udp.S with type ipaddr = Ipaddr.V4.t) = struct
22+ let send ?(port = 9) ?(broadcast = "255.255.255.255") sock mac =
33+ let addr = Ipaddr.V4.of_string_exn broadcast in
44+ let packet = Wol.magic_packet mac in
55+ D.write sock ~dst:addr ~dst_port:port packet
66+end