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 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
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ /pkg
2
+ Gemfile.lock
3
+ /.bundle
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
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.5
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
@@ -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 = 0x0000000a
23
- ETHTOOL_CMD_GSET = 0x00000001
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
- ifreq = [interface, ecmd.data].pack("a16p")
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
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestRethtool < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ 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
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
- homepage: http://theshed.hezmatt.org/rethtool
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
- rubyforge_project:
118
- rubygems_version: 1.8.23
113
+ rubygems_version: 3.2.5
119
114
  signing_key:
120
- specification_version: 3
115
+ specification_version: 4
121
116
  summary: Partial Ruby wrapper around the SIOCETHTOOL ioctl
122
117
  test_files: []