ethernet 0.1.0 → 0.1.1

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.
data/Gemfile CHANGED
@@ -9,7 +9,7 @@ gem 'system-getifaddrs', '~> 0.1.1', :platform => :ruby,
9
9
  # Add dependencies to develop your gem here.
10
10
  # Include everything needed to run rake, tests, features, etc.
11
11
  group :development do
12
- gem 'rdoc', '~> 3.6.1'
12
+ gem 'rdoc', '>= 3.6.1'
13
13
  gem 'rspec', '~> 2.6.0'
14
14
  gem 'bundler', '~> 1.0.0'
15
15
  gem 'jeweler', '~> 1.6.0'
data/Gemfile.lock CHANGED
@@ -27,6 +27,6 @@ DEPENDENCIES
27
27
  bundler (~> 1.0.0)
28
28
  jeweler (~> 1.6.0)
29
29
  rcov
30
- rdoc (~> 3.6.1)
30
+ rdoc (>= 3.6.1)
31
31
  rspec (~> 2.6.0)
32
32
  system-getifaddrs (~> 0.1.1)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/ethernet.gemspec CHANGED
@@ -5,14 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ethernet}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Victor Costan}, %q{HaoQi Li}]
12
12
  s.date = %q{2011-05-27}
13
13
  s.description = %q{Provides a Socket-like API that bypasses TCP/IP. Useful for exotic devices and FPGA development.}
14
14
  s.email = %q{victor@costan.us}
15
- s.executables = [%q{ethernet_ping}]
16
15
  s.extra_rdoc_files = [
17
16
  "LICENSE.txt",
18
17
  "README.rdoc"
@@ -27,12 +26,10 @@ Gem::Specification.new do |s|
27
26
  "README.rdoc",
28
27
  "Rakefile",
29
28
  "VERSION",
30
- "bin/ethernet_ping",
31
29
  "ethernet.gemspec",
32
30
  "lib/ethernet.rb",
33
31
  "lib/ethernet/devices.rb",
34
32
  "lib/ethernet/frame_socket.rb",
35
- "lib/ethernet/ping.rb",
36
33
  "lib/ethernet/provisioning.rb",
37
34
  "lib/ethernet/raw_socket_factory.rb",
38
35
  "spec/ethernet/devices_spec.rb",
@@ -54,14 +51,14 @@ Gem::Specification.new do |s|
54
51
 
55
52
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
56
53
  s.add_runtime_dependency(%q<system-getifaddrs>, ["~> 0.1.1"])
57
- s.add_development_dependency(%q<rdoc>, ["~> 3.6.1"])
54
+ s.add_development_dependency(%q<rdoc>, [">= 3.6.1"])
58
55
  s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
59
56
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
60
57
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
61
58
  s.add_development_dependency(%q<rcov>, [">= 0"])
62
59
  else
63
60
  s.add_dependency(%q<system-getifaddrs>, ["~> 0.1.1"])
64
- s.add_dependency(%q<rdoc>, ["~> 3.6.1"])
61
+ s.add_dependency(%q<rdoc>, [">= 3.6.1"])
65
62
  s.add_dependency(%q<rspec>, ["~> 2.6.0"])
66
63
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
67
64
  s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
@@ -69,7 +66,7 @@ Gem::Specification.new do |s|
69
66
  end
70
67
  else
71
68
  s.add_dependency(%q<system-getifaddrs>, ["~> 0.1.1"])
72
- s.add_dependency(%q<rdoc>, ["~> 3.6.1"])
69
+ s.add_dependency(%q<rdoc>, [">= 3.6.1"])
73
70
  s.add_dependency(%q<rspec>, ["~> 2.6.0"])
74
71
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
75
72
  s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
data/lib/ethernet.rb CHANGED
@@ -42,7 +42,3 @@ require 'ethernet/devices.rb'
42
42
  require 'ethernet/frame_socket.rb'
43
43
  require 'ethernet/provisioning.rb'
44
44
  require 'ethernet/raw_socket_factory.rb'
45
-
46
-
47
- # TODO(pwnall): move to separate gem
48
- require 'ethernet/ping.rb'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ethernet
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Victor Costan
@@ -39,7 +39,7 @@ dependencies:
39
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
- - - ~>
42
+ - - ">="
43
43
  - !ruby/object:Gem::Version
44
44
  hash: 29
45
45
  segments:
@@ -114,8 +114,8 @@ dependencies:
114
114
  name: rcov
115
115
  description: Provides a Socket-like API that bypasses TCP/IP. Useful for exotic devices and FPGA development.
116
116
  email: victor@costan.us
117
- executables:
118
- - ethernet_ping
117
+ executables: []
118
+
119
119
  extensions: []
120
120
 
121
121
  extra_rdoc_files:
@@ -131,12 +131,10 @@ files:
131
131
  - README.rdoc
132
132
  - Rakefile
133
133
  - VERSION
134
- - bin/ethernet_ping
135
134
  - ethernet.gemspec
136
135
  - lib/ethernet.rb
137
136
  - lib/ethernet/devices.rb
138
137
  - lib/ethernet/frame_socket.rb
139
- - lib/ethernet/ping.rb
140
138
  - lib/ethernet/provisioning.rb
141
139
  - lib/ethernet/raw_socket_factory.rb
142
140
  - spec/ethernet/devices_spec.rb
data/bin/ethernet_ping DELETED
@@ -1,30 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'rubygems'
3
- require 'ethernet' #'scratchpad'
4
-
5
- if ARGV.length < 4
6
- print <<END_USAGE
7
- Usage: #{$0} net_interface ether_type dest_mac data
8
- net_interface: name of the Ethernet interface, e.g. eth0
9
- ether_type: packet type for the Ethernet II frame, in hex (2 bytes)
10
- dest_mac: destination MAC for the ping packets, in hex (6 bytes)
11
- data: ping packet data, in hex (0-padded to 64 bytes)
12
- END_USAGE
13
- exit 1
14
- end
15
-
16
- interface = ARGV[0]
17
- ether_type = [ARGV[1]].pack('H*').unpack('n').first
18
- dest_mac = ARGV[2]
19
- data = [ARGV[3]].pack('H*')
20
-
21
- #client = Scratchpad::Ethernet::PingClient.new interface, ether_type, dest_mac
22
- client = Ethernet::PingClient.new interface, ether_type, dest_mac
23
-
24
- loop do
25
- print "Pinging #{dest_mac}... "
26
- STDOUT.flush
27
- puts client.ping(data) ? "OK" : "Failed"
28
- STDOUT.flush
29
- sleep 1
30
- end
data/lib/ethernet/ping.rb DELETED
@@ -1,89 +0,0 @@
1
- # TODO(pwnall): move to separate gem
2
-
3
-
4
- # copied from victor's scratchpad/lib/scratchpad/ethernet/ping.rb
5
- # changes see raw_socket.rb
6
- # :%s/if_name/eth_device/g
7
- # .get_interface_mac() --> .mac()
8
- # Ethernet.socket --> Ethernet::RawSocket.socket
9
- # Ethernet.mac --> Ethernet::RawSocket.mac
10
-
11
- # :nodoc: namespace # module Scratchpad
12
-
13
- # :nodoc: namespace
14
- module Ethernet
15
-
16
- # Responder for ping utility using raw Ethernet sockets.
17
- class PingServer
18
- module Connection
19
- def receive_data(packet)
20
- source_mac = packet[0, 6].unpack('H*')
21
- dest_mac = packet[6, 6].unpack('H*')
22
- ether_type = packet[12, 2].unpack('H*')
23
-
24
- puts "Src: #{source_mac} Dst: #{dest_mac} Eth: #{ether_type}\n"
25
- puts packet[14..-1].unpack('H*')
26
-
27
- # Exchange the source and destination ARP addresses.
28
- packet[0, 6], packet[6, 6] = packet[6, 6], packet[0, 6]
29
- send_data packet
30
- end
31
- end
32
-
33
- class ConnectionWrapper
34
- include Connection
35
-
36
- def initialize(socket)
37
- @socket = socket
38
- end
39
-
40
- def send_data(data)
41
- @socket.send data, 0
42
- end
43
- end
44
-
45
- def run
46
- connection = ConnectionWrapper.new @socket
47
- loop do
48
- packet = @socket.recv 65536
49
- connection.receive_data packet
50
- end
51
- end
52
-
53
- def initialize(eth_device, ether_type)
54
- @socket = Ethernet::RawSocket.socket eth_device, ether_type
55
- end
56
- end # module Ethernet::PingServer
57
-
58
- # Ping utility
59
- class PingClient
60
- def initialize(eth_device, ether_type, destination_mac)
61
- @socket = Ethernet::RawSocket.socket eth_device, ether_type
62
- @source_mac = [Ethernet::RawSocket.mac(eth_device).unpack('H*').first].pack('H*')[0, 6]
63
- @dest_mac = [destination_mac].pack('H*')[0, 6]
64
- @ether_type = [ether_type].pack('n')
65
- end
66
-
67
- attr_reader :socket
68
- attr_reader :source_mac
69
- attr_reader :dest_mac
70
-
71
- # Pings over raw Ethernet sockets.
72
- #
73
- # Returns true if the ping receives a response, false otherwise.
74
- def ping(data, timeout = 1)
75
- data = data.clone
76
- # Pad data to have at least 64 bytes.
77
- data += "\0" * (64 - data.length) if data.length < 64
78
-
79
- ping_packet = @dest_mac + @source_mac + @ether_type + data
80
- @socket.send ping_packet, 0
81
-
82
- response_packet = @source_mac + @dest_mac + @ether_type + data
83
- response = @socket.recv response_packet.length * 2
84
-
85
- response == response_packet
86
- end
87
- end # module Ethernet::PingClient
88
-
89
- end # namespace Ethernet