use all interfaces instead of default (#1003875)
This commit is contained in:
parent
a4e4d3dbfc
commit
0373077aae
152
ether-wake-interfaces.patch
Normal file
152
ether-wake-interfaces.patch
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
--- a/ether-wake.c 2013-09-03 18:15:13.000000000 +0200
|
||||||
|
+++ b/ether-wake.c 2013-09-03 17:39:02.000000000 +0200
|
||||||
|
@@ -3,10 +3,10 @@
|
||||||
|
static char version_msg[] =
|
||||||
|
"ether-wake.c: v1.09 11/12/2003 Donald Becker, http://www.scyld.com/";
|
||||||
|
static char brief_usage_msg[] =
|
||||||
|
-"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
|
||||||
|
+"usage: ether-wake -i <ifname> [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
|
||||||
|
" Use '-u' to see the complete set of options.\n";
|
||||||
|
static char usage_msg[] =
|
||||||
|
-"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
|
||||||
|
+"usage: ether-wake -i <ifname> [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
|
||||||
|
"\n"
|
||||||
|
" This program generates and transmits a Wake-On-LAN (WOL)\n"
|
||||||
|
" \"Magic Packet\", used for restarting machines that have been\n"
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
" Options:\n"
|
||||||
|
" -b Send wake-up packet to the broadcast address.\n"
|
||||||
|
" -D Increase the debug level.\n"
|
||||||
|
-" -i ifname Use interface IFNAME instead of the default 'eth0'.\n"
|
||||||
|
+" -i ifname Use interface IFNAME.\n"
|
||||||
|
" -p <pw> Append the four or six byte password PW to the packet.\n"
|
||||||
|
" A password is only required for a few adapter types.\n"
|
||||||
|
" The password may be specified in ethernet hex format\n"
|
||||||
|
@@ -89,6 +89,9 @@
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <netinet/ether.h>
|
||||||
|
|
||||||
|
+#include "interface.h"
|
||||||
|
+#include "sockets.h"
|
||||||
|
+
|
||||||
|
/* Grrr, no consistency between include versions.
|
||||||
|
Enable this if setsockopt() isn't declared with your library. */
|
||||||
|
#if 0
|
||||||
|
@@ -110,20 +113,29 @@
|
||||||
|
static int get_fill(unsigned char *pkt, struct ether_addr *eaddr);
|
||||||
|
static int get_wol_pw(const char *optarg);
|
||||||
|
|
||||||
|
+typedef struct {
|
||||||
|
+ int s;
|
||||||
|
+ int verbose;
|
||||||
|
+ int pktsize;
|
||||||
|
+} if_info;
|
||||||
|
+
|
||||||
|
+static int send_wol_packet(char *ifname, int s, int verbose, int pktsize);
|
||||||
|
+
|
||||||
|
+static int do_wake(struct interface *ife, void *cookie) {
|
||||||
|
+ if_info *info = (if_info *)cookie;
|
||||||
|
+ send_wol_packet(ife->name, info->s, info->verbose, info->pktsize);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
- char *ifname = "eth0";
|
||||||
|
- int one = 1; /* True, for socket options. */
|
||||||
|
+ char *ifname = NULL;
|
||||||
|
int s; /* Raw socket */
|
||||||
|
int errflag = 0, verbose = 0, do_version = 0;
|
||||||
|
int perm_failure = 0;
|
||||||
|
- int i, c, pktsize;
|
||||||
|
-#if defined(PF_PACKET)
|
||||||
|
- struct sockaddr_ll whereto;
|
||||||
|
-#else
|
||||||
|
- struct sockaddr whereto; /* who to wake up */
|
||||||
|
-#endif
|
||||||
|
+ int c, pktsize;
|
||||||
|
struct ether_addr eaddr;
|
||||||
|
+ if_info info;
|
||||||
|
|
||||||
|
while ((c = getopt(argc, argv, "bDi:p:uvV")) != -1)
|
||||||
|
switch (c) {
|
||||||
|
@@ -177,13 +189,45 @@
|
||||||
|
|
||||||
|
pktsize = get_fill(outpack, &eaddr);
|
||||||
|
|
||||||
|
+ if (ifname == NULL) {
|
||||||
|
+ info.s = s;
|
||||||
|
+ info.verbose = verbose;
|
||||||
|
+ info.pktsize = pktsize;
|
||||||
|
+
|
||||||
|
+ /* Create a channel to the NET kernel. */
|
||||||
|
+ if ((sockets_open(0)) < 0) {
|
||||||
|
+ perror("socket");
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return for_all_interfaces(do_wake, &info);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return send_wol_packet(ifname, s, verbose, pktsize);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* Send a Wake-On-LAN (WOL) "Magic Packet" to Interface IFNAME using
|
||||||
|
+ Socket S with a packet size PKTSIZE. VERBOSE implies
|
||||||
|
+ verbosity. */
|
||||||
|
+
|
||||||
|
+static int send_wol_packet(char *ifname, int s, int verbose, int pktsize)
|
||||||
|
+{
|
||||||
|
+ int i;
|
||||||
|
+ int one = 1; /* True, for socket options. */
|
||||||
|
+#if defined(PF_PACKET)
|
||||||
|
+ struct sockaddr_ll whereto;
|
||||||
|
+#else
|
||||||
|
+ struct sockaddr whereto; /* who to wake up */
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* Fill in the source address, if possible.
|
||||||
|
The code to retrieve the local station address is Linux specific. */
|
||||||
|
if (! opt_no_src_addr) {
|
||||||
|
struct ifreq if_hwaddr;
|
||||||
|
- unsigned char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;
|
||||||
|
+ char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;
|
||||||
|
|
||||||
|
- strcpy(if_hwaddr.ifr_name, ifname);
|
||||||
|
+ strncpy(if_hwaddr.ifr_name, ifname, IFNAMSIZ);
|
||||||
|
+ if_hwaddr.ifr_name[IFNAMSIZ-1] = '\0';
|
||||||
|
if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) {
|
||||||
|
fprintf(stderr, "SIOCGIFHWADDR on %s failed: %s\n", ifname,
|
||||||
|
strerror(errno));
|
||||||
|
@@ -220,7 +264,8 @@
|
||||||
|
#if defined(PF_PACKET)
|
||||||
|
{
|
||||||
|
struct ifreq ifr;
|
||||||
|
- strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
|
||||||
|
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
|
||||||
|
+ ifr.ifr_name[IFNAMSIZ-1] = '\0';
|
||||||
|
if (ioctl(s, SIOCGIFINDEX, &ifr) == -1) {
|
||||||
|
fprintf(stderr, "SIOCGIFINDEX on %s failed: %s\n", ifname,
|
||||||
|
strerror(errno));
|
||||||
|
--- a/Makefile 2013-09-03 13:15:22.531951613 +0100
|
||||||
|
+++ b/Makefile 2013-09-03 13:24:29.659823455 +0100
|
||||||
|
@@ -188,6 +188,8 @@
|
||||||
|
mii-tool: $(NET_LIB) mii-tool.o
|
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ mii-tool.o $(NLIB) $(RESLIB)
|
||||||
|
|
||||||
|
+ether-wake: $(NET_LIB) ether-wake.o
|
||||||
|
+ $(CC) $(LDFLAGS) -o ether-wake ether-wake.o $(NLIB)
|
||||||
|
installbin:
|
||||||
|
@echo
|
||||||
|
@echo "######################################################"
|
||||||
|
--- a/man/en_US/ether-wake.8 2013-09-03 13:15:22.576952098 +0100
|
||||||
|
+++ b/man/en_US/ether-wake.8 2013-09-03 13:14:55.270657575 +0100
|
||||||
|
@@ -49,7 +49,7 @@
|
||||||
|
Increase the Debug Level.
|
||||||
|
.TP
|
||||||
|
.B \-i ifname
|
||||||
|
-Use interface ifname instead of the default "eth0".
|
||||||
|
+Use interface ifname instead of sending a wake packet to all interfaces.
|
||||||
|
.TP
|
||||||
|
.B \-p passwd
|
||||||
|
Append a four or six byte password to the packet. Only a few adapters
|
19
ether-wake.c
19
ether-wake.c
@ -3,10 +3,10 @@
|
|||||||
static char version_msg[] =
|
static char version_msg[] =
|
||||||
"ether-wake.c: v1.09 11/12/2003 Donald Becker, http://www.scyld.com/";
|
"ether-wake.c: v1.09 11/12/2003 Donald Becker, http://www.scyld.com/";
|
||||||
static char brief_usage_msg[] =
|
static char brief_usage_msg[] =
|
||||||
"usage: ether-wake -i <ifname> [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
|
"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
|
||||||
" Use '-u' to see the complete set of options.\n";
|
" Use '-u' to see the complete set of options.\n";
|
||||||
static char usage_msg[] =
|
static char usage_msg[] =
|
||||||
"usage: ether-wake -i <ifname> [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
|
"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
|
||||||
"\n"
|
"\n"
|
||||||
" This program generates and transmits a Wake-On-LAN (WOL)\n"
|
" This program generates and transmits a Wake-On-LAN (WOL)\n"
|
||||||
" \"Magic Packet\", used for restarting machines that have been\n"
|
" \"Magic Packet\", used for restarting machines that have been\n"
|
||||||
@ -22,7 +22,7 @@ static char usage_msg[] =
|
|||||||
" Options:\n"
|
" Options:\n"
|
||||||
" -b Send wake-up packet to the broadcast address.\n"
|
" -b Send wake-up packet to the broadcast address.\n"
|
||||||
" -D Increase the debug level.\n"
|
" -D Increase the debug level.\n"
|
||||||
" -i ifname Use interface IFNAME.\n"
|
" -i ifname Use interface IFNAME instead of the default 'eth0'.\n"
|
||||||
" -p <pw> Append the four or six byte password PW to the packet.\n"
|
" -p <pw> Append the four or six byte password PW to the packet.\n"
|
||||||
" A password is only required for a few adapter types.\n"
|
" A password is only required for a few adapter types.\n"
|
||||||
" The password may be specified in ethernet hex format\n"
|
" The password may be specified in ethernet hex format\n"
|
||||||
@ -112,7 +112,7 @@ static int get_wol_pw(const char *optarg);
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *ifname = NULL;
|
char *ifname = "eth0";
|
||||||
int one = 1; /* True, for socket options. */
|
int one = 1; /* True, for socket options. */
|
||||||
int s; /* Raw socket */
|
int s; /* Raw socket */
|
||||||
int errflag = 0, verbose = 0, do_version = 0;
|
int errflag = 0, verbose = 0, do_version = 0;
|
||||||
@ -144,11 +144,6 @@ int main(int argc, char *argv[])
|
|||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ifname == NULL) {
|
|
||||||
fprintf(stderr, "Specify -i <interface>.\n");
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (optind == argc) {
|
if (optind == argc) {
|
||||||
fprintf(stderr, "Specify the Ethernet address as 00:11:22:33:44:55.\n");
|
fprintf(stderr, "Specify the Ethernet address as 00:11:22:33:44:55.\n");
|
||||||
return 3;
|
return 3;
|
||||||
@ -188,8 +183,7 @@ int main(int argc, char *argv[])
|
|||||||
struct ifreq if_hwaddr;
|
struct ifreq if_hwaddr;
|
||||||
unsigned char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;
|
unsigned char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;
|
||||||
|
|
||||||
strncpy(if_hwaddr.ifr_name, ifname, IFNAMSIZ);
|
strcpy(if_hwaddr.ifr_name, ifname);
|
||||||
if_hwaddr.ifr_name[IFNAMSIZ-1] = '\0';
|
|
||||||
if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) {
|
if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) {
|
||||||
fprintf(stderr, "SIOCGIFHWADDR on %s failed: %s\n", ifname,
|
fprintf(stderr, "SIOCGIFHWADDR on %s failed: %s\n", ifname,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
@ -226,8 +220,7 @@ int main(int argc, char *argv[])
|
|||||||
#if defined(PF_PACKET)
|
#if defined(PF_PACKET)
|
||||||
{
|
{
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
|
strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
|
||||||
ifr.ifr_name[IFNAMSIZ-1] = '\0';
|
|
||||||
if (ioctl(s, SIOCGIFINDEX, &ifr) == -1) {
|
if (ioctl(s, SIOCGIFINDEX, &ifr) == -1) {
|
||||||
fprintf(stderr, "SIOCGIFINDEX on %s failed: %s\n", ifname,
|
fprintf(stderr, "SIOCGIFINDEX on %s failed: %s\n", ifname,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
Summary: Basic networking tools
|
Summary: Basic networking tools
|
||||||
Name: net-tools
|
Name: net-tools
|
||||||
Version: 2.0
|
Version: 2.0
|
||||||
Release: 0.9.%{checkout}%{?dist}
|
Release: 0.10.%{checkout}%{?dist}
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
URL: http://sourceforge.net/projects/net-tools/
|
URL: http://sourceforge.net/projects/net-tools/
|
||||||
@ -53,6 +53,9 @@ Patch10: net-tools-ifconfig-long-iface-crasher.patch
|
|||||||
# fixed tcp timers info in netstat (#466845)
|
# fixed tcp timers info in netstat (#466845)
|
||||||
Patch11: net-tools-netstat-probe.patch
|
Patch11: net-tools-netstat-probe.patch
|
||||||
|
|
||||||
|
# use all interfaces instead of default (#1003875)
|
||||||
|
Patch20: ether-wake-interfaces.patch
|
||||||
|
|
||||||
BuildRequires: gettext, libselinux
|
BuildRequires: gettext, libselinux
|
||||||
BuildRequires: libselinux-devel
|
BuildRequires: libselinux-devel
|
||||||
BuildRequires: systemd-units
|
BuildRequires: systemd-units
|
||||||
@ -86,10 +89,14 @@ cp %SOURCE6 ./man/en_US
|
|||||||
cp %SOURCE7 ./man/en_US
|
cp %SOURCE7 ./man/en_US
|
||||||
cp %SOURCE8 ./man/en_US
|
cp %SOURCE8 ./man/en_US
|
||||||
|
|
||||||
|
%patch20 -p1 -b .interfaces
|
||||||
|
|
||||||
%ifarch alpha
|
%ifarch alpha
|
||||||
perl -pi -e "s|-O2||" Makefile
|
perl -pi -e "s|-O2||" Makefile
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
touch ./config.h
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# Sparc and s390 arches need to use -fPIE
|
# Sparc and s390 arches need to use -fPIE
|
||||||
%ifarch sparcv9 sparc64 s390 s390x
|
%ifarch sparcv9 sparc64 s390 s390x
|
||||||
@ -101,7 +108,7 @@ export CFLAGS="$RPM_OPT_FLAGS $CFLAGS -fpie"
|
|||||||
export LDFLAGS="$LDFLAGS -pie -Wl,-z,relro -Wl,-z,now"
|
export LDFLAGS="$LDFLAGS -pie -Wl,-z,relro -Wl,-z,now"
|
||||||
|
|
||||||
make
|
make
|
||||||
gcc $RPM_OPT_FLAGS -o ether-wake ether-wake.c
|
make ether-wake
|
||||||
gcc $RPM_OPT_FLAGS -o mii-diag mii-diag.c
|
gcc $RPM_OPT_FLAGS -o mii-diag mii-diag.c
|
||||||
|
|
||||||
%install
|
%install
|
||||||
@ -163,6 +170,10 @@ install -m 644 %{SOURCE9} %{buildroot}%{_unitdir}
|
|||||||
%attr(0644,root,root) %{_unitdir}/arp-ethers.service
|
%attr(0644,root,root) %{_unitdir}/arp-ethers.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Sep 04 2013 Jaromír Končický <jkoncick@redhat.com> - 2.0-0.10.20130607git
|
||||||
|
- use all interfaces instead of default (#1003875)
|
||||||
|
- reverted all changes on ether-wake.c and put original file
|
||||||
|
|
||||||
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.0-0.9.20130607git
|
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.0-0.9.20130607git
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user