View | Details | Raw Unified | Return to bug 1733 | Differences between
and this patch

Collapse All | Expand All

(-)clientloop.c (+3 lines)
Lines 1955-1960 client_session2_setup(int id, int want_t Link Here
1955
	if ((c = channel_lookup(id)) == NULL)
1955
	if ((c = channel_lookup(id)) == NULL)
1956
		fatal("client_session2_setup: channel %d: unknown channel", id);
1956
		fatal("client_session2_setup: channel %d: unknown channel", id);
1957
1957
1958
	packet_set_interactive(want_tty,
1959
	    options.ip_qos_interactive, options.ip_qos_bulk);
1960
1958
	if (want_tty) {
1961
	if (want_tty) {
1959
		struct winsize ws;
1962
		struct winsize ws;
1960
1963
(-)misc.c (+54 lines)
Lines 31-36 Link Here
31
31
32
#include <net/if.h>
32
#include <net/if.h>
33
#include <netinet/in.h>
33
#include <netinet/in.h>
34
#include <netinet/in_systm.h>
35
#include <netinet/ip.h>
34
#include <netinet/tcp.h>
36
#include <netinet/tcp.h>
35
37
36
#include <errno.h>
38
#include <errno.h>
Lines 893-895 bandwidth_limit(struct bwlimit *bw, size Link Here
893
	bw->lamt = 0;
895
	bw->lamt = 0;
894
	gettimeofday(&bw->bwstart, NULL);
896
	gettimeofday(&bw->bwstart, NULL);
895
}
897
}
898
899
static const struct {
900
	const char *name;
901
	int value;
902
} ipqos[] = {
903
	{ "af11", IPTOS_DSCP_AF11 },
904
	{ "af12", IPTOS_DSCP_AF12 },
905
	{ "af13", IPTOS_DSCP_AF13 },
906
	{ "af14", IPTOS_DSCP_AF21 },
907
	{ "af22", IPTOS_DSCP_AF22 },
908
	{ "af23", IPTOS_DSCP_AF23 },
909
	{ "af31", IPTOS_DSCP_AF31 },
910
	{ "af32", IPTOS_DSCP_AF32 },
911
	{ "af33", IPTOS_DSCP_AF33 },
912
	{ "af41", IPTOS_DSCP_AF41 },
913
	{ "af42", IPTOS_DSCP_AF42 },
914
	{ "af43", IPTOS_DSCP_AF43 },
915
	{ "cs0", IPTOS_DSCP_CS0 },
916
	{ "cs1", IPTOS_DSCP_CS1 },
917
	{ "cs2", IPTOS_DSCP_CS2 },
918
	{ "cs3", IPTOS_DSCP_CS3 },
919
	{ "cs4", IPTOS_DSCP_CS4 },
920
	{ "cs5", IPTOS_DSCP_CS5 },
921
	{ "cs6", IPTOS_DSCP_CS6 },
922
	{ "cs7", IPTOS_DSCP_CS7 },
923
	{ "ef", IPTOS_DSCP_EF },
924
	{ "lowdelay", IPTOS_LOWDELAY },
925
	{ "throughput", IPTOS_THROUGHPUT },
926
	{ "reliability", IPTOS_RELIABILITY },
927
	{ NULL, -1 }
928
};
929
930
int
931
parse_ipqos(const char *cp)
932
{
933
	u_int i;
934
	char *ep;
935
	long val;
936
937
	if (cp == NULL)
938
		return -1;
939
	for (i = 0; ipqos[i].name != NULL; i++) {
940
		if (strcasecmp(cp, ipqos[i].name) == 0)
941
			return ipqos[i].value;
942
	}
943
	/* Try parsing as an integer */
944
	val = strtol(cp, &ep, 0);
945
	if (*cp == '\0' || *ep != '\0' || val < 0 || val > 255)
946
		return -1;
947
	return val;
948
}
949
(-)misc.h (+1 lines)
Lines 87-92 struct bwlimit { Link Here
87
void bandwidth_limit_init(struct bwlimit *, u_int64_t, size_t);
87
void bandwidth_limit_init(struct bwlimit *, u_int64_t, size_t);
88
void bandwidth_limit(struct bwlimit *, size_t);
88
void bandwidth_limit(struct bwlimit *, size_t);
89
89
90
int parse_ipqos(const char *);
90
91
91
/* readpass.c */
92
/* readpass.c */
92
93
(-)packet.c (-5 / +4 lines)
Lines 1734-1746 packet_not_very_much_data_to_write(void) Link Here
1734
}
1734
}
1735
1735
1736
static void
1736
static void
1737
packet_set_tos(int interactive)
1737
packet_set_tos(int tos)
1738
{
1738
{
1739
	int tos = interactive ? IPTOS_LOWDELAY : IPTOS_THROUGHPUT;
1740
1741
	if (!packet_connection_is_on_socket() ||
1739
	if (!packet_connection_is_on_socket() ||
1742
	    !packet_connection_is_ipv4())
1740
	    !packet_connection_is_ipv4())
1743
		return;
1741
		return;
1742
	debug3("%s: set IP_TOS 0x%02x", __func__, tos);
1744
	if (setsockopt(active_state->connection_in, IPPROTO_IP, IP_TOS, &tos,
1743
	if (setsockopt(active_state->connection_in, IPPROTO_IP, IP_TOS, &tos,
1745
	    sizeof(tos)) < 0)
1744
	    sizeof(tos)) < 0)
1746
		error("setsockopt IP_TOS %d: %.100s:",
1745
		error("setsockopt IP_TOS %d: %.100s:",
Lines 1750-1756 packet_set_tos(int interactive) Link Here
1750
/* Informs that the current session is interactive.  Sets IP flags for that. */
1749
/* Informs that the current session is interactive.  Sets IP flags for that. */
1751
1750
1752
void
1751
void
1753
packet_set_interactive(int interactive)
1752
packet_set_interactive(int interactive, int qos_interactive, int qos_bulk)
1754
{
1753
{
1755
	if (active_state->set_interactive_called)
1754
	if (active_state->set_interactive_called)
1756
		return;
1755
		return;
Lines 1763-1769 packet_set_interactive(int interactive) Link Here
1763
	if (!packet_connection_is_on_socket())
1762
	if (!packet_connection_is_on_socket())
1764
		return;
1763
		return;
1765
	set_nodelay(active_state->connection_in);
1764
	set_nodelay(active_state->connection_in);
1766
	packet_set_tos(interactive);
1765
	packet_set_tos(interactive ? qos_interactive : qos_bulk);
1767
}
1766
}
1768
1767
1769
/* Returns true if the current connection is interactive. */
1768
/* Returns true if the current connection is interactive. */
(-)packet.h (-1 / +1 lines)
Lines 32-38 u_int packet_get_encryption_key(u_char Link Here
32
void     packet_set_protocol_flags(u_int);
32
void     packet_set_protocol_flags(u_int);
33
u_int	 packet_get_protocol_flags(void);
33
u_int	 packet_get_protocol_flags(void);
34
void     packet_start_compression(int);
34
void     packet_start_compression(int);
35
void     packet_set_interactive(int);
35
void     packet_set_interactive(int, int, int);
36
int      packet_is_interactive(void);
36
int      packet_is_interactive(void);
37
void     packet_set_server(void);
37
void     packet_set_server(void);
38
void     packet_set_authenticated(void);
38
void     packet_set_authenticated(void);
(-)readconf.c (-1 / +27 lines)
Lines 17-22 Link Here
17
#include <sys/socket.h>
17
#include <sys/socket.h>
18
18
19
#include <netinet/in.h>
19
#include <netinet/in.h>
20
#include <netinet/in_systm.h>
21
#include <netinet/ip.h>
20
22
21
#include <ctype.h>
23
#include <ctype.h>
22
#include <errno.h>
24
#include <errno.h>
Lines 129-135 typedef enum { Link Here
129
	oHashKnownHosts,
131
	oHashKnownHosts,
130
	oTunnel, oTunnelDevice, oLocalCommand, oPermitLocalCommand,
132
	oTunnel, oTunnelDevice, oLocalCommand, oPermitLocalCommand,
131
	oVisualHostKey, oUseRoaming, oZeroKnowledgePasswordAuthentication,
133
	oVisualHostKey, oUseRoaming, oZeroKnowledgePasswordAuthentication,
132
	oKexAlgorithms,
134
	oKexAlgorithms, oIPQoS,
133
	oDeprecated, oUnsupported
135
	oDeprecated, oUnsupported
134
} OpCodes;
136
} OpCodes;
135
137
Lines 239-244 static struct { Link Here
239
	{ "zeroknowledgepasswordauthentication", oUnsupported },
241
	{ "zeroknowledgepasswordauthentication", oUnsupported },
240
#endif
242
#endif
241
	{ "kexalgorithms", oKexAlgorithms },
243
	{ "kexalgorithms", oKexAlgorithms },
244
	{ "ipqos", oIPQoS },
242
245
243
	{ NULL, oBadOption }
246
	{ NULL, oBadOption }
244
};
247
};
Lines 969-974 parse_int: Link Here
969
		intptr = &options->visual_host_key;
972
		intptr = &options->visual_host_key;
970
		goto parse_flag;
973
		goto parse_flag;
971
974
975
	case oIPQoS:
976
		arg = strdelim(&s);
977
		if ((value = parse_ipqos(arg)) == -1)
978
			fatal("%s line %d: Bad IPQoS value: %s",
979
			    filename, linenum, arg);
980
		arg = strdelim(&s);
981
		if (arg == NULL)
982
			value2 = value;
983
		else if ((value2 = parse_ipqos(arg)) == -1)
984
			fatal("%s line %d: Bad IPQoS value: %s",
985
			    filename, linenum, arg);
986
		if (*activep) {
987
			options->ip_qos_interactive = value;
988
			options->ip_qos_bulk = value2;
989
		}
990
		break;
991
972
	case oUseRoaming:
992
	case oUseRoaming:
973
		intptr = &options->use_roaming;
993
		intptr = &options->use_roaming;
974
		goto parse_flag;
994
		goto parse_flag;
Lines 1131-1136 initialize_options(Options * options) Link Here
1131
	options->use_roaming = -1;
1151
	options->use_roaming = -1;
1132
	options->visual_host_key = -1;
1152
	options->visual_host_key = -1;
1133
	options->zero_knowledge_password_authentication = -1;
1153
	options->zero_knowledge_password_authentication = -1;
1154
	options->ip_qos_interactive = -1;
1155
	options->ip_qos_bulk = -1;
1134
}
1156
}
1135
1157
1136
/*
1158
/*
Lines 1284-1289 fill_default_options(Options * options) Link Here
1284
		options->visual_host_key = 0;
1306
		options->visual_host_key = 0;
1285
	if (options->zero_knowledge_password_authentication == -1)
1307
	if (options->zero_knowledge_password_authentication == -1)
1286
		options->zero_knowledge_password_authentication = 0;
1308
		options->zero_knowledge_password_authentication = 0;
1309
	if (options->ip_qos_interactive == -1)
1310
		options->ip_qos_interactive = IPTOS_LOWDELAY;
1311
	if (options->ip_qos_bulk == -1)
1312
		options->ip_qos_bulk = IPTOS_THROUGHPUT;
1287
	/* options->local_command should not be set by default */
1313
	/* options->local_command should not be set by default */
1288
	/* options->proxy_command should not be set by default */
1314
	/* options->proxy_command should not be set by default */
1289
	/* options->user will be set in the main program if appropriate */
1315
	/* options->user will be set in the main program if appropriate */
(-)readconf.h (+2 lines)
Lines 59-64 typedef struct { Link Here
59
	int     compression_level;	/* Compression level 1 (fast) to 9
59
	int     compression_level;	/* Compression level 1 (fast) to 9
60
					 * (best). */
60
					 * (best). */
61
	int     tcp_keep_alive;	/* Set SO_KEEPALIVE. */
61
	int     tcp_keep_alive;	/* Set SO_KEEPALIVE. */
62
	int	ip_qos_interactive;	/* IP ToS/DSCP/class for interactive */
63
	int	ip_qos_bulk;		/* IP ToS/DSCP/class for bulk traffic */
62
	LogLevel log_level;	/* Level for logging. */
64
	LogLevel log_level;	/* Level for logging. */
63
65
64
	int     port;		/* Port to connect. */
66
	int     port;		/* Port to connect. */
(-)servconf.c (-2 / +34 lines)
Lines 14-19 Link Here
14
#include <sys/socket.h>
14
#include <sys/socket.h>
15
#include <sys/queue.h>
15
#include <sys/queue.h>
16
16
17
#include <netinet/in.h>
18
#include <netinet/in_systm.h>
19
#include <netinet/ip.h>
20
17
#include <netdb.h>
21
#include <netdb.h>
18
#include <pwd.h>
22
#include <pwd.h>
19
#include <stdio.h>
23
#include <stdio.h>
Lines 126-131 initialize_server_options(ServerOptions Link Here
126
	options->revoked_keys_file = NULL;
130
	options->revoked_keys_file = NULL;
127
	options->trusted_user_ca_keys = NULL;
131
	options->trusted_user_ca_keys = NULL;
128
	options->authorized_principals_file = NULL;
132
	options->authorized_principals_file = NULL;
133
	options->ip_qos_interactive = -1;
134
	options->ip_qos_bulk = -1;
129
}
135
}
130
136
131
void
137
void
Lines 257-262 fill_default_server_options(ServerOption Link Here
257
		options->permit_tun = SSH_TUNMODE_NO;
263
		options->permit_tun = SSH_TUNMODE_NO;
258
	if (options->zero_knowledge_password_authentication == -1)
264
	if (options->zero_knowledge_password_authentication == -1)
259
		options->zero_knowledge_password_authentication = 0;
265
		options->zero_knowledge_password_authentication = 0;
266
	if (options->ip_qos_interactive == -1)
267
		options->ip_qos_interactive = IPTOS_LOWDELAY;
268
	if (options->ip_qos_bulk == -1)
269
		options->ip_qos_bulk = IPTOS_THROUGHPUT;
260
270
261
	/* Turn privilege separation on by default */
271
	/* Turn privilege separation on by default */
262
	if (use_privsep == -1)
272
	if (use_privsep == -1)
Lines 290-296 typedef enum { Link Here
290
	sUsePrivilegeSeparation, sAllowAgentForwarding,
300
	sUsePrivilegeSeparation, sAllowAgentForwarding,
291
	sZeroKnowledgePasswordAuthentication, sHostCertificate,
301
	sZeroKnowledgePasswordAuthentication, sHostCertificate,
292
	sRevokedKeys, sTrustedUserCAKeys, sAuthorizedPrincipalsFile,
302
	sRevokedKeys, sTrustedUserCAKeys, sAuthorizedPrincipalsFile,
293
	sKexAlgorithms,
303
	sKexAlgorithms, sIPQoS,
294
	sDeprecated, sUnsupported
304
	sDeprecated, sUnsupported
295
} ServerOpCodes;
305
} ServerOpCodes;
296
306
Lines 402-407 static struct { Link Here
402
	{ "trustedusercakeys", sTrustedUserCAKeys, SSHCFG_ALL },
412
	{ "trustedusercakeys", sTrustedUserCAKeys, SSHCFG_ALL },
403
	{ "authorizedprincipalsfile", sAuthorizedPrincipalsFile, SSHCFG_ALL },
413
	{ "authorizedprincipalsfile", sAuthorizedPrincipalsFile, SSHCFG_ALL },
404
	{ "kexalgorithms", sKexAlgorithms, SSHCFG_GLOBAL },
414
	{ "kexalgorithms", sKexAlgorithms, SSHCFG_GLOBAL },
415
	{ "ipqos", sIPQoS, SSHCFG_ALL },
405
	{ NULL, sBadOption, 0 }
416
	{ NULL, sBadOption, 0 }
406
};
417
};
407
418
Lines 631-637 process_server_config_line(ServerOptions Link Here
631
    const char *host, const char *address)
642
    const char *host, const char *address)
632
{
643
{
633
	char *cp, **charptr, *arg, *p;
644
	char *cp, **charptr, *arg, *p;
634
	int cmdline = 0, *intptr, value, n;
645
	int cmdline = 0, *intptr, value, value2, n;
635
	SyslogFacility *log_facility_ptr;
646
	SyslogFacility *log_facility_ptr;
636
	LogLevel *log_level_ptr;
647
	LogLevel *log_level_ptr;
637
	ServerOpCodes opcode;
648
	ServerOpCodes opcode;
Lines 1325-1330 process_server_config_line(ServerOptions Link Here
1325
		charptr = &options->revoked_keys_file;
1336
		charptr = &options->revoked_keys_file;
1326
		goto parse_filename;
1337
		goto parse_filename;
1327
1338
1339
	case sIPQoS:
1340
		arg = strdelim(&cp);
1341
		if ((value = parse_ipqos(arg)) == -1)
1342
			fatal("%s line %d: Bad IPQoS value: %s",
1343
			    filename, linenum, arg);
1344
		arg = strdelim(&cp);
1345
		if (arg == NULL)
1346
			value2 = value;
1347
		else if ((value2 = parse_ipqos(arg)) == -1)
1348
			fatal("%s line %d: Bad IPQoS value: %s",
1349
			    filename, linenum, arg);
1350
		if (*activep) {
1351
			options->ip_qos_interactive = value;
1352
			options->ip_qos_bulk = value2;
1353
		}
1354
		break;
1355
1328
	case sDeprecated:
1356
	case sDeprecated:
1329
		logit("%s line %d: Deprecated option %s",
1357
		logit("%s line %d: Deprecated option %s",
1330
		    filename, linenum, arg);
1358
		    filename, linenum, arg);
Lines 1435-1440 copy_set_server_options(ServerOptions *d Link Here
1435
	M_CP_INTOPT(x11_use_localhost);
1463
	M_CP_INTOPT(x11_use_localhost);
1436
	M_CP_INTOPT(max_sessions);
1464
	M_CP_INTOPT(max_sessions);
1437
	M_CP_INTOPT(max_authtries);
1465
	M_CP_INTOPT(max_authtries);
1466
	M_CP_INTOPT(ip_qos_interactive);
1467
	M_CP_INTOPT(ip_qos_bulk);
1438
1468
1439
	M_CP_STROPT(banner);
1469
	M_CP_STROPT(banner);
1440
	if (preauth)
1470
	if (preauth)
Lines 1694-1699 dump_config(ServerOptions *o) Link Here
1694
			break;
1724
			break;
1695
		}
1725
		}
1696
	dump_cfg_string(sPermitTunnel, s);
1726
	dump_cfg_string(sPermitTunnel, s);
1727
1728
	printf("ipqos 0x%02x 0x%02x\n", o->ip_qos_interactive, o->ip_qos_bulk);
1697
1729
1698
	channel_print_adm_permitted_opens();
1730
	channel_print_adm_permitted_opens();
1699
}
1731
}
(-)servconf.h (+2 lines)
Lines 70-75 typedef struct { Link Here
70
	char   *xauth_location;	/* Location of xauth program */
70
	char   *xauth_location;	/* Location of xauth program */
71
	int     strict_modes;	/* If true, require string home dir modes. */
71
	int     strict_modes;	/* If true, require string home dir modes. */
72
	int     tcp_keep_alive;	/* If true, set SO_KEEPALIVE. */
72
	int     tcp_keep_alive;	/* If true, set SO_KEEPALIVE. */
73
	int	ip_qos_interactive;	/* IP ToS/DSCP/class for interactive */
74
	int	ip_qos_bulk;		/* IP ToS/DSCP/class for bulk traffic */
73
	char   *ciphers;	/* Supported SSH2 ciphers. */
75
	char   *ciphers;	/* Supported SSH2 ciphers. */
74
	char   *macs;		/* Supported SSH2 macs. */
76
	char   *macs;		/* Supported SSH2 macs. */
75
	char   *kex_algorithms;	/* SSH2 kex methods in order of preference. */
77
	char   *kex_algorithms;	/* SSH2 kex methods in order of preference. */
(-)session.c (-2 / +4 lines)
Lines 559-565 do_exec_no_pty(Session *s, const char *c Link Here
559
559
560
	s->pid = pid;
560
	s->pid = pid;
561
	/* Set interactive/non-interactive mode. */
561
	/* Set interactive/non-interactive mode. */
562
	packet_set_interactive(s->display != NULL);
562
	packet_set_interactive(s->display != NULL,
563
	    options.ip_qos_interactive, options.ip_qos_bulk);
563
564
564
#ifdef USE_PIPES
565
#ifdef USE_PIPES
565
	/* We are the parent.  Close the child sides of the pipes. */
566
	/* We are the parent.  Close the child sides of the pipes. */
Lines 689-695 do_exec_pty(Session *s, const char *comm Link Here
689
690
690
	/* Enter interactive session. */
691
	/* Enter interactive session. */
691
	s->ptymaster = ptymaster;
692
	s->ptymaster = ptymaster;
692
	packet_set_interactive(1);
693
	packet_set_interactive(1, 
694
	    options.ip_qos_interactive, options.ip_qos_bulk);
693
	if (compat20) {
695
	if (compat20) {
694
		session_set_fds(s, ptyfd, fdout, -1, 1, 1);
696
		session_set_fds(s, ptyfd, fdout, -1, 1, 1);
695
	} else {
697
	} else {
(-)ssh.c (-3 / +2 lines)
Lines 1186-1192 ssh_session(void) Link Here
1186
		}
1186
		}
1187
	}
1187
	}
1188
	/* Tell the packet module whether this is an interactive session. */
1188
	/* Tell the packet module whether this is an interactive session. */
1189
	packet_set_interactive(interactive);
1189
	packet_set_interactive(interactive,
1190
	    options.ip_qos_interactive, options.ip_qos_bulk);
1190
1191
1191
	/* Request authentication agent forwarding if appropriate. */
1192
	/* Request authentication agent forwarding if appropriate. */
1192
	check_agent_present();
1193
	check_agent_present();
Lines 1284-1291 ssh_session2_setup(int id, int success, Link Here
1284
1285
1285
	client_session2_setup(id, tty_flag, subsystem_flag, getenv("TERM"),
1286
	client_session2_setup(id, tty_flag, subsystem_flag, getenv("TERM"),
1286
	    NULL, fileno(stdin), &command, environ);
1287
	    NULL, fileno(stdin), &command, environ);
1287
1288
	packet_set_interactive(interactive);
1289
}
1288
}
1290
1289
1291
/* open new channel for a session */
1290
/* open new channel for a session */
(-)ssh_config.5 (+32 lines)
Lines 626-631 escape characters: Link Here
626
It is possible to have
626
It is possible to have
627
multiple identity files specified in configuration files; all these
627
multiple identity files specified in configuration files; all these
628
identities will be tried in sequence.
628
identities will be tried in sequence.
629
.It Cm IPQoS
630
Specifies the IPv4 type-of-service or DSCP class for the connection.
631
Accepted values are
632
.Dq af11 ,
633
.Dq af12 ,
634
.Dq af13 ,
635
.Dq af14 ,
636
.Dq af22 ,
637
.Dq af23 ,
638
.Dq af31 ,
639
.Dq af32 ,
640
.Dq af33 ,
641
.Dq af41 ,
642
.Dq af42 ,
643
.Dq af43 ,
644
.Dq cs0 ,
645
.Dq cs1 ,
646
.Dq cs2 ,
647
.Dq cs3 ,
648
.Dq cs4 ,
649
.Dq cs5 ,
650
.Dq cs6 ,
651
.Dq cs7 ,
652
.Dq ef ,
653
.Dq lowdelay ,
654
.Dq throughput ,
655
.Dq reliability ,
656
or a numeric value.
657
This option may take one or two arguments.
658
If one argument is specified, it is used as the packet class unconditionally.
659
If two values are specified, the first is automatically selected for
660
interactive sessions and the second for non-interactive sessions.
629
.It Cm KbdInteractiveAuthentication
661
.It Cm KbdInteractiveAuthentication
630
Specifies whether to use keyboard-interactive authentication.
662
Specifies whether to use keyboard-interactive authentication.
631
The argument to this keyword must be
663
The argument to this keyword must be
(-)sshd_config.5 (+32 lines)
Lines 513-518 or Link Here
513
.Cm HostbasedAuthentication .
513
.Cm HostbasedAuthentication .
514
The default is
514
The default is
515
.Dq no .
515
.Dq no .
516
.It Cm IPQoS
517
Specifies the IPv4 type-of-service or DSCP class for the connection.
518
Accepted values are
519
.Dq af11 ,
520
.Dq af12 ,
521
.Dq af13 ,
522
.Dq af14 ,
523
.Dq af22 ,
524
.Dq af23 ,
525
.Dq af31 ,
526
.Dq af32 ,
527
.Dq af33 ,
528
.Dq af41 ,
529
.Dq af42 ,
530
.Dq af43 ,
531
.Dq cs0 ,
532
.Dq cs1 ,
533
.Dq cs2 ,
534
.Dq cs3 ,
535
.Dq cs4 ,
536
.Dq cs5 ,
537
.Dq cs6 ,
538
.Dq cs7 ,
539
.Dq ef ,
540
.Dq lowdelay ,
541
.Dq throughput ,
542
.Dq reliability ,
543
or a numeric value.
544
This option may take one or two arguments.
545
If one argument is specified, it is used as the packet class unconditionally.
546
If two values are specified, the first is automatically selected for
547
interactive sessions and the second for non-interactive sessions.
516
.It Cm KerberosAuthentication
548
.It Cm KerberosAuthentication
517
Specifies whether the password provided by the user for
549
Specifies whether the password provided by the user for
518
.Cm PasswordAuthentication
550
.Cm PasswordAuthentication

Return to bug 1733