Sha256: d5fafbedec16f55b0dd8e5370877a8dc091b840f10dca748a010bce1a1130227

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

require 'phut/null_logger'
require 'phut/shell_runner'

module Phut
  # Network virtual link.
  class VirtualLink
    include ShellRunner

    attr_reader :name_a
    attr_reader :name_b
    attr_reader :device_a
    attr_reader :device_b

    def initialize(name_a, device_a, name_b, device_b, logger = NullLogger.new)
      @name_a = name_a
      @device_a = device_a
      @name_b = name_b
      @device_b = device_b
      @logger = logger
    end

    def run
      stop if up?
      add
      up
    end

    def stop
      sh "sudo ip link delete #{@device_a}"
    rescue
      raise "link #{@name_a}-#{@name_b} does not exist!"
    end

    def maybe_stop
      return unless up?
      stop
    end

    def up?
      /^#{@device_a}\s+/ =~ `ifconfig -a`
    end

    private

    def add
      sh "sudo ip link add name #{@device_a} type veth peer name #{@device_b}"
      sh "sudo /sbin/sysctl -w net.ipv6.conf.#{@device_a}.disable_ipv6=1 -q"
      sh "sudo /sbin/sysctl -w net.ipv6.conf.#{@device_b}.disable_ipv6=1 -q"
    end

    def up
      sh "sudo /sbin/ifconfig #{@device_a} up"
      sh "sudo /sbin/ifconfig #{@device_b} up"
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
phut-0.2.2 lib/phut/virtual_link.rb
phut-0.2.0 lib/phut/virtual_link.rb
phut-0.1.0 lib/phut/virtual_link.rb