net-ip 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +19 -1
- data/lib/net/ip/route.rb +70 -64
- data/lib/net/ip/version.rb +1 -1
- data/lib/net/ip.rb +1 -0
- data/net-ip.gemspec +1 -1
- metadata +5 -5
data/README.md
CHANGED
@@ -18,7 +18,25 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
````ruby
|
22
|
+
require 'net/ip'
|
23
|
+
|
24
|
+
Net::IP::Route.flush(:cache)
|
25
|
+
|
26
|
+
Net::IP::Route.each do |rt|
|
27
|
+
p rt
|
28
|
+
end
|
29
|
+
|
30
|
+
Net::IP::Route.find_gateways("eth0").each do |gw|
|
31
|
+
puts gw.via
|
32
|
+
end
|
33
|
+
|
34
|
+
gws = ["192.168.0.1", "192.168.0.2"].collect do |ip|
|
35
|
+
Net::IP::Route.new(:via => ip, :dev => "eth0", :weight => 1)
|
36
|
+
end
|
37
|
+
|
38
|
+
Net::IP::Route.update_gateways(gws)
|
39
|
+
````
|
22
40
|
|
23
41
|
## Contributing
|
24
42
|
|
data/lib/net/ip/route.rb
CHANGED
@@ -1,85 +1,91 @@
|
|
1
1
|
module Net
|
2
2
|
module IP
|
3
|
+
# Class for working with routing table entries.
|
3
4
|
class Route
|
4
5
|
attr_accessor :type, :prefix, :dev, :scope, :metric,
|
5
6
|
:proto, :src, :via, :weight, :table, :error
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
str << " metric #{metric} " if metric
|
22
|
-
|
23
|
-
str << " error #{error}" if error
|
8
|
+
extend Enumerable
|
9
|
+
|
10
|
+
# Create a new route object
|
11
|
+
# @example Create a default route
|
12
|
+
# Net::IP::Route.new(:prefix => 'default', :via => '192.168.0.1')
|
13
|
+
# @example Create a normal route
|
14
|
+
# Net::IP::Route.new(:prefix => '10.0.0.0/8', :dev => 'eth0')
|
15
|
+
# @note This does NOT add the entry to the routing table. See {add_route} for creating new routes in the routing table.
|
16
|
+
# @param params {Hash}
|
17
|
+
def initialize(params = {})
|
18
|
+
params.each do |k,v|
|
19
|
+
send("#{k}=", v)
|
20
|
+
end
|
21
|
+
end
|
24
22
|
|
25
|
-
|
23
|
+
# Enumerate all routes
|
24
|
+
# @yield {Route}
|
25
|
+
# @return {void}
|
26
|
+
def self.each(&block)
|
27
|
+
RouteParser.parse(`ip route`).each {|r| yield(new(r))}
|
26
28
|
end
|
27
29
|
|
30
|
+
# Get a list of all routes
|
31
|
+
# @return {Array<Route>}
|
28
32
|
def self.all
|
29
|
-
parse(`ip route
|
33
|
+
RouteParser.parse(`ip route`).collect {|r| new(r)}
|
30
34
|
end
|
31
35
|
|
32
|
-
|
33
|
-
|
34
|
-
def self.
|
35
|
-
|
36
|
-
|
37
|
-
if line =~ /^(unicast|unreachable|blackhole|prohibit|local|broadcast|throw|nat|via|anycast|multicast)\s+/
|
38
|
-
route.type = $1
|
39
|
-
line = line[$1.length..-1]
|
40
|
-
else
|
41
|
-
route.type = "unicast"
|
42
|
-
end
|
43
|
-
|
44
|
-
route.prefix = line.split.first
|
45
|
-
route.dev = $1 if line =~ /\s+dev\s+([^\s]+)/
|
46
|
-
route.scope = $1 if line =~ /\s+scope\s+([^\s]+)/
|
47
|
-
route.metric = $1 if line =~ /\s+metric\s+([^\s]+)/
|
48
|
-
route.proto = $1 if line =~ /\s+proto\s+([^\s]+)/
|
49
|
-
route.src = $1 if line =~ /\s+src\s+([^\s]+)/
|
50
|
-
route.via = $1 if line =~ /\s+via\s+([^\s]+)/
|
51
|
-
route.weight = $1 if line =~ /\s+weight\s+([^\s]+)/
|
52
|
-
route.table = $1 if line =~ /\s+table\s+([^\s]+)/
|
53
|
-
route.error = $1 if line =~ /\s+error\s+([^\s]+)/
|
36
|
+
# Get a list of all default gateway routes
|
37
|
+
# @return {Array<Route>}
|
38
|
+
def self.find_gateways
|
39
|
+
find_all {|r| r.prefix == "default"}
|
40
|
+
end
|
54
41
|
|
55
|
-
|
42
|
+
# Update the list of default gateways
|
43
|
+
# @example Change the default gateway to 192.168.0.1
|
44
|
+
# gateway = Net::IP::Route.new(:prefix => 'default', :via => '192.168.0.1')
|
45
|
+
# Net::IP::Route.update_gateways([gateway])
|
46
|
+
# @param gateways {Array<Route>} List of default gateways to use.
|
47
|
+
# @return {void}
|
48
|
+
def self.update_gateways(gateways)
|
49
|
+
params = gateways.collect {|gateway| "nexthop " + gateway.build_param_string}
|
50
|
+
result = `ip route replace default #{params.join(" ")}`
|
51
|
+
raise result unless $?.success?
|
56
52
|
end
|
57
53
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
in_default = true
|
69
|
-
end
|
54
|
+
# Add a route to the routing table
|
55
|
+
# @example Create a route to the 10.0.0.0/8 network
|
56
|
+
# route = Net::IP::Route.new(:prefix => '10.0.0.0/8', :dev => 'eth0')
|
57
|
+
# Net::IP::Route.add_route(route)
|
58
|
+
# @param route {Route} Route to add to the table.
|
59
|
+
# @return {void}
|
60
|
+
def self.add_route(route)
|
61
|
+
result = `ip route add #{route.build_param_string}`
|
62
|
+
raise result unless $?.success?
|
63
|
+
end
|
70
64
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
65
|
+
# Flush the routing table based on a selector
|
66
|
+
# @example Flush the routing table cache
|
67
|
+
# Net::IP::Route.flush(:cache)
|
68
|
+
# @param selector {String} The selector string.
|
69
|
+
# @return {void}
|
70
|
+
def self.flush(selector)
|
71
|
+
result = `ip route flush #{selector}`
|
72
|
+
raise result unless $?.success?
|
75
73
|
end
|
76
74
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
75
|
+
private
|
76
|
+
|
77
|
+
def build_param_string
|
78
|
+
str = ""
|
79
|
+
str << "via #{via} " if via
|
80
|
+
str << "dev #{dev} " if dev
|
81
|
+
str << "weight #{weight}" if weight
|
82
|
+
str << " table #{table} " if table
|
83
|
+
str << " proto #{proto} " if proto
|
84
|
+
str << " scope #{scope} " if scope
|
85
|
+
str << " src #{src} " if src
|
86
|
+
str << " metric #{metric} " if metric
|
87
|
+
str << " error #{error}" if error
|
88
|
+
str
|
83
89
|
end
|
84
90
|
end
|
85
91
|
end
|
data/lib/net/ip/version.rb
CHANGED
data/lib/net/ip.rb
CHANGED
data/net-ip.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Joshua Bussdieker"]
|
10
10
|
spec.email = ["jbussdieker@gmail.com"]
|
11
11
|
spec.summary = %q{Tools for working with IP routes}
|
12
|
-
spec.homepage = ""
|
12
|
+
spec.homepage = "http://github.com/jbussdieker/ruby-net-ip"
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
15
15
|
spec.files = `git ls-files`.split($/)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-ip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -75,7 +75,7 @@ files:
|
|
75
75
|
- lib/net/ip/route.rb
|
76
76
|
- lib/net/ip/version.rb
|
77
77
|
- net-ip.gemspec
|
78
|
-
homepage:
|
78
|
+
homepage: http://github.com/jbussdieker/ruby-net-ip
|
79
79
|
licenses:
|
80
80
|
- MIT
|
81
81
|
post_install_message:
|
@@ -90,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
90
|
version: '0'
|
91
91
|
segments:
|
92
92
|
- 0
|
93
|
-
hash:
|
93
|
+
hash: 2052506917589996489
|
94
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
@@ -99,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
99
|
version: '0'
|
100
100
|
segments:
|
101
101
|
- 0
|
102
|
-
hash:
|
102
|
+
hash: 2052506917589996489
|
103
103
|
requirements: []
|
104
104
|
rubyforge_project:
|
105
105
|
rubygems_version: 1.8.25
|