svn commit: r198214 - in head: etc sys/kern

Ed Schouten ed at FreeBSD.org
Sun Oct 18 19:48:54 UTC 2009


Author: ed
Date: Sun Oct 18 19:48:53 2009
New Revision: 198214
URL: http://svn.freebsd.org/changeset/base/198214

Log:
  Allow the buffer size to be configured for pseudo-like TTY devices.
  
  Devices that don't implement param() (which means they don't support
  hardware parameters such as flow control, baud rate) hardcode the baud
  rate to TTYDEF_SPEED. This means the buffer size cannot be configured,
  which is a little inconvenient when using canonical mode with big lines
  of input, etc.
  
  Make it adjustable, but do clamp it between B50 and B115200 to prevent
  awkward buffer sizes. Remove the baud rate assignment from
  /etc/gettytab. Trust the kernel to fill in a proper value.
  
  Reported by:	Mikolaj Golub <to my trociny gmail com>
  MFC after:	1 month

Modified:
  head/etc/gettytab
  head/sys/kern/tty.c

Modified: head/etc/gettytab
==============================================================================
--- head/etc/gettytab	Sun Oct 18 19:45:44 2009	(r198213)
+++ head/etc/gettytab	Sun Oct 18 19:48:53 2009	(r198214)
@@ -162,7 +162,7 @@ X|Xwindow|X window system:\
 	:fd@:nd@:cd@:rw:sp#9600:
 
 P|Pc|Pc console:\
-	:ht:np:sp#115200:
+	:ht:np:
 
 #
 # Wierdo special case for fast crt's with hardcopy devices

Modified: head/sys/kern/tty.c
==============================================================================
--- head/sys/kern/tty.c	Sun Oct 18 19:45:44 2009	(r198213)
+++ head/sys/kern/tty.c	Sun Oct 18 19:48:53 2009	(r198214)
@@ -870,8 +870,19 @@ static int
 ttydevsw_defparam(struct tty *tp, struct termios *t)
 {
 
-	/* Use a fake baud rate, we're not a real device. */
-	t->c_ispeed = t->c_ospeed = TTYDEF_SPEED;
+	/*
+	 * Allow the baud rate to be adjusted for pseudo-devices, but at
+	 * least restrict it to 115200 to prevent excessive buffer
+	 * usage.  Also disallow 0, to prevent foot shooting.
+	 */
+	if (t->c_ispeed < B50)
+		t->c_ispeed = B50;
+	else if (t->c_ispeed > B115200)
+		t->c_ispeed = B115200;
+	if (t->c_ospeed < B50)
+		t->c_ospeed = B50;
+	else if (t->c_ospeed > B115200)
+		t->c_ospeed = B115200;
 
 	return (0);
 }


More information about the svn-src-all mailing list