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 set_ip(self, ip, flush=False): cmd = [] if flush: cmd.append("ip addr flush dev " + self.name) cmd.append("ip addr add " + str(ip) + " dev " + self.name) run_in_netns(cmd, self.netns) self.ip = ip self.mask = ipv4.mask_from_suffix(ip.split('/')[1])
def redirect_to(self, ifb): cmds = [ "tc qdisc add dev " + self.name + " handle ffff: ingress", "tc filter add dev " + self.name + """ parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev """ + ifb.name ] #log(str(cmds), logging.CRITICAL) #raw_input("pls check the redirect commands.") run_in_netns(cmds)
def normal_nat(self, wan_ifids, lan_ifid): lan_ip_prefix = ipaddr.ipmask2prefix(self.if_lst[lan_ifid].ip, self.if_lst[lan_ifid].mask) for wan_ifid in wan_ifids: wan_if_name = self.if_lst[wan_ifid].name wan_if_ip = self.if_lst[wan_ifid].ip cmd = """iptables -t nat -A POSTROUTING -s %s -o %s -j SNAT --to %s""" % (lan_ip_prefix, wan_if_name, wan_if_ip) cmd_lst.append(cmd) log("final cmd lst for normal nat:" + str(cmd_lst)) run_in_netns(cmd_lst, self.name)
def shape_traffic(self, node_type, params): cmds = traffic_cmd_compile(params) # determine linux system if name to apply control to if_name = "" netns = None if node_type == ntype.PROUTER: if_name = self.link_if.get_in_if().name netns = self.link_if.get_in_if().netns elif node_type == ntype.SWITCH: if_name = self.link_if.get_out_if().name for i in range(0, len(cmds)): cmds[i] = (cmds[i].format(if_name)) #log(str(cmds)) #raw_input("before shaping the traffic") run_in_netns(cmds, netns)
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!") cmds = traffic_cmd_compile(params, dist_db=dist_db) # determine linux system if name to apply control to if_name = self.link_if.peer[0].name netns = self.link_if.peer[0].netns for i in range(0, len(cmds)): cmds[i] = (cmds[i].format(if_name)) #log(str(cmds)) #raw_input("before shaping the traffic") run_in_netns(cmds, netns)
def enable_ip_forward(self): cmd = ["echo 1 > /proc/sys/net/ipv4/ip_forward"] run_in_netns(cmd, self.name)
def close_out_conn(self): cmd = ["iptables -D OUTPUT -j ACCEPT"] run_in_netns(cmd, self.name)
def open_out_conn(self): cmd = ["iptables -A OUTPUT -j ACCEPT"] run_in_netns(cmd, self.name)
def delete(self): cmd = ["ip link del " + self.name] run_in_netns(cmd, self.netns)
def start(self): cmd = ["ip link set " + self.name + " up"] run_in_netns(cmd, self.netns)
def stop(self): cmd = ["ip link set " + self.name + " down"] run_in_netns(cmd, self.netns)
def allow_established_conn(self): cmd = [("iptables -A INPUT -i " + self.name + " -m state --state ESTABLISHED,RELATED -j ACCEPT")] run_in_netns(cmd, self.netns)
def accept_from_if(self): cmd = ["iptables -A INPUT -i " + self.name + " -j ACCEPT"] run_in_netns(cmd, self.netns)
def unmasq_nat(self): cmd = [ "iptables -t nat -D POSTROUTING -o " + self.name + " -j MASQUERADE" ] run_in_netns(cmd, self.netns)
def connect2br(self, br): cmd = ["ovs-vsctl add-port " + br + " " + self.name] run_in_netns(cmd)