Format
#include <snmp_dpi.h>
unsigned char *mkDPIopen( /* Make a DPI open packet */
char *oid_p, /* subagent Identifier (OID) */
char *description_p, /* subagent descriptive name */
unsigned long timeout, /* requested default timeout */
unsigned long max_varBinds, /* max varBinds per DPI packet*/
char character_set, /* selected character set */
#define DPI_NATIVE_CSET 0 /* 0 = native character set */
#define DPI_ASCII_CSET 1 /* 1 = ASCII character set */
unsigned long password_len, /* length of password (if any)*/
unsigned char *password_p); /* ptr to password (if any) */
Parameters
- oid_p
- A pointer to a null-terminated character string representing the
object identifier which uniquely identifies the subagent. The OID
valued pointed to by oid_p must be in the EBCDIC character set when
communicating with a TCP/IP UNIX System Services SNMP
agent. The agent will add the OID passed in the mkDPIopen call to
the sysORTable as sysORID in a corresponding new entry. By convention,
sysORID should match a capabilities statement OID to refer to the
MIBs supported by the subagent.
For a list of MIB variables, see z/OS Communications Server: IP System Administrator's
Commands.
- description_p
- A pointer to a null-terminated character string, which is a descriptive
name for the subagent. This can be any DisplayString.
- timeout
- The requested timeout for this subagent. An agent often has a
limit for this value and it will use that limit if this value is larger.
A timeout of 0 has a special meaning in the sense that the agent
will use its own default timeout value.
- max_varBinds
- The maximum number of varBinds per DPI packet that the subagent is prepared to handle.
It must be a positive number or 0.
- If a value greater than 1 is specified, the agent will try to
combine as many varBinds that belong to the same subtree per DPI packet as
possible up to this value.
- If a value of 0 is specified, the agent will try to combine up
to as many varBinds as are present in the SNMP packet and belong to
the same subtree; there is no limit on the number of varBinds present
in the DPI packet.
- character_set
- The character set that you want to use for string-based data fields
in the DPI packets and structures. See DPI OPEN character set selection for more information.
- DPI_NATIVE_CSET
- Specifies that you want to use the native character set of the
platform on which the agent that you connect to is running.
- password_len
- The length in octets of an optional password. It depends on the
agent implementation if a password is needed.
If coded, this parameter
is ignored with the z/OS® SNMP
agent.
- password_p
- A pointer to an octet string representing the password for this
subagent. A password might include any character value, including
the NULL character. If the password_len is 0, this can be a NULL
pointer.
If coded, this parameter is ignored with the SNMP agent.
Return codes
- If successful, a pointer to a static DPI packet buffer is returned.
The first 2 bytes of the buffer in network byte order contain the
length of the remaining packet. The macro DPI_PACKET_LEN can be used
to calculate the total length of the DPI packet.
- If not successful, a NULL pointer is returned.
Note: The static buffer for the DPI packet is shared by other mkDPIxxxx() functions
that create a serialized DPI packet.
Usage
The mkDPIopen() function creates
a serialized DPI OPEN packet that can then be sent to the DPI peer that is a DPI-capable SNMP
agent.
Normally you will want to use the native character set,
which is the easiest for the subagent programmer. However, if the
agent and subagent each run on their own platforms and those platforms
use different native character sets, you must select the ASCII character
set, so that you both know exactly how to represent string-based data
that is being sent back and forth.
Currently, if you specify
a password parameter, it will be ignored. You do not need to specify
a password to connect to the SNMP agent; you can pass a length of
0 and a NULL pointer for the password.
Examples
#include <snmp_dpi.h>
unsigned char *pack_p;
pack_p = mkDPIopen("1.3.6.1.2.3.4.5",
"Sample DPI subagent"
0L,2L, DPI_NATIVE_CSET, /* max 2 varBinds */
0,(char *)0);
if (pack_p) {
/* send packet to the agent */
} /* endif */