Module: Puppet::Util::NetworkDevice::IPCalc
- Included in:
- Cisco::Device, Cisco::Interface, Cisco::Interface
- Defined in:
- lib/puppet/util/network_device/ipcalc.rb
Constant Summary collapse
- Octet =
This is a rip-off of authstore
'(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])'
- IPv4 =
"#{Octet}\.#{Octet}\.#{Octet}\.#{Octet}"
- IPv6_full =
"_:_:_:_:_:_:_:_|_:_:_:_:_:_::_?|_:_:_:_:_::((_:)?_)?|_:_:_:_::((_:){0,2}_)?|_:_:_::((_:){0,3}_)?|_:_::((_:){0,4}_)?|_::((_:){0,5}_)?|::((_:){0,6}_)?"
- IPv6_partial =
"_:_:_:_:_:_:|_:_:_:_::(_:)?|_:_::(_:){0,2}|_::(_:){0,3}"
- IP =
"#{IPv4}|#{IPv6_full}".gsub(/_/,'([0-9a-fA-F]{1,4})').gsub(/\(/,'(?:')
Instance Method Summary collapse
- #bits(family) ⇒ Object
- #fullmask(family) ⇒ Object
- #linklocal?(ip) ⇒ Boolean
- #mask(family, length) ⇒ Object
-
#netmask(family, length) ⇒ Object
returns ip address netmask from prefix length.
- #parse(value) ⇒ Object
-
#prefix_length(netmask) ⇒ Object
returns ip address prefix length from netmask.
-
#wildmask(family, length) ⇒ Object
returns an IOS wildmask.
Instance Method Details
#bits(family) ⇒ Object
22 23 24 |
# File 'lib/puppet/util/network_device/ipcalc.rb', line 22 def bits(family) family == Socket::AF_INET6 ? 128 : 32 end |
#fullmask(family) ⇒ Object
26 27 28 |
# File 'lib/puppet/util/network_device/ipcalc.rb', line 26 def fullmask(family) (1 << bits(family)) - 1 end |
#linklocal?(ip) ⇒ Boolean
65 66 |
# File 'lib/puppet/util/network_device/ipcalc.rb', line 65 def linklocal?(ip) end |
#mask(family, length) ⇒ Object
30 31 32 |
# File 'lib/puppet/util/network_device/ipcalc.rb', line 30 def mask(family, length) (1 << (bits(family) - length)) - 1 end |
#netmask(family, length) ⇒ Object
returns ip address netmask from prefix length
35 36 37 |
# File 'lib/puppet/util/network_device/ipcalc.rb', line 35 def netmask(family, length) IPAddr.new(fullmask(family) & ~mask(family, length) , family) end |
#parse(value) ⇒ Object
12 13 14 15 16 17 18 19 20 |
# File 'lib/puppet/util/network_device/ipcalc.rb', line 12 def parse(value) case value when /^(#{IP})\/(\d+)$/ # 12.34.56.78/24, a001:b002::efff/120, c444:1000:2000::9:192.168.0.1/112 [$2.to_i,IPAddr.new($1)] when /^(#{IP})$/ # 10.20.30.40, value = IPAddr.new(value) [bits(value.family),value] end end |
#prefix_length(netmask) ⇒ Object
returns ip address prefix length from netmask
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/puppet/util/network_device/ipcalc.rb', line 45 def prefix_length(netmask) mask_addr = netmask.to_i return 0 if mask_addr == 0 length=32 if (netmask.ipv6?) length=128 end mask = mask_addr < 2**length ? length : 128 mask.times do if ((mask_addr & 1) == 1) break end mask_addr = mask_addr >> 1 mask = mask - 1 end mask end |
#wildmask(family, length) ⇒ Object
returns an IOS wildmask
40 41 42 |
# File 'lib/puppet/util/network_device/ipcalc.rb', line 40 def wildmask(family, length) IPAddr.new(mask(family, length) , family) end |