def build_read_version(self): TMP1 = "let v = `NicVersion;" TMP2 = "indication.read_version_rsp(v);" name = "read_version" rtype = "Action" params = "Bit#(32) version" stmt = [] stmt.append(ast.Template(TMP1)) stmt.append(ast.Template(TMP2)) req = ast.Method(name, rtype, stmt=stmt) rsp = ast.Method(name + "_rsp", rtype, params) return req, rsp
def emitInterface(self, builder): iname = CamelCase(self.name) table_intf = ast.Interface(typedef=iname) intf0 = ast.Interface("next", "Client#(MetadataRequest, MetadataResponse)") intf1 = ast.Method("set_verbosity", "Action", "int verbosity") table_intf.subinterfaces.append(intf0) table_intf.subinterfaces.append(intf1) table_intf.emitInterfaceDecl(builder)
def emitInterface(self, builder): logger.info("emitBasicBlockIntf: {}".format(self.name)) iname = CamelCase(self.name) stmt = [] stmt += self.clientInterfaces stmt += self.serverInterfaces intf = ast.Interface(typedef=iname) intf.subinterfaces = stmt intf1 = ast.Method("set_verbosity", "Action", "int verbosity") intf.subinterfaces.append(intf1) intf.emitInterfaceDecl(builder)
def build_verbosity(self): TMP = [] TMP.append("hostchan.set_verbosity(unpack(verbosity));") TMP.append("txchan.set_verbosity(unpack(verbosity));") TMP.append("ingress.set_verbosity(unpack(verbosity));") stmt = [] for t in TMP: stmt.append(ast.Template(t)) name = "set_verbosity" rtype = "Action" params = "Bit#(32) verbosity" req = ast.Method(name, rtype, params, stmt=stmt) return req
def build_writePacketData(self): TMP = [] TMP.append("EtherData beat = defaultValue;") TMP.append("beat.data = pack(reverse(data));") TMP.append("beat.mask = pack(reverse(mask));") TMP.append("beat.sop = unpack(sop);") TMP.append("beat.eop = unpack(eop);") TMP.append("hostchan.writeServer.writeData.put(beat);") name = "writePacketData" rtype = "Action" params = "Vector#(2, Bit#(64)) data, Vector#(2, Bit#(8)) mask, Bit#(1) sop, Bit#(1) eop" stmt = [] for t in TMP: stmt.append(ast.Template(t)) req = ast.Method(name, rtype, params, stmt=stmt) return req
def emitInterface(self, builder): logger.info("emitTable: {}".format(self.name)) TMP1 = "prev_control_state_%(id)s" TMP2 = "Server #(MetadataRequest, %(ty_metadata)s)" TMP3 = "next_control_state_%(id)s" TMP4 = "Client #(BBRequest, BBResponse)" iname = CamelCase(self.name) intf = ast.Interface(typedef=iname) s_intf = ast.Interface(TMP1 % {"id": 0}, TMP2 % {"ty_metadata": iname + "Response"}) intf.subinterfaces.append(s_intf) for idx, _ in enumerate(self.actions): c_intf = ast.Interface(TMP3 % {"id": idx}, TMP4) intf.subinterfaces.append(c_intf) intf1 = ast.Method("set_verbosity", "Action", "int verbosity") intf.subinterfaces.append(intf1) intf.emitInterfaceDecl(builder)