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 \
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 \
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);
void Hardware_waitForTrigger(Hardware *my, void *partEvt)
{
-#if 1
+#if 0
struct timespec tS, *t = &tS;
t->tv_sec = 0;
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);
-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 <unistd.h>
#include <latm.h>
#include "hadtu.h"
-#include "pkt.h"
#include "worker.h"
#include "nettrans.h"
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");
}
}
}
#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;
}
if (0 > retVal) {
msglog(LOG_DEBUG, "recvGeneric: %s\n", strerror(errno));
+ } else {
+ my->pktSize = retVal;
}
return retVal;
}
return NULL;
}
- my->pkt = NULL;
- my->seqNr = 0;
+ my->pktSize = 0;
my->offset = 0;
my->pktsSent = NULL;
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;
}
NetTrans *NetTrans_open(const char *name, size_t bandwidth, Worker *worker)
{
NetTrans *my;
- char *vpi;
- char *vci;
char buf[80];
my = allocMem(sizeof(NetTrans));
return NULL;
}
- my->pkt = allocMem(my->mtuSize);
- my->seqNr = 0;
+ my->pktSize = 0;
my->offset = 0;
sprintf(buf, "%s_%s", name, "pktsSent");
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);
}
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 */
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;
}
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);
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
+++ /dev/null
-static char rcsId[] = "$Id: pkt.c,v 6.1 1999-08-31 10:37:24 muench Stab $";
-
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <time.h>
-#include <sys/types.h>
-
-#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;
-}
+++ /dev/null
-#ifndef PKT_H
-#define PKT_H
-
-#include <hadesstd.h>
-
-#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