From: muench Date: Tue, 2 Nov 1999 05:53:24 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=3979545eaaddad726c44d3d0d52564daab1faa59;p=daqdata.git *** empty log message *** --- diff --git a/hadaq/Makefile b/hadaq/Makefile index 2e82d84..309c9a2 100644 --- a/hadaq/Makefile +++ b/hadaq/Makefile @@ -13,18 +13,18 @@ #DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT -DNOATM # Linux -#CC = gcc -#RPCGEN = rpcgen -k -#LOADLIBES = -L$(HOME)/lib/$(SYSTYPE) -lhadesstd -llvme -#INCLUDES = -I$(HOME)/include -#DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT -DNOATM +CC = gcc +RPCGEN = rpcgen -k +LOADLIBES = -L$(HOME)/lib/$(SYSTYPE) -lhadesstd -llvme +INCLUDES = -I$(HOME)/include +DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT -DNOATM # LynxOS -CC = gcc -RPCGEN = rpcgen -LOADLIBES = -L/usr/local/lib -L$(HOME)/lib/$(SYSTYPE) -lhadesstd -llvme -ltcl -lm -lrpc -lnetinet -L/lib/ces -lvme -lbma -luio -INCLUDES = -I/usr/local/include -I$(HOME)/include -DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT +#CC = gcc +#RPCGEN = rpcgen +#LOADLIBES = -L/usr/local/lib -L$(HOME)/lib/$(SYSTYPE) -lhadesstd -llvme -ltcl -lm -lrpc -lnetinet -L/lib/ces -lvme -lbma -luio +#INCLUDES = -I/usr/local/include -I$(HOME)/include +#DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT # LynxOS #CC = gcc diff --git a/hadaq/hwsoft.c b/hadaq/hwsoft.c index edbf067..e6c9330 100644 --- a/hadaq/hwsoft.c +++ b/hadaq/hwsoft.c @@ -94,11 +94,11 @@ void Hardware_readout(Hardware *my, void *subEvt) *data++ = 0x55aa00FF; *data++ = 0x55aa00FF; *data++ = 0x55aa00FF; -#if 1 - data += (int) ((10000.0 * rand()) / RAND_MAX); - data += (int) ((10000.0 * rand()) / RAND_MAX); - data += (int) ((10000.0 * rand()) / RAND_MAX); - data += (int) ((10000.0 * rand()) / RAND_MAX); +#if 0 + data += (int) ((100.0 * rand()) / RAND_MAX); + data += (int) ((100.0 * rand()) / RAND_MAX); + data += (int) ((100.0 * rand()) / RAND_MAX); + data += (int) ((100.0 * rand()) / RAND_MAX); #endif break; } diff --git a/hadaq/netmem.c b/hadaq/netmem.c index 14108b2..4ad03c0 100644 --- a/hadaq/netmem.c +++ b/hadaq/netmem.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.2 1999-10-06 17:02:06 muench Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.3 1999-11-02 05:53:24 muench Exp $"; #define _XOPEN_SOURCE #include @@ -85,7 +85,7 @@ int main(int argc, char *argv[]) for (i = 0; i < nrOfMsgs; i++) { char buf[80]; - sprintf(buf, "0:%d", i + 50); + sprintf(buf, "ATM:0:%d", i + 50); netTrans[i] = NetTrans_create(buf, 0, worker); sprintf(buf, "netqueue%d", i); diff --git a/hadaq/nettrans.c b/hadaq/nettrans.c index 64f8218..f624f63 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.2 1999-10-06 17:05:08 muench Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.3 1999-11-02 05:53:24 muench Exp $"; #define _XOPEN_SOURCE_EXTENDED #include @@ -28,42 +28,170 @@ static int min(int a, int b) return a < b ? a : b; } -NetTrans *NetTrans_create(const char *name, size_t bandwidth, Worker *worker) -{ - NetTrans *my; - char *vpi; - char *vci; - LAtmAttr lAtmAttrS, *lAtmAttr = &lAtmAttrS; - char buf[80]; +static int openUdp(NetTrans *my, const char *name, int fl) { + return -1; +} - my = allocMem(sizeof(NetTrans)); +static int openAtm(NetTrans *my, int vpi, int vci, size_t bw, int fl) { + int retVal; + LAtmAttr lAtmAttrS, *lAtmAttr = &lAtmAttrS; - strcpy(buf, name); + assert(my != NULL); - if (NULL == (vpi = strtok(buf, ":"))) { - return NULL; - } - if (NULL == (vci = strtok(NULL, ":"))) { - return NULL; - } lAtmAttr->aal = 5; - lAtmAttr->vpi = atoi(vpi); - lAtmAttr->vci = atoi(vci); - lAtmAttr->peakBandwidth = bandwidth; + lAtmAttr->vpi = vpi; + lAtmAttr->vci = vci; + lAtmAttr->peakBandwidth = bw; msglog(LOG_DEBUG, "aal: %d; vpi: %d; vci: %d; bandwidth: %d\n", lAtmAttr->aal, lAtmAttr->vpi, lAtmAttr->vci, lAtmAttr->peakBandwidth); - if (0 > (my->fd = lAtmOpen("/dev/fa0", O_RDONLY))) { - return NULL; + my->fd = lAtmOpen("/dev/fa0", fl); + + if (0 > my->fd) { + retVal = -1; + } else { + switch (fl) { + case O_RDONLY: + retVal = lAtmBind(my->fd, lAtmAttr); + break; + case O_WRONLY: + retVal = lAtmConnect(my->fd, lAtmAttr); + break; + default: + errno = EINVAL; + retVal = -1; + break; + } + + if (0 > retVal) { + lAtmClose(my->fd); + } else { + my->mtuSize = 8192; + } + } + + if (0 > retVal) { + msglog(LOG_DEBUG, "openAtm: %s\n", strerror(errno)); } - if (0 > lAtmBind(my->fd, lAtmAttr)) { - lAtmClose(my->fd); + return retVal; +} + +int openGeneric(NetTrans *my, const char *name, int flags, size_t bandwidth) { + int retVal; + char fam[32]; + char pa[32]; + char ep[32]; + + assert(my != NULL); + assert(name != NULL); + + if (0 == (sscanf(name, "%[^:]:%[^:]:%s", fam, pa, ep))) { + errno = EINVAL; + retVal = -1; + } else { + if (strcmp(fam, "ATM") == 0) { + int vpi; + int vci; + + vpi = atoi(pa); + vci = atoi(ep); + my->type = NetTransType_atm; + retVal = openAtm(my, vpi, vci, bandwidth, flags); + } else if (strcmp(fam, "UDP") == 0) { + my->type = NetTransType_udp; + retVal = openUdp(my, name, flags); + } else { + my->type = NetTransType_invalid; + errno = EINVAL; + retVal = -1; + } + } + + if (0 > retVal) { + msglog(LOG_DEBUG, "openGeneric: %s\n", strerror(errno)); + } + return retVal; +} + +int closeGeneric(NetTrans *my) { + int retVal; + + assert(my != NULL); + + switch (my->type) { + case NetTransType_atm: + retVal = lAtmClose(my->fd); + break; + } + + if (0 > retVal) { + msglog(LOG_DEBUG, "closeGeneric: %s\n", strerror(errno)); + } + return retVal; +} + +int sendGeneric(NetTrans *my) { + int retVal; + + assert(NetTrans_invariant(my)); + + switch (my->type) { + case NetTransType_atm: + retVal = lAtmSend(my->fd, my->pkt, Pkt_size(my->pkt)); + break; + } + + if (retVal != Pkt_size(my->pkt)) { + retVal = -1; + } + + if (0 > retVal) { + msglog(LOG_DEBUG, "sendGeneric: %s\n", strerror(errno)); + } + return retVal; +} + +int recvGeneric(NetTrans *my) { + int retVal; + + assert(NetTrans_invariant(my)); + + switch (my->type) { + case NetTransType_atm: + retVal = lAtmRecv(my->fd, my->pkt, my->mtuSize); + break; + } + + if (retVal != Pkt_size(my->pkt)) { + retVal = -1; + } + + if (0 > retVal) { + msglog(LOG_DEBUG, "recvGeneric: %s\n", strerror(errno)); + } + return retVal; +} + +int NetTrans_invariant(const NetTrans *my) { + return ( + my != NULL + && (my->type == NetTransType_atm || my->type == NetTransType_udp) + ); +} + +NetTrans *NetTrans_create(const char *name, size_t bandwidth, Worker *worker) +{ + NetTrans *my; + char buf[80]; + + my = allocMem(sizeof(NetTrans)); + + if (0 > openGeneric(my, name, O_RDONLY, bandwidth)) { return NULL; } - my->mtuSize = 65535; - my->pkt = allocMem(my->mtuSize); + my->pkt = NULL; my->seqNr = 0; my->offset = 0; @@ -92,30 +220,9 @@ NetTrans *NetTrans_open(const char *name, size_t bandwidth, Worker *worker) my = allocMem(sizeof(NetTrans)); - strcpy(buf, name); - - if (NULL == (vpi = strtok(buf, ":"))) { + if (0 > openGeneric(my, name, O_WRONLY, bandwidth)) { return NULL; } - if (NULL == (vci = strtok(NULL, ":"))) { - return NULL; - } - lAtmAttr->aal = 5; - lAtmAttr->vpi = atoi(vpi); - lAtmAttr->vci = atoi(vci); - lAtmAttr->peakBandwidth = bandwidth; - - msglog(LOG_DEBUG, "aal: %d; vpi: %d; vci: %d; bandwidth: %d\n", - lAtmAttr->aal, lAtmAttr->vpi, lAtmAttr->vci, lAtmAttr->peakBandwidth); - - if (0 > (my->fd = lAtmOpen("/dev/fa0", O_WRONLY))) { - return NULL; - } - if (0 > lAtmConnect(my->fd, lAtmAttr)) { - lAtmClose(my->fd); - return NULL; - } - my->mtuSize = 65535; my->pkt = allocMem(my->mtuSize); my->seqNr = 0; @@ -138,7 +245,7 @@ NetTrans *NetTrans_open(const char *name, size_t bandwidth, Worker *worker) void NetTrans_close(NetTrans *my) { freeMem(my->pkt); - lAtmClose(my->fd); + closeGeneric(my); freeMem(my); } @@ -173,7 +280,7 @@ int NetTrans_send(NetTrans *my, void *hadTu) } Pkt_setSeqNr(my->pkt, my->seqNr++); - if (Pkt_size(my->pkt) != lAtmSend(my->fd, my->pkt, Pkt_size(my->pkt))) { + if (0 > sendGeneric(my)) { return -1; } (*my->pktsSent)++; @@ -188,8 +295,7 @@ static int assembleMsg(NetTrans *my, void *hadTu, size_t size) int retVal; int i; int pktIsOk; - int n; - void *pkt; + UInt4 savedHdr[4]; UInt4 pktHdrSize; UInt4 pktSize; UInt4 pktId; @@ -199,7 +305,7 @@ static int assembleMsg(NetTrans *my, void *hadTu, size_t size) /* the parent functions this should be handled, but this would need */ /* better sunc. between nettrans & shmtrans */ if (hadTu == NULL) { - if (0 > (n = lAtmRecv(my->fd, my->pkt, my->mtuSize))) { + if (0 > recvGeneric(my)) { abort(); } my->offset = 0; @@ -210,22 +316,20 @@ static int assembleMsg(NetTrans *my, void *hadTu, size_t size) 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(); - pkt = (char *) hadTu + my->offset - pktHdrSize; - memcpy(my->pkt, pkt, pktHdrSize); + assert(sizeof(savedHdr) >= pktHdrSize); - if (0 > (n = lAtmRecv(my->fd, pkt, my->mtuSize))) { - memcpy(pkt, my->pkt, pktHdrSize); - abort(); - } - if (n != Pkt_size(pkt)) { - memcpy(pkt, my->pkt, pktHdrSize); + my->pkt = (char *) hadTu + my->offset - pktHdrSize; + memcpy(savedHdr, my->pkt, pktHdrSize); + + if (0 > recvGeneric(my)) { abort(); } (*my->pktsReceived)++; - pktSize = n; - pktId = Pkt_id(pkt); - pktSeqNr = Pkt_seqNr(pkt); - memcpy(pkt, my->pkt, pktHdrSize); + 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) { diff --git a/hadaq/nettrans.h b/hadaq/nettrans.h index 30eb0b6..45e3313 100644 --- a/hadaq/nettrans.h +++ b/hadaq/nettrans.h @@ -6,8 +6,15 @@ #include "worker.h" #include "hadtu.h" +typedef enum NetTransTypeE { + NetTransType_invalid, + NetTransType_atm, + NetTransType_udp +} NetTransType; + typedef struct NetTransS { char name[512]; + NetTransType type; int fd; size_t mtuSize; UInt4 *pkt; @@ -22,6 +29,7 @@ typedef struct NetTransS { unsigned long *msgsReceived; } NetTrans; +int NetTrans_invariant(const NetTrans *my); NetTrans *NetTrans_create(const char *name, size_t bandwidth, Worker * worker); NetTrans *NetTrans_open(const char *name, size_t bandwidth, Worker * worker); void NetTrans_close(NetTrans *my);