|
Example 1The following C/C++ code fragment
shows how to format a request to obtain TCP connection information
using the filters in the filter definition example (see Filter example): /********************************************************************/
/* */
/* NMI data definitions */
/* */
/********************************************************************/
typedef struct {
NWMHeader NMIheader;
NWMFilter NMIfilter[2];
} NMIbuftype;
NMIbuftype *NMIbuffer;
unsigned int NMIalet;
int NMIlength;
int RV;
int RC;
unsigned int RSN;
#define NMIBUFSIZE 8192
NMIbuffer=malloc(NMIBUFSIZE);
NMIalet=0;
NMIlength=NMIBUFSIZE;
/********************************************************************/
/* */
/* Format the header */
/* */
/********************************************************************/
NMIbuffer->NMIheader.NWMHeaderIdent=NWMHEADERIDENTIFIER;
NMIbuffer->NMIheader.NWMHeaderLength=sizeof(NWMHeader);
NMIbuffer->NMIheader.NWMVersion=NWMVERSION1;
NMIbuffer->NMIheader.NWMType=NWMTCPCONNTYPE;
NMIbuffer->NMIheader.NWMBytesNeeded=0;
NMIbuffer->NMIheader.NWMInputDataDescriptors.\
NWMFiltersDesc.NWMTOffset=sizeof(NWMHeader);
NMIbuffer->NMIheader.NWMInputDataDescriptors.\
NWMFiltersDesc.NWMTLength=sizeof(NWMFilter);
NMIbuffer->NMIheader.NWMInputDataDescriptors.\
NWMFiltersDesc.NWMTNumber=2;
/********************************************************************/
/* */
/* Format filter 1 */
/* */
/********************************************************************/
NMIbuffer->NMIfilter[0].NWMFilterIdent=NWMFILTERIDENTIFIER;
NMIbuffer->NMIfilter[0].NWMFilterFlags=NWMFILTERLCLADDRMASK|\
NWMFILTERLCLPORTMASK;
NMIbuffer->NMIfilter[0].NWMFilterLocal.\
NWMFilterLocalAddr4.sin_family=AF_INET;
NMIbuffer->NMIfilter[0].NWMFilterLocal.\
NWMFilterLocalAddr4.sin_port=5000;
NMIbuffer->NMIfilter[0].NWMFilterLocal.\
NWMFilterLocalAddr4.sin_addr.s_addr=0x09000001;
/********************************************************************/
/* */
/* Format filter 2 */
/* */
/********************************************************************/
NMIbuffer->NMIfilter[1].NWMFilterIdent=NWMFILTERIDENTIFIER;
NMIbuffer->NMIfilter[1].NWMFilterFlags=NWMFILTERRESNAMEMASK;
memcpy(NMIbuffer->NMIfilter[1].NWMFilterResourceName,"FTP* ",8);
/********************************************************************/
/* */
/* Invoke NMI service */
/* */
/********************************************************************/
NWMServices(TcpipJobName,NMIbuffer,&NMIalet,&NMIlength,&RV,&RC,&RSN);
Guideline: In z/OS® releases prior to V1R7, the current version
is 1. In z/OS version V1R7
and later, the current version is 2. Applications coded with NWMVERSION1
(as in example 1) will have the version accepted in z/OS version V1R4 and later. However, applications
coded with NWMCURRENTVER and compiled using the version 2 headers
work only on z/OS version
V1R7 and later releases. Applications using NWMCURRENTVER in z/OS version V1R7 and later releases
should recognize that the current version might not be accepted on
prior releases of the operating system. When these applications receive
an error code indicating an error in the version, they should drop
back to the prior (or lowest) version number and verify that that
version is acceptable with the current operating system.
The version used does not restrict which functions are available.
If an application using version 1 and compiled with a version 2 header
is executed on a prior release of the operating system, the application
will receive the data corresponding to the release of the operating
system on which it executes. Therefore, if the application is executing
on a system running version 2 and specifies version 1, it still receives
all data including the new version 2 data (STOKEN). If the same
application is executed on a release that supports only version 1,
it receives everything except the new version 2 data.
Example 2The following C/C++ code fragment
shows how to drop a connection using the following values: - Resource ID = 003A
- Local IP Address = 9.0.0.1
- Local Port = 5003
- Remote IP Address = 9.0.0.5
- Remote Port = 3000
/********************************************************************/
/* */
/* NMI data definitions */
/* */
/********************************************************************/
typedef struct {
NWMHeader NMIheader;
NWMDropConnEntry NMIDropConnEntry;
} NMIbuftype;
NMIbuftype NMIbuffer;
unsigned int NMIalet;
int NMIlength = sizeof(NMIbuffer);
int RV;
int RC;
unsigned int RSN;
/********************************************************************/
/* */
/* Format the header */
/* */
/********************************************************************/
memset(&NMIbuffer, 0, sizeof(NMIbuffer));
NMIbuffer.NMIheader.NWMHeaderIdent=NWMHEADERIDENTIFIER;
NMIbuffer.NMIheader.NWMHeaderLength=sizeof(NWMHeader);
NMIbuffer.NMIheader.NWMVersion=NWMCURRENTVER;
NMIbuffer.NMIheader.NWMType=NWMDROPCONNTYPE;
NMIbuffer.NMIheader.NWMBytesNeeded=0;
NMIbuffer.NMIheader.NWMInputDataDescriptors.\
NWMIODesc.NWMTOffset=sizeof(NWMHeader);
NMIbuffer.NMIheader.NWMInputDataDescriptors.\
NWMIODesc.NWMTLength=sizeof(NWMDropConnEntry);
NMIbuffer.NMIheader.NWMInputDataDescriptors.\
NWMIODesc.NWMTNumber=1;
/********************************************************************/
/* */
/* Format the NMIDropConnEntry */
/* */
/********************************************************************/
NMIbuffer.NMIDropConnEntry.NWMDropConnIdent=NWMDROPCONNIDENTIFIER;
NMIbuffer.NMIDropConnEntry.NWMDropConnId = 0x003a;
NMIbuffer.NMIDropConnEntry.NWMDropConnLocalAddr4.sin_family=AF_INET;
NMIbuffer.NMIDropConnEntry.NWMDropConnLocalAddr4.sin_port=5003;
NMIbuffer.NMIDropConnEntry.NWMDropConnLocalAddr4.sin_addr.s_addr=0x09000001;
NMIbuffer.NMIDropConnEntry.NWMDropConnRemoteAddr4.sin_family=AF_INET;
NMIbuffer.NMIDropConnEntry.NWMDropConnRemoteAddr4.sin_port=3000;
NMIbuffer.NMIDropConnEntry.NWMDropConnRemoteAddr4.sin_addr.s_addr=0x09000005;
NMIbuffer.NMIDropConnEntry.NWMDropProtocol = IPPROTO_TCP;
/********************************************************************/
/* */
/* Invoke NMI service */
/* */
/********************************************************************/
NWMServicesEZBNMIFR(TcpipJobName,NMIbuffer,&NMIalet,&NMIlength,&RV,&RC,&RSN);
/********************************************************************/
/* */
/* Check the return code */
/* */
/********************************************************************/
if (rc != sizeof(NMIbuffer)
{
printf("EZBNMIFR drop rc=%d\n", rc);
}
else
/* Ensure that the number of entries input for drop match the */
/* number of entries actually dropped */
if (NMIbuffer.NMIHeader.NWMDropConnDesc.NWMQMatch !=
NMIbuffer.NMIheader.NWMInputDataDescriptors.NWMIODesc.NWMTNumber)
{
printf("EZBNMIFR drop for connection 0x%8.8x errno=%d / 0x%8.8X\n",
NMIbuffer.MWMDropConnEntry.NWMDropConnIdent,
NMIbuffer.NMIDropConnEntry.NWMDropConnRc,
NMIbuffer.NMIDropConnEntry.NWMDropConnRs);
}
else
{
printf("EZBNMIFR drop for connection 0x%8.8x successful\n",
NMIbuffer.MWMDropConnEntry.NWMDropConnIdent);
}
Example 3The following assembler code fragment
shows how to format a request to obtain TCP connection information
using the filters in the filter definition example (see Filter example): R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
STORAGE OBTAIN,LENGTH=@DYNSIZE,ADDR=(R13),LOC=ANY
USING NMIdata,R13
ST R13,NMIbuffer
***********************************************************************
* *
* Format the header *
* *
***********************************************************************
LA R2,NMIheader
USING NWMHeader,R2
XC NWMHeader,NWMHeader
MVC NWMHeaderIdent,=A(NWMHeaderIdentifier)
LHI R0,NWMHeaderSize
ST R0,NWMHeaderLength
LHI R0,NWMVersion1
STH R0,NWMVersion
LHI R0,NWMTcpConnType
STH R0,NWMType
XC NWMBytesNeeded,NWMBytesNeeded
LA R3,NWMInputDataDescriptors
USING NWMTriplet,R3
LHI R0,NWMHeaderSize
ST R0,NWMTOffset
LHI R0,NWMFilterSize
ST R0,NWMTLength
LHI R0,NMIfilter#
ST R0,NWMTNumber
DROP R3
DROP R2
***********************************************************************
* *
* Format filter 1 *
* *
***********************************************************************
LA R2,NMIfilter1
USING NWMFilter,R2
XC NWMFilter,NWMFilter
MVC NWMFilterIdent,=A(NWMFilterIdentifier)
MVC NWMFilterFlags(4),=A(NWMFilterLclAddrMask)
OC NWMFilterFlags(4),=A(NWMFilterLclPortMask)
LA R3,NWMFilterLocalAddr4
USING SOCKADDR,R3
LHI R0,AF_INET
STC R0,SOCK_FAMILY
LHI R0,5000
STH R0,SOCK_SIN_PORT
MVC SOCK_SIN_ADDR,=XL4'09000001'
DROP R2,R3
***********************************************************************
* *
* Format filter 2 *
* *
***********************************************************************
LA R2,NMIfilter2
USING NWMFilter,R2
XC NWMFilter,NWMFilter
MVC NWMFilterIdent,=A(NWMFilterIdentifier)
MVC NWMFilterFlags(4),=A(NWMFilterResNameMask)
MVC NWMFilterResourceName,=CL8'FTP* '
DROP R2
***********************************************************************
* *
* Invoke NMI service *
* *
***********************************************************************
CALL EZBNMIFR, *
(TcpipJobName,(R13),NMIalet,NMIlength,RV,RC,RSN)
STORAGE RELEASE,LENGTH=@DYNSIZE,ADDR=(R13)
DROP R13
EJECT
RV DC F'0'
RC DC F'0'
RSN DC A(0)
NMIalet DC A(0)
NMIbuffer DC A(0)
NMIlength DC A(NMIBUFSIZE)
TcpipJobName DC CL8'TCPIP '
LTORG ,
NMIdata DSECT
NMIbuftype DS CL8192
ORG NMIdata
NMIheader DS CL(NWMHeaderSize)
NMIfilter1 DS CL(NWMFilterSize)
NMIfilter2 DS CL(NWMFilterSize)
NMIfilter# EQU (*-NMIfilter1)/NWMFilterSize
ORG ,
NMIBUFSIZE EQU *-NMIdata
BPXYSOCK DSECT=YES,LIST=NO
EZBNMRHA DSECT=YES,LIST=NO,TITLE=NO,NWMLIST=YES
|