summaryrefslogtreecommitdiff
path: root/plugins/facter/netmask.rb
blob: 3edf2b65b4fbfa625fd981f6a2b7e0b5a6d37094 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# netmask.rb -- find the netmask of the primary ipaddress
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
# Copyright (C) 2007 Mark 'phips' Phillips
# See LICENSE for the full license granted to you.
# idea and originial source by Mark 'phips' Phillips

def get_netmask
	netmask = nil;
	ipregex = %r{(\d{1,3}\.){3}\d{1,3}}

	ops = nil
	case Facter.kernel 
		when 'Linux'
			ops = {
				:ifconfig => '/sbin/ifconfig',
				:regex => %r{\s+ inet\saddr: #{Facter.ipaddress} .*? Mask: (#{ipregex})}x,
				:munge => nil,
			}
		when 'SunOS'
			ops = {
				:ifconfig => '/usr/sbin/ifconfig -a',
				:regex => %r{\s+ inet\s+? #{Facter.ipaddress} \+? mask (\w{8})}x,
				:munge => Proc.new { |mask| mask.scan(/../).collect do |byte| byte.to_i(16) end.join('.') }
			}
	end

	%x{#{ops[:ifconfig]}}.split(/\n/).collect do |line|
		matches = line.match(ops[:regex])
		if !matches.nil?
			if ops[:munge].nil? 
				netmask = matches[1]
			else
				netmask = ops[:munge].call(matches[1])
			end
		end
	end
	netmask
end

Facter.add("netmask") do
	confine :kernel => [ :sunos, :linux ]
	setcode do
		get_netmask
	end
end