/* * called to bind an IP ifc to an ethernet device * called with ifc wlock'd */ static void pppbind(Ipifc * ifc, int argc, char **argv) { PPP *ppp; Ipaddr ipaddr, remip; int mtu, framing; char *chapname, *secret; if (argc < 3) error(Ebadarg); ipmove(ipaddr, IPnoaddr); ipmove(remip, IPnoaddr); mtu = Defmtu; framing = 1; chapname = nil; secret = nil; switch (argc) { default: case 9: if (argv[8][0] != '-') secret = argv[8]; case 8: if (argv[7][0] != '-') chapname = argv[7]; case 7: if (argv[6][0] != '-') framing = strtoul(argv[6], 0, 0); case 6: if (argv[5][0] != '-') mtu = strtoul(argv[5], 0, 0); case 5: if (argv[4][0] != '-') parseip(remip, argv[4]); case 4: if (argv[3][0] != '-') parseip(ipaddr, argv[3]); case 3: break; } ppp = smalloc(sizeof(*ppp)); ppp->ifc = ifc; ppp->f = ifc->conv->p->f; ifc->arg = ppp; if (waserror()) { pppunbind(ifc); nexterror(); } if (pppopen(ppp, argv[2], ipaddr, remip, mtu, framing, chapname, secret) == nil) error("ppp open failed"); poperror(); ktask("pppreader", pppreader, ifc); }
void main(int argc, char **argv) { char *s; int pfd1[2]; int pfd2[2]; errrate = 0; droprate = 0; ARGBEGIN{ case 'c': nocompress = 1; break; case 'C': noipcompress = 1; break; case 'd': s = ARGF(); if(s) droprate = strtol(s, nil, 0); break; case 'D': debug++; break; case 'e': s = ARGF(); if(s) errrate = strtol(s, nil, 0); break; case 'f': framing = 1; break; case 'm': mtu = ARGF(); break; case 'p': ppp = ARGF(); if(ppp == nil) usage(); break; default: usage(); break; }ARGEND if(argc) usage(); pipe(pfd1); pipe(pfd2); bind("#I2", "/net.alt2", MCREATE); bind("#I1", "/net.alt", MCREATE); pppopen(pfd1[0], "/net.alt2", "135.104.99.1", "135.104.99.2"); pppopen(pfd2[0], "/net.alt", 0, 0); close(pfd1[0]); close(pfd2[0]); xfer(pfd1[1], pfd2[1]); xfer(pfd2[1], pfd1[1]); exits(0); }