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
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
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
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
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