summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ppp/command.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/ppp/command.c')
-rw-r--r--usr.sbin/ppp/command.c52
1 files changed, 37 insertions, 15 deletions
diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c
index 461c4295..66edd60 100644
--- a/usr.sbin/ppp/command.c
+++ b/usr.sbin/ppp/command.c
@@ -1375,7 +1375,7 @@ static int
SetVariable(struct cmdargs const *arg)
{
long long_val, param = (long)arg->cmd->args;
- int mode, dummyint, f;
+ int mode, dummyint, f, first;
const char *argp;
struct datalink *cx = arg->cx; /* LOCAL_CX uses this */
const char *err = NULL;
@@ -1789,18 +1789,40 @@ SetVariable(struct cmdargs const *arg)
break;
case VAR_URGENTPORTS:
- if (arg->argn == arg->argc)
- ipcp_ClearUrgentPorts(&arg->bundle->ncp.ipcp);
- else for (f = arg->argn; f < arg->argc; f++)
- if (*arg->argv[f] == '+')
- ipcp_AddUrgentPort(&arg->bundle->ncp.ipcp, atoi(arg->argv[f] + 1));
- else if (*arg->argv[f] == '-')
- ipcp_RemoveUrgentPort(&arg->bundle->ncp.ipcp, atoi(arg->argv[f] + 1));
- else {
- if (f == arg->argn)
- ipcp_ClearUrgentPorts(&arg->bundle->ncp.ipcp);
- ipcp_AddUrgentPort(&arg->bundle->ncp.ipcp, atoi(arg->argv[f]));
- }
+ if (arg->argn == arg->argc) {
+ ipcp_ClearUrgentTcpPorts(&arg->bundle->ncp.ipcp);
+ ipcp_ClearUrgentUdpPorts(&arg->bundle->ncp.ipcp);
+ } else if (!strcasecmp(arg->argv[arg->argn], "udp")) {
+ if (arg->argn == arg->argc - 1)
+ ipcp_ClearUrgentUdpPorts(&arg->bundle->ncp.ipcp);
+ else for (f = arg->argn + 1; f < arg->argc; f++)
+ if (*arg->argv[f] == '+')
+ ipcp_AddUrgentUdpPort(&arg->bundle->ncp.ipcp, atoi(arg->argv[f] + 1));
+ else if (*arg->argv[f] == '-')
+ ipcp_RemoveUrgentUdpPort(&arg->bundle->ncp.ipcp,
+ atoi(arg->argv[f] + 1));
+ else {
+ if (f == arg->argn)
+ ipcp_ClearUrgentUdpPorts(&arg->bundle->ncp.ipcp);
+ ipcp_AddUrgentUdpPort(&arg->bundle->ncp.ipcp, atoi(arg->argv[f]));
+ }
+ } else {
+ first = arg->argn;
+ if (!strcasecmp(arg->argv[first], "tcp") && ++first == arg->argc)
+ ipcp_ClearUrgentTcpPorts(&arg->bundle->ncp.ipcp);
+
+ for (f = first; f < arg->argc; f++)
+ if (*arg->argv[f] == '+')
+ ipcp_AddUrgentTcpPort(&arg->bundle->ncp.ipcp, atoi(arg->argv[f] + 1));
+ else if (*arg->argv[f] == '-')
+ ipcp_RemoveUrgentTcpPort(&arg->bundle->ncp.ipcp,
+ atoi(arg->argv[f] + 1));
+ else {
+ if (f == first)
+ ipcp_ClearUrgentTcpPorts(&arg->bundle->ncp.ipcp);
+ ipcp_AddUrgentTcpPort(&arg->bundle->ncp.ipcp, atoi(arg->argv[f]));
+ }
+ }
break;
}
@@ -1910,8 +1932,8 @@ static struct cmdtab const SetCommands[] = {
"STOPPED timeouts", "set stopped [LCPseconds [CCPseconds]]"},
{"timeout", NULL, SetVariable, LOCAL_AUTH, "Idle timeout",
"set timeout idletime", (const void *)VAR_IDLETIMEOUT},
- {"urgent", NULL, SetVariable, LOCAL_AUTH,
- "urgent ports", "set urgent [+|-]port...", (const void *)VAR_URGENTPORTS},
+ {"urgent", NULL, SetVariable, LOCAL_AUTH, "urgent ports",
+ "set urgent [tcp|udp] [+|-]port...", (const void *)VAR_URGENTPORTS},
{"vj", NULL, ipcp_vjset, LOCAL_AUTH,
"vj values", "set vj slots|slotcomp [value]"},
{"help", "?", HelpCommand, LOCAL_AUTH | LOCAL_NO_AUTH,
OpenPOWER on IntegriCloud