rethtool 0.0.5 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.gitignore +3 -0
- data/Gemfile +3 -0
- data/Rakefile +33 -0
- data/VERSION +1 -1
- data/lib/rethtool/driver_settings.rb +36 -0
- data/lib/rethtool/ethtool_cmd.rb +26 -0
- data/lib/rethtool/interface_settings.rb +27 -2
- data/lib/rethtool/ring_settings.rb +69 -0
- data/lib/rethtool.rb +8 -5
- data/rethtool.gemspec +24 -0
- data/test/helper.rb +18 -0
- data/test/test_rethtool.rb +7 -0
- metadata +24 -29
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7c47e7aabb6cba38c95f794a38efa55219bb47498be9af9704b4f5094deafb29
|
4
|
+
data.tar.gz: f93529f9a47f384d7c627c75f1229bf8c681dc33516d0211f997d0fa8e8b59db
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e9db1ae33db6e52e63e5ccde81734e98fdd56e4121149dd04eb6c438281822b6067bf1bd2d059f293ae5921b1071747441fa2717b7e1850f6d7a5c251f5e28de
|
7
|
+
data.tar.gz: 67583a9ba405c0fc5b8b63db961a1760060aadc76b74f81abf4786e774dac7defee1f884af21079cb22890c94e40bac55f54d0050ca8d184596e5d183639424e
|
data/.document
ADDED
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'rake/testtask'
|
15
|
+
Rake::TestTask.new(:test) do |test|
|
16
|
+
test.libs << 'lib' << 'test'
|
17
|
+
test.pattern = 'test/**/test_*.rb'
|
18
|
+
test.verbose = true
|
19
|
+
end
|
20
|
+
|
21
|
+
Bundler::GemHelper.install_tasks
|
22
|
+
|
23
|
+
task :default => :test
|
24
|
+
|
25
|
+
require 'rdoc/task'
|
26
|
+
Rake::RDocTask.new do |rdoc|
|
27
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
28
|
+
|
29
|
+
rdoc.rdoc_dir = 'rdoc'
|
30
|
+
rdoc.title = "rethtool #{version}"
|
31
|
+
rdoc.rdoc_files.include('README*')
|
32
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
33
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.8
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rethtool'
|
2
|
+
require 'rethtool/ethtool_cmd'
|
3
|
+
|
4
|
+
# Driver settings of a network interface.
|
5
|
+
#
|
6
|
+
# Create an instance of this class with the interface name as the only
|
7
|
+
# parameter, then use the available instance methods to get the info you
|
8
|
+
# seek:
|
9
|
+
#
|
10
|
+
# if = Rethtool::DriverSettings.new("eth0")
|
11
|
+
# puts "Bus info is #{if.bus_info}"
|
12
|
+
#
|
13
|
+
class Rethtool::DriverSettings
|
14
|
+
|
15
|
+
# Create a new DriverSettings object. Simply pass it the name of the
|
16
|
+
# interface you want to get the settings for.
|
17
|
+
def initialize(interface)
|
18
|
+
cmd_driver = Rethtool::EthtoolCmdDriver.new
|
19
|
+
cmd_driver.cmd = Rethtool::ETHTOOL_CMD_GDRVINFO
|
20
|
+
@driver_data = Rethtool.ioctl(interface, cmd_driver)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns a string with the value of the interface driver (kernel module).
|
24
|
+
def driver
|
25
|
+
as_str(@driver_data.driver)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns a string with the bus information of the interface.
|
29
|
+
def bus_info
|
30
|
+
as_str(@driver_data.bus_info)
|
31
|
+
end
|
32
|
+
|
33
|
+
def as_str(str)
|
34
|
+
str.pack('c*').delete("\000")
|
35
|
+
end
|
36
|
+
end
|
data/lib/rethtool/ethtool_cmd.rb
CHANGED
@@ -21,3 +21,29 @@ class Rethtool::EthtoolCmd < CStruct
|
|
21
21
|
uint32 :reserved2
|
22
22
|
uint32 :reserved3
|
23
23
|
end
|
24
|
+
|
25
|
+
class Rethtool::EthtoolCmdDriver < CStruct
|
26
|
+
uint32 :cmd
|
27
|
+
char :driver,[32]
|
28
|
+
char :version,[32]
|
29
|
+
char :fw_version,[32]
|
30
|
+
char :bus_info,[32]
|
31
|
+
char :reserved1,[32]
|
32
|
+
char :reserved2,[16]
|
33
|
+
uint32 :n_stats
|
34
|
+
uint32 :testinfo_len
|
35
|
+
uint32 :eedump_len
|
36
|
+
uint32 :regdump_len
|
37
|
+
end
|
38
|
+
|
39
|
+
class Rethtool::EthtoolCmdRing < CStruct
|
40
|
+
uint32 :cmd
|
41
|
+
uint32 :rx_max_pending
|
42
|
+
uint32 :rx_mini_max_pending
|
43
|
+
uint32 :rx_jumbo_max_pending
|
44
|
+
uint32 :tx_max_pending
|
45
|
+
uint32 :rx_pending
|
46
|
+
uint32 :rx_mini_pending
|
47
|
+
uint32 :rx_jumbo_pending
|
48
|
+
uint32 :tx_pending
|
49
|
+
end
|
@@ -39,9 +39,20 @@ class Rethtool::InterfaceSettings
|
|
39
39
|
@interface = interface
|
40
40
|
cmd = Rethtool::EthtoolCmd.new
|
41
41
|
cmd.cmd = Rethtool::ETHTOOL_CMD_GSET
|
42
|
-
|
43
42
|
@data = Rethtool.ioctl(interface, cmd)
|
43
|
+
|
44
|
+
@driver_info = Rethtool::DriverSettings.new(interface)
|
44
45
|
end
|
46
|
+
|
47
|
+
# Returns a string with the value of the interface driver (kernel module).
|
48
|
+
def driver
|
49
|
+
@driver_info.driver
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns a string with the bus information of the interface.
|
53
|
+
def bus_info
|
54
|
+
@driver_info.bus_info
|
55
|
+
end
|
45
56
|
|
46
57
|
# Return an array of the modes supported by the interface. Returns an
|
47
58
|
# array of Mode objects.
|
@@ -128,11 +139,25 @@ class Rethtool::InterfaceSettings
|
|
128
139
|
1 << 17 => Mode.new(1000, :full, 'KX'),
|
129
140
|
1 << 18 => Mode.new(10000, :full, 'KX4'),
|
130
141
|
1 << 19 => Mode.new(10000, :full, 'KR'),
|
131
|
-
1 << 20 => Mode.new(10000, :fec, 'R')
|
142
|
+
1 << 20 => Mode.new(10000, :fec, 'R'),
|
143
|
+
1 << 21 => Mode.new(20000, :full, 'MLD2'),
|
144
|
+
1 << 22 => Mode.new(20000, :full, 'KR2'),
|
145
|
+
1 << 23 => Mode.new(40000, :full, 'KR4'),
|
146
|
+
1 << 24 => Mode.new(40000, :full, 'CR4'),
|
147
|
+
1 << 25 => Mode.new(40000, :full, 'SR4'),
|
148
|
+
1 << 26 => Mode.new(40000, :full, 'LR4'),
|
149
|
+
1 << 27 => Mode.new(56000, :full, 'KR4'),
|
150
|
+
1 << 28 => Mode.new(56000, :full, 'CR4'),
|
151
|
+
1 << 29 => Mode.new(56000, :full, 'SR4'),
|
152
|
+
1 << 30 => Mode.new(56000, :full, 'LR4'),
|
132
153
|
}
|
133
154
|
|
134
155
|
# Turn a uint32 of bits into a list of supported modes. Sigh.
|
135
156
|
def modes(data)
|
136
157
|
PossibleModes.find_all { |m| (m[0] & data) > 0 }.map { |m| m[1] }
|
137
158
|
end
|
159
|
+
|
160
|
+
def as_str(str)
|
161
|
+
str.pack('c*').delete("\000")
|
162
|
+
end
|
138
163
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rethtool'
|
2
|
+
require 'rethtool/ethtool_cmd'
|
3
|
+
|
4
|
+
class Rethtool::RingSettings
|
5
|
+
def initialize(interface)
|
6
|
+
@interface = interface
|
7
|
+
cmd = Rethtool::EthtoolCmdRing.new
|
8
|
+
cmd.cmd = Rethtool::ETHTOOL_CMD_GRINGPARAM
|
9
|
+
@data = Rethtool.ioctl(interface, cmd)
|
10
|
+
end
|
11
|
+
|
12
|
+
def rx_max_pending
|
13
|
+
@data.rx_max_pending
|
14
|
+
end
|
15
|
+
|
16
|
+
def rx_mini_max_pending
|
17
|
+
@data.rx_mini_max_pending
|
18
|
+
end
|
19
|
+
|
20
|
+
def rx_jumbo_max_pending
|
21
|
+
@data.rx_jumbo_max_pending
|
22
|
+
end
|
23
|
+
|
24
|
+
def tx_max_pending
|
25
|
+
@data.tx_max_pending
|
26
|
+
end
|
27
|
+
|
28
|
+
def rx_pending
|
29
|
+
@data.rx_pending
|
30
|
+
end
|
31
|
+
|
32
|
+
def rx_mini_pending
|
33
|
+
@data.rx_mini_pending
|
34
|
+
end
|
35
|
+
|
36
|
+
def rx_jumbo_pending
|
37
|
+
@data.rx_jumbo_pending
|
38
|
+
end
|
39
|
+
|
40
|
+
def tx_pending
|
41
|
+
@data.tx_pending
|
42
|
+
end
|
43
|
+
|
44
|
+
def rx_pending=(value)
|
45
|
+
set(:rx_pending, value)
|
46
|
+
end
|
47
|
+
|
48
|
+
def rx_mini_pending=(value)
|
49
|
+
set(:rx_mini_pending, value)
|
50
|
+
end
|
51
|
+
|
52
|
+
def rx_jumbo_pending=(value)
|
53
|
+
set(:rx_jumbo_pending, value)
|
54
|
+
end
|
55
|
+
|
56
|
+
def tx_pending=(value)
|
57
|
+
set(:tx_pending, value)
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def set(what, value)
|
63
|
+
return if @data.send(what) == value
|
64
|
+
cmd = @data.clone
|
65
|
+
cmd.cmd = Rethtool::ETHTOOL_CMD_SRINGPARAM
|
66
|
+
cmd.send(:"#{what}=", value)
|
67
|
+
@data = Rethtool.ioctl(@interface, cmd)
|
68
|
+
end
|
69
|
+
end
|
data/lib/rethtool.rb
CHANGED
@@ -19,8 +19,11 @@ class Rethtool
|
|
19
19
|
SIOCETHTOOL = 0x8946
|
20
20
|
|
21
21
|
# From /u/i/linux/ethtool.h
|
22
|
-
ETHTOOL_CMD_GLINK
|
23
|
-
ETHTOOL_CMD_GSET
|
22
|
+
ETHTOOL_CMD_GLINK = 0x0000000a
|
23
|
+
ETHTOOL_CMD_GSET = 0x00000001
|
24
|
+
ETHTOOL_CMD_GDRVINFO = 0x00000003
|
25
|
+
ETHTOOL_CMD_GRINGPARAM = 0x00000010
|
26
|
+
ETHTOOL_CMD_SRINGPARAM = 0x00000011
|
24
27
|
|
25
28
|
class << self
|
26
29
|
# Issue an SIOCETHTOOL ioctl. ecmd must respond to #data (such
|
@@ -31,12 +34,11 @@ class Rethtool
|
|
31
34
|
def ioctl(interface, ecmd)
|
32
35
|
sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
|
33
36
|
|
34
|
-
|
37
|
+
rv = ecmd.clone
|
38
|
+
ifreq = [interface, ecmd.data].pack("a16P#{rv.data.length}")
|
35
39
|
|
36
40
|
sock.ioctl(SIOCETHTOOL, ifreq)
|
37
41
|
|
38
|
-
rv = ecmd.class.new
|
39
|
-
rv.data = ifreq.unpack("a16p")[1]
|
40
42
|
rv
|
41
43
|
end
|
42
44
|
end
|
@@ -44,3 +46,4 @@ end
|
|
44
46
|
|
45
47
|
require 'rethtool/interface_settings'
|
46
48
|
require 'rethtool/link_status'
|
49
|
+
require 'rethtool/ring_settings'
|
data/rethtool.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "rethtool"
|
3
|
+
s.version = File.read(File.expand_path('../VERSION', __FILE__)).strip
|
4
|
+
|
5
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
|
+
s.authors = ["Matt Palmer"]
|
7
|
+
s.date = "2014-01-16"
|
8
|
+
s.email = "theshed+rethtool@hezmatt.org"
|
9
|
+
s.extra_rdoc_files = [
|
10
|
+
"COPYING",
|
11
|
+
"README.rdoc"
|
12
|
+
]
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.homepage = "https://github.com/mpalmer/rethtool"
|
15
|
+
s.licenses = ["GPLv3"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.summary = "Partial Ruby wrapper around the SIOCETHTOOL ioctl"
|
18
|
+
|
19
|
+
s.add_runtime_dependency(%q<cstruct>, [">= 0"])
|
20
|
+
s.add_development_dependency(%q<rake>, ["~> 10.0"])
|
21
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
22
|
+
s.add_development_dependency(%q<rdoc>, ["~> 2.4"])
|
23
|
+
end
|
24
|
+
|
data/test/helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
require 'shoulda'
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
+
require 'rethtool'
|
16
|
+
|
17
|
+
class Test::Unit::TestCase
|
18
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rethtool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.8
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matt Palmer
|
@@ -14,65 +13,57 @@ dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: cstruct
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - ~>
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '10.0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - ~>
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '10.0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '1.0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '1.0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rdoc
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- - ~>
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '2.4'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- - ~>
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '2.4'
|
78
69
|
description:
|
@@ -83,40 +74,44 @@ extra_rdoc_files:
|
|
83
74
|
- COPYING
|
84
75
|
- README.rdoc
|
85
76
|
files:
|
77
|
+
- ".document"
|
78
|
+
- ".gitignore"
|
86
79
|
- COPYING
|
80
|
+
- Gemfile
|
87
81
|
- README.rdoc
|
82
|
+
- Rakefile
|
88
83
|
- VERSION
|
89
84
|
- lib/rethtool.rb
|
85
|
+
- lib/rethtool/driver_settings.rb
|
90
86
|
- lib/rethtool/ethtool_cmd.rb
|
91
87
|
- lib/rethtool/ethtool_value.rb
|
92
88
|
- lib/rethtool/interface_settings.rb
|
93
89
|
- lib/rethtool/link_status.rb
|
94
|
-
|
90
|
+
- lib/rethtool/ring_settings.rb
|
91
|
+
- rethtool.gemspec
|
92
|
+
- test/helper.rb
|
93
|
+
- test/test_rethtool.rb
|
94
|
+
homepage: https://github.com/mpalmer/rethtool
|
95
95
|
licenses:
|
96
96
|
- GPLv3
|
97
|
+
metadata: {}
|
97
98
|
post_install_message:
|
98
99
|
rdoc_options: []
|
99
100
|
require_paths:
|
100
101
|
- lib
|
101
102
|
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
-
none: false
|
103
103
|
requirements:
|
104
|
-
- -
|
104
|
+
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: '0'
|
107
|
-
segments:
|
108
|
-
- 0
|
109
|
-
hash: 2868922360395750442
|
110
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
108
|
requirements:
|
113
|
-
- -
|
109
|
+
- - ">="
|
114
110
|
- !ruby/object:Gem::Version
|
115
111
|
version: '0'
|
116
112
|
requirements: []
|
117
|
-
|
118
|
-
rubygems_version: 1.8.23
|
113
|
+
rubygems_version: 3.2.5
|
119
114
|
signing_key:
|
120
|
-
specification_version:
|
115
|
+
specification_version: 4
|
121
116
|
summary: Partial Ruby wrapper around the SIOCETHTOOL ioctl
|
122
117
|
test_files: []
|