source: abuse/tags/pd/abuse/src/net/mac/ethtst.c

Last change on this file was 49, checked in by Sam Hocevar, 15 years ago
  • Imported original public domain release, for future reference.
  • Property svn:keywords set to Id
File size: 3.6 KB
Line 
1#include <Slots.h>
2#include <ROMDefs.h>
3#include <ENET.h>
4#include <string.h>
5#include <stdio.h>
6#include <memory.h>
7
8#define NETBUFFERSIZE 8888
9#define ETHERTYPEID 0x8137
10
11int gENETDone;
12short ENETVRefNum;
13char gMultiCastAddr[6];
14
15unsigned char *pstrcpy(unsigned char *d, unsigned char *s)
16{
17        unsigned int i = (unsigned char)s[0];
18
19        BlockMove(s,d,i+1);
20       
21        return d;
22}
23
24short Get_ENET_Driver()
25{
26        SpBlock mySBlk;
27        ParamBlockRec myPBRec;
28        OSErr err;
29        short found, ENETRefNum;
30        Str15 EnetStr,Enet0Str;
31        char slot,id;
32       
33        memset(&mySBlk,0,sizeof(mySBlk));
34       
35        found = 0;
36        ENETRefNum = 0;
37        mySBlk.spParamData = 1;
38        mySBlk.spCategory = catNetwork;
39        mySBlk.spCType = typeEtherNet;
40        mySBlk.spDrvrSW = 0;
41        mySBlk.spDrvrHW = 0;
42        mySBlk.spTBMask = 3;
43        mySBlk.spSlot = 0;
44        mySBlk.spID = 0;
45        mySBlk.spExtDev = 0;
46       
47        do {
48                err = SGetTypeSRsrc(&mySBlk);
49                if (err == noErr)
50                {
51                        found++;
52                        slot = mySBlk.spSlot;
53                        id = mySBlk.spID;
54                }
55        } while ( err != smNoMoresRsrcs );
56
57        if (found)
58        {
59                memset(&myPBRec,0,sizeof(myPBRec));
60       
61                printf(".ENET\n");
62                pstrcpy(EnetStr, "\p.ENET");
63                myPBRec.slotDevParam.ioCompletion = 0;
64                myPBRec.slotDevParam.ioNamePtr = EnetStr;
65                myPBRec.slotDevParam.ioSPermssn = fsCurPerm;
66                myPBRec.slotDevParam.ioSFlags = 0;
67                myPBRec.slotDevParam.ioSlot = slot;
68                myPBRec.slotDevParam.ioID = id;
69                err = OpenSlot(&myPBRec, false);
70                if (err == noErr)
71                {
72                        ENETVRefNum = myPBRec.slotDevParam.ioVRefNum;
73                        ENETRefNum = myPBRec.slotDevParam.ioSRefNum;           
74                }
75        }
76        else
77        {
78                printf(".ENET0\n");
79                pstrcpy(Enet0Str,"\p.ENET0");
80                err = OpenDriver(Enet0Str, &ENETRefNum);
81        }
82       
83        return ENETRefNum;
84}
85
86OSErr Send_ENET( short ENETRefNum )
87{
88//      BlockMove(
89        return noErr;
90}
91
92pascal void MyCompProc(EParamBlkPtr thePBPtr)
93{
94        Ptr aptr;
95        OSErr err;
96       
97        if (thePBPtr->ioResult < noErr)
98        {
99                if (thePBPtr->ioResult != reqAborted)
100                {
101                        printf("Aiiieee! Completion failed!\n");
102                }
103                else
104                {
105                        printf("Read aborted\n");
106                }
107        }
108        else
109        {
110                aptr = thePBPtr->u.EParms1.ePointer;
111                printf("Whoopee!\n");
112        }
113       
114        if (!gENETDone)
115        {
116                err = ERead((EParamBlkPtr)thePBPtr, true);
117                if (err != noErr)
118                        printf("Aiiee! Completion read failed!\n");
119        }
120}
121
122OSErr Detach_ENET_Packet_Handler( short ENETRefNum )
123{
124        EParamBlock myPB;
125        EParamBlkPtr myEPBPtr;
126        Ptr aptr;
127        OSErr err;
128       
129        myEPBPtr = &myPB;
130        myPB.u.EParms1.eProtType = ETHERTYPEID;
131        myPB.ioRefNum = ENETRefNum;
132        err = EDetachPH((EParamBlkPtr)myEPBPtr, false);
133       
134        if (err != noErr)
135        {
136                printf("Aieeee! Detach failed!\n");
137        }
138        gENETDone = 1;
139
140        return err;
141}
142
143OSErr Attach_ENET_Packet_Handler( short ENETRefNum )
144{
145        EParamBlock myPB;
146        EParamBlkPtr myEPBPtr;
147        Ptr aptr;
148        OSErr err;
149       
150        memset(&myPB,0,sizeof(myPB));
151       
152        myEPBPtr = &myPB;
153        myPB.u.EParms1.eProtType = ETHERTYPEID;
154        myPB.u.EParms1.ePointer = 0;
155//      myPB.ioCompletion = 0;
156//      myPB.ioVRefNum = ENETVRefNum;
157        myPB.ioRefNum = ENETRefNum;
158//      myPB.csCode = ENetAttachPH;
159        err = EAttachPH(&myPB, 0);
160       
161        if (err != noErr)
162        {
163                printf("Aieeee! Attach failed!\n");
164        }
165        else
166        {
167                aptr = NewPtr(NETBUFFERSIZE);
168                myPB.ioCompletion = NewENETCompletionProc(&MyCompProc);
169                myPB.u.EParms1.eProtType = ETHERTYPEID;
170                myPB.u.EParms1.ePointer = aptr;
171                myPB.u.EParms1.eBuffSize = NETBUFFERSIZE;
172                myPB.ioRefNum = ENETRefNum;
173               
174                err = ERead((EParamBlkPtr)myEPBPtr, true);
175               
176                if (err != noErr)
177                {
178                        printf("Aiiiiieeeee! Read failed!\n");
179                        Detach_ENET_Packet_Handler(ENETRefNum);
180                }
181        }
182        return err;
183}
184
185main()
186{
187        short eref;
188       
189        printf("Macs suck!!!!\n\n");
190        printf("%d\n",eref = Get_ENET_Driver());
191
192        while (!Button())
193                ;
194               
195        gENETDone = 0;
196        Attach_ENET_Packet_Handler(eref);
197       
198        while (!Button())
199                ;
200               
201        Detach_ENET_Packet_Handler(eref);
202        printf("Ok! Done\n");
203        return 1;
204}
Note: See TracBrowser for help on using the repository browser.