From bryan@stansell.org Fri Jul 4 17:55:00 2003 Received: from underdog.stansell.org (localhost [127.0.0.1]) by underdog.stansell.org (8.12.9/8.12.9) with ESMTP id h650t03A007055; Fri, 4 Jul 2003 17:55:00 -0700 (PDT) Received: (from bryan@localhost) by underdog.stansell.org (8.12.9/8.12.9/Submit) id h650t0ji007054; Fri, 4 Jul 2003 17:55:00 -0700 (PDT) Date: Fri, 4 Jul 2003 17:55:00 -0700 From: Bryan Stansell To: announce@conserver.com, users@conserver.com Message-ID: <20030705005500.GA6937@underdog.stansell.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.1i Cc: Subject: conserver-8.0.0-beta1 is available X-BeenThere: users@conserver.com X-Mailman-Version: 2.1.2 Precedence: list List-Id: Conserver Users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Jul 2003 00:55:02 -0000 For anyone out there that saw my "sneak peek" at the LISA conference last year, you'll be expecting this. For the other folks out there - surprise! Why? Well, 8.0.0-beta1 has some very major changes compared to 7.2.7. All of it is related to the new configuration file format which allows for things such as read-write and read-only access to consoles, per-console options that were global before (like -F, the auto-reinitialize option), user groups, per-conserver access lists, and inheritance of config items. Unfortunately, a lot of that may make no sense until you see it 'cause I haven't gotten all the docs updated to match the code. *But*, I do believe the code to be fully functional (yeah, to the extent I could test it) and I'm hoping a few of you are interested in testing it as well. If you'd like to see examples of the new config file, scan the bits of docs I have updated, or even go as far as doing a 'make test' on a system, you can find the beta at http://www.conserver.com/beta/ (or in the beta sub-dir on the ftp site). Personally, I'm very excited about the possibilities this is going to open up for the code (many things were limited by the old configuration file format). I'm also very interested in hearing feedback, results, or questions, so feel free to email me (obviously things are still changing). Here are the things I listed in the CHANGES file: version 8.0.0-beta1 (Jul 4, 2003): - ***NOTICE*** the format of conserver.cf and conserver.passwd has completely changed. see the INSTALL file for upgrade instructions (it should be "fairly painless"). some documentation has been updated to reflect the new world, some hasn't - my goal for beta2 is to have all the docs updated - many command-line options now also conserver.cf options options - POSIX termios interface now required for compilation - some POSIX requirements were already in the code and others will undoubtedly creep in as time goes by - configure --with-regex option removed because of conserver.cf and conserver.passwd changes - added -S option to server for syntax checking of the configuration file - suggested by Dave Stuit - authorized users now either have r/w or r/o access to consoles - getpassword.o replaces getpass() and getpassphrase() so we can get any string length - fixed rm commands in test script - patch by Petter Reinholdtsen Bryan Stansell From mtdolan@twinight.org Tue Jul 8 09:32:53 2003 Received: from dawn.twinight.org (dawn.twinight.org [65.39.69.132]) by underdog.stansell.org (8.12.9/8.12.9) with ESMTP id h68GWr3A006000 for ; Tue, 8 Jul 2003 09:32:53 -0700 (PDT) Received: by dawn.twinight.org (Postfix, from userid 2016) id 11B8449F9; Tue, 8 Jul 2003 12:32:52 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by dawn.twinight.org (Postfix) with SMTP id 01C1F2E1C6 for ; Tue, 8 Jul 2003 12:32:51 -0400 (EDT) Date: Tue, 8 Jul 2003 12:32:51 -0400 (EDT) From: Michael Dolan To: users@conserver.com Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: console aliases X-BeenThere: users@conserver.com X-Mailman-Version: 2.1.2 Precedence: list List-Id: Conserver Users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jul 2003 16:32:54 -0000 Hello, I'm probably missing something, but can one assign multiple names (ie, aliases) for console names? For instances, we want to have console names to match the A record and CNAMEs that as server might have. When a user connects using any of the names, they are attached to the same session. Something like: hostname,cname1,cname2,cname3:!digidev:2001:& Thanks, -dolan From bryan@stansell.org Tue Jul 8 11:00:36 2003 Received: from underdog.stansell.org (localhost [127.0.0.1]) by underdog.stansell.org (8.12.9/8.12.9) with ESMTP id h68I0a3A006273 for ; Tue, 8 Jul 2003 11:00:36 -0700 (PDT) Received: (from bryan@localhost) by underdog.stansell.org (8.12.9/8.12.9/Submit) id h68I0aCk006272 for users@conserver.com; Tue, 8 Jul 2003 11:00:36 -0700 (PDT) Date: Tue, 8 Jul 2003 11:00:36 -0700 From: Bryan Stansell To: users@conserver.com Message-ID: <20030708180036.GC6213@underdog.stansell.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i Subject: Re: console aliases X-BeenThere: users@conserver.com X-Mailman-Version: 2.1.2 Precedence: list List-Id: Conserver Users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jul 2003 18:00:37 -0000 unfortunately, it can't be done (well, it could be done with some code changes, but not of the box). it's something i'd like to do, however. i doubt i'll get a patch or anything for 7.2.7, but you should expect to see it in 8.0.0. if anyone out there wants to produce a patch for 7.2.7, cool. Bryan On Tue, Jul 08, 2003 at 12:32:51PM -0400, Michael Dolan wrote: > Hello, > > I'm probably missing something, but can one assign multiple names (ie, > aliases) for console names? For instances, we want to have console > names From mtdolan@twinight.org Tue Jul 8 15:27:02 2003 Received: from dawn.twinight.org (dawn.twinight.org [65.39.69.132]) by underdog.stansell.org (8.12.9/8.12.9) with ESMTP id h68MR23A006741; Tue, 8 Jul 2003 15:27:02 -0700 (PDT) Received: by dawn.twinight.org (Postfix, from userid 2016) id E698F4A1C; Tue, 8 Jul 2003 18:26:58 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by dawn.twinight.org (Postfix) with SMTP id D78142E1C6; Tue, 8 Jul 2003 18:26:58 -0400 (EDT) Date: Tue, 8 Jul 2003 18:26:58 -0400 (EDT) From: Michael Dolan To: Bryan Stansell In-Reply-To: <20030708180036.GC6213@underdog.stansell.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Cc: users@conserver.com Subject: Re: console aliases X-BeenThere: users@conserver.com X-Mailman-Version: 2.1.2 Precedence: list Reply-To: Michael Dolan List-Id: Conserver Users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jul 2003 22:27:03 -0000 On Tue, 8 Jul 2003, Bryan Stansell wrote: I've downloaded and read the info out for 8.0.0 but dont see this feature documented (yet :) Will keep checking! Funny... it didnt become an issue until last week, and lo and behold the new conserver will address it. Great timing! thanks! -dolan > unfortunately, it can't be done (well, it could be done with some code > changes, but not of the box). it's something i'd like to do, however. > i doubt i'll get a patch or anything for 7.2.7, but you should expect to > see it in 8.0.0. if anyone out there wants to produce a patch for > 7.2.7, cool. > > Bryan > > On Tue, Jul 08, 2003 at 12:32:51PM -0400, Michael Dolan wrote: > > Hello, > > > > I'm probably missing something, but can one assign multiple names (ie, > > aliases) for console names? For instances, we want to have console > > names > _______________________________________________ > users mailing list > users@conserver.com > https://www.conserver.com/mailman/listinfo/users > From jugulum_ictus@hotmail.com Fri Jul 11 14:51:37 2003 Received: from hotmail.com (law15-f81.law15.hotmail.com [64.4.23.81]) by underdog.stansell.org (8.12.9/8.12.9) with ESMTP id h6BLpb3A027328 for ; Fri, 11 Jul 2003 14:51:37 -0700 (PDT) Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Fri, 11 Jul 2003 14:51:37 -0700 Received: from 216.40.39.5 by lw15fd.law15.hotmail.msn.com with HTTP; Fri, 11 Jul 2003 21:51:37 GMT X-Originating-IP: [216.40.39.5] X-Originating-Email: [jugulum_ictus@hotmail.com] From: "Kevin Rueckert" To: users@conserver.com Date: Fri, 11 Jul 2003 17:51:37 -0400 Mime-Version: 1.0 Content-Type: text/plain; format=flowed Message-ID: X-OriginalArrivalTime: 11 Jul 2003 21:51:37.0539 (UTC) FILETIME=[9A74F930:01C347F6] Subject: Cisco 6500 and console woes X-BeenThere: users@conserver.com X-Mailman-Version: 2.1.2 Precedence: list List-Id: Conserver Users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Jul 2003 21:51:38 -0000 Good day all, I'm running conserver 7.2.7 and I have a system using several rocketport serial cards. One of the ports on these cards is connected to the console port of a Cisco 6500. When I run minicom, I have a pristine connection, no errors, no slowness, no garbling of text, yet when I run with conserver and connect, there are frequently characters/words missing. The setup between minicom and conserver is the same (9600,8n1), and when I do a ^eco, the port is listed as [up], and there are no errors in the logs... Has anyone experienced something similar, and if so, have you found a solution? Take care, Kevin _________________________________________________________________ Protect your PC - get McAfee.com VirusScan Online http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963 From m.d.t.evans@qmul.ac.uk Mon Jul 14 02:17:26 2003 Received: from mail2.qmul.ac.uk (mail2.qmul.ac.uk [138.37.6.6]) by underdog.stansell.org (8.12.9/8.12.9) with ESMTP id h6E9HO3A021212 for ; Mon, 14 Jul 2003 02:17:25 -0700 (PDT) Received: from smtp.qmul.ac.uk ([138.37.6.40]) by mail2.qmul.ac.uk with esmtp (Exim 4.14) id 19bzSU-00011e-Ay; Mon, 14 Jul 2003 10:17:22 +0100 Received: from mdte.css.qmw.ac.uk ([138.37.8.140]) by smtp.qmul.ac.uk with asmtp (TLSv1:RC4-MD5:128) (Exim 3.35 #5) id 19bzST-0003dV-00; Mon, 14 Jul 2003 10:17:21 +0100 From: Martin Evans To: Kevin Rueckert In-Reply-To: References: Content-Type: multipart/mixed; boundary="=-6GBvCJc5PLch98CpXE/m" Message-Id: <1058174237.3840.20.camel@mdte> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.0 X-Sender-Host-Address: 138.37.8.140 Cc: users@conserver.com Subject: Re: Cisco 6500 and console woes X-BeenThere: users@conserver.com X-Mailman-Version: 2.1.2 Precedence: list List-Id: Conserver Users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Date: Mon, 14 Jul 2003 09:17:26 -0000 X-Original-Date: 14 Jul 2003 10:17:18 +0100 X-List-Received-Date: Mon, 14 Jul 2003 09:17:26 -0000 --=-6GBvCJc5PLch98CpXE/m Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi Kevin, Indeed, I have seen something similar. I have a home brew system built from a number of pl2303 usb to serial bridges. I saw some data loss with conserver and not with other serial software... I looked at the differences between conserver and ckermit and found that conserver had a non blocking option set on the serial port file descriptor. This meant that the device refused characters with an error if they were sent too quickly. Typically, the cursor keys failed to function correctly (because three chars are sent in quick succession and cut/paste failed) Switching on blocking on the filedescriptor cleared up the problem. You can check that by running strace or truss and looking for write errors to the tty file descriptors. I wrote to Bryan about it and he seemed quite positive about the possibility of switching to a blocking filedescriptor and that he would have a look. I have a patch but it is not a very good one. It switches the blocking behaviour off in the wrong place. Probably best to do it where the fd is initially opened by removing the N_DELAY option. I've attached a web page that describes our setup and includes my (poor) patch. Regards, Martin. On Fri, 2003-07-11 at 22:51, Kevin Rueckert wrote: > Good day all, > > I'm running conserver 7.2.7 and I have a system using several rocketport > serial cards. One of the ports on these cards is connected to the console > port of a Cisco 6500. When I run minicom, I have a pristine connection, no > errors, no slowness, no garbling of text, yet when I run with conserver and > connect, there are frequently characters/words missing. The setup between > minicom and conserver is the same (9600,8n1), and when I do a ^eco, the port > is listed as [up], and there are no errors in the logs... > > Has anyone experienced something similar, and if so, have you found a > solution? Take care, > > Kevin > > _________________________________________________________________ > Protect your PC - get McAfee.com VirusScan Online > http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963 > > _______________________________________________ > users mailing list > users@conserver.com > https://www.conserver.com/mailman/listinfo/users -- -- Dr MDT Evans, Computing Services, Queen Mary, University of London --=-6GBvCJc5PLch98CpXE/m Content-Disposition: attachment; filename=console.html Content-Type: text/html; name=console.html; charset=UTF-8 Content-Transfer-Encoding: 7bit Central Servers Console

Central Servers Console


Introduction

This document describes the home-brew console server we have built in the machine room. Basic usage and alternatives in the event of failure.

Hardware

The hardware (at time of writing) consists of:
  • An RM (Samsung) GT9000 laptop.
  • Seven ATEN UC232A usb to serial converters.
  • Two unbranded usb to serial converter units.
  • Two seven port USB1.1 hubs.
  • Various null modem leads and serial connector adapters.

All the usb to serial converters are based on the prolific pl2303 bridge.

The laptop is sitting a shelf in the rack. The hubs are connected into the USB ports on the laptop and the converters are connected into the hubs. The cabling from the serial ports on the back of the machines is connected such that by the time it gets to the converter it is crossed and has a D9 Female connector on it.

Currently, this setup will support up to 14 machines (when the remaining converters arrive). 15 if you want to use the serial device built into the laptop and possibly a few more by daisy chaining more hubs. 14 machines is enough to control the central servers and a few other machines in our racks.

There are several varieties of serial ports on our machines:

  • D25 Female. e.g.on the back of 280R's. Connect these with a D25M to D9M adapter then a D9F-D9F null modem lead straight into the converter.
  • RJ45 socket. e.g. on the back of the V120s. These are already crossed so they should be connected to the converters with a straight through cable. Silver D25 Female to RJ45 socket adapters come with these machines and straight through cat5 cable is used as the serial cable.
  • The PC's have D9 Make serial ports on the back. A Single D9F to D9F null modem cable will connect these straight into the converters.

We aim for 96008n1 RS232 connections as these are often the default values.

Note on break safety: The converters have been found not to generate spurious break signals on power down or unplugging. In fact, the console has been power cycled without spurious breaks.

Note on data loss tests: Also I've set up a 'fully saturated' system where (on a single hub) 6 machines are spewing out data at at least 9600 baud (actually two were much faster) and one is receiving a file in the final port that was being sent through another hub. No data loss was seen in the file transfer.


Software

The GT9000 is running RedHat 9 with slightly modified (by me) pl2303 driver. It is also running the conserver console services daemon.

Under the pl2303 driver the serial devices appear as /dev/ttyUSBx where x is the device number starting at 0. The devices are numbered according to the order that they are found on the hubs.

I've made some fixes (in Appendix) to both the conserver program and to the pl2303 driver.


Conserver operation

The laptop is running the conserver daemon. This daemon holds open the serial devices, logs all activity from those devices (in /var/consoles) and allows multiuser access to each console (only one user can have write access, the others can spy or bump him off the console).

To see the status of each console enter (in a terminal):

$ console -u

To get a console (as read write if no one else is connected, read only if they are) for machine foo enter:

$ console foo

the console client program offers a runtime menu. To obtain this menu you need to enter the escape sequence: "Ctrl-e,c,?" i.e. Ctrl-e followed by c followed by ?

To disconnect send "Ctrl-e,c,.".

To force read write for a console (if someone else has it) send "Ctrl-e,c,f". The other user will be bumped off and given read-only access until you disconnect.

To send break (dangerous if you're talking to a sun as it may pause the OS. If you do this enter "go" at the ok OpenBoot prompt to unpause the OS) send "Ctrl-e,l,0".

I have also configured a log tailer console. If you enter: console logs at the terminal then it runs:

   tail -f /var/log/conserver /var/consoles/*
for you.

Man pages are available for console and conserver.

Local console access: the laptop is configured to boot up, run X and log into the console account. Local users open a terminal on this console and administer their machines. It is also running a few monitoring scripts in their own windows. Please don't close these down. Switch to a different workspace to do your work so that all of your windows are self contained.

Remote console access: The laptop is connected to the central servers switch. IP address is 138.37.6.99. DNS registration is console.is.qmul.ac.uk. It is running a kernel level firewall that allows remote access only by ssh. Remote access should be done with your install group username. Currently, only the core central servers team have remote access accounts on this box. If you want a remote access account ask me and I will consider it.


Emergency access

In an emergency, the green screen alphanumeric terminals may be used to connect to each machine. Central servers have three of these lying around. You should unplug the cable at the converter as it will be crossed by then. You will need some adapters to connect it into the D25/Male|female connector on the back.

You can connect any modern linux box to the hubs and run ckermit to talk to the systems. You will be unable to send break signals before kernel 2.6 though (unless you have applied my fix).


Conserver administration

There is a configuration file /etc/conserver.cf this is used to configure the connections. Read the man pages for more info.

Appendix

pl2303 driver fixes

There is an error on the stock 2.4.20 kernel driver for this device. By default it fails to send the appropriate usb_control_message to get the device to send a break signal. I have notified the author of this and he has included a patch for the 2.5.69 kernel. Details of that are on the linux-usb-mailing list.

Also, it seems that if multiple devices are connected there is some difficulty turning a break signal on. Sending break with multiple devices seems to fail, repeat though and you will eventually send a break. I've hacked the driver to send out multiple break on control messages to the devices. This has the desired effect. Here is the hack:

static void pl2303_break_ctl (struct usb_serial_port *port, int break_state)
{
        struct usb_serial *serial = port->serial;
        u16 state;
        int result;
        int i;
 
        if (break_state == 0)
                state = BREAK_OFF;
        else
                state = BREAK_ON;
 
        printk("%s - turning break %s for port %d\n", state==BREAK_OFF ? "off" :
 "on", __FUNCTION__, port->number);
 
/*      result = usb_control_msg (serial->dev, usb_rcvctrlpipe (serial->dev, 0),
                                  BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
                                  0, NULL, 0, 100);
*/
        if (state==BREAK_ON) {
          /* horrible hack to send 10 break on's as single ones sometimes are not noticed. */
          for(i=0;i<10;i++) {
            result = usb_control_msg (serial->dev, usb_sndctrlpipe (serial->dev, 0),
                                    BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
                                    0, NULL, 0, 5*HZ);
            if (result) printk("%s - send break error from usb_control_msg (attempt %d)= %d", __FUNCTION__, i, result);
          }
        } else {
          result = usb_control_msg (serial->dev, usb_sndctrlpipe (serial->dev, 0),
                                  BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
                                  0, NULL, 0, 5*HZ);
          if (result) printk("%s - send break error from usb_control_msg = %d", __FUNCTION__, result);
        }
                                   
}

Oddly, there is no such problem if only one device is attached and there is no need to send multiple break off signals. I suspect a problem with the devices or the hubs to which they are attached. I need to try them with another OS and hub to verify that.

Conserver fixes

The conserver program appears to open it's tty file descriptors with O_NONBLOCK set. This has the effect that characters transmitted in quick succession may be lost (Cursor keys and cut and paste don't work properly). Here is a hack to switch off O_NONBLOCK if it is set (although this is probably better done when the device is opened by ommitting O_NDELAY). I've build binary RPMs with this fix in and installed it on the laptop.
*** conserver/consent.c.0       2003-05-25 17:04:27.000000000 +0100
--- conserver/consent.c 2003-05-25 17:25:51.000000000 +0100
***************
*** 748,753 ****
--- 748,756 ----
      time_t tyme;
      extern int FallBack PARAMS((STRING *, STRING *));
   
+     /* for the blocking check */
+     int sflags;
+
      if (!useHostCache)
        ClearHostCache();
   
***************
*** 931,936 ****
--- 934,955 ----
        TtyDev(pCE, pfdSet);
      }
   
+     /* hack to make sure our serial ttys (and other) are blocking */
+     Debug(1,"checking blocking status of device %s",pCE->dfile);
+     sflags = fcntl(pCE->fdtty, F_GETFL, 0);
+     if (sflags <0) {
+        Error("[%s] fcntl(%u,F_GETFL) (while checking blocking status): %s: forcing down",
+            pCE->dfile, pCE->fdtty, strerror(errno));
+        ConsDown(pCE, pfdSet, 1);
+        return;
+     }
+     if ( sflags & O_NONBLOCK) {
+        Debug(1,"tty %s seems to be non-blocking. forcing to blocking", pCE->dfile);
+        fcntl(pCE->fdtty, F_SETFL, sflags & ~O_NONBLOCK);
+     } else {
+        Debug(1,"tty %s is blocking.",pCE->dfile);
+     }
+
      /* If we have marks, adjust the next one so that it's in the future */
      if (pCE->nextMark > 0) {
        tyme = time((time_t *) 0);

Author: Martin.
Last update on $Id: console.html,v 1.2 2003/06/03 13:46:58 martin Exp $
--=-6GBvCJc5PLch98CpXE/m-- From bryan@stansell.org Thu Jul 17 12:43:14 2003 Received: from underdog.stansell.org (localhost [127.0.0.1]) by underdog.stansell.org (8.12.9/8.12.9) with ESMTP id h6HJhE3A015166; Thu, 17 Jul 2003 12:43:14 -0700 (PDT) Received: (from bryan@localhost) by underdog.stansell.org (8.12.9/8.12.9/Submit) id h6HJhE6F015165; Thu, 17 Jul 2003 12:43:14 -0700 (PDT) Date: Thu, 17 Jul 2003 12:43:14 -0700 From: Bryan Stansell To: announce@conserver.com, users@conserver.com Message-ID: <20030717194313.GA9202@underdog.stansell.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.1i Cc: Subject: conserver-8.0.0-beta2 is available X-BeenThere: users@conserver.com X-Mailman-Version: 2.1.2 Precedence: list List-Id: Conserver Users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Jul 2003 19:43:15 -0000 As before, you can find it at http://www.conserver.com/beta/ or in the beta subdirectory of the ftp site. I've added a couple of features: console aliases, flow control options, and probing of network interfaces so that multi-homed hosts work correctly (at least, that's the theory). The man pages have been updated to include information on everything, but the wording still needs work. If anyone has feedback on the 8.0.0 code, please send it my way. version 8.0.0-beta2 (Jul 17, 2003): - console aliases added with 'aliases' console keyword - two stop bit support for serial devices - requested by Kelly Setzer - added support for inet_aton() over inet_addr() - all server interfaces now used to identify console management - server interfaces probed with SIOCGIFCONF ioctl, if available - added flow control options 'ixon', 'ixany', 'ixoff', and 'crtscts' - added info to console client -i output - man pages updated, however the wording needs work Bryan Stansell