and added files
[bcm963xx.git] / userapps / opensource / net-snmp / agent / mibgroup / mibII / atm / atmapiuser.c
1 /***************************************************************************
2  * Broadcom Corp. Confidential
3  * Copyright 2001 Broadcom Corp. All Rights Reserved.
4  *
5  * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED 
6  * SOFTWARE LICENSE AGREEMENT BETWEEN THE USER AND BROADCOM. 
7  * YOU HAVE NO RIGHT TO USE OR EXPLOIT THIS MATERIAL EXCEPT 
8  * SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9  *
10  ***************************************************************************
11  * File Name  : AtmApiUser.c
12  *
13  * Description: This file contains the implementation of the user mode
14  *              ATM API library.
15  *
16  * Updates    : 08/27/2001  lat.  Created.
17  ***************************************************************************/
18
19 /* Broadcom types. */
20 typedef unsigned char UINT8;
21 typedef unsigned short UINT16;
22 typedef unsigned long UINT32;
23
24
25 /* Includes. */
26 #include <stdio.h>
27 #include <unistd.h>
28 #include <errno.h>
29 #include <fcntl.h>      /* open */ 
30 #include <unistd.h>     /* exit */
31 #include <sys/ioctl.h>  /* ioctl */
32 #include "atmapidrv.h"
33
34
35 /* Globals. */
36 int g_nAtmFd = -1;
37
38
39 /***************************************************************************
40  * Function Name: OpenBcmAtm
41  * Description  : Opens the bcmatm device.
42  * Returns      : device handle if successsful or -1 if error
43  ***************************************************************************/
44 static int OpenBcmAtm( void )
45 {
46     int nFd = open( "/dev/bcmatm0", O_RDWR );
47
48     if( nFd == -1 )
49         printf( "BcmAtm_Initialize: open error %d\n", errno );
50
51     return( nFd );
52 } /* OpenBcmAtm */
53
54 #ifdef BUILD_SNMP_ATM_MIB
55 /***************************************************************************
56  * Function Name: BcmAtm_Initialize
57  * Description  : Initializes the object.
58  * Returns      : STS_SUCCESS if successful or error status.
59  ***************************************************************************/
60 BCMATM_STATUS BcmAtm_Initialize( PATM_INITIALIZATION_PARMS pInitParms )
61 {
62     ATMDRV_INITIALIZE Arg = {pInitParms, STS_ERROR};
63
64     if( g_nAtmFd == -1  )
65         g_nAtmFd = OpenBcmAtm();
66
67     if( g_nAtmFd != -1  )
68         ioctl( g_nAtmFd, ATMIOCTL_INITIALIZE, &Arg );
69     else
70         Arg.baStatus = STS_STATE_ERROR;
71
72     return( Arg.baStatus );
73 } // BcmAtm_Initialize
74
75
76 /***************************************************************************
77  * Function Name: BcmAtm_Uninitialize
78  * Description  : Clean up resources allocated during BcmAtm_Initialize.
79  * Returns      : STS_SUCCESS if successful or error status.
80  ***************************************************************************/
81 BCMATM_STATUS BcmAtm_Uninitialize( void )
82 {
83     ATMDRV_STATUS_ONLY Arg = {STS_ERROR};
84
85     if( g_nAtmFd == -1  )
86         g_nAtmFd = OpenBcmAtm();
87
88     if( g_nAtmFd != -1  )
89     {
90         ioctl( g_nAtmFd, ATMIOCTL_UNINITIALIZE, &Arg );
91         close( g_nAtmFd );
92         g_nAtmFd = -1;
93     }
94     else
95         Arg.baStatus = STS_STATE_ERROR;
96
97     return( Arg.baStatus );
98 } // BcmAtm_Uninitialize
99 #endif /* BUILD_SNMP_ATM_MIB */
100
101 /***************************************************************************
102  * Function Name: BcmAtm_GetInterfaceId
103  * Description  : Returns the interface id for the specified ATM port.
104  * Returns      : STS_SUCCESS if successful or error status.
105  ***************************************************************************/
106 BCMATM_STATUS BcmAtm_GetInterfaceId( UINT8 ucPhyPort,
107     UINT32 *pulInterfaceId )
108 {
109     ATMDRV_INTERFACE_ID Arg = {ucPhyPort,{0,0,0}, 0, STS_ERROR};
110
111     if( g_nAtmFd == -1  )
112         g_nAtmFd = OpenBcmAtm();
113
114     if( g_nAtmFd != -1  )
115     {
116         Arg.ulInterfaceId = *pulInterfaceId;
117         ioctl( g_nAtmFd, ATMIOCTL_GET_INTERFACE_ID, &Arg );
118         *pulInterfaceId = Arg.ulInterfaceId;
119     }
120     else
121         Arg.baStatus = STS_STATE_ERROR;
122
123     return( Arg.baStatus );
124 } // BcmAtm_GetInterfaceId
125
126
127 #ifdef BUILD_SNMP_ATM_MIB
128 /***************************************************************************
129  * Function Name: BcmAtm_GetTrafficDescrTableSize
130  * Description  : Returns the number of entries in the Traffic Descriptor
131  *                Table.
132  * Returns      : STS_SUCCESS if successful or error status.
133  ***************************************************************************/
134 BCMATM_STATUS BcmAtm_GetTrafficDescrTableSize(
135     UINT32 *pulTrafficDescrTableSize )
136 {
137     ATMDRV_TRAFFIC_DESCR_TABLE_SIZE Arg = {0, STS_ERROR};
138
139     if( g_nAtmFd == -1  )
140         g_nAtmFd = OpenBcmAtm();
141
142     if( g_nAtmFd != -1  )
143     {
144         ioctl( g_nAtmFd, ATMIOCTL_GET_TRAFFIC_DESCR_TABLE_SIZE, &Arg );
145         *pulTrafficDescrTableSize = Arg.ulTrafficDescrTableSize;
146     }
147     else
148         Arg.baStatus = STS_STATE_ERROR;
149
150     return( Arg.baStatus );
151 } // BcmAtm_GetTrafficDescrTableSize
152
153
154 /***************************************************************************
155  * Function Name: BcmAtm_GetTrafficDescrTable
156  * Description  : Returns the Traffic Descriptor Table.
157  * Returns      : STS_SUCCESS if successful or error status.
158  ***************************************************************************/
159 BCMATM_STATUS BcmAtm_GetTrafficDescrTable(
160     PATM_TRAFFIC_DESCR_PARM_ENTRY pTrafficDescrTable,
161     UINT32 ulTrafficDescrTableSize )
162 {
163     ATMDRV_TRAFFIC_DESCR_TABLE Arg = 
164         {pTrafficDescrTable, ulTrafficDescrTableSize, STS_ERROR};
165
166     if( g_nAtmFd == -1  )
167         g_nAtmFd = OpenBcmAtm();
168
169     if( g_nAtmFd != -1  )
170         ioctl( g_nAtmFd, ATMIOCTL_GET_TRAFFIC_DESCR_TABLE, &Arg );
171     else
172         Arg.baStatus = STS_STATE_ERROR;
173
174     return( Arg.baStatus );
175 } // BcmAtm_GetTrafficDescrTable
176
177
178 /***************************************************************************
179  * Function Name: BcmAtm_SetTrafficDescrTable
180  * Description  : Saves the supplied Traffic Descriptor Table to a private
181  *                data member.
182  * Returns      : STS_SUCCESS if successful or error status.
183  ***************************************************************************/
184 BCMATM_STATUS BcmAtm_SetTrafficDescrTable(
185     PATM_TRAFFIC_DESCR_PARM_ENTRY pTrafficDescrTable,
186     UINT32 ulTrafficDescrTableSize )
187 {
188     ATMDRV_TRAFFIC_DESCR_TABLE Arg = 
189         {pTrafficDescrTable, ulTrafficDescrTableSize, STS_ERROR};
190
191     if( g_nAtmFd == -1  )
192         g_nAtmFd = OpenBcmAtm();
193
194     if( g_nAtmFd != -1  )
195         ioctl( g_nAtmFd, ATMIOCTL_SET_TRAFFIC_DESCR_TABLE, &Arg );
196     else
197         Arg.baStatus = STS_STATE_ERROR;
198
199     return( Arg.baStatus );
200 } // BcmAtm_SetTrafficDescrTable
201 #endif /* BUILD_SNMP_ATM_MIB */
202
203 /***************************************************************************
204  * Function Name: BcmAtm_GetInterfaceCfg
205  * Description  : Calls the interface object for the specified interface id
206  *                to return the interface configuration record.
207  * Returns      : STS_SUCCESS if successful or error status.
208  ***************************************************************************/
209 BCMATM_STATUS BcmAtm_GetInterfaceCfg( UINT32 ulInterfaceId,
210     PATM_INTERFACE_CFG pInterfaceCfg )
211 {
212     ATMDRV_INTERFACE_CFG Arg = {ulInterfaceId, pInterfaceCfg, STS_ERROR};
213
214     if( g_nAtmFd == -1  )
215         g_nAtmFd = OpenBcmAtm();
216
217     if( g_nAtmFd != -1  )
218         ioctl( g_nAtmFd, ATMIOCTL_GET_INTERFACE_CFG, &Arg );
219     else
220         Arg.baStatus = STS_STATE_ERROR;
221
222     return( Arg.baStatus );
223 } // BcmAtm_GetInterfaceCfg
224
225
226 /***************************************************************************
227  * Function Name: BcmAtm_SetInterfaceCfg
228  * Description  : Calls the interface object for the specified interface id
229  *                to save a new interface configuration record.
230  * Returns      : STS_SUCCESS if successful or error status.
231  ***************************************************************************/
232 BCMATM_STATUS BcmAtm_SetInterfaceCfg( UINT32 ulInterfaceId,
233     PATM_INTERFACE_CFG pInterfaceCfg )
234 {
235     ATMDRV_INTERFACE_CFG Arg = {ulInterfaceId, pInterfaceCfg, STS_ERROR};
236
237     if( g_nAtmFd == -1  )
238         g_nAtmFd = OpenBcmAtm();
239
240     if( g_nAtmFd != -1  )
241         ioctl( g_nAtmFd, ATMIOCTL_SET_INTERFACE_CFG, &Arg );
242     else
243         Arg.baStatus = STS_STATE_ERROR;
244
245     return( Arg.baStatus );
246 } // BcmAtm_SetInterfaceCfg
247
248 #ifdef BUILD_SNMP_ATM_MIB
249 /***************************************************************************
250  * Function Name: BcmAtm_GetVccCfg
251  * Description  : Returns the VCC configuration record for the specified VCC
252  *                address.
253  * Returns      : STS_SUCCESS if successful or error status.
254  ***************************************************************************/
255 BCMATM_STATUS BcmAtm_GetVccCfg( PATM_VCC_ADDR pVccAddr,
256     PATM_VCC_CFG pVccCfg )
257 {
258     ATMDRV_VCC_CFG Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
259         pVccAddr->usVci}, pVccCfg, STS_ERROR};
260
261     if( g_nAtmFd == -1  )
262         g_nAtmFd = OpenBcmAtm();
263
264     if( g_nAtmFd != -1  )
265         ioctl( g_nAtmFd, ATMIOCTL_GET_VCC_CFG, &Arg );
266     else
267         Arg.baStatus = STS_STATE_ERROR;
268
269     return( Arg.baStatus );
270 } // BcmAtm_GetVccCfg
271
272
273 /***************************************************************************
274  * Function Name: BcmAtm_SetVccCfg
275  * Description  : Saves the VCC configuration record for the specified VCC
276  *                address.
277  * Returns      : STS_SUCCESS if successful or error status.
278  ***************************************************************************/
279 BCMATM_STATUS BcmAtm_SetVccCfg( PATM_VCC_ADDR pVccAddr,
280     PATM_VCC_CFG pVccCfg )
281 {
282     ATMDRV_VCC_CFG Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
283         pVccAddr->usVci}, pVccCfg, STS_ERROR};
284
285     if( g_nAtmFd == -1  )
286         g_nAtmFd = OpenBcmAtm();
287
288     if( g_nAtmFd != -1  )
289         ioctl( g_nAtmFd, ATMIOCTL_SET_VCC_CFG, &Arg );
290     else
291         Arg.baStatus = STS_STATE_ERROR;
292
293     return( Arg.baStatus );
294 } // BcmAtm_SetVccCfg
295
296
297 /***************************************************************************
298  * Function Name: BcmAtm_GetVccAddrs
299  * Description  : Returns the configured VCC addresses for an interface. 
300  * Returns      : STS_SUCCESS if successful or error status.
301  ***************************************************************************/
302 BCMATM_STATUS BcmAtm_GetVccAddrs( UINT32 ulInterfaceId, PATM_VCC_ADDR pVccAddrs,
303     UINT32 ulNumVccs, UINT32 *pulNumReturned )
304 {
305     ATMDRV_VCC_ADDRS Arg = {ulInterfaceId, pVccAddrs, ulNumVccs, 0, STS_ERROR};
306
307     if( g_nAtmFd == -1  )
308         g_nAtmFd = OpenBcmAtm();
309
310     if( g_nAtmFd != -1  )
311     {
312         ioctl( g_nAtmFd, ATMIOCTL_GET_VCC_ADDRS, &Arg );
313         *pulNumReturned = Arg.ulNumReturned;
314     }
315     else
316         Arg.baStatus = STS_STATE_ERROR;
317
318     return( Arg.baStatus );
319 } // BcmAtm_GetVccAddrs
320
321
322 /***************************************************************************
323  * Function Name: BcmAtm_GetInterfaceStatistics
324  * Description  : Returns the statistics record for an interface.
325  * Returns      : STS_SUCCESS if successful or error status.
326  ***************************************************************************/
327 BCMATM_STATUS BcmAtm_GetInterfaceStatistics( UINT32 ulInterfaceId,
328     PATM_INTERFACE_STATS pStatistics, UINT32 ulReset )
329 {
330     ATMDRV_INTERFACE_STATISTICS Arg = {ulInterfaceId, pStatistics, ulReset,
331         STS_ERROR};
332
333     if( g_nAtmFd == -1  )
334         g_nAtmFd = OpenBcmAtm();
335
336     if( g_nAtmFd != -1  )
337         ioctl( g_nAtmFd, ATMIOCTL_GET_INTERFACE_STATISTICS, &Arg );
338     else
339         Arg.baStatus = STS_STATE_ERROR;
340
341     return( Arg.baStatus );
342 } // BcmAtm_GetInterfaceStatistics
343
344
345 /***************************************************************************
346  * Function Name: BcmAtm_GetVccStatistics
347  * Description  : Returns the VCC statistics record for the specified VCC
348  *                address.
349  * Returns      : STS_SUCCESS if successful or error status.
350  ***************************************************************************/
351 BCMATM_STATUS BcmAtm_GetVccStatistics( PATM_VCC_ADDR pVccAddr,
352     PATM_VCC_STATS pVccStatistics, UINT32 ulReset )
353 {
354     ATMDRV_VCC_STATISTICS Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
355         pVccAddr->usVci}, pVccStatistics, ulReset, STS_ERROR};
356
357     if( g_nAtmFd == -1  )
358         g_nAtmFd = OpenBcmAtm();
359
360     if( g_nAtmFd != -1  )
361         ioctl( g_nAtmFd, ATMIOCTL_GET_VCC_STATISTICS, &Arg );
362     else
363         Arg.baStatus = STS_STATE_ERROR;
364
365     return( Arg.baStatus );
366 } // BcmAtm_GetVccStatistics
367
368
369 /***************************************************************************
370  * Function Name: BcmAtm_SetInterfaceLinkInfo
371  * Description  : Calls the interface object for the specified interface id
372  *                to set physical link information.
373  * Returns      : STS_SUCCESS if successful or error status.
374  ***************************************************************************/
375 BCMATM_STATUS BcmAtm_SetInterfaceLinkInfo( UINT32 ulInterfaceId,
376     PATM_INTERFACE_LINK_INFO pLi )
377 {
378     ATMDRV_INTERFACE_LINK_INFO Arg = {ulInterfaceId, {pLi->ulStructureId,
379         pLi->ulLinkState, pLi->ulLineRate}, STS_ERROR};
380
381     if( g_nAtmFd == -1  )
382         g_nAtmFd = OpenBcmAtm();
383
384     if( g_nAtmFd != -1  )
385         ioctl( g_nAtmFd, ATMIOCTL_SET_INTERFACE_LINK_INFO, &Arg );
386     else
387         Arg.baStatus = STS_STATE_ERROR;
388
389     return( Arg.baStatus );
390 } // BcmAtm_SetInterfaceLinkInfo
391
392
393 /***************************************************************************
394  * Function Name: BcmAtm_SetNotifyCallback
395  * Description  : Adds the specified callback function to the list of
396  *                functions that are called when an ATM notification
397  *                event occurs.
398  * Returns      : STS_SUCCESS if successful or error status.
399  ***************************************************************************/
400 BCMATM_STATUS BcmAtm_SetNotifyCallback( FN_NOTIFY_CB pFnNotifyCb )
401 {
402     return( STS_NOT_SUPPORTED );
403 } // BcmAtm_SetNotifyCallback
404
405
406 /***************************************************************************
407  * Function Name: BcmAtm_ResetNotifyCallback
408  * Description  : Removes the specified callback function from the list of
409  *                functions that are called when an ATM notification
410  *                event occurs.
411  * Returns      : STS_SUCCESS if successful or error status.
412  ***************************************************************************/
413 BCMATM_STATUS BcmAtm_ResetNotifyCallback( FN_NOTIFY_CB pFnNotifyCb )
414 {
415     return( STS_NOT_SUPPORTED );
416 } // BcmAtm_ResetNotifyCallback
417
418
419 /***************************************************************************
420  * Function Name: BcmAtm_AttachVcc
421  * Description  : Attaches an application to a VCC.
422  * Returns      : STS_SUCCESS if successful or error status.
423  ***************************************************************************/
424 BCMATM_STATUS BcmAtm_AttachVcc( PATM_VCC_ADDR pVccAddr,
425     PATM_VCC_ATTACH_PARMS pAttachParms )
426 {
427     return( STS_NOT_SUPPORTED );
428 } // BcmAtm_AttachVcc
429
430
431 /***************************************************************************
432  * Function Name: BcmAtm_AttachMgmtCells
433  * Description  : Attaches an application to send and receive ATM managment
434  *                cells on any VCC.
435  * Returns      : STS_SUCCESS if successful or error status.
436  ***************************************************************************/
437 BCMATM_STATUS BcmAtm_AttachMgmtCells( UINT32 ulInterfaceId,
438     PATM_VCC_ATTACH_PARMS pAttachParms )
439 {
440     return( STS_NOT_SUPPORTED );
441 } // BcmAtm_AttachMgmtCells
442
443
444 /***************************************************************************
445  * Function Name: BcmAtm_AttachTransparent
446  * Description  : Attaches an application to send and receive transparent
447  *                ATM cells.
448  * Returns      : STS_SUCCESS if successful or error status.
449  ***************************************************************************/
450 BCMATM_STATUS BcmAtm_AttachTransparent( UINT32 ulInterfaceId,
451     PATM_VCC_ATTACH_PARMS pAttachParms )
452 {
453     return( STS_NOT_SUPPORTED );
454 } // BcmAtm_AttachTransparent
455
456
457 /***************************************************************************
458  * Function Name: BcmAtm_Detach
459  * Description  : Ends an application attachment to a VCC, management cells
460  *                or transparent cells.
461  * Returns      : STS_SUCCESS if successful or error status.
462  ***************************************************************************/
463 BCMATM_STATUS BcmAtm_Detach( UINT32 ulHandle )
464 {
465     return( STS_NOT_SUPPORTED );
466 } // BcmAtm_Detach
467
468
469 /***************************************************************************
470  * Function Name: BcmAtm_SetAal2ChannelIds
471  * Description  : Specifies a list of AAL2 channel ids that an application
472  *                wants to send and receive data for an AAL2 VCC.
473  * Returns      : STS_SUCCESS if successful or error status.
474  ***************************************************************************/
475 BCMATM_STATUS BcmAtm_SetAal2ChannelIds( UINT32 ulHandle,
476     PATM_VCC_AAL2_CHANNEL_ID_PARMS pChannelIdParms, UINT32 ulNumChannelIdParms )
477 {
478     return( STS_NOT_SUPPORTED );
479 } // BcmAtm_SetAal2ChannelIds
480
481
482 /***************************************************************************
483  * Function Name: BcmAtm_SendVccData
484  * Description  : Sends data on a VCC.
485  * Returns      : STS_SUCCESS if successful or error status.
486  ***************************************************************************/
487 BCMATM_STATUS BcmAtm_SendVccData( UINT32 ulHandle,
488     PATM_VCC_DATA_PARMS pDataParms )
489 {
490     return( STS_NOT_SUPPORTED );
491 } // BcmAtm_SendVccData
492
493
494 /***************************************************************************
495  * Function Name: BcmAtm_SendMgmtData
496  * Description  : Sends a managment cell.
497  * Returns      : STS_SUCCESS if successful or error status.
498  ***************************************************************************/
499 BCMATM_STATUS BcmAtm_SendMgmtData( UINT32 ulHandle,
500     PATM_VCC_ADDR pVccAddr, PATM_VCC_DATA_PARMS pDataParms )
501 {
502     return( STS_NOT_SUPPORTED );
503 } // BcmAtm_SendMgmtData
504
505
506 /***************************************************************************
507  * Function Name: BcmAtm_SendTransparentData
508  * Description  : Sends a transparent ATM cell.
509  * Returns      : STS_SUCCESS if successful or error status.
510  ***************************************************************************/
511 BCMATM_STATUS BcmAtm_SendTransparentData( UINT32 ulHandle,
512     UINT32 ulInterfaceId, PATM_VCC_DATA_PARMS pDataParms )
513 {
514     return( STS_NOT_SUPPORTED );
515 } // BcmAtm_SendTransparentData
516
517
518 /***************************************************************************
519  * Function Name: AtmDrv_DoTest
520  * Description  : Undocumented entry point that executes a loopback test.
521  * Returns      : STS_SUCCESS if successful or error status.
522  ***************************************************************************/
523 BCMATM_STATUS AtmDrv_DoTest( PATM_VCC_ADDR pVccAddr, UINT32 ulNumToSend )
524 {
525     ATMDRV_TEST Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
526         pVccAddr->usVci}, ulNumToSend, STS_ERROR};
527
528     if( g_nAtmFd == -1  )
529         g_nAtmFd = OpenBcmAtm();
530
531     if( g_nAtmFd != -1  )
532         ioctl( g_nAtmFd, ATMIOCTL_TEST, &Arg );
533     else
534         Arg.baStatus = STS_STATE_ERROR;
535
536     return( Arg.baStatus );
537 } // AtmDrv_DoTest
538
539
540 BCMATM_STATUS BcmAtm_SendOamLoopbackTest(UINT32 type, PATM_VCC_ADDR pVccAddr)
541 {
542     ATMDRV_OAM_LOOPBACK Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
543         pVccAddr->usVci}, type, STS_ERROR};
544     if( g_nAtmFd == -1  )
545         g_nAtmFd = OpenBcmAtm();
546
547     if( g_nAtmFd != -1  )
548         ioctl( g_nAtmFd, ATMIOCTL_OAM_LOOPBACK_TEST, &Arg );
549     else
550         Arg.baStatus = STS_STATE_ERROR;
551
552     return( Arg.baStatus );
553 } //BcmAtm_SendOamLoopbackTest
554 #endif /* BUILD_SNMP_ATM_MIB */