Skip to content

Commit

Permalink
improved ip4_config#nameservers and refactored whole ip4 stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
bsingr committed Dec 7, 2011
1 parent 3796d06 commit d6ecb2d
Show file tree
Hide file tree
Showing 11 changed files with 47 additions and 23 deletions.
2 changes: 1 addition & 1 deletion lib/network_manager.rb
Expand Up @@ -9,7 +9,7 @@ module NetworkManager
require File.join(File.dirname(__FILE__), 'network_manager/version')

# helper
require File.join(File.dirname(__FILE__), 'network_manager/ip4_config')
require File.join(File.dirname(__FILE__), 'network_manager/ip4')

# network manager dbus api
require File.join(File.dirname(__FILE__), 'network_manager/dbus')
Expand Down
2 changes: 1 addition & 1 deletion lib/network_manager/dbus/device.rb
Expand Up @@ -27,7 +27,7 @@ class NetworkManager::DBus::Device
def ip4_address
@ip_addr ||= begin
ip4_int = self['Ip4Address']
i = NetworkManager::Ip4Config.from_nm_au ip4_int
i = NetworkManager::Ip4::Config.from_nm_au ip4_int
i.address
end
end
Expand Down
4 changes: 2 additions & 2 deletions lib/network_manager/dbus/ip4_config.rb
Expand Up @@ -4,13 +4,13 @@ class NetworkManager::DBus::Ip4Config

def addresses
self['Addresses'].map do |au|
NetworkManager::Ip4Config.from_nm_au *au
NetworkManager::Ip4::Config.from_nm_au *au
end
end

def nameservers
self['Nameservers'].map do |address_u32|
NetworkManager::Ip4Config.from_nm_au address_u32
NetworkManager::Ip4::Calculations.ip4_from_u32 address_u32
end
end
end
2 changes: 1 addition & 1 deletion lib/network_manager/dbus/settings_connection.rb
Expand Up @@ -91,7 +91,7 @@ def ip4
if ipv4 = settings['ipv4']
if ipv4['method'] == IPV4_METHOD_MANUAL
address = ipv4['addresses'].first
NetworkManager::Ip4Config.from_nm_au *address
NetworkManager::Ip4::Config.from_nm_au *address
else
IPV4_METHOD_AUTO
end
Expand Down
6 changes: 6 additions & 0 deletions lib/network_manager/ip4.rb
@@ -0,0 +1,6 @@
module NetworkManager::Ip4
# require all .rb files from lib/network_manager/ip4
Dir.glob(File.join(File.dirname(__FILE__), "ip4/*.rb")).each do |p|
require p
end
end
9 changes: 9 additions & 0 deletions lib/network_manager/ip4/calculations.rb
@@ -0,0 +1,9 @@
module NetworkManager::Ip4::Calculations
def self.revert_octects(ipv4)
IPAddress::IPv4.new(ipv4.octets.reverse.join('.'))
end

def self.ip4_from_u32(address_u32)
revert_octects(IPAddress::IPv4.parse_u32(address_u32))
end
end
@@ -1,4 +1,4 @@
class NetworkManager::Ip4Config
class NetworkManager::Ip4::Config
attr_accessor :address, :gateway

def self.from_dot_notation(address, subnet = '255.255.255.0', gateway = '0.0.0.0')
Expand All @@ -12,22 +12,16 @@ def self.from_dot_notation(address, subnet = '255.255.255.0', gateway = '0.0.0.0

def self.from_nm_au(address_u32, prefix = 0, gateway_u32 = 0)
obj = self.new
obj.address = revert_octects(IPAddress::IPv4.parse_u32(address_u32))
obj.address = NetworkManager::Ip4::Calculations.ip4_from_u32(address_u32)
obj.address.prefix = prefix
obj.gateway = revert_octects(IPAddress::IPv4.parse_u32(gateway_u32))
obj.gateway = NetworkManager::Ip4::Calculations.ip4_from_u32(gateway_u32)
obj.gateway.prefix = prefix
obj
end

def to_nm_au
[revert_octects(address).to_i, address.prefix.to_i, revert_octects(gateway).to_i]
end

def self.revert_octects(ipv4)
IPAddress::IPv4.new(ipv4.octets.reverse.join('.'))
end

def revert_octects(ipv4)
self.class.revert_octects(ipv4)
[ NetworkManager::Ip4::Calculations.revert_octects(address).to_i,
address.prefix.to_i,
NetworkManager::Ip4::Calculations.revert_octects(gateway).to_i ]
end
end
2 changes: 1 addition & 1 deletion spec/lib/network_manager/dbus/ip4_config_spec.rb
Expand Up @@ -26,6 +26,6 @@
it 'should list #nameservers' do
network_manager_dbus_mock
con = NetworkManager::DBus::Ip4Config.new @object_paths.first
con.nameservers.first.address.to_s.should == '10.0.0.1'
con.nameservers.first.to_s.should == '10.0.0.1'
end
end
2 changes: 1 addition & 1 deletion spec/lib/network_manager/dbus/settings_connection_spec.rb
Expand Up @@ -59,7 +59,7 @@
it 'should set ip4 manual' do
network_manager_dbus_mock
con = NetworkManager::DBus::SettingsConnection.new @object_paths.first
con.ip4_manual = NetworkManager::Ip4Config.from_dot_notation '192.168.10.66', '255.255.0.0', '192.168.10.1'
con.ip4_manual = NetworkManager::Ip4::Config.from_dot_notation '192.168.10.66', '255.255.0.0', '192.168.10.1'
con.ip4.address.to_s.should == '192.168.10.66'
con.ip4.address.netmask.should == '255.255.0.0'
con.ip4.gateway.to_s.should == '192.168.10.1'
Expand Down
15 changes: 15 additions & 0 deletions spec/lib/network_manager/ip4/calculations_spec.rb
@@ -0,0 +1,15 @@
require 'spec_helper'

describe "NetworkManager::Ip4::Calculations" do
it 'should #ip4_from_u32' do
network_manager_dbus_mock
ip4 = NetworkManager::Ip4::Calculations.ip4_from_u32 118139072
ip4.to_s.should == '192.168.10.7'
end

it 'should #revert_octects' do
network_manager_dbus_mock
ip4 = NetworkManager::Ip4::Calculations.revert_octects IPAddress::IPv4.new('192.168.10.7')
ip4.to_s.should == '7.10.168.192'
end
end
@@ -1,9 +1,9 @@
require 'spec_helper'

describe "NetworkManager::Ip4Config" do
describe "NetworkManager::Ip4::Config" do
it 'should #from_dot_notation' do
network_manager_dbus_mock
c = NetworkManager::Ip4Config.from_dot_notation '192.168.10.7', '255.255.255.0', '192.168.10.1'
c = NetworkManager::Ip4::Config.from_dot_notation '192.168.10.7', '255.255.255.0', '192.168.10.1'
c.address.to_s == '192.168.10.7'
c.address.netmask == '255.255.255.0'
c.gateway.to_s == '192.168.10.1'
Expand All @@ -12,13 +12,13 @@

it 'should #to_nm_au' do
network_manager_dbus_mock
c = NetworkManager::Ip4Config.from_dot_notation '192.168.10.7', '255.255.255.0', '192.168.10.1'
c = NetworkManager::Ip4::Config.from_dot_notation '192.168.10.7', '255.255.255.0', '192.168.10.1'
c.to_nm_au.should == [118139072, 24, 17475776]
end

it 'should #from_nm_au' do
network_manager_dbus_mock
c = NetworkManager::Ip4Config.from_nm_au *[118139072, 24, 17475776]
c = NetworkManager::Ip4::Config.from_nm_au *[118139072, 24, 17475776]
c.address.to_s == '192.168.10.7'
c.address.netmask == '255.255.255.0'
c.gateway.to_s == '192.168.10.1'
Expand Down

0 comments on commit d6ecb2d

Please sign in to comment.