diff --git a/genode/dagfs_genode/dagfs_genode.nimble b/genode/dagfs_genode/dagfs_genode.nimble index 5215ef5..041ee14 100644 --- a/genode/dagfs_genode/dagfs_genode.nimble +++ b/genode/dagfs_genode/dagfs_genode.nimble @@ -20,4 +20,4 @@ backend = "cpp" requires "nim >= 0.18.1", "dagfs", "genode" task genode, "Build for Genode": - exec "nimble build --os:genode -d:posix -d:tcpdebug" + exec "nimble build --os:genode -d:posix" diff --git a/genode/dagfs_genode/src/dagfs_client.nim b/genode/dagfs_genode/src/dagfs_client.nim index fc6d514..64f0317 100644 --- a/genode/dagfs_genode/src/dagfs_client.nim +++ b/genode/dagfs_genode/src/dagfs_client.nim @@ -119,7 +119,7 @@ proc fendGetBuffer(s: DagfsStore; cid: Cid; buf: pointer; len: Natural): int = let pktBuf = fend.cpp.packetContent ack assert(not pktBuf.isNil, "ack packet has nil content") assert(ack.len <= len) - assert(ack.len > 0) + assert(0 < ack.len) result = ack.len copyMem(buf, pktBuf, result) if pkt.size > 0: @@ -189,12 +189,13 @@ proc newDagfsBackend*(env: GenodeEnv; store: DagfsStore; label = ""; bufferSize let buf = bend.cpp.packetContent(pkt) cid = pkt.cid - case pkt.operation + case pkt.op of GET: + pkt.setOp(PUT) try: let n = store.getBuffer(cid, buf, pkt.size) pkt.setLen(n) - bend.cpp.submitPacket(pkt, cid.toHex, PUT) + bend.cpp.submitPacket(pkt) except MissingChunk: pkt.setError(MISSING) bend.cpp.submitPacket(pkt) diff --git a/genode/dagfs_genode/src/dagfs_server.nim b/genode/dagfs_genode/src/dagfs_server.nim index 27fecac..7d6e97a 100644 --- a/genode/dagfs_genode/src/dagfs_server.nim +++ b/genode/dagfs_genode/src/dagfs_server.nim @@ -94,7 +94,7 @@ proc isPending(fend: Frontend; cid: Cid): bool = proc isPending(fend: Session; cid: Cid; op: DagfsOpcode): bool = if fend.cpp.packetAvail and fend.cpp.readyToAck: let pkt = fend.cpp.peekPacket() - result = (pkt.operation == op and cid == pkt.cid) + result = (pkt.op == op and cid == pkt.cid) proc processPacket(backends: Backends; fend: Frontend): bool = if backends.len < 1: @@ -106,7 +106,7 @@ proc processPacket(backends: Backends; fend: Frontend): bool = let pkt = fend.cpp.peekPacket cid = pkt.cid - op = pkt.operation + op = pkt.op case op of GET: for bend in backends.values: @@ -129,13 +129,13 @@ proc processPacket(frontends: Frontends; bend: Backend): bool = let pkt = bend.cpp.getPacket cid = pkt.cid - op = pkt.operation + op = pkt.op case op of PUT: - assert(0 < pkt.len) for fend in frontends.values: if fend.isPending(cid, GET): var ack = fend.cpp.getPacket + ack.setError(pkt.error) if ack.size < pkt.len: ack.setError(OVERSIZE) fend.cpp.acknowledgePacket(ack) @@ -148,7 +148,7 @@ proc processPacket(frontends: Frontends; bend: Backend): bool = if fend.isPending(cid, PUT): fend.cpp.acknowledgePacket(fend.cpp.getPacket, cid, IDLE) else: - echo "invalid backend packet operation from ", bend.label + echo "invalid ", op, " packet from backend ", bend.label bend.idle.addLast pkt true diff --git a/genode/dagfs_genode/src/dagfs_session.nim b/genode/dagfs_genode/src/dagfs_session.nim index f112144..88e0c17 100644 --- a/genode/dagfs_genode/src/dagfs_session.nim +++ b/genode/dagfs_genode/src/dagfs_session.nim @@ -38,7 +38,12 @@ proc cid*(p: DagfsPacket): Cid = parseCid $p.cidStr proc setCid*(p: var DagfsPacket; cid: cstring) {.importcpp: "#.cid(@)".} proc setCid*(p: var DagfsPacket; cid: Cid) = p.setCid(cid.toHex()) -proc operation*(pkt: DagfsPacket): DagfsOpcode {.importcpp.} + + +proc op*(pkt: DagfsPacket): DagfsOpcode {.importcpp.} + +proc setOp*(p: var DagfsPacket; op: DagfsOpcode) {.importcpp: "op".} + proc len*(pkt: DagfsPacket): csize {.importcpp: "length".} ## Logical packet length. proc setLen*(pkt: var DagfsPacket; len: int) {.importcpp: "length".} diff --git a/genode/include/dagfs_session/dagfs_session.h b/genode/include/dagfs_session/dagfs_session.h index 1433ac3..9a3670f 100644 --- a/genode/include/dagfs_session/dagfs_session.h +++ b/genode/include/dagfs_session/dagfs_session.h @@ -71,13 +71,14 @@ struct Dagfs::Packet final : Genode::Packet_descriptor { } Cid const &cid() const { return _cid; } - Opcode operation() const { return _op; } + Opcode op() const { return _op; } size_t length() const { return _length; } Error error() const { return _err; } void cid(char const *hex) { _cid = Cid(hex); } + void op(Opcode o) { _op = o; } void length(size_t len) { _length = len; } - void error(Error err) { _err = err; } + void error(Error err) { _err = err; } }; diff --git a/src/dagfs/stores.nim b/src/dagfs/stores.nim index 386e5c6..6dcdb02 100644 --- a/src/dagfs/stores.nim +++ b/src/dagfs/stores.nim @@ -44,7 +44,7 @@ proc getBuffer*(s: DagfsStore; cid: Cid; buf: pointer; len: Natural): int = assert(0 < len) assert(not s.getBufferImpl.isNil) result = s.getBufferImpl(s, cid, buf, len) - assert(result > 0) + assert(0 < result) proc get*(s: DagfsStore; cid: Cid; result: var string) = ## Retrieve a raw block from the store.