It seams like I only have to wait for kernel 2.6.34 http://public.dhe.ibm.com/software/dw/linux390/docu/lk34dd06.pdf
Chapter 24. It's not vmur, but it covers the same purpose :) ___________________________________________ Tore Agblad Volvo Information Technology Infrastructure Mainframe Design & Development, Linux servers Dept 4352 DA1S SE-405 08, Gothenburg Sweden Telephone: +46-31-3233569 E-mail: [email protected] http://www.volvo.com/volvoit/global/en-gb/ -----Original Message----- From: Linux on 390 Port [mailto:[email protected]] On Behalf Of David Boyes Sent: den 9 september 2010 16:51 To: [email protected] Subject: Re: vmur usage ? > > Now it starts to look interesting :) > > Where is source of that example program ? > Re: AF_IUCV. Yes, it would also work, but the programming is more > complex. There's something to the ability to just use plain old 'cat' > or any language that understands file I/O to deal with IUCV that I like > about Neale's driver. In fact, it's so small, here's the whole sample program. This code takes anything delivered to the guest via *MSG (the classes you specify) and copies it to syslog and a terminal. Works for CPCONIO, MSG, SMSG, etc, etc -- anything you can SET <foo> IUCV. #include <stdio.h> #include <fcntl.h> #include <sys/ioctl.h> #include <iconv.h> #include <syslog.h> #define FSIUCV_IOC_MAGIC 'u' #define IUCV_IOCRESET _IO(FSIUCV_IOC_MAGIC, 0) #define IUCVTCS _IOW(FSIUCV_IOC_MAGIC, 1, int) #define IUCVTCG _IOR(FSIUCV_IOC_MAGIC, 1, int) #define IUCVONE _IOW(FSIUCV_IOC_MAGIC, 1, char) /* * This sample assumes we're playing with the *MSG service but it should be * able to drive any connection */ typedef struct iucvMsg { char userid[8]; char msgText[1016]; } iucvMsg; static char *class[] = { "MSG ", "WNG ", "CPIO", "SMSG", "VMIO", "EMSG", "IMSG", "SCIF" }; int main(int argc, char **argv) { iconv_t cd; int fd, i_buf, trgcls; size_t count, outCount; char buffer[1024], output[1024]; char *pBuffer, *pOutput, userName[9]; size_t *pCount = (size_t *) & count, *pOutCount = (size_t *) & outCount, iconvSz; iucvMsg *msgData = (iucvMsg *) & output[0]; printf("User ID Class\tMessage\n" "------- -----\t--------------------------------\n"); userName[8] = 0; cd = iconv_open("ASCII", "EBCDIC-US"); fd = open("/dev/iucv0", O_RDONLY); count = read(fd, &buffer, sizeof (buffer)); while (count > 0) { pBuffer = (char *) &buffer; pOutput = (char *) &output; ioctl(fd, IUCVTCG, (char *) &trgcls); outCount = sizeof (output); iconvSz = iconv(cd, &pBuffer, pCount, &pOutput, pOutCount); output[sizeof (output) - outCount] = 0; memcpy(userName, msgData->userid, sizeof (msgData->userid)); printf("%s [%s]\t%s\n", userName, class[trgcls-1], msgData->msgText); syslog(LOG_INFO, "[%s] %s %s\n", class[trgcls - 1], userName, msgData->msgText); if (strcmp("STOP", msgData->msgText) == 0) break; count = read(fd, &buffer, sizeof (buffer)); } close(fd); iconv_close(cd); } Note that the guts of it are simply opening /dev/iucv0 as a sequential file and doing sequential blocking reads. Even Fortran can do that. 8-) It also correctly processes distributed IUCV, so if you have ISFC or TSAF active, it will work cross-system. Might also work with IPGATE; haven't tested it. ---------------------------------------------------------------------- For LINUX-390 subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO LINUX-390 or visit http://www.marist.edu/htbin/wlvindex?LINUX-390 ---------------------------------------------------------------------- For more information on Linux on System z, visit http://wiki.linuxvm.org/ ---------------------------------------------------------------------- For LINUX-390 subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO LINUX-390 or visit http://www.marist.edu/htbin/wlvindex?LINUX-390 ---------------------------------------------------------------------- For more information on Linux on System z, visit http://wiki.linuxvm.org/
