Lines Matching +full:cs +full:- +full:x

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 1999-2001 Brian Somers <brian@Awfulhak.org>
64 #define DEFAULT_EXEC_PREFIX "exec /usr/sbin/ppp -direct "
75 fprintf(stderr, "usage: %s [-Fd] [-P pidfile] [-a name] [-e exec | -l label]" in usage()
76 " [-n ngdebug] [-p provider] interface\n", prog); in usage()
88 int cs, int ds, int debug, struct ngm_connect *ngc) in ConfigureNode() argument
91 * We're going to do this with the passed `ds' & `cs' descriptors: in ConfigureNode()
93 * .---------. in ConfigureNode()
96 * `---------' in ConfigureNode()
97 * (orphan) ds cs in ConfigureNode()
101 * .---------. .-----------. in ConfigureNode()
103 * | <iface> |(pppoe-<pid>)<---->(pppoe-<pid>)| <unnamed> | in ConfigureNode()
104 * `--------- `-----------' in ConfigureNode()
105 * (exec-<pid>) in ConfigureNode()
106 * ^ .-----------. .-------------. in ConfigureNode()
107 * | | socket | | ppp -direct | in ConfigureNode()
108 * `--->(exec-<pid>)| <unnamed> |--fd--| provider | in ConfigureNode()
109 * `-----------' `-------------' in ConfigureNode()
113 * The exec-<pid> hook isn't made 'till we Spawn(). in ConfigureNode()
136 if (NgSendMsg(cs, epath, NGM_GENERIC_COOKIE, NGM_LISTHOOKS, NULL, 0) < 0) { in ConfigureNode()
148 if (NgRecvMsg(cs, resp, sizeof rbuf, NULL) <= 0) { in ConfigureNode()
153 hlist = (const struct hooklist *)resp->data; in ConfigureNode()
154 ninfo = &hlist->nodeinfo; in ConfigureNode()
157 fprintf(stderr, "Got reply from id [%x]: Type %s with %d hooks\n", in ConfigureNode()
158 ninfo->id, ninfo->type, ninfo->hooks); in ConfigureNode()
161 if (strncmp(ninfo->type, NG_ETHER_NODE_TYPE, sizeof NG_ETHER_NODE_TYPE - 1)) { in ConfigureNode()
163 NG_ETHER_NODE_TYPE "'')\n", epath, ninfo->type); in ConfigureNode()
168 for (f = 0; f < ninfo->hooks; f++) { in ConfigureNode()
169 nlink = &hlist->link[f]; in ConfigureNode()
172 fprintf(stderr, " Got [%x]:%s -> [%x]:%s\n", ninfo->id, in ConfigureNode()
173 nlink->ourhook, nlink->nodeinfo.id, nlink->peerhook); in ConfigureNode()
175 if (!strcmp(nlink->ourhook, NG_ETHER_HOOK_ORPHAN) || in ConfigureNode()
176 !strcmp(nlink->ourhook, NG_ETHER_HOOK_DIVERT)) { in ConfigureNode()
182 if (strcmp(nlink->nodeinfo.type, NG_PPPOE_NODE_TYPE)) { in ConfigureNode()
184 epath, nlink->nodeinfo.type); in ConfigureNode()
191 if (f == ninfo->hooks) { in ConfigureNode()
201 fprintf(stderr, "Send MKPEER: %s%s -> [type %s]:%s\n", epath, in ConfigureNode()
204 if (NgSendMsg(cs, epath, NGM_GENERIC_COOKIE, in ConfigureNode()
213 snprintf(ngc->path, sizeof ngc->path, "%s%s", epath, NG_ETHER_HOOK_ORPHAN); in ConfigureNode()
214 snprintf(ngc->ourhook, sizeof ngc->ourhook, "pppoe-%ld", (long)getpid()); in ConfigureNode()
215 memcpy(ngc->peerhook, ngc->ourhook, sizeof ngc->peerhook); in ConfigureNode()
217 if (NgSendMsg(cs, ".:", NGM_GENERIC_COOKIE, in ConfigureNode()
226 snprintf(data->hook, sizeof data->hook, "%s", ngc->peerhook); in ConfigureNode()
227 memcpy(data->data, provider, plen); in ConfigureNode()
228 data->data_len = plen; in ConfigureNode()
230 spath = (char *)alloca(strlen(ngc->peerhook) + 3); in ConfigureNode()
232 strcpy(spath + 2, ngc->ourhook); in ConfigureNode()
242 if (NgSendMsg(cs, spath, NGM_PPPOE_COOKIE, NGM_PPPOE_LISTEN, in ConfigureNode()
243 data, sizeof *data + plen) == -1) { in ConfigureNode()
254 const char *exec, struct ngm_connect ngc, int cs, int ds, void *request, in Spawn() argument
267 case -1: in Spawn()
275 case -1: in Spawn()
280 close(cs); in Spawn()
287 if (NgMkSockNode(NULL, &cs, &ds) == -1) { in Spawn()
293 snprintf(ngc.ourhook, sizeof ngc.ourhook, "exec-%ld", (long)getpid()); in Spawn()
297 syslog(LOG_INFO, "Sending CONNECT from .:%s -> %s.%s", in Spawn()
299 if (NgSendMsg(cs, ".:", NGM_GENERIC_COOKIE, in Spawn()
311 if (NgSendMsg(cs, ".:", NGM_SOCKET_COOKIE, in Spawn()
320 snprintf(data->hook, sizeof data->hook, "%s", ngc.ourhook); in Spawn()
321 memcpy(data->data, acname, slen); in Spawn()
322 data->data_len = slen; in Spawn()
330 if (NgSendMsg(cs, path, NGM_PPPOE_COOKIE, NGM_PPPOE_OFFER, in Spawn()
331 data, sizeof *data + slen) == -1) { in Spawn()
339 snprintf(data->hook, sizeof data->hook, "%s", ngc.ourhook); in Spawn()
340 memcpy(data->data, provider, slen); in Spawn()
341 data->data_len = slen; in Spawn()
345 if (NgSendMsg(cs, path, NGM_PPPOE_COOKIE, NGM_PPPOE_SERVICE, in Spawn()
346 data, sizeof *data + slen) == -1) { in Spawn()
354 macaddr = ((struct ether_header *)request)->ether_shost; in Spawn()
355 snprintf(env, sizeof(env), "%x:%x:%x:%x:%x:%x", in Spawn()
365 if (NgSendData(ds, ngc.ourhook, request, sz) == -1) { in Spawn()
376 if ((ret = NgRecvMsg(cs, rep, sizeof msgbuf, NULL)) < 0) { in Spawn()
387 if (rep->header.version != NG_VERSION) { in Spawn()
389 (long)rep->header.version, (long)NG_VERSION); in Spawn()
393 if (rep->header.typecookie != NGM_PPPOE_COOKIE) { in Spawn()
395 (long)rep->header.typecookie, (long)NGM_PPPOE_COOKIE); in Spawn()
399 switch (rep->header.cmd) { in Spawn()
410 if (setenv("ACNAME", sts->hook, 1) != 0) in Spawn()
412 sts->hook); in Spawn()
416 snprintf(sessionid, sizeof sessionid, "%04x", *(u_int16_t *)sts); in Spawn()
422 snprintf(unknown, sizeof unknown, "<%d>", (int)rep->header.cmd); in Spawn()
427 switch (rep->header.cmd) { in Spawn()
431 msg, sts->hook); in Spawn()
435 syslog(LOG_INFO, "Received NGM_PPPOE_%s (hook \"%s\")", msg, sts->hook); in Spawn()
436 } while (rep->header.cmd != NGM_PPPOE_SUCCESS); in Spawn()
441 close(cs); in Spawn()
445 execlp(_PATH_BSHELL, _PATH_BSHELL, "-c", exec, (char *)NULL); in Spawn()
466 if (modfind(module[f]) == -1 && kldload(module[f]) == -1) { in LoadModules()
505 int ch, cs, ds, ret, optF, optd, optn, sz, f; in main() local
517 while ((ch = getopt(argc, argv, "FP:a:de:l:n:p:")) != -1) { in main()
578 strcpy(exec + sizeof DEFAULT_EXEC_PREFIX - 1, label); in main()
598 if (NgMkSockNode(NULL, &cs, &ds) == -1) { in main()
604 if ((ret = ConfigureNode(prog, argv[optind], provider, cs, ds, in main()
606 close(cs); in main()
611 if (!optF && daemon(1, 0) == -1) { in main()
613 close(cs); in main()
624 close(cs); in main()
653 case -1: in main()
665 sprintf(ptr, "%02x", (u_char)response[f]); in main()
674 Spawn(prog, acname, provider, exec, ngc, cs, ds, response, sz, optd); in main()
688 ret = -ReceivedSignal; in main()