From bf2ecf30834e06e1c0434b114c4a402f8493e0dc Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sun, 6 Aug 2017 20:03:36 -0400 Subject: Add wake That payload can appear anywhere within an ethernet frame. Wake-on-LAN is funny. --- curtis/.bin/wake.c | 41 +++++++++++++++++++++++++++++++++++++++++ link.sh | 1 + 2 files changed, 42 insertions(+) create mode 100755 curtis/.bin/wake.c diff --git a/curtis/.bin/wake.c b/curtis/.bin/wake.c new file mode 100755 index 00000000..2f314975 --- /dev/null +++ b/curtis/.bin/wake.c @@ -0,0 +1,41 @@ +#if 0 +exec cc -Wall -Wextra -Wpedantic $@ -o $(dirname $0)/wake $0 +#endif + +#include +#include +#include +#include +#include +#include + +#define MAC 0x04, 0x7D, 0x7B, 0xD5, 0x6A, 0x53 + +const uint8_t payload[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + MAC, MAC, MAC, MAC, MAC, MAC, MAC, MAC, + MAC, MAC, MAC, MAC, MAC, MAC, MAC, MAC, +}; + +int main() { + int sock = socket(PF_INET, SOCK_DGRAM, 0); + if (sock < 0) err(EX_OSERR, "socket"); + + int on = 1; + int error = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)); + if (error) err(EX_OSERR, "setsockopt"); + + struct sockaddr_in addr = { + .sin_family = AF_INET, + .sin_port = 9, + .sin_addr.s_addr = INADDR_BROADCAST, + }; + + ssize_t len = sendto( + sock, payload, sizeof(payload), 0, + (struct sockaddr *)&addr, sizeof(addr) + ); + if (len < 0) err(EX_IOERR, "sendto"); + + return EX_OK; +} diff --git a/link.sh b/link.sh index 574ae257..e591844e 100755 --- a/link.sh +++ b/link.sh @@ -29,6 +29,7 @@ link '.bin/pbd.c' link '.bin/sup' link '.bin/tup' link '.bin/up' +link '.bin/wake.c' link '.bin/xx.c' link '.config/git/config' link '.config/git/ignore' -- cgit 1.4.1