123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568 |
- ===========================================================================
- HVCS
- IBM "Hypervisor Virtual Console Server" Installation Guide
- for Linux Kernel 2.6.4+
- Copyright (C) 2004 IBM Corporation
- ===========================================================================
- NOTE:Eight space tabs are the optimum editor setting for reading this file.
- ===========================================================================
- Author(s) : Ryan S. Arnold <rsa@us.ibm.com>
- Date Created: March, 02, 2004
- Last Changed: August, 24, 2004
- ---------------------------------------------------------------------------
- Table of contents:
- 1. Driver Introduction:
- 2. System Requirements
- 3. Build Options:
- 3.1 Built-in:
- 3.2 Module:
- 4. Installation:
- 5. Connection:
- 6. Disconnection:
- 7. Configuration:
- 8. Questions & Answers:
- 9. Reporting Bugs:
- ---------------------------------------------------------------------------
- 1. Driver Introduction:
- This is the device driver for the IBM Hypervisor Virtual Console Server,
- "hvcs". The IBM hvcs provides a tty driver interface to allow Linux user
- space applications access to the system consoles of logically partitioned
- operating systems (Linux and AIX) running on the same partitioned Power5
- ppc64 system. Physical hardware consoles per partition are not practical
- on this hardware so system consoles are accessed by this driver using
- firmware interfaces to virtual terminal devices.
- ---------------------------------------------------------------------------
- 2. System Requirements:
- This device driver was written using 2.6.4 Linux kernel APIs and will only
- build and run on kernels of this version or later.
- This driver was written to operate solely on IBM Power5 ppc64 hardware
- though some care was taken to abstract the architecture dependent firmware
- calls from the driver code.
- Sysfs must be mounted on the system so that the user can determine which
- major and minor numbers are associated with each vty-server. Directions
- for sysfs mounting are outside the scope of this document.
- ---------------------------------------------------------------------------
- 3. Build Options:
- The hvcs driver registers itself as a tty driver. The tty layer
- dynamically allocates a block of major and minor numbers in a quantity
- requested by the registering driver. The hvcs driver asks the tty layer
- for 64 of these major/minor numbers by default to use for hvcs device node
- entries.
- If the default number of device entries is adequate then this driver can be
- built into the kernel. If not, the default can be over-ridden by inserting
- the driver as a module with insmod parameters.
- ---------------------------------------------------------------------------
- 3.1 Built-in:
- The following menuconfig example demonstrates selecting to build this
- driver into the kernel.
- Device Drivers --->
- Character devices --->
- <*> IBM Hypervisor Virtual Console Server Support
- Begin the kernel make process.
- ---------------------------------------------------------------------------
- 3.2 Module:
- The following menuconfig example demonstrates selecting to build this
- driver as a kernel module.
- Device Drivers --->
- Character devices --->
- <M> IBM Hypervisor Virtual Console Server Support
- The make process will build the following kernel modules:
- hvcs.ko
- hvcserver.ko
- To insert the module with the default allocation execute the following
- commands in the order they appear:
- insmod hvcserver.ko
- insmod hvcs.ko
- The hvcserver module contains architecture specific firmware calls and must
- be inserted first, otherwise the hvcs module will not find some of the
- symbols it expects.
- To override the default use an insmod parameter as follows (requesting 4
- tty devices as an example):
- insmod hvcs.ko hvcs_parm_num_devs=4
- There is a maximum number of dev entries that can be specified on insmod.
- We think that 1024 is currently a decent maximum number of server adapters
- to allow. This can always be changed by modifying the constant in the
- source file before building.
- NOTE: The length of time it takes to insmod the driver seems to be related
- to the number of tty interfaces the registering driver requests.
- In order to remove the driver module execute the following command:
- rmmod hvcs.ko
- The recommended method for installing hvcs as a module is to use depmod to
- build a current modules.dep file in /lib/modules/`uname -r` and then
- execute:
- modprobe hvcs hvcs_parm_num_devs=4
- The modules.dep file indicates that hvcserver.ko needs to be inserted
- before hvcs.ko and modprobe uses this file to smartly insert the modules in
- the proper order.
- The following modprobe command is used to remove hvcs and hvcserver in the
- proper order:
- modprobe -r hvcs
- ---------------------------------------------------------------------------
- 4. Installation:
- The tty layer creates sysfs entries which contain the major and minor
- numbers allocated for the hvcs driver. The following snippet of "tree"
- output of the sysfs directory shows where these numbers are presented:
- sys/
- |-- *other sysfs base dirs*
- |
- |-- class
- | |-- *other classes of devices*
- | |
- | `-- tty
- | |-- *other tty devices*
- | |
- | |-- hvcs0
- | | `-- dev
- | |-- hvcs1
- | | `-- dev
- | |-- hvcs2
- | | `-- dev
- | |-- hvcs3
- | | `-- dev
- | |
- | |-- *other tty devices*
- |
- |-- *other sysfs base dirs*
- For the above examples the following output is a result of cat'ing the
- "dev" entry in the hvcs directory:
- Pow5:/sys/class/tty/hvcs0/ # cat dev
- 254:0
- Pow5:/sys/class/tty/hvcs1/ # cat dev
- 254:1
- Pow5:/sys/class/tty/hvcs2/ # cat dev
- 254:2
- Pow5:/sys/class/tty/hvcs3/ # cat dev
- 254:3
- The output from reading the "dev" attribute is the char device major and
- minor numbers that the tty layer has allocated for this driver's use. Most
- systems running hvcs will already have the device entries created or udev
- will do it automatically.
- Given the example output above, to manually create a /dev/hvcs* node entry
- mknod can be used as follows:
- mknod /dev/hvcs0 c 254 0
- mknod /dev/hvcs1 c 254 1
- mknod /dev/hvcs2 c 254 2
- mknod /dev/hvcs3 c 254 3
- Using mknod to manually create the device entries makes these device nodes
- persistent. Once created they will exist prior to the driver insmod.
- Attempting to connect an application to /dev/hvcs* prior to insertion of
- the hvcs module will result in an error message similar to the following:
- "/dev/hvcs*: No such device".
- NOTE: Just because there is a device node present doesn't mean that there
- is a vty-server device configured for that node.
- ---------------------------------------------------------------------------
- 5. Connection
- Since this driver controls devices that provide a tty interface a user can
- interact with the device node entries using any standard tty-interactive
- method (e.g. "cat", "dd", "echo"). The intent of this driver however, is
- to provide real time console interaction with a Linux partition's console,
- which requires the use of applications that provide bi-directional,
- interactive I/O with a tty device.
- Applications (e.g. "minicom" and "screen") that act as terminal emulators
- or perform terminal type control sequence conversion on the data being
- passed through them are NOT acceptable for providing interactive console
- I/O. These programs often emulate antiquated terminal types (vt100 and
- ANSI) and expect inbound data to take the form of one of these supported
- terminal types but they either do not convert, or do not _adequately_
- convert, outbound data into the terminal type of the terminal which invoked
- them (though screen makes an attempt and can apparently be configured with
- much termcap wrestling.)
- For this reason kermit and cu are two of the recommended applications for
- interacting with a Linux console via an hvcs device. These programs simply
- act as a conduit for data transfer to and from the tty device. They do not
- require inbound data to take the form of a particular terminal type, nor do
- they cook outbound data to a particular terminal type.
- In order to ensure proper functioning of console applications one must make
- sure that once connected to a /dev/hvcs console that the console's $TERM
- env variable is set to the exact terminal type of the terminal emulator
- used to launch the interactive I/O application. If one is using xterm and
- kermit to connect to /dev/hvcs0 when the console prompt becomes available
- one should "export TERM=xterm" on the console. This tells ncurses
- applications that are invoked from the console that they should output
- control sequences that xterm can understand.
- As a precautionary measure an hvcs user should always "exit" from their
- session before disconnecting an application such as kermit from the device
- node. If this is not done, the next user to connect to the console will
- continue using the previous user's logged in session which includes
- using the $TERM variable that the previous user supplied.
- Hotplug add and remove of vty-server adapters affects which /dev/hvcs* node
- is used to connect to each vty-server adapter. In order to determine which
- vty-server adapter is associated with which /dev/hvcs* node a special sysfs
- attribute has been added to each vty-server sysfs entry. This entry is
- called "index" and showing it reveals an integer that refers to the
- /dev/hvcs* entry to use to connect to that device. For instance cating the
- index attribute of vty-server adapter 30000004 shows the following.
- Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat index
- 2
- This index of '2' means that in order to connect to vty-server adapter
- 30000004 the user should interact with /dev/hvcs2.
- It should be noted that due to the system hotplug I/O capabilities of a
- system the /dev/hvcs* entry that interacts with a particular vty-server
- adapter is not guaranteed to remain the same across system reboots. Look
- in the Q & A section for more on this issue.
- ---------------------------------------------------------------------------
- 6. Disconnection
- As a security feature to prevent the delivery of stale data to an
- unintended target the Power5 system firmware disables the fetching of data
- and discards that data when a connection between a vty-server and a vty has
- been severed. As an example, when a vty-server is immediately disconnected
- from a vty following output of data to the vty the vty adapter may not have
- enough time between when it received the data interrupt and when the
- connection was severed to fetch the data from firmware before the fetch is
- disabled by firmware.
- When hvcs is being used to serve consoles this behavior is not a huge issue
- because the adapter stays connected for large amounts of time following
- almost all data writes. When hvcs is being used as a tty conduit to tunnel
- data between two partitions [see Q & A below] this is a huge problem
- because the standard Linux behavior when cat'ing or dd'ing data to a device
- is to open the tty, send the data, and then close the tty. If this driver
- manually terminated vty-server connections on tty close this would close
- the vty-server and vty connection before the target vty has had a chance to
- fetch the data.
- Additionally, disconnecting a vty-server and vty only on module removal or
- adapter removal is impractical because other vty-servers in other
- partitions may require the usage of the target vty at any time.
- Due to this behavioral restriction disconnection of vty-servers from the
- connected vty is a manual procedure using a write to a sysfs attribute
- outlined below, on the other hand the initial vty-server connection to a
- vty is established automatically by this driver. Manual vty-server
- connection is never required.
- In order to terminate the connection between a vty-server and vty the
- "vterm_state" sysfs attribute within each vty-server's sysfs entry is used.
- Reading this attribute reveals the current connection state of the
- vty-server adapter. A zero means that the vty-server is not connected to a
- vty. A one indicates that a connection is active.
- Writing a '0' (zero) to the vterm_state attribute will disconnect the VTERM
- connection between the vty-server and target vty ONLY if the vterm_state
- previously read '1'. The write directive is ignored if the vterm_state
- read '0' or if any value other than '0' was written to the vterm_state
- attribute. The following example will show the method used for verifying
- the vty-server connection status and disconnecting a vty-server connection.
- Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat vterm_state
- 1
- Pow5:/sys/bus/vio/drivers/hvcs/30000004 # echo 0 > vterm_state
- Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat vterm_state
- 0
- All vty-server connections are automatically terminated when the device is
- hotplug removed and when the module is removed.
- ---------------------------------------------------------------------------
- 7. Configuration
- Each vty-server has a sysfs entry in the /sys/devices/vio directory, which
- is symlinked in several other sysfs tree directories, notably under the
- hvcs driver entry, which looks like the following example:
- Pow5:/sys/bus/vio/drivers/hvcs # ls
- . .. 30000003 30000004 rescan
- By design, firmware notifies the hvcs driver of vty-server lifetimes and
- partner vty removals but not the addition of partner vtys. Since an HMC
- Super Admin can add partner info dynamically we have provided the hvcs
- driver sysfs directory with the "rescan" update attribute which will query
- firmware and update the partner info for all the vty-servers that this
- driver manages. Writing a '1' to the attribute triggers the update. An
- explicit example follows:
- Pow5:/sys/bus/vio/drivers/hvcs # echo 1 > rescan
- Reading the attribute will indicate a state of '1' or '0'. A one indicates
- that an update is in process. A zero indicates that an update has
- completed or was never executed.
- Vty-server entries in this directory are a 32 bit partition unique unit
- address that is created by firmware. An example vty-server sysfs entry
- looks like the following:
- Pow5:/sys/bus/vio/drivers/hvcs/30000004 # ls
- . current_vty devspec name partner_vtys
- .. index partner_clcs vterm_state
- Each entry is provided, by default with a "name" attribute. Reading the
- "name" attribute will reveal the device type as shown in the following
- example:
- Pow5:/sys/bus/vio/drivers/hvcs/30000003 # cat name
- vty-server
- Each entry is also provided, by default, with a "devspec" attribute which
- reveals the full device specification when read, as shown in the following
- example:
- Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat devspec
- /vdevice/vty-server@30000004
- Each vty-server sysfs dir is provided with two read-only attributes that
- provide lists of easily parsed partner vty data: "partner_vtys" and
- "partner_clcs".
- Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat partner_vtys
- 30000000
- 30000001
- 30000002
- 30000000
- 30000000
- Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat partner_clcs
- U5112.428.103048A-V3-C0
- U5112.428.103048A-V3-C2
- U5112.428.103048A-V3-C3
- U5112.428.103048A-V4-C0
- U5112.428.103048A-V5-C0
- Reading partner_vtys returns a list of partner vtys. Vty unit address
- numbering is only per-partition-unique so entries will frequently repeat.
- Reading partner_clcs returns a list of "converged location codes" which are
- composed of a system serial number followed by "-V*", where the '*' is the
- target partition number, and "-C*", where the '*' is the slot of the
- adapter. The first vty partner corresponds to the first clc item, the
- second vty partner to the second clc item, etc.
- A vty-server can only be connected to a single vty at a time. The entry,
- "current_vty" prints the clc of the currently selected partner vty when
- read.
- The current_vty can be changed by writing a valid partner clc to the entry
- as in the following example:
- Pow5:/sys/bus/vio/drivers/hvcs/30000004 # echo U5112.428.10304
- 8A-V4-C0 > current_vty
- Changing the current_vty when a vty-server is already connected to a vty
- does not affect the current connection. The change takes effect when the
- currently open connection is freed.
- Information on the "vterm_state" attribute was covered earlier on the
- chapter entitled "disconnection".
- ---------------------------------------------------------------------------
- 8. Questions & Answers:
- ===========================================================================
- Q: What are the security concerns involving hvcs?
- A: There are three main security concerns:
- 1. The creator of the /dev/hvcs* nodes has the ability to restrict
- the access of the device entries to certain users or groups. It
- may be best to create a special hvcs group privilege for providing
- access to system consoles.
- 2. To provide network security when grabbing the console it is
- suggested that the user connect to the console hosting partition
- using a secure method, such as SSH or sit at a hardware console.
- 3. Make sure to exit the user session when done with a console or
- the next vty-server connection (which may be from another
- partition) will experience the previously logged in session.
- ---------------------------------------------------------------------------
- Q: How do I multiplex a console that I grab through hvcs so that other
- people can see it:
- A: You can use "screen" to directly connect to the /dev/hvcs* device and
- setup a session on your machine with the console group privileges. As
- pointed out earlier by default screen doesn't provide the termcap settings
- for most terminal emulators to provide adequate character conversion from
- term type "screen" to others. This means that curses based programs may
- not display properly in screen sessions.
- ---------------------------------------------------------------------------
- Q: Why are the colors all messed up?
- Q: Why are the control characters acting strange or not working?
- Q: Why is the console output all strange and unintelligible?
- A: Please see the preceding section on "Connection" for a discussion of how
- applications can affect the display of character control sequences.
- Additionally, just because you logged into the console using and xterm
- doesn't mean someone else didn't log into the console with the HMC console
- (vt320) before you and leave the session logged in. The best thing to do
- is to export TERM to the terminal type of your terminal emulator when you
- get the console. Additionally make sure to "exit" the console before you
- disconnect from the console. This will ensure that the next user gets
- their own TERM type set when they login.
- ---------------------------------------------------------------------------
- Q: When I try to CONNECT kermit to an hvcs device I get:
- "Sorry, can't open connection: /dev/hvcs*"What is happening?
- A: Some other Power5 console mechanism has a connection to the vty and
- isn't giving it up. You can try to force disconnect the consoles from the
- HMC by right clicking on the partition and then selecting "close terminal".
- Otherwise you have to hunt down the people who have console authority. It
- is possible that you already have the console open using another kermit
- session and just forgot about it. Please review the console options for
- Power5 systems to determine the many ways a system console can be held.
- OR
- A: Another user may not have a connectivity method currently attached to a
- /dev/hvcs device but the vterm_state may reveal that they still have the
- vty-server connection established. They need to free this using the method
- outlined in the section on "Disconnection" in order for others to connect
- to the target vty.
- OR
- A: The user profile you are using to execute kermit probably doesn't have
- permissions to use the /dev/hvcs* device.
- OR
- A: You probably haven't inserted the hvcs.ko module yet but the /dev/hvcs*
- entry still exists (on systems without udev).
- OR
- A: There is not a corresponding vty-server device that maps to an existing
- /dev/hvcs* entry.
- ---------------------------------------------------------------------------
- Q: When I try to CONNECT kermit to an hvcs device I get:
- "Sorry, write access to UUCP lockfile directory denied."
- A: The /dev/hvcs* entry you have specified doesn't exist where you said it
- does? Maybe you haven't inserted the module (on systems with udev).
- ---------------------------------------------------------------------------
- Q: If I already have one Linux partition installed can I use hvcs on said
- partition to provide the console for the install of a second Linux
- partition?
- A: Yes granted that your are connected to the /dev/hvcs* device using
- kermit or cu or some other program that doesn't provide terminal emulation.
- ---------------------------------------------------------------------------
- Q: Can I connect to more than one partition's console at a time using this
- driver?
- A: Yes. Of course this means that there must be more than one vty-server
- configured for this partition and each must point to a disconnected vty.
- ---------------------------------------------------------------------------
- Q: Does the hvcs driver support dynamic (hotplug) addition of devices?
- A: Yes, if you have dlpar and hotplug enabled for your system and it has
- been built into the kernel the hvcs drivers is configured to dynamically
- handle additions of new devices and removals of unused devices.
- ---------------------------------------------------------------------------
- Q: For some reason /dev/hvcs* doesn't map to the same vty-server adapter
- after a reboot. What happened?
- A: Assignment of vty-server adapters to /dev/hvcs* entries is always done
- in the order that the adapters are exposed. Due to hotplug capabilities of
- this driver assignment of hotplug added vty-servers may be in a different
- order than how they would be exposed on module load. Rebooting or
- reloading the module after dynamic addition may result in the /dev/hvcs*
- and vty-server coupling changing if a vty-server adapter was added in a
- slot between two other vty-server adapters. Refer to the section above
- on how to determine which vty-server goes with which /dev/hvcs* node.
- Hint; look at the sysfs "index" attribute for the vty-server.
- ---------------------------------------------------------------------------
- Q: Can I use /dev/hvcs* as a conduit to another partition and use a tty
- device on that partition as the other end of the pipe?
- A: Yes, on Power5 platforms the hvc_console driver provides a tty interface
- for extra /dev/hvc* devices (where /dev/hvc0 is most likely the console).
- In order to get a tty conduit working between the two partitions the HMC
- Super Admin must create an additional "serial server" for the target
- partition with the HMC gui which will show up as /dev/hvc* when the target
- partition is rebooted.
- The HMC Super Admin then creates an additional "serial client" for the
- current partition and points this at the target partition's newly created
- "serial server" adapter (remember the slot). This shows up as an
- additional /dev/hvcs* device.
- Now a program on the target system can be configured to read or write to
- /dev/hvc* and another program on the current partition can be configured to
- read or write to /dev/hvcs*. Now you have a tty conduit between two
- partitions.
- ---------------------------------------------------------------------------
- 9. Reporting Bugs:
- The proper channel for reporting bugs is either through the Linux OS
- distribution company that provided your OS or by posting issues to the
- PowerPC development mailing list at:
- linuxppc-dev@lists.ozlabs.org
- This request is to provide a documented and searchable public exchange
- of the problems and solutions surrounding this driver for the benefit of
- all users.
|