~ubuntu-branches/ubuntu/trusty/powertop-1.13/trusty

« back to all changes in this revision

Viewing changes to ethernet.c

  • Committer: Package Import Robot
  • Author(s): Jamie Strandboge
  • Date: 2011-11-11 13:36:57 UTC
  • Revision ID: package-import@ubuntu.com-20111111133657-dumpedggvnmcjb2e
Tags: upstream-1.13
ImportĀ upstreamĀ versionĀ 1.13

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2007, Intel Corporation
 
3
 *
 
4
 * This file is part of PowerTOP
 
5
 *
 
6
 * This program file is free software; you can redistribute it and/or modify it
 
7
 * under the terms of the GNU General Public License as published by the
 
8
 * Free Software Foundation; version 2 of the License.
 
9
 *
 
10
 * This program is distributed in the hope that it will be useful, but WITHOUT
 
11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 
13
 * for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU General Public License
 
16
 * along with this program in a file named COPYING; if not, write to the
 
17
 * Free Software Foundation, Inc.,
 
18
 * 51 Franklin Street, Fifth Floor,
 
19
 * Boston, MA 02110-1301 USA
 
20
 *
 
21
 * Authors:
 
22
 *      Arjan van de Ven <arjan@linux.intel.com>
 
23
 */
 
24
 
 
25
#include <unistd.h>
 
26
#include <stdio.h>
 
27
#include <stdlib.h>
 
28
#include <string.h>
 
29
#include <stdint.h>
 
30
#include <sys/types.h>
 
31
#include <dirent.h>
 
32
#include <linux/types.h>
 
33
#include <net/if.h>
 
34
#include <linux/sockios.h>
 
35
#include <sys/ioctl.h>
 
36
 
 
37
/* work around a bug in debian -- it exposes kernel internal types to userspace */
 
38
#define u64 __u64
 
39
#define u32 __u32
 
40
#define u16 __u16
 
41
#define u8 __u8
 
42
#include <linux/ethtool.h>
 
43
#undef u64
 
44
#undef u32
 
45
#undef u16
 
46
#undef u8
 
47
 
 
48
 
 
49
 
 
50
#include "powertop.h"
 
51
 
 
52
void activate_WOL_suggestion(void)
 
53
{
 
54
        int sock;
 
55
        struct ifreq ifr;
 
56
        struct ethtool_wolinfo wol;
 
57
        int ret;
 
58
 
 
59
        memset(&ifr, 0, sizeof(struct ifreq));
 
60
 
 
61
        sock = socket(AF_INET, SOCK_DGRAM, 0);
 
62
        if (sock<0)
 
63
                return;
 
64
 
 
65
        strcpy(ifr.ifr_name, "eth0");
 
66
 
 
67
        /* Check if the interface is up */
 
68
        ret = ioctl(sock, SIOCGIFFLAGS, &ifr);
 
69
        if (ret<0) {
 
70
                close(sock);
 
71
                return;
 
72
        }
 
73
 
 
74
        if (ifr.ifr_flags & (IFF_UP | IFF_RUNNING)) {
 
75
                close(sock);
 
76
                return;
 
77
        }
 
78
 
 
79
        memset(&wol, 0, sizeof(wol));
 
80
 
 
81
        wol.cmd = ETHTOOL_GWOL;
 
82
        ifr.ifr_data = (caddr_t)&wol;
 
83
        ioctl(sock, SIOCETHTOOL, &ifr);
 
84
        wol.cmd = ETHTOOL_SWOL;
 
85
        wol.wolopts = 0;
 
86
        ioctl(sock, SIOCETHTOOL, &ifr);
 
87
 
 
88
        close(sock);
 
89
}
 
90
 
 
91
 
 
92
 
 
93
void suggest_WOL_off(void)
 
94
{
 
95
        int sock;
 
96
        struct ifreq ifr;
 
97
        struct ethtool_wolinfo wol;
 
98
        int ret;
 
99
 
 
100
        memset(&ifr, 0, sizeof(struct ifreq));
 
101
 
 
102
        sock = socket(AF_INET, SOCK_DGRAM, 0);
 
103
        if (sock<0)
 
104
                return;
 
105
 
 
106
        strcpy(ifr.ifr_name, "eth0");
 
107
 
 
108
        /* Check if the interface is up */
 
109
        ret = ioctl(sock, SIOCGIFFLAGS, &ifr);
 
110
        if (ret<0) {
 
111
                close(sock);
 
112
                return;
 
113
        }
 
114
 
 
115
        if (ifr.ifr_flags & (IFF_UP | IFF_RUNNING)) {
 
116
                close(sock);
 
117
                return;
 
118
        }
 
119
 
 
120
        memset(&wol, 0, sizeof(wol));
 
121
 
 
122
        wol.cmd = ETHTOOL_GWOL;
 
123
        ifr.ifr_data = (caddr_t)&wol;
 
124
        ioctl(sock, SIOCETHTOOL, &ifr);
 
125
 
 
126
        if (wol.wolopts) {
 
127
                add_suggestion(_(
 
128
                        "Disable Ethernet Wake-On-Lan with the following command:\n"
 
129
                        "  ethtool -s eth0 wol d \n"
 
130
                        "Wake-on-Lan keeps the phy active, this costs power."), 5,
 
131
                        'W', _(" W - disable Wake-On-Lan "), activate_WOL_suggestion);
 
132
 
 
133
 
 
134
        }
 
135
 
 
136
        close(sock);
 
137
}