rethtool 0.0.5 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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: []