Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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 
Ejemplo n.º 6
0
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