2 #include "../port/lib.h"
6 #include "../port/error.h"
23 static void loopbackread(void *a);
26 loopbackbind(Ipifc *ifc, int, char**)
30 lb = smalloc(sizeof(*lb));
31 lb->f = ifc->conv->p->f;
32 lb->q = qopen(1024*1024, Qmsg, nil, nil);
36 kproc("loopbackread", loopbackread, ifc);
41 loopbackunbind(Ipifc *ifc)
46 postnote(lb->readp, 1, "unbind", 0);
48 /* wait for reader to die */
50 tsleep(&up->sleep, return0, 0, 300);
58 loopbackbwrite(Ipifc *ifc, Block *bp, int, uchar*)
63 if(qpass(lb->q, bp) < 0)
77 lb->readp = up; /* hide identity under a rock for unbind */
83 bp = qbread(lb->q, Maxtu);
98 ipiput4(lb->f, ifc, bp);
104 Medium loopbackmedium =
112 .unbind= loopbackunbind,
113 .bwrite= loopbackbwrite,
117 loopbackmediumlink(void)
119 addipmedium(&loopbackmedium);