Sha256: dbdbba289ac9635ef2ec7f08450e43b9e6c84719dc119c59d529a86e3117d688

Contents?: true

Size: 1 KB

Versions: 38

Compression:

Stored size: 1 KB

Contents

require "ipaddr"

module Vagrant
  module Util
    module NetworkIP
      # Returns the network address of the given IP and subnet.
      #
      # If the IP address is an IPv6 address, subnet should be a prefix
      # length such as "64".
      #
      # @return [String]
      def network_address(ip, subnet)
        # If this is an IPv6 address, then just mask it
        if subnet.to_s =~ /^\d+$/
          ip = IPAddr.new(ip)
          return ip.mask(subnet.to_i).to_s
        end

        ip      = ip_parts(ip)
        netmask = ip_parts(subnet)

        # Bitwise-AND each octet to get the network address
        # in octets and join each part with a period to get
        # the resulting network address.
        ip.map { |part| part & netmask.shift }.join(".")
      end

      protected

      # Splits an IP into the four octets and returns each as an
      # integer in an array.
      #
      # @return [Array<Integer>]
      def ip_parts(ip)
        ip.split(".").map { |i| i.to_i }
      end
    end
  end
end

Version data entries

38 entries across 34 versions & 5 rubygems

Version Path
vagrant-unbundled-2.2.0.0 lib/vagrant/util/network_ip.rb
vagrant-unbundled-2.1.4.0 lib/vagrant/util/network_ip.rb
vagrant-unbundled-2.1.2.0 lib/vagrant/util/network_ip.rb
vagrant-packet-0.1.2 vendor/bundle/ruby/2.4.0/bundler/gems/vagrant-04f7215b5e3f/lib/vagrant/util/network_ip.rb
vagrant-packet-0.1.2 vendor/bundle/ruby/2.3.0/bundler/gems/vagrant-04f7215b5e3f/lib/vagrant/util/network_ip.rb
vagrant-packet-0.1.2 vendor/bundle/ruby/2.5.0/bundler/gems/vagrant-04f7215b5e3f/lib/vagrant/util/network_ip.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.4.0/bundler/gems/vagrant-04f7215b5e3f/lib/vagrant/util/network_ip.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.5.0/bundler/gems/vagrant-04f7215b5e3f/lib/vagrant/util/network_ip.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.3.0/bundler/gems/vagrant-04f7215b5e3f/lib/vagrant/util/network_ip.rb
vagrant-unbundled-2.1.1.0 lib/vagrant/util/network_ip.rb
vagrant-unbundled-2.0.4.0 lib/vagrant/util/network_ip.rb
vagrant-unbundled-2.0.3.0 lib/vagrant/util/network_ip.rb
vagrant-aws-detiber-0.7.2.pre.4 vendor/bundle/ruby/2.3.0/bundler/gems/vagrant-419afb4dcffe/lib/vagrant/util/network_ip.rb
vagrant-aws-detiber-0.7.2.pre.3 vendor/bundle/ruby/2.3.0/bundler/gems/vagrant-419afb4dcffe/lib/vagrant/util/network_ip.rb
vagrant-aws-detiber-0.7.2.pre.2 vendor/bundle/ruby/2.3.0/bundler/gems/vagrant-419afb4dcffe/lib/vagrant/util/network_ip.rb
vagrant-unbundled-2.0.2.0 lib/vagrant/util/network_ip.rb
vagrant-unbundled-2.0.1.0 lib/vagrant/util/network_ip.rb
vagrant-aws-mkubenka-0.7.2.pre.22 vendor/bundle/ruby/2.3.0/bundler/gems/vagrant-f3fdbf414272/lib/vagrant/util/network_ip.rb
vagrant-aws-mkubenka-0.7.2.pre.16 vendor/bundle/ruby/2.3.0/bundler/gems/vagrant-1ee58c40e3f5/lib/vagrant/util/network_ip.rb
vagrant-unbundled-2.0.0.1 lib/vagrant/util/network_ip.rb