z/OS Communications Server: IP Programmer's Guide and Reference
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


TCP/IP NMI examples

z/OS Communications Server: IP Programmer's Guide and Reference
SC27-3659-02

Example 1

The 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 2

The 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 3

The 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                 

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014