Lines Matching refs:arg

208 HelpCommand(struct cmdargs const *arg)
214 if (!arg->prompt) {
219 if (arg->argc > arg->argn) {
220 for (cmd = arg->cmdtab; cmd->name || cmd->alias; cmd++)
221 if ((cmd->lauth & arg->prompt->auth) &&
222 ((cmd->name && !strcasecmp(cmd->name, arg->argv[arg->argn])) ||
223 (cmd->alias && !strcasecmp(cmd->alias, arg->argv[arg->argn])))) {
224 prompt_Printf(arg->prompt, "%s %s\n", cmd->syntax, showcx(cmd));
231 for (cmd = arg->cmdtab; cmd->func; cmd++)
232 if (cmd->name && (cmd->lauth & arg->prompt->auth)) {
241 prompt_Printf(arg->prompt, "(o) = Optional context,"
243 for (cmd = arg->cmdtab; cmd->func; cmd++)
244 if (cmd->name && (cmd->lauth & arg->prompt->auth)) {
248 prompt_Printf(arg->prompt, " ");
249 prompt_Printf(arg->prompt, "%s%-*.*s: %-*.*s",
252 prompt_Printf(arg->prompt, "\n");
255 prompt_Printf(arg->prompt, "\n");
261 IdentCommand(struct cmdargs const *arg)
263 Concatinate(arg->cx->physical->link.lcp.cfg.ident,
264 sizeof arg->cx->physical->link.lcp.cfg.ident,
265 arg->argc - arg->argn, arg->argv + arg->argn);
270 SendIdentification(struct cmdargs const *arg)
272 if (arg->cx->state < DATALINK_LCP) {
276 return lcp_SendIdentification(&arg->cx->physical->link.lcp) ? 0 : 1;
280 CloneCommand(struct cmdargs const *arg)
286 if (arg->argc == arg->argn)
290 for (f = arg->argn; f < arg->argc; f++) {
291 strncpy(namelist, arg->argv[f], sizeof namelist - 1);
293 bundle_DatalinkClone(arg->bundle, arg->cx, name);
300 RemoveCommand(struct cmdargs const *arg)
302 if (arg->argc != arg->argn)
305 if (arg->cx->state != DATALINK_CLOSED) {
310 bundle_DatalinkRemove(arg->bundle, arg->cx);
315 RenameCommand(struct cmdargs const *arg)
317 if (arg->argc != arg->argn + 1)
320 if (bundle_RenameDatalink(arg->bundle, arg->cx, arg->argv[arg->argn]))
324 arg->cx->name, arg->argv[arg->argn]);
329 LoadCommand(struct cmdargs const *arg)
334 mode = arg->bundle->phys_type.all;
336 if (arg->argn < arg->argc) {
337 for (n = arg->argn; n < arg->argc; n++)
338 if ((err = system_IsValid(arg->argv[n], arg->prompt, mode)) != NULL) {
339 log_Printf(LogWARN, "%s: %s\n", arg->argv[n], err);
343 for (n = arg->argn; n < arg->argc; n++) {
344 bundle_SetLabel(arg->bundle, arg->argv[arg->argc - 1]);
345 system_Select(arg->bundle, arg->argv[n], CONFFILE, arg->prompt, arg->cx);
347 bundle_SetLabel(arg->bundle, arg->argv[arg->argc - 1]);
348 } else if ((err = system_IsValid("default", arg->prompt, mode)) != NULL) {
352 bundle_SetLabel(arg->bundle, "default");
353 system_Select(arg->bundle, "default", CONFFILE, arg->prompt, arg->cx);
354 bundle_SetLabel(arg->bundle, "default");
361 LogCommand(struct cmdargs const *arg)
365 if (arg->argn < arg->argc) {
367 int argc = arg->argc - arg->argn;
373 command_Expand(argv, argc, arg->argv + arg->argn, arg->bundle, 1, getpid());
384 SaveCommand(struct cmdargs const *arg __unused)
391 DialCommand(struct cmdargs const *arg)
395 if ((arg->cx && !(arg->cx->physical->type & (PHYS_INTERACTIVE|PHYS_AUTO)))
396 || (!arg->cx &&
397 (arg->bundle->phys_type.all & ~(PHYS_INTERACTIVE|PHYS_AUTO)))) {
403 if (arg->argc > arg->argn && (res = LoadCommand(arg)) != 0)
406 bundle_Open(arg->bundle, arg->cx ? arg->cx->name : NULL, PHYS_ALL, 1);
521 int arg, secs;
526 arg = 0; /* Start at arg 0 */
529 arg = 1;
546 for (; arg < argc; arg++) {
547 nargv[arg] = strdup(oargv[arg]);
548 nargv[arg] = subst(nargv[arg], "AUTHNAME", bundle->cfg.auth.name);
549 nargv[arg] = substip(nargv[arg], "DNS0", bundle->ncp.ipcp.ns.dns[0]);
550 nargv[arg] = substip(nargv[arg], "DNS1", bundle->ncp.ipcp.ns.dns[1]);
551 nargv[arg] = subst(nargv[arg], "ENDDISC",
555 nargv[arg] = substip(nargv[arg], "HISADDR", bundle->ncp.ipcp.peer_ip);
557 nargv[arg] = substipv6(nargv[arg], "HISADDR6", &bundle->ncp.ipv6cp.hisaddr);
559 nargv[arg] = subst(nargv[arg], "INTERFACE", bundle->iface->name);
560 nargv[arg] = substull(nargv[arg], "IPOCTETSIN",
562 nargv[arg] = substull(nargv[arg], "IPOCTETSOUT",
564 nargv[arg] = substull(nargv[arg], "IPPACKETSIN",
566 nargv[arg] = substull(nargv[arg], "IPPACKETSOUT",
569 nargv[arg] = substull(nargv[arg], "IPV6OCTETSIN",
571 nargv[arg] = substull(nargv[arg], "IPV6OCTETSOUT",
573 nargv[arg] = substull(nargv[arg], "IPV6PACKETSIN",
575 nargv[arg] = substull(nargv[arg], "IPV6PACKETSOUT",
578 nargv[arg] = subst(nargv[arg], "LABEL", bundle_GetLabel(bundle));
579 nargv[arg] = substip(nargv[arg], "MYADDR", bundle->ncp.ipcp.my_ip);
581 nargv[arg] = substipv6(nargv[arg], "MYADDR6", &bundle->ncp.ipv6cp.myaddr);
583 nargv[arg] = substipv6prefix(nargv[arg], "IPV6PREFIX",
587 nargv[arg] = substull(nargv[arg], "OCTETSIN", oin);
588 nargv[arg] = substull(nargv[arg], "OCTETSOUT", oout);
589 nargv[arg] = substull(nargv[arg], "PACKETSIN", pin);
590 nargv[arg] = substull(nargv[arg], "PACKETSOUT", pout);
591 nargv[arg] = subst(nargv[arg], "PEER_ENDDISC",
595 nargv[arg] = substlong(nargv[arg], "PROCESSID", pid);
597 nargv[arg] = substlong(nargv[arg], "SOCKNAME", server.cfg.port);
599 nargv[arg] = subst(nargv[arg], "SOCKNAME", server.cfg.sockname);
600 nargv[arg] = subst(nargv[arg], "UPTIME", uptime);
601 nargv[arg] = subst(nargv[arg], "USER", bundle->ncp.mp.peer.authname);
602 nargv[arg] = subst(nargv[arg], "VERSION", Version);
604 nargv[arg] = NULL;
618 ShellCommand(struct cmdargs const *arg, int bg)
625 if (arg->prompt && arg->prompt->owner) {
631 if (arg->argc == arg->argn) {
632 if (!arg->prompt) {
636 } else if (arg->prompt->owner) {
656 if (arg->prompt)
657 fd = arg->prompt->fd_out;
672 if (arg->argc > arg->argn) {
675 int argc = arg->argc - arg->argn;
681 command_Expand(argv, argc, arg->argv + arg->argn, arg->bundle, 0, pid);
690 } else if (arg->prompt)
691 printf("ppp: Pausing until %s finishes\n", arg->argv[arg->argn]);
694 if (arg->prompt)
696 prompt_TtyOldMode(arg->prompt);
701 arg->argc > arg->argn ? arg->argv[arg->argn] : shell,
713 if (arg->prompt && !arg->prompt->owner)
714 prompt_TtyCommandMode(arg->prompt);
720 BgShellCommand(struct cmdargs const *arg)
722 if (arg->argc == arg->argn)
724 return ShellCommand(arg, 1);
728 FgShellCommand(struct cmdargs const *arg)
730 return ShellCommand(arg, 0);
734 ResolvCommand(struct cmdargs const *arg)
736 if (arg->argc == arg->argn + 1) {
737 if (!strcasecmp(arg->argv[arg->argn], "reload"))
738 ipcp_LoadDNS(&arg->bundle->ncp.ipcp);
739 else if (!strcasecmp(arg->argv[arg->argn], "restore"))
740 ipcp_RestoreDNS(&arg->bundle->ncp.ipcp);
741 else if (!strcasecmp(arg->argv[arg->argn], "rewrite"))
742 ipcp_WriteDNS(&arg->bundle->ncp.ipcp);
743 else if (!strcasecmp(arg->argv[arg->argn], "readonly"))
744 arg->bundle->ncp.ipcp.ns.writable = 0;
745 else if (!strcasecmp(arg->argv[arg->argn], "writable"))
746 arg->bundle->ncp.ipcp.ns.writable = 1;
908 ShowEscape(struct cmdargs const *arg)
910 if (arg->cx->physical->async.cfg.EscMap[32]) {
915 if (arg->cx->physical->async.cfg.EscMap[code])
917 if (arg->cx->physical->async.cfg.EscMap[code] & (1 << bit)) {
918 prompt_Printf(arg->prompt, "%s0x%02x", sep, (code << 3) + bit);
921 prompt_Printf(arg->prompt, "\n");
927 ShowTimerList(struct cmdargs const *arg)
929 timer_Show(0, arg->prompt);
934 ShowStopped(struct cmdargs const *arg)
936 prompt_Printf(arg->prompt, " Stopped Timer: LCP: ");
937 if (!arg->cx->physical->link.lcp.fsm.StoppedTimer.load)
938 prompt_Printf(arg->prompt, "Disabled");
940 prompt_Printf(arg->prompt, "%ld secs",
941 arg->cx->physical->link.lcp.fsm.StoppedTimer.load / SECTICKS);
943 prompt_Printf(arg->prompt, ", CCP: ");
944 if (!arg->cx->physical->link.ccp.fsm.StoppedTimer.load)
945 prompt_Printf(arg->prompt, "Disabled");
947 prompt_Printf(arg->prompt, "%ld secs",
948 arg->cx->physical->link.ccp.fsm.StoppedTimer.load / SECTICKS);
950 prompt_Printf(arg->prompt, "\n");
956 ShowVersion(struct cmdargs const *arg)
958 prompt_Printf(arg->prompt, "PPP Version %s\n", Version);
963 ShowProtocolStats(struct cmdargs const *arg)
965 struct link *l = command_ChooseLink(arg);
967 prompt_Printf(arg->prompt, "%s:\n", l->name);
968 link_ReportProtocolStatus(l, arg->prompt);
1086 struct cmdargs arg;
1107 arg.cmdtab = cmds;
1108 arg.cmd = cmd;
1109 arg.argc = argc;
1110 arg.argn = argn+1;
1111 arg.argv = argv;
1112 arg.bundle = bundle;
1113 arg.cx = cx;
1114 arg.prompt = prompt;
1115 val = (*cmd->func) (&arg);
1159 /* Is arg n of the given command to be hidden from the log ? */
1230 ShowCommand(struct cmdargs const *arg)
1232 if (!arg->prompt)
1234 else if (arg->argc > arg->argn)
1235 FindExec(arg->bundle, ShowCommands, arg->argc, arg->argn, arg->argv,
1236 arg->prompt, arg->cx);
1238 prompt_Printf(arg->prompt, "Use ``show ?'' to get a list.\n");
1244 TerminalCommand(struct cmdargs const *arg)
1246 if (!arg->prompt) {
1251 if (arg->cx->physical->link.lcp.fsm.state > ST_CLOSED) {
1252 prompt_Printf(arg->prompt, "LCP state is [%s]\n",
1253 State2Nam(arg->cx->physical->link.lcp.fsm.state));
1257 datalink_Up(arg->cx, 0, 0);
1258 prompt_TtyTermMode(arg->prompt, arg->cx);
1263 QuitCommand(struct cmdargs const *arg)
1265 if (!arg->prompt || prompt_IsController(arg->prompt) ||
1266 (arg->argc > arg->argn && !strcasecmp(arg->argv[arg->argn], "all") &&
1267 (arg->prompt->auth & LOCAL_AUTH)))
1269 if (arg->prompt)
1270 prompt_Destroy(arg->prompt, 1);
1276 OpenCommand(struct cmdargs const *arg)
1278 if (arg->argc == arg->argn)
1279 bundle_Open(arg->bundle, arg->cx ? arg->cx->name : NULL, PHYS_ALL, 1);
1280 else if (arg->argc == arg->argn + 1) {
1281 if (!strcasecmp(arg->argv[arg->argn], "lcp")) {
1282 struct datalink *cx = arg->cx ?
1283 arg->cx : bundle2datalink(arg->bundle, NULL);
1288 bundle_Open(arg->bundle, cx->name, PHYS_ALL, 1);
1291 } else if (!strcasecmp(arg->argv[arg->argn], "ccp")) {
1294 fp = &command_ChooseLink(arg)->ccp.fsm;
1309 } else if (!strcasecmp(arg->argv[arg->argn], "ipcp")) {
1310 if (arg->cx)
1312 if (arg->bundle->ncp.ipcp.fsm.state == ST_OPENED)
1313 fsm_Reopen(&arg->bundle->ncp.ipcp.fsm);
1315 bundle_Open(arg->bundle, NULL, PHYS_ALL, 1);
1325 CloseCommand(struct cmdargs const *arg)
1327 if (arg->argc == arg->argn)
1328 bundle_Close(arg->bundle, arg->cx ? arg->cx->name : NULL, CLOSE_STAYDOWN);
1329 else if (arg->argc == arg->argn + 1) {
1330 if (!strcasecmp(arg->argv[arg->argn], "lcp"))
1331 bundle_Close(arg->bundle, arg->cx ? arg->cx->name : NULL, CLOSE_LCP);
1332 else if (!strcasecmp(arg->argv[arg->argn], "ccp") ||
1333 !strcasecmp(arg->argv[arg->argn], "ccp!")) {
1336 fp = &command_ChooseLink(arg)->ccp.fsm;
1339 if (arg->argv[arg->argn][3] == '!')
1353 DownCommand(struct cmdargs const *arg)
1355 if (arg->argc == arg->argn) {
1356 if (arg->cx)
1357 datalink_Down(arg->cx, CLOSE_STAYDOWN);
1359 bundle_Down(arg->bundle, CLOSE_STAYDOWN);
1360 } else if (arg->argc == arg->argn + 1) {
1361 if (!strcasecmp(arg->argv[arg->argn], "lcp")) {
1362 if (arg->cx)
1363 datalink_Down(arg->cx, CLOSE_LCP);
1365 bundle_Down(arg->bundle, CLOSE_LCP);
1366 } else if (!strcasecmp(arg->argv[arg->argn], "ccp")) {
1367 struct fsm *fp = arg->cx ? &arg->cx->physical->link.ccp.fsm :
1368 &arg->bundle->ncp.mp.link.ccp.fsm;
1379 SetModemSpeed(struct cmdargs const *arg)
1384 if (arg->argc > arg->argn && *arg->argv[arg->argn]) {
1385 if (arg->argc > arg->argn+1) {
1389 if (strcasecmp(arg->argv[arg->argn], "sync") == 0) {
1390 physical_SetSync(arg->cx->physical);
1394 speed = strtol(arg->argv[arg->argn], &end, 10);
1397 arg->argv[arg->argn]);
1400 if (physical_SetSpeed(arg->cx->physical, speed))
1402 log_Printf(LogWARN, "%s: Invalid speed\n", arg->argv[arg->argn]);
1410 SetStoppedTimeout(struct cmdargs const *arg)
1412 struct link *l = &arg->cx->physical->link;
1416 if (arg->argc <= arg->argn+2) {
1417 if (arg->argc > arg->argn) {
1418 l->lcp.fsm.StoppedTimer.load = atoi(arg->argv[arg->argn]) * SECTICKS;
1419 if (arg->argc > arg->argn+1)
1420 l->ccp.fsm.StoppedTimer.load = atoi(arg->argv[arg->argn+1]) * SECTICKS;
1428 SetServer(struct cmdargs const *arg)
1432 if (arg->argc > arg->argn && arg->argc < arg->argn+4) {
1437 port = arg->argv[arg->argn];
1438 if (arg->argc == arg->argn + 2) {
1439 passwd = arg->argv[arg->argn+1];
1441 } else if (arg->argc == arg->argn + 3) {
1442 passwd = arg->argv[arg->argn+1];
1443 mask = arg->argv[arg->argn+2];
1448 arg->argv[arg->argn - 2], arg->argv[arg->argn - 1], mask);
1451 } else if (arg->argc != arg->argn + 1)
1454 if (server_Clear(arg->bundle))
1458 switch (server_Reopen(arg->bundle)) {
1472 if (server_Close(arg->bundle))
1496 (int)(ptr - port), port, arg->bundle->unit, ptr + 2);
1499 res = server_LocalOpen(arg->bundle, port, imask);
1523 iport += arg->bundle->unit;
1524 res = server_TcpOpen(arg->bundle, iport);
1534 SetEscape(struct cmdargs const *arg)
1537 int argc = arg->argc - arg->argn;
1538 char const *const *argv = arg->argv + arg->argn;
1541 arg->cx->physical->async.cfg.EscMap[code] = 0;
1546 arg->cx->physical->async.cfg.EscMap[code >> 3] |= (1 << (code & 7));
1547 arg->cx->physical->async.cfg.EscMap[32] = 1;
1553 SetInterfaceAddr(struct cmdargs const *arg)
1555 struct ncp *ncp = &arg->bundle->ncp;
1559 if (arg->argc > arg->argn + 4)
1569 if (arg->argc > arg->argn) {
1570 if (!ncprange_aton(&ncp->ipcp.cfg.my_range, ncp, arg->argv[arg->argn]))
1572 if (arg->argc > arg->argn+1) {
1573 hisaddr = arg->argv[arg->argn+1];
1574 if (arg->argc > arg->argn+2) {
1576 GetIpAddr(arg->argv[arg->argn+2]);
1577 if (arg->argc > arg->argn+3) {
1578 ncp->ipcp.cfg.TriggerAddress = GetIpAddr(arg->argv[arg->argn+3]);
1590 bundle_AdjustFilters(arg->bundle, &ncpaddr, NULL);
1592 if (hisaddr && !ipcp_UseHisaddr(arg->bundle, hisaddr,
1593 arg->bundle->phys_type.all & PHYS_AUTO))
1641 SetVariable(struct cmdargs const *arg)
1643 long long_val, param = (long)arg->cmd->args;
1647 struct datalink *cx = arg->cx; /* LOCAL_CX uses this */
1648 struct link *l = command_ChooseLink(arg); /* LOCAL_CX_OPT uses this */
1652 if (arg->argc > arg->argn)
1653 argp = arg->argv[arg->argn];
1659 if ((arg->cmd->lauth & LOCAL_CX) && !cx) {
1661 arg->cmd->name);
1663 } else if (cx && !(arg->cmd->lauth & (LOCAL_CX|LOCAL_CX_OPT))) {
1665 arg->cmd->name, cx->name);
1671 strncpy(arg->bundle->cfg.auth.key, argp,
1672 sizeof arg->bundle->cfg.auth.key - 1);
1673 arg->bundle->cfg.auth.key[sizeof arg->bundle->cfg.auth.key - 1] = '\0';
1677 switch (bundle_Phase(arg->bundle)) {
1680 bundle_PhaseName(arg->bundle));
1684 strncpy(arg->bundle->cfg.auth.name, argp,
1685 sizeof arg->bundle->cfg.auth.name - 1);
1686 arg->bundle->cfg.auth.name[sizeof arg->bundle->cfg.auth.name-1] = '\0';
1692 if (arg->argc == arg->argn + 3) {
1696 v1 = strtol(arg->argv[arg->argn], &end, 0);
1699 arg->argv[arg->argn]);
1704 v2 = strtol(arg->argv[arg->argn + 1], &end, 0);
1707 arg->argv[arg->argn + 1]);
1717 v3 = strtol(arg->argv[arg->argn + 2], &end, 0);
1720 arg->argv[arg->argn + 2]);
1725 arg->bundle->ncp.mp.cfg.autoload.min = v1;
1726 arg->bundle->ncp.mp.cfg.autoload.max = v2;
1727 arg->bundle->ncp.mp.cfg.autoload.period = v3;
1728 mp_RestartAutoloadTimer(&arg->bundle->ncp.mp);
1746 if (arg->argc > arg->argn) {
1747 l->ccp.cfg.deflate.out.winsize = atoi(arg->argv[arg->argn]);
1754 if (arg->argc > arg->argn+1) {
1755 l->ccp.cfg.deflate.in.winsize = atoi(arg->argv[arg->argn+1]);
1772 if (arg->argc > arg->argn + 2) {
1777 if (arg->argc == arg->argn) {
1795 if (arg->argc == arg->argn + 2) {
1796 if (!strcmp(arg->argv[arg->argn + 1], "*"))
1798 else if (!strcasecmp(arg->argv[arg->argn + 1], "stateless"))
1800 else if (!strcasecmp(arg->argv[arg->argn + 1], "stateful"))
1804 arg->argv[arg->argn + 1]);
1816 physical_SetDeviceList(cx->physical, arg->argc - arg->argn,
1817 arg->argv + arg->argn);
1821 if (arg->argc > arg->argn) {
1838 bundle_SetMode(arg->bundle, cx, mode);
1842 switch (bundle_Phase(arg->bundle)) {
1847 if (bundle_HighestState(arg->bundle) >= DATALINK_LCP) {
1870 arg->bundle->ncp.mp.cfg.mrru = long_val;
1876 switch(arg->argc - arg->argn) {
1898 long_val = atol(arg->argv[arg->argn + 1]);
1933 switch(arg->argc - arg->argn) {
1955 long_val = atol(arg->argv[arg->argn + 1]);
1988 cx->physical->link.lcp.cfg.openmode = arg->argc > arg->argn+1 ?
1989 atoi(arg->argv[arg->argn+1]) : 1;
2011 arg->bundle->cfg.ifqueue = long_val < 0 ? 0 : long_val;
2020 if (arg->argc > arg->argn+2) {
2023 } else if (arg->argc == arg->argn) {
2030 min = arg->bundle->cfg.idle.min_timeout;
2031 if (arg->argc == arg->argn + 2)
2032 min = strtoul(arg->argv[arg->argn + 1], NULL, 10);
2033 bundle_SetIdleTimer(arg->bundle, timeout, min);
2039 if (arg->argc > arg->argn + 2) {
2042 } else if (arg->argc == arg->argn) {
2046 arg->bundle->radius.alive.interval = atoi(argp);
2047 if (arg->bundle->radius.alive.interval && !arg->bundle->radius.cfg.file) {
2050 } else if (arg->bundle->ncp.ipcp.fsm.state == ST_OPENED) {
2051 if (arg->bundle->radius.alive.interval)
2052 radius_StartTimer(arg->bundle);
2054 radius_StopTimer(&arg->bundle->radius);
2071 res = SetRetry(arg->argc - arg->argn, arg->argv + arg->argn,
2078 res = SetRetry(arg->argc - arg->argn, arg->argv + arg->argn,
2084 res = SetRetry(arg->argc - arg->argn, arg->argv + arg->argn,
2090 res = SetRetry(arg->argc - arg->argn, arg->argv + arg->argn,
2096 res = SetRetry(arg->argc - arg->argn, arg->argv + arg->argn,
2097 &arg->bundle->ncp.ipcp.cfg.fsm.timeout,
2098 &arg->bundle->ncp.ipcp.cfg.fsm.maxreq,
2099 &arg->bundle->ncp.ipcp.cfg.fsm.maxtrm, DEF_FSMTRIES);
2104 res = SetRetry(arg->argc - arg->argn, arg->argv + arg->argn,
2105 &arg->bundle->ncp.ipv6cp.cfg.fsm.timeout,
2106 &arg->bundle->ncp.ipv6cp.cfg.fsm.maxreq,
2107 &arg->bundle->ncp.ipv6cp.cfg.fsm.maxtrm, DEF_FSMTRIES);
2114 ipaddr = arg->bundle->ncp.ipcp.cfg.ns.dns;
2117 ipaddr = arg->bundle->ncp.ipcp.cfg.ns.nbns;
2121 if (arg->argc > arg->argn) {
2122 ncpaddr_aton(ncpaddr, &arg->bundle->ncp, arg->argv[arg->argn]);
2125 if (arg->argc > arg->argn+1) {
2126 ncpaddr_aton(ncpaddr + 1, &arg->bundle->ncp, arg->argv[arg->argn + 1]);
2144 for (dummyint = arg->argn; dummyint < arg->argc; dummyint++) {
2145 if (!strcasecmp(arg->argv[dummyint], "auth"))
2147 else if (!strcasecmp(arg->argv[dummyint], "cbcp"))
2149 else if (!strcasecmp(arg->argv[dummyint], "e.164")) {
2150 if (dummyint == arg->argc - 1)
2151 log_Printf(LogWARN, "No E.164 arg (E.164 ignored) !\n");
2154 strncpy(cx->cfg.callback.msg, arg->argv[++dummyint],
2158 } else if (!strcasecmp(arg->argv[dummyint], "none"))
2173 if (arg->argc > arg->argn) {
2174 strncpy(cx->cfg.cbcp.phone, arg->argv[arg->argn],
2177 if (arg->argc > arg->argn + 1) {
2178 cx->cfg.cbcp.delay = atoi(arg->argv[arg->argn + 1]);
2179 if (arg->argc > arg->argn + 2) {
2180 long_val = atol(arg->argv[arg->argn + 2]);
2192 arg->bundle->cfg.choked.timeout = atoi(argp);
2193 if (arg->bundle->cfg.choked.timeout <= 0)
2194 arg->bundle->cfg.choked.timeout = CHOKED_TIMEOUT;
2199 arg->bundle->ncp.cfg.sendpipe = long_val;
2204 arg->bundle->ncp.cfg.recvpipe = long_val;
2210 *arg->bundle->radius.cfg.file = '\0';
2216 strncpy(arg->bundle->radius.cfg.file, argp,
2217 sizeof arg->bundle->radius.cfg.file - 1);
2218 arg->bundle->radius.cfg.file
2219 [sizeof arg->bundle->radius.cfg.file - 1] = '\0';
2242 if (arg->argc == arg->argn + 1)
2243 res = physical_SetParity(arg->cx->physical, argp);
2252 physical_SetRtsCts(arg->cx->physical, 1);
2254 physical_SetRtsCts(arg->cx->physical, 0);
2262 if (arg->argn == arg->argc) {
2263 ncp_SetUrgentTOS(&arg->bundle->ncp);
2264 ncp_ClearUrgentTcpPorts(&arg->bundle->ncp);
2265 ncp_ClearUrgentUdpPorts(&arg->bundle->ncp);
2266 } else if (!strcasecmp(arg->argv[arg->argn], "udp")) {
2267 ncp_SetUrgentTOS(&arg->bundle->ncp);
2268 if (arg->argn == arg->argc - 1)
2269 ncp_ClearUrgentUdpPorts(&arg->bundle->ncp);
2270 else for (f = arg->argn + 1; f < arg->argc; f++)
2271 if (*arg->argv[f] == '+')
2272 ncp_AddUrgentUdpPort(&arg->bundle->ncp, atoi(arg->argv[f] + 1));
2273 else if (*arg->argv[f] == '-')
2274 ncp_RemoveUrgentUdpPort(&arg->bundle->ncp, atoi(arg->argv[f] + 1));
2276 if (f == arg->argn)
2277 ncp_ClearUrgentUdpPorts(&arg->bundle->ncp);
2278 ncp_AddUrgentUdpPort(&arg->bundle->ncp, atoi(arg->argv[f]));
2280 } else if (arg->argn == arg->argc - 1 &&
2281 !strcasecmp(arg->argv[arg->argn], "none")) {
2282 ncp_ClearUrgentTcpPorts(&arg->bundle->ncp);
2283 ncp_ClearUrgentUdpPorts(&arg->bundle->ncp);
2284 ncp_ClearUrgentTOS(&arg->bundle->ncp);
2286 ncp_SetUrgentTOS(&arg->bundle->ncp);
2287 first = arg->argn;
2288 if (!strcasecmp(arg->argv[first], "tcp") && ++first == arg->argc)
2289 ncp_ClearUrgentTcpPorts(&arg->bundle->ncp);
2291 for (f = first; f < arg->argc; f++)
2292 if (*arg->argv[f] == '+')
2293 ncp_AddUrgentTcpPort(&arg->bundle->ncp, atoi(arg->argv[f] + 1));
2294 else if (*arg->argv[f] == '-')
2295 ncp_RemoveUrgentTcpPort(&arg->bundle->ncp, atoi(arg->argv[f] + 1));
2298 ncp_ClearUrgentTcpPorts(&arg->bundle->ncp);
2299 ncp_AddUrgentTcpPort(&arg->bundle->ncp, atoi(arg->argv[f]));
2306 physical_SetPPPoEnonstandard(arg->cx->physical, 1);
2308 physical_SetPPPoEnonstandard(arg->cx->physical, 0);
2318 arg->bundle->radius.port_id_type = RPI_DEFAULT;
2320 arg->bundle->radius.port_id_type = RPI_PID;
2322 arg->bundle->radius.port_id_type = RPI_IFNUM;
2324 arg->bundle->radius.port_id_type = RPI_TUNNUM;
2331 if (arg->bundle->radius.port_id_type && !arg->bundle->radius.cfg.file) {
2476 SetCommand(struct cmdargs const *arg)
2478 if (arg->argc > arg->argn)
2479 FindExec(arg->bundle, SetCommands, arg->argc, arg->argn, arg->argv,
2480 arg->prompt, arg->cx);
2481 else if (arg->prompt)
2482 prompt_Printf(arg->prompt, "Use `set ?' to get a list or `set ? <var>' for"
2491 AddCommand(struct cmdargs const *arg)
2501 if (arg->argc != arg->argn+3 && arg->argc != arg->argn+2)
2506 if (arg->argc == arg->argn + 2) {
2507 if (!strcasecmp(arg->argv[arg->argn], "default"))
2510 if (!ncprange_aton(&dest, &arg->bundle->ncp, arg->argv[arg->argn]))
2512 if (!strncasecmp(arg->argv[arg->argn], "MYADDR", 6))
2514 else if (!strncasecmp(arg->argv[arg->argn], "MYADDR6", 7))
2516 else if (!strncasecmp(arg->argv[arg->argn], "HISADDR", 7))
2518 else if (!strncasecmp(arg->argv[arg->argn], "HISADDR6", 8))
2520 else if (!strncasecmp(arg->argv[arg->argn], "DNS0", 4))
2522 else if (!strncasecmp(arg->argv[arg->argn], "DNS1", 4))
2527 if (strcasecmp(arg->argv[arg->argn], "MYADDR") == 0) {
2529 host = arg->bundle->ncp.ipcp.my_ip;
2530 } else if (strcasecmp(arg->argv[arg->argn], "HISADDR") == 0) {
2532 host = arg->bundle->ncp.ipcp.peer_ip;
2533 } else if (strcasecmp(arg->argv[arg->argn], "DNS0") == 0) {
2535 host = arg->bundle->ncp.ipcp.ns.dns[0];
2536 } else if (strcasecmp(arg->argv[arg->argn], "DNS1") == 0) {
2538 host = arg->bundle->ncp.ipcp.ns.dns[1];
2540 host = GetIpAddr(arg->argv[arg->argn]);
2543 arg->argv[arg->argn]);
2547 ncprange_setip4(&dest, host, GetIpAddr(arg->argv[arg->argn + 1]));
2551 if (strcasecmp(arg->argv[arg->argn + gw_arg], "HISADDR") == 0) {
2552 ncpaddr_setip4(&gw, arg->bundle->ncp.ipcp.peer_ip);
2555 } else if (strcasecmp(arg->argv[arg->argn + gw_arg], "HISADDR6") == 0) {
2556 if (!ncpaddr_getip6(&arg->bundle->ncp.ipv6cp.hisaddr, &host6))
2562 if (!ncpaddr_aton(&gw, &arg->bundle->ncp, arg->argv[arg->argn + gw_arg])) {
2564 arg->argv[arg->argn + gw_arg]);
2572 if (rt_Set(arg->bundle, RTM_ADD, &dest, &gw, arg->cmd->args ? 1 : 0,
2575 route_Add(&arg->bundle->ncp.route, addrs, &dest, &gw);
2581 DeleteCommand(struct cmdargs const *arg)
2586 if (arg->argc == arg->argn+1) {
2587 if(strcasecmp(arg->argv[arg->argn], "all") == 0) {
2588 route_IfDelete(arg->bundle, 0);
2589 route_DeleteAll(&arg->bundle->ncp.route);
2592 if (strcasecmp(arg->argv[arg->argn], "MYADDR") == 0) {
2593 ncprange_setip4host(&dest, arg->bundle->ncp.ipcp.my_ip);
2596 } else if (strcasecmp(arg->argv[arg->argn], "MYADDR6") == 0) {
2597 ncprange_sethost(&dest, &arg->bundle->ncp.ipv6cp.myaddr);
2600 } else if (strcasecmp(arg->argv[arg->argn], "HISADDR") == 0) {
2601 ncprange_setip4host(&dest, arg->bundle->ncp.ipcp.peer_ip);
2604 } else if (strcasecmp(arg->argv[arg->argn], "HISADDR6") == 0) {
2605 ncprange_sethost(&dest, &arg->bundle->ncp.ipv6cp.hisaddr);
2608 } else if (strcasecmp(arg->argv[arg->argn], "DNS0") == 0) {
2609 ncprange_setip4host(&dest, arg->bundle->ncp.ipcp.ns.dns[0]);
2611 } else if (strcasecmp(arg->argv[arg->argn], "DNS1") == 0) {
2612 ncprange_setip4host(&dest, arg->bundle->ncp.ipcp.ns.dns[1]);
2615 ncprange_aton(&dest, &arg->bundle->ncp, arg->argv[arg->argn]);
2618 rt_Set(arg->bundle, RTM_DELETE, &dest, NULL, arg->cmd->args ? 1 : 0, 0);
2619 route_Delete(&arg->bundle->ncp.route, addrs, &dest);
2629 NatEnable(struct cmdargs const *arg)
2631 if (arg->argc == arg->argn+1) {
2632 if (strcasecmp(arg->argv[arg->argn], "yes") == 0) {
2633 if (!arg->bundle->NatEnabled) {
2634 if (arg->bundle->ncp.ipcp.fsm.state == ST_OPENED)
2635 PacketAliasSetAddress(arg->bundle->ncp.ipcp.my_ip);
2636 arg->bundle->NatEnabled = 1;
2639 } else if (strcasecmp(arg->argv[arg->argn], "no") == 0) {
2640 arg->bundle->NatEnabled = 0;
2641 opt_disable(arg->bundle, OPT_IFACEALIAS);
2652 NatOption(struct cmdargs const *arg)
2654 long param = (long)arg->cmd->args;
2656 if (arg->argc == arg->argn+1) {
2657 if (strcasecmp(arg->argv[arg->argn], "yes") == 0) {
2658 if (arg->bundle->NatEnabled) {
2663 } else if (strcmp(arg->argv[arg->argn], "no") == 0) {
2664 if (arg->bundle->NatEnabled) {
2676 LinkCommand(struct cmdargs const *arg)
2678 if (arg->argc > arg->argn+1) {
2684 if (!strcmp(arg->argv[arg->argn], "*")) {
2687 cx = arg->bundle->links;
2691 FindExec(arg->bundle, Commands, arg->argc, arg->argn+1, arg->argv,
2692 arg->prompt, cx);
2693 for (cx = arg->bundle->links; cx; cx = cx->next)
2698 strncpy(namelist, arg->argv[arg->argn], sizeof namelist - 1);
2701 if (!bundle2datalink(arg->bundle, name)) {
2706 strncpy(namelist, arg->argv[arg->argn], sizeof namelist - 1);
2709 cx = bundle2datalink(arg->bundle, name);
2711 FindExec(arg->bundle, Commands, arg->argc, arg->argn+1, arg->argv,
2712 arg->prompt, cx);
2722 log_Printf(LogWARN, "usage: %s\n", arg->cmd->syntax);
2727 command_ChooseLink(struct cmdargs const *arg)
2729 if (arg->cx)
2730 return &arg->cx->physical->link;
2731 else if (!arg->bundle->ncp.mp.cfg.mrru) {
2732 struct datalink *dl = bundle2datalink(arg->bundle, NULL);
2736 return &arg->bundle->ncp.mp.link;
2784 OptSet(struct cmdargs const *arg)
2786 int opt = (int)(long)arg->cmd->args;
2790 if (ident_cmd(arg->argv[arg->argn - 2], &keep, &add) == NULL)
2800 !Enabled(arg->bundle, OPT_NAS_IDENTIFIER)) ||
2802 !Enabled(arg->bundle, OPT_NAS_IP_ADDRESS)))) {
2809 opt_enable(arg->bundle, opt);
2811 opt_disable(arg->bundle, opt);
2817 IfaceAliasOptSet(struct cmdargs const *arg)
2819 unsigned long long save = arg->bundle->cfg.optmask;
2820 int result = OptSet(arg);
2823 if (Enabled(arg->bundle, OPT_IFACEALIAS) && !arg->bundle->NatEnabled) {
2824 arg->bundle->cfg.optmask = save;
2833 NegotiateSet(struct cmdargs const *arg)
2835 long param = (long)arg->cmd->args;
2836 struct link *l = command_ChooseLink(arg); /* LOCAL_CX_OPT uses this */
2837 struct datalink *cx = arg->cx; /* LOCAL_CX uses this */
2842 if ((cmd = ident_cmd(arg->argv[arg->argn-2], &keep, &add)) == NULL)
2845 if ((arg->cmd->lauth & LOCAL_CX) && !cx) {
2847 cmd, arg->cmd->name);
2849 } else if (cx && !(arg->cmd->lauth & (LOCAL_CX|LOCAL_CX_OPT))) {
2851 cmd, arg->cmd->name, cx->name);
2887 arg->bundle->ncp.ipcp.cfg.ns.dns_neg &= keep;
2888 arg->bundle->ncp.ipcp.cfg.ns.dns_neg |= add;
2910 arg->bundle->ncp.mp.cfg.negenddisc &= keep;
2911 arg->bundle->ncp.mp.cfg.negenddisc |= add;
2934 switch (bundle_Phase(arg->bundle)) {
2939 if (bundle_HighestState(arg->bundle) >= DATALINK_LCP) {
2950 arg->bundle->ncp.mp.cfg.shortseq &= keep;
2951 arg->bundle->ncp.mp.cfg.shortseq |= add;
2954 arg->bundle->ncp.ipcp.cfg.vj.neg &= keep;
2955 arg->bundle->ncp.ipcp.cfg.vj.neg |= add;
3066 NegotiateCommand(struct cmdargs const *arg)
3068 if (arg->argc > arg->argn) {
3073 if ((argv[0] = ident_cmd(arg->argv[arg->argn-1], &keep, &add)) == NULL)
3077 for (n = arg->argn; n < arg->argc; n++) {
3078 argv[1] = arg->argv[n];
3079 FindExec(arg->bundle, NegotiateCommands + (keep == NEG_HISMASK ?
3080 0 : NEG_OPT_MAX), 2, 1, argv, arg->prompt, arg->cx);
3082 } else if (arg->prompt)
3083 prompt_Printf(arg->prompt, "Use `%s ?' to get a list.\n",
3084 arg->argv[arg->argn-1]);
3087 arg->argv[arg->argn] );
3104 ClearCommand(struct cmdargs const *arg)
3110 if (arg->argc < arg->argn + 1)
3113 if (strcasecmp(arg->argv[arg->argn], "physical") == 0) {
3114 cx = arg->cx;
3116 cx = bundle2datalink(arg->bundle, NULL);
3122 } else if (strcasecmp(arg->argv[arg->argn], "ipcp") == 0)
3123 t = &arg->bundle->ncp.ipcp.throughput;
3125 else if (strcasecmp(arg->argv[arg->argn], "ipv6cp") == 0)
3126 t = &arg->bundle->ncp.ipv6cp.throughput;
3131 if (arg->argc > arg->argn + 1) {
3133 for (i = arg->argn + 1; i < arg->argc; i++)
3134 if (strcasecmp(arg->argv[i], "overall") == 0)
3136 else if (strcasecmp(arg->argv[i], "current") == 0)
3138 else if (strcasecmp(arg->argv[i], "peak") == 0)
3145 throughput_clear(t, clear_type, arg->prompt);
3150 RunListCommand(struct cmdargs const *arg)
3152 const char *cmd = arg->argc ? arg->argv[arg->argc - 1] : "???";
3155 if (arg->cmd->args == NatCommands &&
3156 tolower(*arg->argv[arg->argn - 1]) == 'a') {
3157 if (arg->prompt)
3158 prompt_Printf(arg->prompt, "The alias command is deprecated\n");
3164 if (arg->argc > arg->argn)
3165 FindExec(arg->bundle, arg->cmd->args, arg->argc, arg->argn, arg->argv,
3166 arg->prompt, arg->cx);
3167 else if (arg->prompt)
3168 prompt_Printf(arg->prompt, "Use `%s help' to get a list or `%s help"
3177 IfaceAddCommand(struct cmdargs const *arg)
3184 if (arg->argc == arg->argn + 1) {
3185 if (!ncprange_aton(&ifa, NULL, arg->argv[arg->argn]))
3189 if (arg->argc == arg->argn + 2) {
3190 if (!ncprange_aton(&ifa, NULL, arg->argv[arg->argn]))
3193 } else if (arg->argc == arg->argn + 3) {
3194 if (!ncpaddr_aton(&addr, NULL, arg->argv[arg->argn]))
3199 if (!ncpaddr_aton(&addr, NULL, arg->argv[arg->argn + 1]))
3209 if (!ncpaddr_aton(&peer, NULL, arg->argv[arg->argn + n]))
3220 if (arg->cmd->args)
3223 return !iface_Add(arg->bundle->iface, &arg->bundle->ncp, &ifa, &peer, how);
3227 IfaceDeleteCommand(struct cmdargs const *arg)
3233 if (arg->argc != arg->argn + 1)
3236 if (!ncpaddr_aton(&ifa, NULL, arg->argv[arg->argn]))
3239 if (arg->bundle->ncp.ipcp.fsm.state == ST_OPENED &&
3241 arg->bundle->ncp.ipcp.my_ip.s_addr == ifa4.s_addr) {
3247 ok = iface_Delete(arg->bundle->iface, &arg->bundle->ncp, &ifa);
3249 if (arg->cmd->args)
3251 else if (arg->prompt)
3252 prompt_Printf(arg->prompt, "%s: No such interface address\n",
3263 IfaceClearCommand(struct cmdargs const *arg)
3268 if (arg->argc == arg->argn + 1) {
3269 if (strcasecmp(arg->argv[arg->argn], "inet") == 0)
3272 else if (strcasecmp(arg->argv[arg->argn], "inet6") == 0)
3277 } else if (arg->argc != arg->argn)
3280 how = arg->bundle->ncp.ipcp.fsm.state == ST_OPENED ||
3281 arg->bundle->phys_type.all & PHYS_AUTO ?
3283 iface_Clear(arg->bundle->iface, &arg->bundle->ncp, family, how);
3289 SetProcTitle(struct cmdargs const *arg)
3293 int argc = arg->argc - arg->argn;
3295 if (arg->argc <= arg->argn) {
3304 command_Expand(argv, argc, arg->argv + arg->argn, arg->bundle, 1, getpid());