WinSock2 FAQ * What are our obligations (i.e., non-disclosure agreements, etc.)? None. * Are there any limitations on the distribution of the final product? None. * Do you provide driver source code? No, as there is no need. The right to use the LANE, CIP and SPI driver is included in the NIC purchase. * Do you provide a simple example including source code to test your ATM SPI? Yes we provide WS2CHAT enhanced and cchat, a console program. * Does the SPI driver and API support AAL0/raw cells? Yes. * Can we access the cell payload upon transmission and reception? Yes. When you make a connection you tell the SPI what type of connection it is (i.e. whether it is an AAL5 or AAL_USER.) * Do you provide information that will allow access to raw AAL5? Yes, look at the sample code below. * How does the card tell the difference between AAL5 cells and non-AAL5 cells? The determination of AAL5 or non-AAL5 is on VC basis. We support up to 1024 VCCs on our 5940A cards. * Is the card in AAL5 or non-AAL5 mode? Again, it is on a per VC basis. * Are there any hooks for cell timestamping within the API? No. * Does your SPI provide the use of Permanent Virtual Channels? Yes. * How can I make a connection using the PVC mode directly? For example, how do I make a connection using the VPI 0 and the VCI 36. Look at the sample code cchat.c. * Can I use WinSock over LANE Yes, to use WS2CHAT over LANE, use the IP address of the destination machine. * Does the SPI use a Rate Queue or a Scheduler mechanism for traffic control? In our current generation we use rate queue, in the next generation we plan to use a scheduler mechanism. * Is it possible to send cells with complete control over PTI bits (no AAL interpretation)? You can set PTI bits and CLP bit. * How do I send/receive RAW CELLS In WS2CHAT, select the "aaluser" button for raw non-AAL5 cells. In CCHAT, use the option "-a aaluser". Here is the sample code if you want to include in your app. Here we are creating a PVC with user provided VCI and use it to send raw cells: #include /* have defines and structs needed for use with SPI */ typedef struct _ATMS_IE{ Q2931_IE_TYPE IEType; ULONG IELength; union ATM_PARAM{ AAL_PARAMETERS_IE_aal_param_ie; ATM_TRAFFIC_DESCRIPTOR_IE_atm_trafdescp_ie; }atmparam; }atms_ie; //defining a structure for sending the various information elements atms_ie info_ele[SOME_NUMBER]; ATM_CONNECTION_ID conn_id; /* ATM_CONNECTION_ID defined in ws2atm.h */ ATM_PVC_PARAMS pvc_par; /* ATM_CONNECTION_ID defined in ws2atm.h */ s=socket(AF_ATM,SOCK_RAW,AMPROTO_AALUSER); // provide the informational elements to the socket numie=0; info_ele[numie].atmparam.aal_param_ie.AALType=AALTYPE_USER; info_ele[numie].atmparam.aal_param_ie.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize=48; info_ele[numie].atmparam.aal_param_ie.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize=48; // and the other parameters as shown in the code. conn_id.VPI=0; conn_id.VCI=vci; /* user provided vci */ pvc_par.PvcConnectionId=conn_id; WSAIoctl(s,SIO_ASSOCIATE_PVC, &pvc_par, sizeof(pvc_par),NULL,NULL,NULL,NULL,NULL); // Ioctl associates the socket s with the PVC (vci=36) This part of the code provides the required parameters to create the VC which supports raw AAL5 cells using PVC * How can I create a PVC with vpi=0 and vci=36 In WS2CHAT, PVC should be selected and the required VCI (36) should be provided in the dialog box. In CCHAT, use the option "-v 36" If AAL5 is used, then the socket is created using : s=socket(AF_ATM,SOCK_RAW,ATMPROTO_AAL5); info_ele[numie].atmparam.aal_param_ie.AALType=AALTYPE_5; The code given in the previous question can be used for this one with vci=36 to create a PVC: conn_id.VPI=0; conn_id.VCI=vci; // In this case vci=36 31 < vci < 1024 and vpi=0 This provides the required parameters to create a virtual channel with VPI=0 and VCI=36. * How can I specify the SDU Size In WS2CHAT, specify it in the dialog box. In CCHAT use the option "-s size" Using the previous code, make the following changes in the information elements info_ele[numie].atmparam.aal_param_ie.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize=SDUSize; info_ele[numie].atmparam.aal_param_ie.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize=SDUSize; and perform the appropriate WSAIoctl or binding procedures. * How can I get a CBR channel In WS2CHAT, select the CBR button and provide the required rate in the PCR box (in bits/sec) In addition to the informational elements provided above, "Broadband Bearer Capability" and "QoS Class" has to be defined. info_ele[numie].atmparam.atm_trafdescp_ie.Forward.PeakCellRate_CLP01= (user defined cellrate) info_ele[numie].atmparam.atm_trafdescp_ie.Backward.PeakCellRate_CLP01= (user defined cellrate) // For CBR service, Class X service , TT_CBR traffic type and QOS_CLASS1 should be requested info_ele[numie].IEType=Broadbandbearercapability info_ele[numie].atmparam.atm_bbc_ie.BearerClass=BCOB_X; // Class X info_ele[numie].atmparam.atm_bbc_ie.TrafficType=TT_CBR; info_ele[numie].IEType=QOSClass; info_ele[numie].atmparam.atm_qos_ie.QOSclassForward=QOS_CLASS1; info_ele[numie].atmparam.atm_qos_ie.QOSclassBackward=QOS_CLASS1; Then perform the required binding or WSAIoctl operations.