def start_dhcp_on(net_if, range_low, range_high, mask, netns=None): cmd = [('dnsmasq --dhcp-range=' + range_low + ',' + range_high + ',' + mask + ' --interface ' + net_if)] if netns != None: run_in_netns(cmd, netns) else: info_exe(cmd)
def append_if(self, rif_obj): in_if = rif_obj.get_in_if() cmd = "ip link set " + in_if.name + " netns " + self.name in_if.set_netns(self.name) self.if_lst.append(rif_obj) info_exe(cmd) return (len(self.if_lst) - 1)
def shape_traffic(self, params=None, dist_db=None): if params != None: pass elif self.params != None: params = self.params else: log("no traffic params is set!") #log("shaping traffic for:"+str(self.link.name)) cmds = traffic_cmd_compile(params, dist_db=dist_db) # determine linux system if name to apply control to if_name = "" if self.out: new_ifb = ifb.create_new() new_ifb.start() #raw_input("after starting ifb") self.link_if.redirect_to(new_ifb) if_name = new_ifb.name #raw_input("after redirecting to new ifb: "+if_name) else: if_name = self.link_if.name #raw_input("shaping in traffic with vif") for i in range(0, len(cmds)): cmds[i] = (cmds[i].format(if_name)) #log(cmds) #raw_input("in if_link.shape_traffic(): ") info_exe(cmds)
def __init__(self, uname, pwd, template_lst, dist_db=None, ifb_count=0): # ASSUME: we got sudo helper.info_exe('chmod +x ./bash/*') # a list of 'dev' instances self.node_list = [] # a dict that stores <name, template_ref(vm_ref)> pairs self.template_dict = {} self.emp_ids = [0] self.session = xen_net.init_session(uname, pwd) self.init_templates(template_lst) self.switch_set = Set() self.dev_set = Set() self.router_set = Set() self.ssh = xen_net.init_shell('localhost', uname, pwd) self.controlled_link_set = Set() # init a dummy bridge #self.dummy=self.create_new_xbr('dummy', record=False) # TODO: here we need a change self.ifb_count = 0 if ifb_count > 0: ifb.init(ifb_count) self.ifb_count = ifb_count pass # init distribution db self.dist_db = None if dist_db != None: self.init_dist_db(dist_db)
def uninstall(self, session): for neigh in self.neighbors: link_if = self.neighbors[neigh] link_if.delete() if not self.default: session.xenapi.network.destroy(self.br) cmd = "ovs-vsctl del-br " + self.name info_exe(cmd) else: log("default XenSwitch " + self.name + " not being deleted!")
def shutdown(self): cmd = "ip netns list | grep " + self.name output = helper.info_exe(cmd) if self.name in output: cmd = ("ip netns del " + self.name + " && " + "ovs-vsctl del-br " + self.name) helper.info_exe(cmd) log("deletion cmd:" + str(cmd)) else: log("router netns " + self.name + " is not started") return
def shape_traffic(self, params=None): #log("shaping traffic for:"+str(self.link.name)) cmds = traffic_cmd_compile(params) # determine linux system if name to apply control to if_name = "" if node_type == ntype.SWITCH: new_ifb = ifb.create_new() new_ifb.start() self.link_if.redirect_to(new_ifb) if_name = new_ifb.name elif node_type == ntype.DEV: if_name = self.link_if.name else: log("unsupported node type: " + str(node_type)) for i in range(0, len(cmds)): cmds[i] = (cmds[i].format(if_name)) info_exe(cmds)
def check_tap(self): if self.vif_prefix == "tap": return True cmd = "ovs-vsctl list-ports " + self.br_name + " | grep tap" + self.get_name_suffix( ) #log("check_tap in xvif: "+cmd) code = info_exe(cmd) if code == 1: return True else: return False
def add_port(self, port): cmd = "ovs-vsctl add-port " + self.name + " " + port info_exe(cmd)
def create_veth_pairs(peer1, peer2): cmd = "ip link add " + peer1 + " type veth peer name " + peer2 output = info_exe(cmd) if type(output) is str: return linux_netif(peer1), linux_netif(peer2)
def start(self): path = './bash/xrouter_start.sh' cmd = (path + " " + self.name + " " + self.external_if + " " + self.internal_if + " " + self.ipaddr) helper.info_exe(cmd)
def clear(): cmd = "modprobe -r ifb" info_exe(cmd)
def setup(self, name): cmd = "ip netns add " + self.name info_exe(cmd)
def add_if(self, rif_obj, index): in_if = rif_obj.get_in_if() cmd = "ip link set " + in_if.name + " netns " + self.name in_if.set_netns(self.name) self.if_lst[index] = rif_obj info_exe(cmd)
def start_if(self, ifid, switch_name): if_lst=self.get_iflst() cmd="ovs-vsctl add-port "+switch_name+" "+if_lst[ifid].get_out_if().name info_exe(cmd)
def delete(self): cmd = "ip netns del " + self.name output = info_exe(cmd)
def init(total): cmds = "modprobe -r ifb; modprobe ifb numifbs=" + str(total) info_exe(cmds) ifb.ifb_total = total