class AdjacentNicTool

Determine closest NICs to target addresses and provide a default NIC

Constants

AWS_INSTANCE_METADATA_ADDRESS

As good as any address for adjacent NIC address test

Public Class Methods

adjacent_local(addr) click to toggle source

Find closest NIC address to target if we have multiple NICs (reliable local NIC determination) Note: UDP Sockets do NOT send anything on connect

but DO work out what source address will be
used so the port number is irrelevant to this
mechanism.
# File lib/facter/ipaddress_primary.rb, line 32
def self.adjacent_local(addr)
  dummy_sock = UDPSocket.new
  dummy_sock.connect(addr, 1)
  _fam, _port, _name, addr = dummy_sock.addr
  addr
end
default_nic() click to toggle source
# File lib/facter/ipaddress_primary.rb, line 22
def self.default_nic
  nic_translation[default_nic_address]
end
default_nic_address() click to toggle source

The main NIC determined adjacent to the meta address

# File lib/facter/ipaddress_primary.rb, line 10
def self.default_nic_address
  adjacent_local(AWS_INSTANCE_METADATA_ADDRESS)
end
nic_translation() click to toggle source
# File lib/facter/ipaddress_primary.rb, line 14
def self.nic_translation
  nictable = Socket.getifaddrs.map do |nic|
    next unless nic.addr.ipv4?
    [nic.addr.ip_address, nic.name]
  end
  Hash[nictable.compact]
end