class Tinet::Command::Up

Public Instance Methods

run() click to toggle source
# File lib/tinet/command/up.rb, line 6
def run
  exec_pre_cmd
  exec_pre_init

  # Create Nodes and Switches
  nodes.each { |node| node_up(node) }
  switches.each { |switch| switch_up(switch) }

  # Create Links
  links.each { |link| link_up(link) }

  # Attach physnet / veth to Conitaner
  nodes.each do |node|
    node.interfaces.each do |interface|
      case interface.type
      when :phys
        koko_physnet("#{namespaced(node.name)}", interface.name)
      when :veth
        sudo "ip link add #{interface.name} type veth peer name #{interface.args}"
        koko_physnet("#{namespaced(node.name)}", interface.name)
        sudo "ip link set #{interface.args} up"
      end
    end
  end

  exec_post_init
end

Private Instance Methods

all() click to toggle source
# File lib/tinet/command/up.rb, line 36
def all
  @options[:all]
end
koko_physnet(container, netif) click to toggle source
# File lib/tinet/command/up.rb, line 96
def koko_physnet(container, netif)
  mount_docker_netns(container, container)
  sudo "ip link set dev #{netif} netns #{container}"
  sudo "ip netns exec #{container} ip link set #{netif} up"
  sudo "ip netns del #{container}"
end
kokobr(bridge, container, ifname) click to toggle source
# File lib/tinet/command/up.rb, line 78
def kokobr(bridge, container, ifname)
  mount_docker_netns(container, container)
  sudo "ip link add name #{ifname} type veth peer name #{container}-#{ifname}"
  sudo "ip link set dev #{ifname} netns #{container}"
  sudo "ip link set #{container}-#{ifname} up"
  sudo "ip netns exec #{container} ip link set #{ifname} up"
  sudo "ip netns del #{container}"
  sudo "ovs-vsctl add-port #{bridge} #{container}-#{ifname}"
end
kokobr_netns(bridge, container, ifname) click to toggle source
# File lib/tinet/command/up.rb, line 88
def kokobr_netns(bridge, container, ifname)
  sudo "ip link add name #{ifname} type veth peer name #{container}-#{ifname}"
  sudo "ip link set dev #{ifname} netns #{container}"
  sudo "ip link set #{container}-#{ifname} up"
  sudo "ip netns exec #{container} ip link set #{ifname} up"
  sudo "ovs-vsctl add-port #{bridge} #{container}-#{ifname}"
end
node_up(node) click to toggle source

@param node [Tinet::Node]

# File lib/tinet/command/up.rb, line 41
def node_up(node)
  case node.type
  when :docker
    sudo "docker run -td --hostname #{node.name} --net=none --name #{namespaced(node.name)} --rm --privileged #{node.image}"
  when :netns
    sudo "ip netns add #{namespaced(node.name)}"
  end
end
switch_up(switch) click to toggle source

@param switch [Tinet::Switch]

# File lib/tinet/command/up.rb, line 51
def switch_up(switch)
  sudo "ovs-vsctl add-br #{namespaced(switch.name)}"
  sudo "ip link set #{namespaced(switch.name)} up"
end