Am 30.06.2009 um 21:36 schrieb M. Warner Losh:

wake really is too generic a name for this.  Why didn't the wol port
get committed anyway, it seems to be better than this...

wake is a short, mnemonic and imperative name that describes what the command does. It is exactly the same command as in NetBSD.

- Marc


Warner


In message: <200906301851.n5uipnjq089...@svn.freebsd.org>
           Martin Blapp <m...@freebsd.org> writes:
: Author: mbr
: Date: Tue Jun 30 18:51:22 2009
: New Revision: 195200
: URL: http://svn.freebsd.org/changeset/base/195200
:
: Log:
: Add wake, a tool to send Wake on LAN frames to hosts on a local Ethernet network
:
:   Submitted by:   Marc Balmer <m...@msys.ch>
:   Reviewed by:    rwatson
:   Approved by:        re
:
:   M    usr.sbin/Makefile
:   A    usr.sbin/wake
:   AM   usr.sbin/wake/wake.c
:   AM   usr.sbin/wake/Makefile
:   AM   usr.sbin/wake/wake.8
:
: Added:
:   head/usr.sbin/wake/
:   head/usr.sbin/wake/Makefile   (contents, props changed)
:   head/usr.sbin/wake/wake.8   (contents, props changed)
:   head/usr.sbin/wake/wake.c   (contents, props changed)
: Modified:
:   head/usr.sbin/Makefile
:
: Modified: head/usr.sbin/Makefile
: = = = = = = = = ======================================================================
: --- head/usr.sbin/Makefile    Tue Jun 30 17:27:53 2009        (r195199)
: +++ head/usr.sbin/Makefile    Tue Jun 30 18:51:22 2009        (r195200)
: @@ -190,6 +190,7 @@ SUBDIR=   ${_ac} \
:       ${_usbconfig} \
:       ${_vidcontrol} \
:       vipw \
: +     wake \
:       watch \
:       watchdogd \
:       ${_wlandebug} \
:
: Added: head/usr.sbin/wake/Makefile
: = = = = = = = = ======================================================================
: --- /dev/null 00:00:00 1970   (empty, because file is newly added)
: +++ head/usr.sbin/wake/Makefile       Tue Jun 30 18:51:22 2009        
(r195200)
: @@ -0,0 +1,8 @@
: +# $FreeBSD$
: +
: +PROG=        wake
: +MAN= wake.8
: +
: +WARNS?= 2
: +
: +.include <bsd.prog.mk>
:
: Added: head/usr.sbin/wake/wake.8
: = = = = = = = = ======================================================================
: --- /dev/null 00:00:00 1970   (empty, because file is newly added)
: +++ head/usr.sbin/wake/wake.8 Tue Jun 30 18:51:22 2009        (r195200)
: @@ -0,0 +1,61 @@
: +.\"
: +.\" $FreeBSD$
: +.\"
: +.\" Copyright (c) 2009 Marc Balmer <m...@msys.ch>
: +.\"
: +.\" Permission to use, copy, modify, and distribute this software for any : +.\" purpose with or without fee is hereby granted, provided that the above : +.\" copyright notice and this permission notice appear in all copies.
: +.\"
: +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES : +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF : +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR : +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES : +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN : +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
: +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
: +.\"
: +.Dd June 27 2009
: +.Dt WAKE 8
: +.Os
: +.Sh NAME
: +.Nm wake
: +.Nd send Wake on LAN frames to hosts on a local Ethernet network
: +.Sh SYNOPSIS
: +.Nm
: +.Ar interface
: +.Op Ar lladdr ...
: +.Sh DESCRIPTION
: +The
: +.Nm
: +program is used to send Wake on LAN (WoL) frames over a local
: +Ethernet network to one or more hosts using their link layer (hardware)
: +addresses.
: +WoL functionality is generally enabled in a machine's BIOS
: +and can be used to power on machines from a remote system without
: +having physical access to them.
: +.Pp
: +.Ar interface
: +is the network interface of the local machine.
: +.Ar lladdr
: +are the link layer addresses of the remote machines
: +and can be specified as the actual hardware address
: +(six hexadecimal numbers separated by colons)
: +or a hostname entry in
: +.Pa /etc/ethers .
: +Link layer addresses can be determined and set on
: +.Fx
: +machines using
: +.Xr ifconfig 8 .
: +.Sh FILES
: +.Bl -tag -width "/etc/ethers" -compact
: +.It /etc/ethers
: +Ethernet host name database.
: +.El
: +.Sh SEE ALSO
: +.Xr ethers 5 ,
: +.Xr ifconfig 8
: +.Sh AUTHORS
: +.Nm
: +was written by
: +.Ar Marc Balmer Aq m...@msys.ch .
:
: Added: head/usr.sbin/wake/wake.c
: = = = = = = = = ======================================================================
: --- /dev/null 00:00:00 1970   (empty, because file is newly added)
: +++ head/usr.sbin/wake/wake.c Tue Jun 30 18:51:22 2009        (r195200)
: @@ -0,0 +1,174 @@
: +/*
: + * Copyright (C) 2006, 2007, 2008, 2009 Marc Balmer <m...@msys.ch>
: + * Copyright (C) 2000 Eugene M. Kim.  All rights reserved.
: + *
: + * Redistribution and use in source and binary forms, with or without : + * modification, are permitted provided that the following conditions
: + * are met:
: + *
: + * 1. Redistributions of source code must retain the above copyright
: + *    notice, this list of conditions and the following disclaimer.
: + * 2. Author's name may not be used endorse or promote products derived
: + *    from this software without specific prior written permission.
: + *
: + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
: + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
: + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE : + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, : + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES : + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR : + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) : + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, : + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING : + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
: + * POSSIBILITY OF SUCH DAMAGE.
: + */
: +
: +#include <sys/cdefs.h>
: +__FBSDID("$FreeBSD$");
: +
: +#include <sys/types.h>
: +#include <sys/param.h>
: +#include <sys/queue.h>
: +#include <sys/ioctl.h>
: +#include <sys/socket.h>
: +#include <sys/time.h>
: +#include <net/bpf.h>
: +#include <net/if.h>
: +
: +#include <netinet/in.h>
: +#include <netinet/if_ether.h>
: +
: +#include <err.h>
: +#include <errno.h>
: +#include <fcntl.h>
: +#include <limits.h>
: +#include <stdarg.h>
: +#include <stdio.h>
: +#include <stdlib.h>
: +#include <string.h>
: +#include <sysexits.h>
: +#include <unistd.h>
: +
: +#define _PATH_BPF    "/dev/bpf"
: +
: +#ifndef SYNC_LEN
: +#define SYNC_LEN 6
: +#endif
: +
: +#ifndef DESTADDR_COUNT
: +#define DESTADDR_COUNT 16
: +#endif
: +
: +void usage(void);
: +
: +int wake(const char *iface, const char *host);
: +int bind_if_to_bpf(char const *ifname, int bpf);
: +int get_ether(char const *text, struct ether_addr *addr);
: +int send_wakeup(int bpf, struct ether_addr const *addr);
: +
: +void
: +usage(void)
: +{
: +     (void)fprintf(stderr, "usage: wake interface lladdr\n");
: +     exit(0);
: +}
: +
: +int
: +wake(const char *iface, const char *host)
: +{
: +     int res, bpf;
: +     struct ether_addr macaddr;
: +
: +     bpf = open(_PATH_BPF, O_RDWR);
: +     if (bpf == -1) {
: +             printf("no bpf\n");
: +             return -1;
: +     }
: +     if (bind_if_to_bpf(iface, bpf) == -1 ||
: +         get_ether(host, &macaddr) == -1) {
: +             (void)close(bpf);
: +             return -1;
: +     }
: +     res = send_wakeup(bpf, &macaddr);
: +     (void)close(bpf);
: +     return res;
: +}
: +
: +int
: +bind_if_to_bpf(char const *ifname, int bpf)
: +{
: +     struct ifreq ifr;
: +     u_int dlt;
: +
: +     if (strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)) >=
: +         sizeof(ifr.ifr_name))
: +             return -1;
: +     if (ioctl(bpf, BIOCSETIF, &ifr) == -1)
: +             return -1;
: +     if (ioctl(bpf, BIOCGDLT, &dlt) == -1)
: +             return -1;
: +     if (dlt != DLT_EN10MB)
: +             return -1;
: +     return 0;
: +}
: +
: +int
: +get_ether(char const *text, struct ether_addr *addr)
: +{
: +     struct ether_addr *paddr;
: +
: +     paddr = ether_aton(text);
: +     if (paddr != NULL) {
: +             *addr = *paddr;
: +             return 0;
: +     }
: +     if (ether_hostton(text, addr))
: +             return -1;
: +     return 0;
: +}
: +
: +int
: +send_wakeup(int bpf, struct ether_addr const *addr)
: +{
: +     struct {
: +             struct ether_header hdr;
: +             u_char data[SYNC_LEN + ETHER_ADDR_LEN * DESTADDR_COUNT];
: +     } pkt;
: +     u_char *p;
: +     int i;
: +     ssize_t bw;
: +     ssize_t len;
: +
: + (void)memset(pkt.hdr.ether_dhost, 0xff, sizeof(pkt.hdr.ether_dhost));
: +     pkt.hdr.ether_type = htons(0);
: +     (void)memset(pkt.data, 0xff, SYNC_LEN);
: +     for (p = pkt.data + SYNC_LEN, i = 0; i < DESTADDR_COUNT;
: +         p += ETHER_ADDR_LEN, i++)
: +             bcopy(addr->octet, p, ETHER_ADDR_LEN);
: +     p = (u_char *)&pkt;
: +     len = sizeof(pkt);
: +     bw = 0;
: +     while (len) {
: +             if ((bw = write(bpf, &pkt, sizeof(pkt))) == -1)
: +                     return -1;
: +             len -= bw;
: +             p += bw;
: +     }
: +     return 0;
: +}
: +
: +int
: +main(int argc, char *argv[])
: +{
: +     int n;
: +
: +     if (argc < 3)
: +             usage();
: +
: +     for (n = 2; n < argc; n++)
: +             if (wake(argv[1], argv[n]))
: +                     warnx("error sending Wake on LAN frame over %s to %s",
: +                         argv[1], argv[n]);
: +     return 0;
: +}
:
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to