Exemplo n.º 1
0
    def _dump_std_primitives(self, hlir, primitives):
        p4_types = {
            "header_instance": p4_header_instance,
            "int": int,
            "table_entry_data": p4_table_entry_data,
            "field": p4_field,
            "field_list": p4_field_list,
            "field_list_calculation": p4_field_list_calculation,
            "counter": p4_counter,
            "meter": p4_meter,
            "register": p4_register,
        }

        for name, data in primitives.items():
            properties = data["properties"]
            signature = data["args"]
            signature_flags = {}
            for formal, props in properties.items():
                signature_flags[formal] = {}
                access = P4_WRITE if props["access"] == "write" else\
                         P4_READ
                signature_flags[formal]["access"] = access
                type_ = {p4_types[t] for t in props["type"]}
                signature_flags[formal]["type"] = type_
                if "optional" in props:
                    signature_flags[formal]["optional"] = props["optional"]
                if "data_width" in props:
                    signature_flags[formal]["data_width"] = props["data_width"]
            g_action = p4_action(hlir,
                                 name,
                                 signature=signature,
                                 signature_flags=signature_flags)
Exemplo n.º 2
0
def dump_to_p4_P4ActionFunction(self, hlir):
    signature = self.formals
    call_sequence = [call.dump_to_p4(hlir) for call in self.action_body]
    g_action = p4_action(
        hlir, self.name, filename=self.filename, lineno=self.lineno, signature=signature, call_sequence=call_sequence
    )
    g_action._pragmas = self._pragmas.copy()
Exemplo n.º 3
0
def dump_to_p4_P4ActionFunction(self,
                                hlir,
                                program_version=0,
                                config_dir=None):
    if program_version == TestingVersion:
        rename_str = self.name + "  " + self.name + _ShadowFlag_ + "\n"
        if config_dir == None:
            config_dir = "."
        filename = os.path.join(config_dir, ShadowP4Configure)
        with open(filename, 'a+') as fp:
            fp.write(rename_str)
        print 'LOG|HLIR|frontend|Dumper|rename action function:', self.name, '-->', self.name + _ShadowFlag_
        self.name = self.name + _ShadowFlag_
        # print 'DBG|action:', pprint(vars(self))
    signature = self.formals
    call_sequence = [
        call.dump_to_p4(hlir, program_version=program_version)
        for call in self.action_body
    ]
    g_action = p4_action(hlir,
                         self.name,
                         filename=self.filename,
                         lineno=self.lineno,
                         signature=signature,
                         call_sequence=call_sequence)
    g_action._pragmas = self._pragmas.copy()
Exemplo n.º 4
0
    def _dump_std_primitives(self, hlir, primitives):
        p4_types = {
            "header_instance": p4_header_instance,
            "int": int,
            "table_entry_data": p4_table_entry_data,
            "field": p4_field,
            "field_list": p4_field_list,
            "field_list_calculation": p4_field_list_calculation,
            "counter": p4_counter,
            "meter": p4_meter,
            "register": p4_register,
        }

        for name, data in primitives.items():
            properties = data["properties"]
            signature = data["args"]
            signature_flags = {}
            for formal, props in properties.items():
                signature_flags[formal] = {}
                access = P4_WRITE if props["access"] == "write" else P4_READ
                signature_flags[formal]["access"] = access
                type_ = {p4_types[t] for t in props["type"]}
                signature_flags[formal]["type"] = type_
                if "optional" in props:
                    signature_flags[formal]["optional"] = props["optional"]
                if "data_width" in props:
                    signature_flags[formal]["data_width"] = props["data_width"]
            g_action = p4_action(hlir, name, signature=signature, signature_flags=signature_flags)
Exemplo n.º 5
0
def dump_to_p4_P4ActionFunction(self, hlir):
    signature = self.formals
    call_sequence = [call.dump_to_p4(hlir) for call in self.action_body]
    g_action = p4_action(hlir,
                         self.name,
                         filename=self.filename,
                         lineno=self.lineno,
                         signature=signature,
                         call_sequence=call_sequence)
    g_action._pragmas = self._pragmas.copy()