Ejemplo n.º 1
0
	def filter(self):
		if self.non_type_name is not None and self.non_type_name.generate_code() in scope.get_available_types() or self.non_type_name.generate_code() in scope.get_available_variables():
			return True
		if self.opt_type_parameters.type_parameter_list is not None:
			for parameter in self.opt_type_parameters.type_parameter_list.parameter_list:
				if parameter.generate_code() in scope.get_available_types() or parameter.generate_code() in scope.get_available_variables():
					return True
		return False
Ejemplo n.º 2
0
 def filter(self):
     if self.name.generate_code() in scope.get_available_types():
         return True
     if self.name.generate_code() in scope.get_available_variables():
         return True
     if self.name.generate_code() in scope.get_available_states():
         return True
     return False
Ejemplo n.º 3
0
	def filter(self):
		if self.type_ref.get_type() == "baseType":
			return True
		if self.type_ref.get_type() == "typeName":
			if self.type_ref.get_ref_type() == "extern":
				return True
		if self.type_ref.get_type() == "specializedType":
			return True
		if self.type_ref.get_type() == "headerStackType":
			return True
		if self.name.generate_code() in scope.get_available_types() or self.name.generate_code() in scope.get_available_variables():
			return True
		return False
Ejemplo n.º 4
0
 def filter(self):
     from header_type_declaration import header_type_declaration
     from struct_type_declaration import struct_type_declaration
     if self.type_ref.get_type() == 'specializedType':
         return True
     if self.type_ref.get_type() == 'headerStackType':
         return True
     if self.name.generate_code() in scope.get_available_types(
     ) or self.name.generate_code() in scope.get_available_variables():
         return True
     if isinstance(self.fromObj, header_type_declaration):
         if self.type_ref.get_ref_type(
         ) in self.__class__.header_banned_types:
             return True
     return False
 def generate_netfpga_parser(self):
     available_structs = scope.get_available_types(only_type="struct")
     self.struct_name = available_structs.keys()[randomizer.randint(
         0,
         len(available_structs) - 1)]
     scope.start_local()
     _parameter = parameter(type_ref=prefixed_type(
         value={self.struct_name: available_structs[self.struct_name]}))
     scope.insert_parameter("user_metadata", "struct", _parameter)
     _parser_states = parser_states()
     _parser_states.randomize()
     _parser_local_elements = parser_local_elements()
     _parser_local_elements.randomize()
     code = "parser TopParser(packet_in b,\nout Parsed_packet p,\nout " + self.struct_name + " user_metadata,\nout digest_data_t digest_data,\ninout sume_metadata_t sume_metadata) {\n" + _parser_local_elements.generate_code(
     ) + "\n" + _parser_states.generate_code() + "\n}\n\n"
     scope.stop_local()
     return code
 def generate_bmv2_parser(self):
     available_structs = scope.get_available_types(only_type="struct")
     self.struct_name = available_structs.keys()[randomizer.randint(
         0,
         len(available_structs) - 1)]
     scope.start_local()
     _parameter = parameter(type_ref=prefixed_type(
         value={self.struct_name: available_structs[self.struct_name]}))
     scope.insert_parameter("meta", "struct", _parameter)
     _parser_states = parser_states()
     _parser_states.randomize()
     _parser_local_elements = parser_local_elements()
     _parser_local_elements.randomize()
     code = "parser ParserImpl(packet_in packet,\nout headers_t hdr,\ninout " + self.struct_name + " meta,\ninout standard_metadata_t standard_metadata) {\n" + _parser_local_elements.generate_code(
     ) + "\n" + _parser_states.generate_code() + "\n}\n\n"
     scope.stop_local()
     return code
	def randomize(self):
		available_externs = scope.get_available_types(only_type="extern")
		while True:
			self.extern_name = available_externs.keys()[randomizer.randint(0, len(available_externs)-1)]
			self.non_type_name = non_type_name()
			self.non_type_name.randomize()
			specializations = available_externs[self.extern_name]["specializations"]
			for x in range(0, specializations):
				while True:
					_type_ref = type_ref()
					_type_ref.randomize()
					if not self.specialization_filter(_type_ref):
						break
				self.specializations_refs.append(_type_ref)
			if not self.filter():
				break
		scope.insert_variable(self.non_type_name.generate_code(), "extern_variable", self)
 def generate_netfpga_controls(self):
     available_structs = scope.get_available_types(only_type="struct")
     scope.start_local()
     _parameter = parameter(type_ref=prefixed_type(
         value={self.struct_name: available_structs[self.struct_name]}))
     scope.insert_parameter("user_metadata", "struct", _parameter)
     scope.start_local()
     _control_local_declarations = control_declaration_creation()
     _control_local_declarations.randomize()
     available_tables = scope.get_available_tables()
     table = available_tables.keys()[randomizer.randint(
         0,
         len(available_tables) - 1)]
     scope.stop_local()
     code = "control TopPipe(inout Parsed_packet headers,\ninout " + self.struct_name + " user_metadata,\ninout digest_data_t digest_data,\ninout sume_metadata_t sume_metadata) {\n" + _control_local_declarations.generate_code(
     ) + "\napply {\n" + table + ".apply();\n}\n}\n\n"
     scope.stop_local()
     code += "control TopDeparser(packet_out b, in Parsed_packet p, in " + self.struct_name + " user_metadata,\ninout digest_data_t digest_data,\ninout sume_metadata_t sume_metadata) {\napply {\n}\n}\n\n"
     return code
Ejemplo n.º 9
0
 def randomize(self):
     self.type = randomizer.getRandom(self.probabilities)
     if self.type == 0:
         available_types = scope.get_available_types()
         from type_ref import type_ref
         if len(available_types):
             rnd = randomizer.randint(0, len(available_types) - 1)
             rnd_key = available_types.keys()[rnd]
             specializations = available_types[rnd_key]["specializations"]
             self.value = {rnd_key: available_types[rnd_key]}
             for x in range(0, specializations):
                 while True:
                     _type_ref = type_ref()
                     _type_ref.randomize()
                     if not self.specialization_filter(_type_ref):
                         break
                 self.specializations_refs.append(_type_ref)
     elif self.type == 1:
         self.prefix = dot_prefix()
         # TODO:
         self.value = None
 def generate_bmv2_controls(self):
     available_structs = scope.get_available_types(only_type="struct")
     scope.start_local()
     _parameter = parameter(type_ref=prefixed_type(
         value={self.struct_name: available_structs[self.struct_name]}))
     scope.insert_parameter("meta", "struct", _parameter)
     scope.start_local()
     _control_local_declarations = control_declaration_creation()
     _control_local_declarations.randomize()
     available_tables = scope.get_available_tables()
     table = available_tables.keys()[randomizer.randint(
         0,
         len(available_tables) - 1)]
     scope.stop_local()
     code = "control IngressImpl(inout headers_t hdr,\ninout " + self.struct_name + " meta,\ninout standard_metadata_t standard_metadata) {\n" + _control_local_declarations.generate_code(
     ) + "\napply {\n" + table + ".apply();\n}\n}\n\n"
     scope.stop_local()
     code += "control EgressImpl(inout headers_t hdr,\ninout " + self.struct_name + " meta,\ninout standard_metadata_t standard_metadata) {\napply {\n\n}\n}\n\n"
     code += "control VerifyChecksumImpl(inout headers_t hdr, inout " + self.struct_name + " meta) {\napply {\n\n}\n}\n\n"
     code += "control ComputeChecksumImpl(inout headers_t hdr, inout " + self.struct_name + " meta) {\napply {\n}\n}\n\n"
     code += "control DeparserImpl(packet_out packet, in headers_t hdr) {\napply {\n}\n}\n\n"
     return code
 def filter(self):
     available_types = scope.get_available_types()
     if self.name.generate_code() in available_types:
         return True
     return False