#define TIOCSPTLCK     _IOW('T',0x31, int)  /* Lock/unlock Pty */
 #define TIOCGDEV       _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */
 #define TIOCSIG                _IOW('T',0x36, int)  /* Generate signal on Pty slave */
+#define TIOCVHANGUP    0x5437
 
 #define TIOCSERCONFIG  0x5453
 #define TIOCSERGWILD   0x5454
 
 #define TIOCSPTLCK     _IOW('T', 0x31, int)  /* Lock/unlock Pty */
 #define TIOCGDEV       _IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */
 #define TIOCSIG                _IOW('T', 0x36, int)  /* Generate signal on Pty slave */
+#define TIOCVHANGUP    0x5437
 
 /* I hope the range from 0x5480 on is free ... */
 #define TIOCSCTTY      0x5480          /* become controlling tty */
 
 #define TIOCSPTLCK     _IOW('T',0x31, int)  /* Lock/unlock Pty */
 #define TIOCGDEV       _IOR('T',0x32, int)  /* Get primary device node of /dev/console */
 #define TIOCSIG                _IOW('T',0x36, int)  /* Generate signal on Pty slave */
+#define TIOCVHANGUP    0x5437
 
 #define FIONCLEX       0x5450  /* these numbers need to be adjusted. */
 #define FIOCLEX                0x5451
 
 #define TIOCSPTLCK     _IOW('T',0x31, int)  /* Lock/unlock Pty */
 #define TIOCGDEV       _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */
 #define TIOCSIG                _IOW('T',0x36, int)  /* Generate signal on Pty slave */
+#define TIOCVHANGUP    0x5437
 
 #define TIOCSERCONFIG  0x5453
 #define TIOCSERGWILD   0x5454
 
 #define TIOCSPTLCK     _IOW('T',0x31, int)  /* Lock/unlock Pty */
 #define TIOCGDEV       _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */
 #define TIOCSIG                _IOW('T',0x36, int)  /* Generate signal on Pty slave */
+#define TIOCVHANGUP    _IO('T', 0x37)
 
 #define TIOCSERCONFIG  _IO('T', 83) /* 0x5453 */
 #define TIOCSERGWILD   _IOR('T', 84,  int) /* 0x5454 */
 
 #define TCSETSW2       _IOW('T', 14, struct termios2)
 #define TCSETSF2       _IOW('T', 15, struct termios2)
 #define TIOCGDEV       _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */
+#define TIOCVHANGUP    _IO('T', 0x37)
 
 /* Note that all the ioctls that are not available in Linux have a 
  * double underscore on the front to: a) avoid some programs to
 
 #define TIOCSPTLCK     _IOW('T',0x31, int)  /* Lock/unlock Pty */
 #define TIOCGDEV       _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */
 #define TIOCSIG                _IOW('T',0x36, int)  /* Generate signal on Pty slave */
+#define TIOCVHANGUP    _IO('T', 0x37)
 
 #define TIOCSERCONFIG  _IO('T', 83)
 #define TIOCSERGWILD   _IOR('T', 84,  int)
 
                return put_user(tty->ldisc->ops->num, (int __user *)p);
        case TIOCSETD:
                return tiocsetd(tty, p);
+       case TIOCVHANGUP:
+               if (!capable(CAP_SYS_ADMIN))
+                       return -EPERM;
+               tty_vhangup(tty);
+               return 0;
        case TIOCGDEV:
        {
                unsigned int ret = new_encode_dev(tty_devnum(real_tty));
 
 #define TCSETXF                0x5434
 #define TCSETXW                0x5435
 #define TIOCSIG                _IOW('T', 0x36, int)  /* pty: generate signal */
+#define TIOCVHANGUP    0x5437
 
 #define FIONCLEX       0x5450
 #define FIOCLEX                0x5451