openflow 0.0.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.
- checksums.yaml +7 -0
- data/.gitattributes +1 -0
- data/.gitignore +19 -0
- data/.travis.yml +3 -0
- data/Gemfile +6 -0
- data/README.md +2 -0
- data/Rakefile +12 -0
- data/lib/openflow.rb +0 -0
- data/lib/openflow/V10/barrier_reply.rb +7 -0
- data/lib/openflow/V10/barrier_request.rb +7 -0
- data/lib/openflow/V10/config_flag.rb +12 -0
- data/lib/openflow/V10/desc_stats.rb +9 -0
- data/lib/openflow/V10/echo_reply.rb +10 -0
- data/lib/openflow/V10/echo_request.rb +10 -0
- data/lib/openflow/V10/features_reply.rb +19 -0
- data/lib/openflow/V10/features_request.rb +8 -0
- data/lib/openflow/V10/flow_removed.rb +26 -0
- data/lib/openflow/V10/flow_stats_reply.rb +14 -0
- data/lib/openflow/V10/flow_stats_request.rb +12 -0
- data/lib/openflow/V10/get_config_reply.rb +8 -0
- data/lib/openflow/V10/get_config_request.rb +8 -0
- data/lib/openflow/V10/hello.rb +8 -0
- data/lib/openflow/V10/match.rb +23 -0
- data/lib/openflow/V10/message.rb +14 -0
- data/lib/openflow/V10/oftype.rb +30 -0
- data/lib/openflow/V10/physical_port.rb +52 -0
- data/lib/openflow/V10/port.rb +17 -0
- data/lib/openflow/V10/port_status.rb +26 -0
- data/lib/openflow/V10/set_config.rb +11 -0
- data/lib/openflow/V10/stats.rb +23 -0
- data/lib/openflow/V10/stats_reply.rb +12 -0
- data/lib/openflow/V10/stats_request.rb +11 -0
- data/lib/openflow/version.rb +3 -0
- data/lib/test.rb +25 -0
- data/openflow.gemspec +21 -0
- data/test/dummy.rb +8 -0
- metadata +93 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e901c508dfc881756eb2e62d15ba56592c79b79a
|
4
|
+
data.tar.gz: 92cac247b9f87255d05ff8fc022d0903426fd37e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0d87bedaf741e05ece6a6c74141b2432b5972d1224b4045b191a7f492dd5b951923e5cbad3a357249e8fdba1c607ce59cd8f31ed20c5aef324564ea5943fccc6
|
7
|
+
data.tar.gz: 731f39e899ee9d8c21275f2993021f4e6a45785d475a82dba5256ad6fdbf5b6b669010e961444b3e49a2e2cc5d4c22565225fca9c64d5e0f3ba1708267454dc3
|
data/.gitattributes
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.rb filter=spabs
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
data/lib/openflow.rb
ADDED
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module OpenFlow
|
2
|
+
module V10
|
3
|
+
class FeaturesReply < Message
|
4
|
+
# Override Message type
|
5
|
+
initial_value.type = OpenFlow::V10::OFType::FEATURES_REPLY
|
6
|
+
|
7
|
+
unsigned :datapath_id, 64, "Datapath unique ID"
|
8
|
+
unsigned :n_buffers, 32, "Max packets buffered at once"
|
9
|
+
unsigned :n_tables, 8, "Number of tables supported by datapath"
|
10
|
+
pad :pad, 8, "Align to 64-bits"
|
11
|
+
# Features
|
12
|
+
unsigned :capabilities, 32, "Bitmap of support ofp_capabilities"
|
13
|
+
unsigned :actions, 32, "Bitmap of supported ofp_action_type"
|
14
|
+
# Port info
|
15
|
+
#struct ofp_phy_port
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module OpenFlow
|
2
|
+
module V10
|
3
|
+
class FlowRemoved < Message
|
4
|
+
# Override Message type
|
5
|
+
initial_value.type = OpenFlow::V10::OFType::FLOW_REMOVED
|
6
|
+
#New Fields
|
7
|
+
nest :match, OpenFlow::V10::Match, "Match"
|
8
|
+
unsigned :cookie, 16, "Opaque controller-issue identifier"
|
9
|
+
|
10
|
+
unsigned :priority, 16, "Priority level of flow entry"
|
11
|
+
unsigned :reason, 8, "One of OFPRR"
|
12
|
+
pad :pad, 8, "Align to 32 bits"
|
13
|
+
|
14
|
+
unsigned :duration_sec, 32, "Time flow was alive in seconds"
|
15
|
+
unsigned :duration_nsec, 32, "Time flow was alive in nanoseconds beyond duration_sec"
|
16
|
+
|
17
|
+
unsigned :idle_timeout, 16, "Idle timeout from original flow"
|
18
|
+
pad :pad2, 8, "Align to 64 bits"
|
19
|
+
|
20
|
+
unsigned :packet_count, 64, "Packet Count"
|
21
|
+
|
22
|
+
unsigned :byte_count, 64, "Byte Count"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module OpenFlow
|
2
|
+
module V10
|
3
|
+
class FlowStatsReply < StatsRequest
|
4
|
+
# Override Message type
|
5
|
+
initial_value.type = OpenFlow::V10::OFType::STATS_REPLY
|
6
|
+
initial_value.len = 12
|
7
|
+
initial_value.stats_type = 1
|
8
|
+
# New Fields
|
9
|
+
unsigned :stats_type, 16, "One of the OFPST constants"
|
10
|
+
unsigned :flags, 16, "OFPSF_REPLY flags"
|
11
|
+
unsigned :body, 8, "Body of the request"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module OpenFlow
|
2
|
+
module V10
|
3
|
+
class FlowStatsRequest < StatsRequest
|
4
|
+
# Override Message type
|
5
|
+
initial_value.type = OpenFlow::V10::OFType::STATS_REQUEST
|
6
|
+
initial_value.stats_type = 1
|
7
|
+
# New Fields
|
8
|
+
nest :match, OpenFlow::V10::Match, "Match"
|
9
|
+
unsigned :table_id, 8, "ID of flow table"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'bit-struct'
|
2
|
+
|
3
|
+
module OpenFlow
|
4
|
+
module V10
|
5
|
+
class Match < BitStruct
|
6
|
+
unsigned :wildcards, 32, "Wildcard fields"
|
7
|
+
unsigned :type, 16, "Input switch port"
|
8
|
+
unsigned :dl_src, 8, "Ethernet source address"
|
9
|
+
unsigned :dl_dst, 8, "Ethernet destination address"
|
10
|
+
unsigned :dl_vlan, 16, "Input VLAN id"
|
11
|
+
unsigned :dl_vlan_pcp, 8, "Input VLAN priority"
|
12
|
+
pad :pad, 8, "Align to 64 bits"
|
13
|
+
unsigned :dl_type, 16, "Ethernet frame type"
|
14
|
+
unsigned :nw_tos, 8, "IP ToS (actually DSCP fields, 6 bits)"
|
15
|
+
unsigned :nw_proto, 8, "IP protocol or lower 8 bits of ARP opcode"
|
16
|
+
pad :pad2, 8, "Align to 64 bits"
|
17
|
+
unsigned :nw_src, 32, "IP source address"
|
18
|
+
unsigned :nw_dst, 32, "IP destination address"
|
19
|
+
unsigned :tp_src, 16, "TCP/UDP source port"
|
20
|
+
unsigned :tp_dst, 16, "TCP/UDP destination port"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'bit-struct'
|
2
|
+
|
3
|
+
module OpenFlow
|
4
|
+
module V10
|
5
|
+
class Message < BitStruct
|
6
|
+
unsigned :version, 8, "OF Version"
|
7
|
+
unsigned :type, 8, "Type"
|
8
|
+
unsigned :len, 16, "Message Length"
|
9
|
+
unsigned :xid, 32, "Transfer ID"
|
10
|
+
# New Fields
|
11
|
+
initial_value.version = 1
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'bit-struct'
|
2
|
+
|
3
|
+
module OpenFlow
|
4
|
+
module V10
|
5
|
+
class OFType
|
6
|
+
HELLO = 0
|
7
|
+
ERROR = 1
|
8
|
+
ECHO_REQUEST = 2
|
9
|
+
ECHO_REPLY = 3
|
10
|
+
VENDOR = 4
|
11
|
+
FEATURES_REQUEST = 5
|
12
|
+
FEATURES_REPLY = 6
|
13
|
+
GET_CONFIG_REQUEST = 7
|
14
|
+
GET_CONFIG_REPLY = 8
|
15
|
+
SET_CONFIG = 9
|
16
|
+
PACKET_IN = 10
|
17
|
+
FLOW_REMOVED = 11
|
18
|
+
PORT_STATUS = 12
|
19
|
+
PACKET_OUT = 13
|
20
|
+
FLOW_MOD = 14
|
21
|
+
PORT_MOD = 15
|
22
|
+
STATS_REQUEST = 16
|
23
|
+
STATS_REPLY = 17
|
24
|
+
BARRIER_REQUESt = 18
|
25
|
+
BARRIER_REPLY = 19
|
26
|
+
QUEUE_GET_CONFIG_REQUEST = 20
|
27
|
+
QUEUE_GET_CONFIG_REPLY = 21
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'bit-struct'
|
2
|
+
|
3
|
+
module OpenFlow
|
4
|
+
module V10
|
5
|
+
class PhysicalPort
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
# ofp_port_config
|
10
|
+
class PortConfig
|
11
|
+
OFPPC_PORT_DOWN = 1
|
12
|
+
OFPPC_NO_STP = 2
|
13
|
+
OFPPC_NO_RECV = 4
|
14
|
+
OFPPC_NO_RECV_STP = 8
|
15
|
+
OFPPC_NO_FLOOD = 16
|
16
|
+
OFPPC_NO_FWD = 32
|
17
|
+
OFPPC_NO_PACKET_IN = 64
|
18
|
+
end
|
19
|
+
|
20
|
+
# ofp_port_features
|
21
|
+
class PortFeatures
|
22
|
+
OFPPF_10MB_HD = 1
|
23
|
+
OFPPF_10MB_FD = 2
|
24
|
+
OFPPF_100MB_HD = 4
|
25
|
+
OFPPF_100MB_FD = 8
|
26
|
+
OFPPF_1GB_HD = 16
|
27
|
+
OFPPF_1GB_FD = 32
|
28
|
+
OFPPF_10GB_FD = 64
|
29
|
+
OFPPF_COPPER = 128
|
30
|
+
OFPPF_FIBER = 256
|
31
|
+
OFPPF_AUTONEG = 512
|
32
|
+
OFPPF_PAUSE = 1024
|
33
|
+
OFPPF_PAUSE_ASYM = 2048
|
34
|
+
end
|
35
|
+
|
36
|
+
# ofp_port_mod_failed_code
|
37
|
+
class PortModFailedCode
|
38
|
+
OFPPMFC_BAD_PORT = 0
|
39
|
+
OFPPMFC_BAD_HW_ADDR = 1
|
40
|
+
end
|
41
|
+
|
42
|
+
# ofp_port_state
|
43
|
+
class PortState
|
44
|
+
OFPPS_LINK_DOWN = 1
|
45
|
+
OFPPS_STP_LISTEN = 0
|
46
|
+
OFPPS_STP_LEARN = 256
|
47
|
+
OFPPS_STP_FORWARD = 512
|
48
|
+
OFPPS_STP_BLOCK = 768
|
49
|
+
OFPPS_STP_MASK = 768
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'bit-struct'
|
2
|
+
|
3
|
+
module OpenFlow
|
4
|
+
module V10
|
5
|
+
class Port
|
6
|
+
OFPP_MAX = 0xff00
|
7
|
+
OFPP_IN_PORT = 0xfff8
|
8
|
+
OFPP_TABLE = 0xfff9
|
9
|
+
OFPP_NORMAL = 0xfffa
|
10
|
+
OFPP_FLOOD = 0xfffb
|
11
|
+
OFPP_ALL = 0xfffc
|
12
|
+
OFPP_CONTROLLER = 0xfffd
|
13
|
+
OFPP_LOCAL = 0xfffe
|
14
|
+
OFPP_NONE = 0xffff
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module OpenFlow
|
2
|
+
module V10
|
3
|
+
class FlowRemoved < Message
|
4
|
+
# Override Message type
|
5
|
+
initial_value.type = OpenFlow::V10::OFType::FLOW_REMOVED
|
6
|
+
#New Fields
|
7
|
+
nest :match, OpenFlow::V10::Match, "Match"
|
8
|
+
unsigned :cookie, 16, "Opaque controller-issue identifier"
|
9
|
+
|
10
|
+
unsigned :priority, 16, "Priority level of flow entry"
|
11
|
+
unsigned :reason, 8, "One of OFPRR"
|
12
|
+
pad :pad, 8, "Align to 32 bits"
|
13
|
+
|
14
|
+
unsigned :duration_sec, 32, "Time flow was alive in seconds"
|
15
|
+
unsigned :duration_nsec, 32, "Time flow was alive in nanoseconds beyond duration_sec"
|
16
|
+
|
17
|
+
unsigned :idle_timeout, 16, "Idle timeout from original flow"
|
18
|
+
pad :pad2, 8, "Align to 64 bits"
|
19
|
+
|
20
|
+
unsigned :packet_count, 64, "Packet Count"
|
21
|
+
|
22
|
+
unsigned :byte_count, 64, "Byte Count"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module OpenFlow
|
2
|
+
module V10
|
3
|
+
class SetConfig < Message
|
4
|
+
# Override Message type
|
5
|
+
initial_value.type = OpenFlow::V10::OFType::SET_CONFIG
|
6
|
+
|
7
|
+
unsigned :flags, 16, "OF Port Config Flags"
|
8
|
+
unsigned :miss_send_len, 16, "Max bytes of new flow that datapath should send to the controller"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module OpenFlow
|
2
|
+
module V10
|
3
|
+
class Stats < Message
|
4
|
+
# Override Message type
|
5
|
+
initial_value.len = 12
|
6
|
+
# New Fields
|
7
|
+
unsigned :stats_type, 16, "Stats type"
|
8
|
+
unsigned :flags, 16, "OFPSF_REQ flags"
|
9
|
+
unsigned :body, 8, "Request body"
|
10
|
+
end
|
11
|
+
|
12
|
+
# ofp_stats_type
|
13
|
+
class StatsType
|
14
|
+
ROFPST_DESC = 0
|
15
|
+
OFPST_FLOW = 1
|
16
|
+
OFPST_AGGREGATE = 2
|
17
|
+
OFPST_TABLE = 3
|
18
|
+
OFPST_PORT = 4
|
19
|
+
OFPST_QUEUE = 5
|
20
|
+
OFPST_EXPERIMENTER = 65535
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/test.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require './openflow/v10/message'
|
3
|
+
require './openflow/v10/hello'
|
4
|
+
require './openflow/v10/features_request'
|
5
|
+
|
6
|
+
|
7
|
+
server = TCPServer.open(6666) # Socket to listen on port 2000
|
8
|
+
loop { # Servers run forever
|
9
|
+
socket = server.accept
|
10
|
+
hello = OpenFlow::V10::Hello.new
|
11
|
+
hello.len = hello.length
|
12
|
+
socket.send(hello, 0)
|
13
|
+
|
14
|
+
while line = socket.recv(8192) and not line.empty?
|
15
|
+
bytes = line.bytes.to_a
|
16
|
+
p bytes
|
17
|
+
if bytes[1] == 0
|
18
|
+
p OpenFlow::V10::Hello.new(line).inspect_detailed
|
19
|
+
f = OpenFlow::V10::FeaturesRequest.new
|
20
|
+
f.len = hello.length
|
21
|
+
socket.send(f, 0)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
socket.close
|
25
|
+
}
|
data/openflow.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "openflow/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "openflow"
|
7
|
+
s.version = OpenFlow::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Jason Parraga"]
|
10
|
+
s.email = ["Sovietaced@gmail.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{OpenFlow library in Ruby}
|
13
|
+
s.description = %q{OpenFlow library in Ruby}
|
14
|
+
|
15
|
+
s.add_dependency "launchy"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
data/test/dummy.rb
ADDED
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: openflow
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jason Parraga
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-03-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: launchy
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: OpenFlow library in Ruby
|
28
|
+
email:
|
29
|
+
- Sovietaced@gmail.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- .gitattributes
|
35
|
+
- .gitignore
|
36
|
+
- .travis.yml
|
37
|
+
- Gemfile
|
38
|
+
- README.md
|
39
|
+
- Rakefile
|
40
|
+
- lib/openflow.rb
|
41
|
+
- lib/openflow/V10/barrier_reply.rb
|
42
|
+
- lib/openflow/V10/barrier_request.rb
|
43
|
+
- lib/openflow/V10/config_flag.rb
|
44
|
+
- lib/openflow/V10/desc_stats.rb
|
45
|
+
- lib/openflow/V10/echo_reply.rb
|
46
|
+
- lib/openflow/V10/echo_request.rb
|
47
|
+
- lib/openflow/V10/features_reply.rb
|
48
|
+
- lib/openflow/V10/features_request.rb
|
49
|
+
- lib/openflow/V10/flow_removed.rb
|
50
|
+
- lib/openflow/V10/flow_stats_reply.rb
|
51
|
+
- lib/openflow/V10/flow_stats_request.rb
|
52
|
+
- lib/openflow/V10/get_config_reply.rb
|
53
|
+
- lib/openflow/V10/get_config_request.rb
|
54
|
+
- lib/openflow/V10/hello.rb
|
55
|
+
- lib/openflow/V10/match.rb
|
56
|
+
- lib/openflow/V10/message.rb
|
57
|
+
- lib/openflow/V10/oftype.rb
|
58
|
+
- lib/openflow/V10/physical_port.rb
|
59
|
+
- lib/openflow/V10/port.rb
|
60
|
+
- lib/openflow/V10/port_status.rb
|
61
|
+
- lib/openflow/V10/set_config.rb
|
62
|
+
- lib/openflow/V10/stats.rb
|
63
|
+
- lib/openflow/V10/stats_reply.rb
|
64
|
+
- lib/openflow/V10/stats_request.rb
|
65
|
+
- lib/openflow/version.rb
|
66
|
+
- lib/test.rb
|
67
|
+
- openflow.gemspec
|
68
|
+
- test/dummy.rb
|
69
|
+
homepage: ''
|
70
|
+
licenses: []
|
71
|
+
metadata: {}
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 2.1.11
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: OpenFlow library in Ruby
|
92
|
+
test_files:
|
93
|
+
- test/dummy.rb
|