svn commit: r195200 - in head/usr.sbin: . wake

Marc Balmer marc at msys.ch
Tue Jun 30 19:51:49 UTC 2009


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.n5UIpNJQ089171 at svn.freebsd.org>
>            Martin Blapp <mbr at 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 <marc at 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 <marc at 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 marc at 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 <marc at 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 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"



More information about the svn-src-head mailing list