ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/qolelink.htm

800 lines
25 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
<title>Enable Link (QOLELINK) API</title>
<!-- Begin Header Records ========================================== -->
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<!-- NETMG2 SCRIPT A converted by B2H R4.1 (346) (CMS) by HOLTJM at -->
<!-- RCHVMW2 on 29 Jan 1999 at 10:01:37 -->
<!-- This file has undergone html cleanup June 2002 by JET -->
<!-- Change History: -->
<!-- YYMMDD USERID Change description -->
<!--File Edited November 2001 -->
<!--End Header Records -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<a name="Top_Of_Page"></a>
<!-- Java sync-link -->
<script language="Javascript" src="../rzahg/synch.js" type="text/javascript">
</script>
<h2>Enable Link (QOLELINK) API</h2>
<div class="box" style="width: 70%;">
&nbsp;&nbsp;Required Parameter Group:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">1</td>
<td align="left" valign="top" width="50%">Return code</td>
<td align="left" valign="top" width="20%">Output</td>
<td align="left" valign="top" width="20%">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="left" valign="top">Reason code</td>
<td align="left" valign="top">Output</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="left" valign="top">Data unit size</td>
<td align="left" valign="top">Output</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="left" valign="top">Data units created</td>
<td align="left" valign="top">Output</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">5</td>
<td align="left" valign="top">LAN user data size</td>
<td align="left" valign="top">Output</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">6</td>
<td align="left" valign="top">X.25 data unit size</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">7</td>
<td align="left" valign="top">Input buffer</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(20)</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="left" valign="top">Input buffer descriptor</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(20)</td>
</tr>
<tr>
<td align="center" valign="top">9</td>
<td align="left" valign="top">Output buffer</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(20)</td>
</tr>
<tr>
<td align="center" valign="top">10</td>
<td align="left" valign="top">Output buffer descriptor</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(20)</td>
</tr>
<tr>
<td align="center" valign="top">11</td>
<td align="left" valign="top">Key length</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Key value</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(256)</td>
</tr>
<tr>
<td align="center" valign="top">13</td>
<td align="left" valign="top">Qualified queue name</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(20)</td>
</tr>
<tr>
<td align="center" valign="top">14</td>
<td align="left" valign="top">Line description</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(10)</td>
</tr>
<tr>
<td align="center" valign="top">15</td>
<td align="left" valign="top">Communications handle</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(10)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Optional Parameter Group:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">16</td>
<td align="left" valign="top" width="50%">Queue type</td>
<td align="left" valign="top" width="20%">Input</td>
<td align="left" valign="top" width="20%">Char(1)</td>
</tr>
<tr>
<td align="center" valign="top">17</td>
<td align="left" valign="top">Network interface description</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(10)</td>
</tr>
<tr>
<td align="center" valign="top">18</td>
<td align="left" valign="top">Extended operations</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(1)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: No<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The Enable Link (QOLELINK) API enables a link for input and output on a
communications line. The communications line, described by the line description
parameter, must be a token-ring, Ethernet, wireless, FDDI, or X.25 line. The
link being enabled can only be accessed within the job in which the QOLELINK
API was called.</p>
<p>Before calling the QOLELINK API to enable a link, you must configure the
following objects:</p>
<ul>
<li>Token-ring, Ethernet, wireless, FDDI, or X.25 line description<br>
<br>
</li>
<li>Data queue or user queue<br>
<br>
</li>
<li>Network interface description for X.25 networks running over ISDN</li>
</ul>
<p>See <a href="comm3.htm#HDRCNFIGCH">Configuration and queue entries</a> for more information on configuration.</p>
<p>The QOLELINK API creates the input and output buffers and buffer descriptors
used for the link being enabled. The network controller description and the
network device description, associated with the link being enabled, are also
created, if necessary. In addition, the following are varied on, if
necessary.</p>
<ul>
<li>Line description<br>
<br>
</li>
<li>Network controller description<br>
<br>
</li>
<li>Network device description<br>
<br>
</li>
<li>Network interface descriptions used by the line description</li>
</ul>
<p>If the X.25 switched network interface list has multiple network interface
descriptions configured, all of them can be varied on at one time. For more
information on varying on network interface descriptions, refer to the <a href=
"../books/sc415406.pdf" target="_blank">Communications Management</a> <img
src="wbpdf.gif" alt="Link to PDF"> book.</p>
<p>When the QOLELINK API returns, your application program should examine the
codes to determine the status of the link. Successful return and reason codes
(both zero) indicate the link is being enabled and an enable-complete entry
will be sent to the data queue or user queue specified on the call to the
QOLELINK API when the enable operation completes. See <a href=
"comm3.htm#HDRECPLTEN">Enable-Complete Entry</a> for more information on the
enable-complete entry. Unsuccessful return and reason codes indicate the link
could not be enabled and the enable-complete entry will not be sent to the data
queue or user queue. <a href="#HDRELINKRR">Return and Reason Codes</a> provides
more information on the QOLELINK API return and reason codes.</p>
<br>
<h3>Authorities and Locks</h3>
<dl>
<dt><em>User Space Authority</em></dt>
<dd>*READ<br>
<br>
</dd>
<dt><em>User Space Library Authority</em></dt>
<dd>*USE and *ADD. *OBJOPR plus *READ is equivalent to *USE.<br>
<br>
</dd>
<dt><em>User Space Lock</em></dt>
<dd>*EXCL</dd>
</dl>
<br>
<h3>Required Parameter Group</h3>
<dl>
<dt><strong>Return code</strong></dt>
<dd>OUTPUT; BINARY(4)
<p>The recovery action to take. See <a href="#HDRELINKRR">Return and Reason
Codes</a>.</p>
</dd>
<dt><strong>Reason code</strong></dt>
<dd>OUTPUT; BINARY(4)
<p>The error that occurred. See <a href="#HDRELINKRR">Return and Reason
Codes</a>.</p>
</dd>
<dt><strong>Data unit size</strong></dt>
<dd>OUTPUT; BINARY(4)
<p>The total number of bytes allocated for each data unit in the input and
output buffers. For token-ring links, this includes user data (LAN user data
size parameter), general LAN header information, and optional routing
information. For Ethernet, wireless, and FDDI links, this includes user data
(LAN user data size parameter) and general LAN header information. For X.25
links, this includes user data (X.25 user data size parameter). For more
information on the general LAN header, see <a href="qolrecv.htm#TBLLLCINFR">
Return and Reason Codes for the QOLELINK API</a>.</p>
</dd>
<dt><strong>Data units created</strong></dt>
<dd>OUTPUT; BINARY(4)
<p>The number of data units created for the input buffer and the output buffer.
This parameter also specifies the number of elements created for the input
buffer descriptor and the output buffer descriptor. The only valid value
is:</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>8</em></td>
<td valign="top">All protocols</td>
</tr>
</table>
<p><strong>Note:</strong> Because user-defined communications support always
returns an 8, you should write your application program to avoid having to
recompile should this value ever change.</p>
</dd>
<dt><strong>LAN user data size</strong></dt>
<dd>OUTPUT; BINARY(4)
<p>The number of bytes allocated for token ring, Ethernet, wireless, or FDDI in
each data unit of the input and output buffers. This does not include general
LAN header information and optional routing information.</p>
<p>The content of this parameter is only valid when enabling a token-ring,
Ethernet, wireless, or FDDI link.</p>
<p><strong>Note:</strong> The maximum amount of token-ring, Ethernet, wireless,
or FDDI user data that can be sent or received in each data unit is determined
on a service access point basis in the line description or by the 1502 byte
maximum for Ethernet Version 2 frames, and may be less than the LAN user data
size. See <a href="qolqlind.htm">Query Line Description (QOLQLIND)
API</a> for information on retrieving these values.</p>
</dd>
<dt><strong>X.25 data unit size</strong></dt>
<dd>INPUT; BINARY(4)
<p>The number of bytes allocated for X.25 user data in each data unit of the
input and output buffers. This is equal to the maximum amount of X.25 user data
that can be sent or received in each data unit. The content of this parameter
is only valid when enabling an X.25 link.</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>Range</em></td>
<td valign="top">512 bytes-4096 bytes</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Input buffer</strong></dt>
<dd>INPUT; CHAR(20)
<p>The name and library of the input buffer that the QOLELINK API creates for
this link. The first 10 characters specify the name for the input buffer and
the second 10 characters specify the name of an existing library that the input
buffer will be created in. Both entries are left-justified. The special values
of *LIBL and *CURLIB can be used for the library name.</p>
<p><strong>Note:</strong> A user space object with the same name as the input
buffer must not already exist in the specified library.</p>
</dd>
<dt><strong>Input buffer descriptor</strong></dt>
<dd>INPUT; CHAR(20)
<p>The name and library of the input buffer descriptor that the QOLELINK API
creates for this link. The first 10 characters specify the name of the input
buffer descriptor and the second 10 characters specify the name of an existing
library that the input buffer descriptor will be created in. Both entries are
left-justified. The special values of *LIBL and *CURLIB can be used for the
library name.</p>
<p><strong>Note:</strong> A user space object with the same name as the input
buffer descriptor must not already exist in the specified library.</p>
</dd>
<dt><strong>Output buffer</strong></dt>
<dd>INPUT; CHAR(20)
<p>The name and library of the output buffer that the QOLELINK API creates for
this link. The first 10 characters specify the name of the output buffer and
the second 10 characters specify the name of an existing library that the
output buffer will be created in. Both entries are left-justified. The special
values of *LIBL and *CURLIB can be used for the library name.</p>
<p><strong>Note:</strong> A user space object with the same name as the output
buffer must not already exist in the specified library.</p>
</dd>
<dt><strong>Output buffer descriptor</strong></dt>
<dd>INPUT; CHAR(20)
<p>The name and library of the output buffer descriptor that the QOLELINK API
creates for this link. The first 10 characters specify the name of the output
buffer descriptor and the second 10 characters specify the name of an existing
library that the output buffer descriptor will be created in. Both entries are
left-justified. The special values of *LIBL and *CURLIB can be used for the
library name.</p>
<p><strong>Note:</strong> A user space object with the same name as the output
buffer descriptor must not already exist in the specified library.</p>
</dd>
<dt><strong>Key length</strong></dt>
<dd>INPUT; BINARY(4)
<p>The key length when using a keyed data queue or user queue.</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td valign="top">The data queue or user queue is not keyed.</td>
</tr>
<tr>
<td align="left" valign="top"><em>Range</em></td>
<td valign="top">1-256</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Key value</strong></dt>
<dd>INPUT; CHAR(256)
<p>The key value (left justified) when using a keyed data queue or user
queue.</p>
</dd>
<dt><strong>Qualified queue name</strong></dt>
<dd>INPUT; CHAR(20)
<p>The name and library of the data queue or user queue where the
enable-complete, disable-complete, permanent-link-failure, and incoming-data
entries for this link will be sent. See <a href="comm3.htm#HDRDATAQCH">Queue
Entries</a> for more information about these queue entries. The first 10
characters specify the name of an existing queue and the second 10 characters
specify the library in which the queue is located. Both entries are
left-justified. The special values of *LIBL and *CURLIB can be used for the
library name.</p>
</dd>
<dt><strong>Line description</strong></dt>
<dd>INPUT; CHAR(10)
<p>The name of the line description that describes the communications line the
link being enabled will use. An existing token-ring, Ethernet, wireless, FDDI,
or X.25 line description must be used.</p>
</dd>
<dt><strong>Communications handle</strong></dt>
<dd>INPUT; CHAR(10)
<p>The name assigned to the link being enabled. Any name complying with system
object naming conventions may be used.</p>
</dd>
</dl>
<br>
<h3>Optional Parameter Group</h3>
<dl>
<dt><strong>Queue type</strong></dt>
<dd>INPUT; CHAR(1)
<p>The type of queue you specified for the Queue name parameter.</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>D</em></td>
<td valign="top">Data queue</td>
</tr>
<tr>
<td align="left" valign="top"><em>U</em></td>
<td valign="top">User queue</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Network interface description</strong></dt>
<dd>INPUT; CHAR(10)
<p>The name of the network interface description. This value is specified if
you are running X.25 and need to specify a particular network interface to use.
Otherwise, this value should be set to blanks.</p>
<p><strong>Note:</strong> This parameter along with the line description
parameter causes only the network interface description specified to be varied
on. If this value is not specified and the line description parameter contains
a switched network interface list, all network interface descriptions within
the list are varied on when the QOLELINK API is called.</p>
<p>Specifying this parameter causes only the line and the network interface
that are passed to be varied on during enable processing.</p>
</dd>
<dt><strong>Extended operations</strong></dt>
<dd>INPUT; CHAR(1)
<p>Indicates whether or not extended operations are supported.</p>
<p>Extended operations affect all connections (UCEPs, PCEPs) on the link.
X'B311' and X'B111' are receive extended operations. X'B110' is a send extended
operation.</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>1</em></td>
<td valign="top">Operations supported</td>
</tr>
<tr>
<td align="left" valign="top"><em>0</em></td>
<td valign="top">Operations not supported</td>
</tr>
</table>
</dd>
</dl>
<br>
<h3><a name="HDRELINKRR">Return and Reason Codes</a></h3>
<p><strong><a name="Table_1-2">Return and Reason Codes for the QOLELINK
API</a></strong></p>
<table border width="90%">
<tr>
<th valign="top">Return / Reason Code</th>
<th valign="top">Meaning</th>
<th valign="top">Recovery</th>
</tr>
<tr>
<td align="center" valign="top" width="25%">0/0</td>
<td align="left" valign="top" width="35%">Operation successful, link
enabling.</td>
<td align="left" valign="top" width="40%">Wait to receive the enable-complete
entry from the data queue or user queue before doing input/output on this
link.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">81/9999</td>
<td align="left" valign="top" width="35%">Internal system error detected.
Escape message CPF91F0 will be sent to the application program when this return
and reason code is received.</td>
<td align="left" valign="top" width="40%">See messages in the job log for
further information. Then, report the problem using the ANZPRB command.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/1000</td>
<td align="left" valign="top" width="35%">User data size not valid for X.25
link.</td>
<td align="left" valign="top" width="40%">Correct the X.25 user data size
parameter. Then, try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/1001</td>
<td align="left" valign="top" width="35%">Key length not valid.</td>
<td align="left" valign="top" width="40%">Correct the key length parameter.
Then, try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/1002</td>
<td align="left" valign="top" width="35%">Queue name not valid.</td>
<td align="left" valign="top" width="40%">Correct the queue name parameter.
Then, try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/1003</td>
<td align="left" valign="top" width="35%">Communications handle not valid.</td>
<td align="left" valign="top" width="40%">Correct the communications handle
parameter. Then, try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/1012</td>
<td align="left" valign="top" width="35%">Queue type not valid.</td>
<td align="left" valign="top" width="40%">Queue type must be D or U. Correct
the queue type and try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/1013</td>
<td align="left" valign="top" width="35%">Extended operations value not
valid.</td>
<td align="left" valign="top" width="40%">Extended operations value must be 1
or 0. Correct the extended operations value and try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/1020</td>
<td align="left" valign="top" width="35%">Group parameters not valid (not all
the parameters within a group were passed).</td>
<td align="left" valign="top" width="40%">Pass all parameters within the group
and try the operation again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2000</td>
<td align="left" valign="top" width="35%">Line name not valid or protocol is
not supported.</td>
<td align="left" valign="top" width="40%">The line name specified must be for a
line of type Ethernet, wireless, token ring, FDDI, or X.25. Correct the line
name and try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2001</td>
<td align="left" valign="top" width="35%">Line description, network controller
description, or network device description not in a valid state.</td>
<td align="left" valign="top" width="40%">See messages in the job log
indicating the affected object and recommended recovery. Do the recovery, and
try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2002</td>
<td align="left" valign="top" width="35%">Not authorized to the line
description or network controller description.</td>
<td align="left" valign="top" width="40%">See messages in the job log
indicating the affected object and get authorization to it. Then, try the
request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2003</td>
<td align="left" valign="top" width="35%">Could not allocate the network device
description.</td>
<td align="left" valign="top" width="40%">Try the request again. If the problem
continues, report the problem using the ANZPRB command.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2004</td>
<td align="left" valign="top" width="35%">Could not create the network
controller description or network device description.</td>
<td align="left" valign="top" width="40%">See messages in the job log
indicating the affected object and recommended recovery. Do the recovery, and
try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2005</td>
<td align="left" valign="top" width="35%">Could not vary on the network
interface, line description, network controller description, or network device
description.</td>
<td align="left" valign="top" width="40%">See messages in the job log
indicating the affected object and recommended recovery. Do the recovery, and
try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2006</td>
<td align="left" valign="top" width="35%">Line description not found.</td>
<td align="left" valign="top" width="40%">Correct the line description
parameter. Then, try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2007</td>
<td align="left" valign="top" width="35%">Line description damaged.</td>
<td align="left" valign="top" width="40%">Delete and re-create the line
description. Then, try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2008</td>
<td align="left" valign="top" width="35%">Unsupported interface. An error
occurred that indicated the network interface specified cannot be associated
with the line specified. For example, you specified a network interface for a
token-ring, Ethernet, or wireless line.</td>
<td align="left" valign="top" width="40%">The network interface value is not
correct for the line name value. Correct the configuration or your
application.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2009</td>
<td align="left" valign="top" width="35%">Network interface description not
found.</td>
<td align="left" valign="top" width="40%">Specify the correct network interface
name and try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2010</td>
<td align="left" valign="top" width="35%">Network interface description
specified could not be used.</td>
<td align="left" valign="top" width="40%">Check the network interface
description for possible errors. Correct any errors and try the request
again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/2400</td>
<td align="left" valign="top" width="35%">An error occurred while creating the
input buffer, input buffer descriptor, output buffer, or output buffer
descriptor.</td>
<td align="left" valign="top" width="40%">See messages in the job log
indicating the affected object and recommended recovery. Do the recovery, and
try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/3000</td>
<td align="left" valign="top" width="35%">Communications handle already
assigned to another link that is enabled in this job.</td>
<td align="left" valign="top" width="40%">Either disable the link that was
assigned this communications handle, or correct the communications handle
parameter so it does not specify a communications handle that is already
assigned to a link enabled in this job. Then, try the request again.</td>
</tr>
<tr>
<td align="center" valign="top" width="25%">82/3005</td>
<td align="left" valign="top" width="35%">Line description already in use by
another link that is enabled in this job.</td>
<td align="left" valign="top" width="40%">Disable the link that is using this
line description. Then, try the request again.</td>
</tr>
</table>
<br>
<br>
<h3>Error Messages</h3>
<table width="100%" cellpadding="3">
<!-- cols="15 85" -->
<tr>
<th align="left" valign="top">Message ID</th>
<th align="left" valign="top">Error Message Text</th>
</tr>
<tr>
<td align="left" valign="top">CPF3C90 E</td>
<td valign="top">Literal value cannot be changed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF91F0 E</td>
<td valign="top">Internal system error.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9872 E</td>
<td valign="top">Program or service program &amp;1 in library &amp;2 ended.
Reason code &amp;3.</td>
</tr>
</table>
<br>
<hr>
API introduced: V2R1
<hr>
<center>
<table cellpadding="2" cellspacing="2">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"comm.htm">Communications APIs</a> | <a href="aplist.htm">APIs by
category</a></td>
</tr>
</table>
</center>
</body>
</html>