Пример #1
0
/*
 *  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);
}
Пример #2
0
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);
}