def __parse_flow_match(self, flow_match): parts = flow_match.split(" ") match = wildcard_create_bit_repeat(self.format["length"], 3) num_fields = 0 for part in parts: if not part.startswith("priority") and part != "": fv = part.split("=") field = fv[0] value = fv[1] if field == "dl_src" or field == "dl_dst": ''' m = mac_to_int(value) if m != 0: set_header_field(self.format, match, field, m, 0) ''' pass elif field == "nw_src" or field == "nw_dst": num_fields += 1 (ip, subnet) = dotted_subnet_to_int(value) set_header_field(self.format, match, field, ip, 32 - subnet) elif field == "nw_tos": num_fields += 1 set_header_field(self.format, match, field, int(value), 0) elif field == "dl_type": num_fields += 1 set_header_field(self.format, match, field, l2_proto_to_int(value), 0) if num_fields > 0: return match else: return None
def __parse_flow_match(self,flow_match): parts = flow_match.split(" ") match = wildcard_create_bit_repeat(self.format["length"],3) num_fields = 0 for part in parts: if not part.startswith("priority") and part != "": fv = part.split("=") field = fv[0] value = fv[1] if field == "dl_src" or field=="dl_dst": ''' m = mac_to_int(value) if m != 0: set_header_field(self.format, match, field, m, 0) ''' pass elif field == "nw_src" or field == "nw_dst": num_fields += 1 (ip,subnet) = dotted_subnet_to_int(value) set_header_field(self.format, match, field, ip, 32-subnet) elif field == "nw_tos": num_fields += 1 set_header_field(self.format, match, field, int(value), 0) elif field == "dl_type": num_fields += 1 set_header_field(self.format, match, field, l2_proto_to_int(value), 0) if num_fields > 0: return match else: return None
def parse_new_rule_tokens(tokens, mapf, rtr): in_ports = [] out_ports = [] match = wildcard_create_bit_repeat(HS_FORMAT["length"], 0x3) mask = None rw = None for token in tokens: parts = token.split("=") field_name = parts[0] if field_name.startswith("new"): if mask == None: mask = wildcard_create_bit_repeat(HS_FORMAT["length"], 0x2) rw = wildcard_create_bit_repeat(HS_FORMAT["length"], 0x1) field_name = field_name[4:] if field_name in ["ip_src", "ip_dst"]: [value, left_mask] = dotted_subnet_to_int(parts[1]) right_mask = 32 - left_mask else: value = int(parts[1]) right_mask = 0 set_header_field(cisco_router.HS_FORMAT(), mask, field_name, 0, right_mask) set_header_field(cisco_router.HS_FORMAT(), rw, field_name, value, right_mask) else: if field_name in ["in_ports", "out_ports"]: ports = parts[1].split(",") ports_int = [] for port in ports: ports_int.append(int(mapf[rtr][port])) if field_name == "in_ports": in_ports = ports_int else: out_ports = ports_int else: if field_name in ["ip_src", "ip_dst"]: [value, left_mask] = dotted_subnet_to_int(parts[1]) right_mask = 32 - left_mask else: value = int(parts[1]) right_mask = 0 set_header_field(cisco_router.HS_FORMAT(), match, field_name, value, right_mask) rule = TF.create_standard_rule(in_ports, match, out_ports, mask, rw, "", []) return rule
def parse_new_rule_tokens(tokens,mapf,rtr): in_ports = [] out_ports = [] match = wildcard_create_bit_repeat(HS_FORMAT["length"],0x3) mask = None rw = None for token in tokens: parts = token.split("=") field_name = parts[0] if field_name.startswith("new"): if mask == None: mask = wildcard_create_bit_repeat(HS_FORMAT["length"],0x2) rw = wildcard_create_bit_repeat(HS_FORMAT["length"],0x1) field_name = field_name[4:] if field_name in ["ip_src","ip_dst"]: [value,left_mask] = dotted_subnet_to_int(parts[1]) right_mask = 32 - left_mask else: value = int(parts[1]) right_mask = 0 set_header_field(cisco_router.HS_FORMAT(), mask, field_name, 0, right_mask) set_header_field(cisco_router.HS_FORMAT(), rw, field_name, value, right_mask) else: if field_name in ["in_ports","out_ports"]: ports = parts[1].split(",") ports_int = [] for port in ports: ports_int.append(int(mapf[rtr][port])) if field_name == "in_ports": in_ports = ports_int else: out_ports = ports_int else: if field_name in ["ip_src","ip_dst"]: [value,left_mask] = dotted_subnet_to_int(parts[1]) right_mask = 32 - left_mask else: value = int(parts[1]) right_mask = 0 set_header_field(cisco_router.HS_FORMAT(), match, field_name, value, right_mask) rule = TF.create_standard_rule(in_ports, match, out_ports, mask, rw, "", []) return rule
def make_header(h_desc): all_x = wildcard_create_bit_repeat(cisco_router.HS_FORMAT()["length"],0x3) parts = h_desc.split(",") fields = ["vlan", "ip_src", "ip_dst", "ip_proto", "transport_src", "transport_dst"] for part in parts: tmp = part.split("=") field = tmp[0] value = tmp[1] if field in ["ip_src","ip_dst"]: (ip,sub) = dotted_subnet_to_int(value) set_header_field(cisco_router.HS_FORMAT(), all_x, field, ip, 32-sub) else: set_header_field(cisco_router.HS_FORMAT(), all_x, field, int(value), 0) return all_x