From 6805aa9f97f2d9c45f13bca6f15b4efe176b8b2b Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 20 Sep 2000 13:52:32 +0000 Subject: [PATCH] After join with new-segment-and-reassembly branch --- hadaq/Makefile | 7 ++- hadaq/hwsoft.c | 7 +-- hadaq/nettrans.c | 130 ++++++++++++++++------------------------------- hadaq/nettrans.h | 5 +- hadaq/param.tcl | 8 ++- hadaq/pkt.c | 48 ----------------- hadaq/pkt.h | 95 ---------------------------------- 7 files changed, 60 insertions(+), 240 deletions(-) delete mode 100644 hadaq/pkt.c delete mode 100644 hadaq/pkt.h diff --git a/hadaq/Makefile b/hadaq/Makefile index dcb31c0..979d181 100644 --- a/hadaq/Makefile +++ b/hadaq/Makefile @@ -32,13 +32,13 @@ DAQ_MEMNET_OBJS = memnet.o \ worker.o \ shmtrans.o semaphore.o hadtuqueue.o \ psxshm.o mman.o \ - nettrans.o pkt.o \ + nettrans.o \ hadtu.o DAQ_NETMEM_OBJS = netmem.o \ worker.o \ shmtrans.o semaphore.o hadtuqueue.o \ psxshm.o mman.o \ - nettrans.o pkt.o \ + nettrans.o \ hadtu.o DAQ_EVTBUILD_OBJS = evtbuild.o \ worker.o \ @@ -166,14 +166,13 @@ memnet.o: memnet.c shmtrans.h semaphore.h psxshm.h hadtuqueue.h \ mman.o: mman.c mman.h netmem.o: netmem.c worker.h psxshm.h nettrans.h hadtu.h shmtrans.h \ semaphore.h hadtuqueue.h -nettrans.o: nettrans.c grmblfx.h hadtu.h pkt.h worker.h psxshm.h \ +nettrans.o: nettrans.c grmblfx.h hadtu.h worker.h psxshm.h \ nettrans.h online.o: online.c evt.h hadtu.h subevt.h online.h online_clnt.o: online_clnt.c online.h online_svc.o: online_svc.c online.h online_xdr.o: online_xdr.c online.h param.o: param.c param.h -pkt.o: pkt.c pkt.h hadtu.h psxshm.o: psxshm.c mman.h psxshm.h rc.o: rc.c rc.h readout.o: readout.c grmblfx.h hardware.h shmtrans.h semaphore.h \ diff --git a/hadaq/hwsoft.c b/hadaq/hwsoft.c index 3abe546..2de1b46 100644 --- a/hadaq/hwsoft.c +++ b/hadaq/hwsoft.c @@ -31,7 +31,7 @@ Hardware *newHardware(void) Param *param; my = allocMem(sizeof(Hardware)); - my->maxSubEvtSize = 3 * SubEvt_hdrSize() + 1001 * sizeof(UInt4); + my->maxSubEvtSize = 2 * SubEvt_hdrSize() + 5004 * sizeof(UInt4); param = allocMem(sizeof(Param)); conParam(param); @@ -47,7 +47,7 @@ void deleteHardware(Hardware *my) void Hardware_waitForTrigger(Hardware *my, void *partEvt) { -#if 1 +#if 0 struct timespec tS, *t = &tS; t->tv_sec = 0; @@ -100,15 +100,16 @@ void readoutSoft(void *subEvt) data += (int) ((1000.0 * rand()) / RAND_MAX); data += (int) ((1000.0 * rand()) / RAND_MAX); data += (int) ((1000.0 * rand()) / RAND_MAX); - data += (int) ((1000.0 * rand()) / RAND_MAX); #endif size = (char *)data - (char *)subEvt; id = SubEvtId_test1; +#if 0 if (size > 1000) { size = 1000; id |= 0x80000000; } +#endif SubEvt_setSize(subEvt, size); SubEvt_setId(subEvt, id); SubEvt_setTrigNr(subEvt, trigTag); diff --git a/hadaq/nettrans.c b/hadaq/nettrans.c index 0351b25..ec30ce1 100644 --- a/hadaq/nettrans.c +++ b/hadaq/nettrans.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.15 2000-06-07 12:13:50 hades Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.16 2000-09-20 13:52:32 hades Exp $"; #define _GNU_SOURCE #include @@ -20,7 +20,6 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had #include #include "hadtu.h" -#include "pkt.h" #include "worker.h" #include "nettrans.h" @@ -190,7 +189,7 @@ int sendGeneric(NetTrans *my) { switch (my->type) { case NetTransType_atm: - retVal = LAtm_send(my->lAtm, my->pkt, Pkt_size(my->pkt)); + retVal = LAtm_send(my->lAtm, my->pkt, my->pktSize); if (0 > retVal) { LAtm_perror("LAtm_send"); } @@ -207,11 +206,11 @@ int sendGeneric(NetTrans *my) { } } #endif - retVal = send(my->fd, my->pkt, Pkt_size(my->pkt), 0); + retVal = send(my->fd, my->pkt, my->pktSize, 0); break; } - if (retVal != Pkt_size(my->pkt)) { + if (retVal != my->pktSize) { retVal = -1; } @@ -247,6 +246,8 @@ int recvGeneric(NetTrans *my) { if (0 > retVal) { msglog(LOG_DEBUG, "recvGeneric: %s\n", strerror(errno)); + } else { + my->pktSize = retVal; } return retVal; } @@ -269,8 +270,7 @@ NetTrans *NetTrans_create(const char *name, size_t bandwidth, Worker *worker) return NULL; } - my->pkt = NULL; - my->seqNr = 0; + my->pktSize = 0; my->offset = 0; my->pktsSent = NULL; @@ -280,10 +280,12 @@ NetTrans *NetTrans_create(const char *name, size_t bandwidth, Worker *worker) my->pktsReceived = Worker_addStatistic(worker, buf); sprintf(buf, "%s_%s", name, "pktsDiscarded"); my->pktsDiscarded = Worker_addStatistic(worker, buf); - sprintf(buf, "%s_%s", name, "msgsDiscarded"); - my->msgsDiscarded = Worker_addStatistic(worker, buf); sprintf(buf, "%s_%s", name, "msgsReceived"); my->msgsReceived = Worker_addStatistic(worker, buf); + sprintf(buf, "%s_%s", name, "msgsDiscarded"); + my->msgsDiscarded = Worker_addStatistic(worker, buf); + sprintf(buf, "%s_%s", name, "bytesReceived"); + my->bytesReceived = Worker_addStatistic(worker, buf); return my; } @@ -291,8 +293,6 @@ NetTrans *NetTrans_create(const char *name, size_t bandwidth, Worker *worker) NetTrans *NetTrans_open(const char *name, size_t bandwidth, Worker *worker) { NetTrans *my; - char *vpi; - char *vci; char buf[80]; my = allocMem(sizeof(NetTrans)); @@ -301,8 +301,7 @@ NetTrans *NetTrans_open(const char *name, size_t bandwidth, Worker *worker) return NULL; } - my->pkt = allocMem(my->mtuSize); - my->seqNr = 0; + my->pktSize = 0; my->offset = 0; sprintf(buf, "%s_%s", name, "pktsSent"); @@ -313,15 +312,15 @@ NetTrans *NetTrans_open(const char *name, size_t bandwidth, Worker *worker) my->bytesSent = Worker_addStatistic(worker, buf); my->pktsReceived = NULL; my->pktsDiscarded = NULL; - my->msgsDiscarded = NULL; my->msgsReceived = NULL; + my->msgsDiscarded = NULL; + my->bytesReceived = NULL; return my; } void NetTrans_close(NetTrans *my) { - freeMem(my->pkt); closeGeneric(my); freeMem(my); } @@ -334,50 +333,40 @@ void NetTrans_remove(NetTrans *my) int NetTrans_send(NetTrans *my, void *hadTu) { - int i; - int msgIsComplete; + size_t pktSize; - Pkt_setDecoding(my->pkt, PktDecoding_default); - Pkt_setId(my->pkt, PktId_bom); + for (my->offset = 0; my->offset < HadTu_size(hadTu); my->offset += pktSize) { + my->pkt = hadTu + my->offset; + pktSize = min(my->mtuSize, HadTu_size(hadTu) - my->offset); - i = 0; - msgIsComplete = 0; - do { - size_t payload; - - payload = min(my->mtuSize - Pkt_hdrSize(), HadTu_size(hadTu) - i); - - memcpy(Pkt_data(my->pkt), (char *) hadTu + i, payload); - Pkt_setSize(my->pkt, payload + Pkt_hdrSize()); - - i += payload; - if (i == HadTu_size(hadTu)) { - Pkt_setId(my->pkt, Pkt_id(my->pkt) | PktId_eom); - msgIsComplete = 1; - (*my->msgsSent)++; + /* we reserve pkts < 32 Byte for control messages */ + if (pktSize < 32) { + my->pktSize = 32; + } else { + my->pktSize = pktSize; } - Pkt_setSeqNr(my->pkt, my->seqNr++); if (0 > sendGeneric(my)) { return -1; } (*my->pktsSent)++; - (*my->bytesSent) += Pkt_size(my->pkt); - Pkt_setId(my->pkt, Pkt_id(my->pkt) & ~PktId_bom); - } while (!msgIsComplete); + } + + /* mark the end of message */ + my->pkt = hadTu; + my->pktSize = 24; + + if (0 > sendGeneric(my)) { + return -1; + } + (*my->msgsSent)++; + (*my->bytesSent) += my->offset; return 0; } static int assembleMsg(NetTrans *my, void *hadTu, size_t size) { int retVal; - int i; - int pktIsOk; - UInt4 savedHdr[4]; - UInt4 pktHdrSize; - UInt4 pktSize; - UInt4 pktId; - UInt4 pktSeqNr; /* BUGBUG quickhack for flushing the input data. Properly in one of */ /* the parent functions this should be handled, but this would need */ @@ -392,57 +381,26 @@ static int assembleMsg(NetTrans *my, void *hadTu, size_t size) freeMem(my->pkt); return 0; } - /* for in situ assembly of the pkts we receive the data "a little bit in - front of the beginning", save that data, and copy it back. CAUTION: - Pkt_hdrSize() bytes in front of hadTu must be accessible! */ - pktHdrSize = Pkt_hdrSize(); - assert(sizeof(savedHdr) >= pktHdrSize); - - my->pkt = (char *) hadTu + my->offset - pktHdrSize; - memcpy(savedHdr, my->pkt, pktHdrSize); + my->pkt = hadTu + my->offset; if (0 > recvGeneric(my)) { abort(); } - (*my->pktsReceived)++; - pktSize = Pkt_size(my->pkt); - pktId = Pkt_id(my->pkt); - pktSeqNr = Pkt_seqNr(my->pkt); - memcpy(my->pkt, savedHdr, pktHdrSize); - my->pkt = NULL; - - if ((pktId & PktId_bom) != 0) { /* start of new msg */ - if (my->offset != 0) { - (*my->msgsDiscarded)++; - (*my->pktsDiscarded)++; - my->offset = 0; - pktIsOk = 0; - } else { - my->seqNr = pktSeqNr; - pktIsOk = 1; - } - } else { - if (my->seqNr != pktSeqNr) { - (*my->pktsDiscarded)++; - my->offset = 0; - pktIsOk = 0; - } else { - pktIsOk = 1; - } - } - if (pktIsOk) { - my->seqNr++; - if ((pktId & PktId_eom) == 0) { - my->offset += pktSize - pktHdrSize;; + if (my->pktSize != 24) { + my->offset += my->pktSize; + (*my->pktsReceived)++; + retVal = 0; + } else { + if (my->offset < HadTu_size(my->pkt) || memcmp(my->pkt, hadTu, 24)) { + (*my->msgsDiscarded)++; retVal = 0; } else { (*my->msgsReceived)++; - my->offset = 0; + (*my->bytesReceived) += my->offset; retVal = 1; } - } else { - retVal = 0; + my->offset = 0; } return retVal; } diff --git a/hadaq/nettrans.h b/hadaq/nettrans.h index 42f7060..2bd9e98 100644 --- a/hadaq/nettrans.h +++ b/hadaq/nettrans.h @@ -20,15 +20,16 @@ typedef struct NetTransS { size_t mtuSize; int fd; void *pkt; - UInt4 seqNr; + size_t pktSize; size_t offset; unsigned long *pktsSent; unsigned long *msgsSent; unsigned long *bytesSent; unsigned long *pktsReceived; unsigned long *pktsDiscarded; - unsigned long *msgsDiscarded; unsigned long *msgsReceived; + unsigned long *msgsDiscarded; + unsigned long *bytesReceived; } NetTrans; int NetTrans_invariant(const NetTrans *my); diff --git a/hadaq/param.tcl b/hadaq/param.tcl index bb8db5a..147d891 100644 --- a/hadaq/param.tcl +++ b/hadaq/param.tcl @@ -1,10 +1,14 @@ set evtbuild(file) ./daq_evtbuild -set evtbuild(args) "daq_evtbuild -s 1 -a" +set evtbuild(args) "daq_evtbuild -s 1 -m 1 -a" +set netmem(file) ./daq_netmem +set netmem(args) "daq_netmem -a -i UDP:0.0.0.0:3000 -m 1" +set memnet(file) ./daq_memnet +set memnet(args) "daq_memnet -a -o UDP:129.187.154.22:3000 -w 0" set readout(file) ./daq_readout set readout(args) "daq_readout -a" set sam0(cardbase) 0x9C000000 -set soft(size) 1024 +set soft(size) 10240 set dtu(cardbase) 0x44100000 diff --git a/hadaq/pkt.c b/hadaq/pkt.c deleted file mode 100644 index d680a0f..0000000 --- a/hadaq/pkt.c +++ /dev/null @@ -1,48 +0,0 @@ -static char rcsId[] = "$Id: pkt.c,v 6.1 1999-08-31 10:37:24 muench Stab $"; - -#include -#include -#include -#include -#include - -#include "pkt.h" - -char *Pkt_2charP(const void *my) -{ - static char buf[132]; - - sprintf(buf, "size: 0x%08x\tdecoding: 0x%08x\tid: 0x%08x\tseqNr: 0x%08x", - Pkt_size(my), Pkt_decoding(my), Pkt_id(my), Pkt_seqNr(my)); - - return buf; -} - -void *newPkt(UInt4 decoding, UInt4 id, UInt4 seqNr) -{ - void *my; - - my = allocMem(Pkt_hdrSize()); - - Pkt_setSize(my, Pkt_hdrSize()); - Pkt_setDecoding(my, decoding); - Pkt_setId(my, id); - Pkt_setSeqNr(my, seqNr); - - return my; -} - -void deletePkt(void *my) -{ - freeMem(my); -} - -void *Pkt_appendData(void *my, const void *data, size_t size) -{ - - my = reallocMem(my, Pkt_paddedSize(my) + size); - memcpy(Pkt_end(my), data, size); - Pkt_setSize(my, Pkt_paddedSize(my) + size); - - return my; -} diff --git a/hadaq/pkt.h b/hadaq/pkt.h deleted file mode 100644 index 89f3d29..0000000 --- a/hadaq/pkt.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef PKT_H -#define PKT_H - -#include - -#include "hadtu.h" - -enum PktId { - PktId_bom = 1, - PktId_eom = 2 -}; - -enum PktDecoding { - PktDecoding_default = 98 -}; - -#define Pkt_hdr HadTu_hdr -#define Pkt_isSwapped HadTu_isSwapped -#define Pkt_hdrValue HadTu_hdrValue -#define Pkt_setHdrValue HadTu_setHdrValue -#define Pkt_decoding HadTu_decoding -#define Pkt_setDecoding HadTu_setDecoding -#define Pkt_alignment HadTu_alignment -#define Pkt_size HadTu_size -#define Pkt_setSize HadTu_setSize -#define Pkt_paddedSize HadTu_paddedSize -#define Pkt_begin HadTu_begin -#define Pkt_end HadTu_end -#define Pkt_next HadTu_next - -static size_t Pkt_hdrLen(void); -static size_t Pkt_hdrSize(void); -static size_t Pkt_dataSize(const void *my); -static void *Pkt_data(const void *my); - -static UInt4 Pkt_id(const void *my); -static void Pkt_setId(void *my, UInt4 id); -static UInt4 Pkt_seqNr(const void *my); -static void Pkt_setSeqNr(void *my, UInt4 seqNr); - -char *Pkt_2charP(const void *my); - -void *newPkt(UInt4 decoding, UInt4 id, UInt4 seqNr); -void deletePkt(void *my); -void *Pkt_appendData(void *my, const void *data, size_t size); - -enum PktIdx { - PktIdx_size, - PktIdx_decoding, - PktIdx_id, - PktIdx_seqNr, - PktIdx_data -}; - -static size_t Pkt_hdrLen(void) -{ - return PktIdx_data; -} - -static size_t Pkt_hdrSize(void) -{ - return Pkt_hdrLen() * sizeof(UInt4); -} - -static size_t Pkt_dataSize(const void *my) -{ - return Pkt_size(my) - Pkt_hdrSize(); -} - -static void *Pkt_data(const void *my) -{ - return (void *) ((char *) my + Pkt_hdrSize()); -} - -static UInt4 Pkt_id(const void *my) -{ - return Pkt_hdrValue(my, PktIdx_id); -} - -static void Pkt_setId(void *my, UInt4 id) -{ - Pkt_setHdrValue(my, PktIdx_id, id); -} - -static UInt4 Pkt_seqNr(const void *my) -{ - return Pkt_hdrValue(my, PktIdx_seqNr); -} - -static void Pkt_setSeqNr(void *my, UInt4 seqNr) -{ - Pkt_setHdrValue(my, PktIdx_seqNr, seqNr); -} - -#endif -- 2.43.0