PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
ipstack.c
1
2#include "main.h"
3#include "ipstack.h"
4
5#ifdef BUILDING_SMAP_NETDEV
6#include <thevent.h>
7#endif
8
9int SMAPCommonTxPacketNext(struct SmapDriverData *SmapDrivPrivData, void **data, void **pbuf)
10{
11#ifdef BUILDING_SMAP_MODULAR
12 {
13 const SmapModularHookTable_t *HookTableAt0;
14
15 HookTableAt0 = SmapDrivPrivData->HookTable[0];
16 if (HookTableAt0 != NULL && HookTableAt0->TxPacketNext != NULL) {
17 int res;
18
19 res = HookTableAt0->TxPacketNext(data);
20 if (res > 0) {
21 return res;
22 }
23 }
24 }
25#endif
26#if defined(BUILDING_SMAP_NETMAN)
27 (void)SmapDrivPrivData;
28 (void)pbuf;
29 return NetManTxPacketNext(data);
30#elif defined(BUILDING_SMAP_PS2IP)
31 (void)SmapDrivPrivData;
32 (void)pbuf;
33 return SMapTxPacketNext(data);
34#elif defined(BUILDING_SMAP_NETDEV)
35 while (1) {
36 sceInetPkt_t *pkt;
37 u8 *rp;
38 unsigned int length;
39 pkt = sceInetPktDeQ(&SmapDrivPrivData->m_devops.sndq);
40 if (pkt == NULL) {
41 return 0;
42 }
43 rp = pkt->rp;
44 length = pkt->wp - rp;
45 if (length == 0 || ((uiptr)rp & 3) != 0) {
46 sceInetPrintf("smap: dropped\n");
47 SmapDrivPrivData->RuntimeStats_NetDev.m_Tx_Dropped += 1;
48
49#ifdef BUILDING_SMAP_NETDEV
50 SmapDrivPrivData->RuntimeStats_NetDev.m_Tx_Bytes += length;
51 SmapDrivPrivData->RuntimeStats_NetDev.m_Tx_Packets += 1;
52#endif
53
54 sceInetFreePkt(&SmapDrivPrivData->m_devops, pkt);
55 continue;
56 }
57 *pbuf = pkt;
58 *data = rp;
59 return length;
60 }
61#else
62 (void)SmapDrivPrivData;
63 (void)data;
64 (void)pbuf;
65 return 0;
66#endif
67}
68
69void SMAPCommonTxPacketDeQ(struct SmapDriverData *SmapDrivPrivData, void **data, void **pbuf)
70{
71#ifdef BUILDING_SMAP_MODULAR
72 {
73 const SmapModularHookTable_t *HookTableAt0;
74
75 HookTableAt0 = SmapDrivPrivData->HookTable[0];
76 if (HookTableAt0 != NULL && HookTableAt0->TxPacketDeQ != NULL) {
77 if (HookTableAt0->TxPacketDeQ(data)) {
78 return;
79 }
80 }
81 }
82#else
83 (void)data;
84#endif
85#if defined(BUILDING_SMAP_NETMAN)
86 (void)SmapDrivPrivData;
87 (void)pbuf;
88 NetManTxPacketDeQ();
89#elif defined(BUILDING_SMAP_PS2IP)
90 (void)SmapDrivPrivData;
91 (void)pbuf;
92 SMapTxPacketDeQ();
93#elif defined(BUILDING_SMAP_NETDEV)
94 sceInetFreePkt(&SmapDrivPrivData->m_devops, *pbuf);
95#else
96 (void)SmapDrivPrivData;
97 (void)pbuf;
98#endif
99}
100
101void SMapCommonLinkStateDown(struct SmapDriverData *SmapDrivPrivData)
102{
103#ifdef BUILDING_SMAP_MODULAR
104 {
105 const SmapModularHookTable_t *HookTableAt0;
106
107 HookTableAt0 = SmapDrivPrivData->HookTable[0];
108 if (HookTableAt0 != NULL && HookTableAt0->LinkStateDown != NULL) {
109 if (HookTableAt0->LinkStateDown()) {
110 return;
111 }
112 }
113 }
114#endif
115#if defined(BUILDING_SMAP_NETMAN)
116 NetManToggleNetIFLinkState(SmapDrivPrivData->NetIFID, NETMAN_NETIF_ETH_LINK_STATE_DOWN);
117#elif defined(BUILDING_SMAP_PS2IP)
118 (void)SmapDrivPrivData;
119
120 PS2IPLinkStateDown();
121#else
122 (void)SmapDrivPrivData;
123#endif
124}
125
126void SMapCommonLinkStateUp(struct SmapDriverData *SmapDrivPrivData)
127{
128#ifdef BUILDING_SMAP_MODULAR
129 {
130 const SmapModularHookTable_t *HookTableAt0;
131
132 HookTableAt0 = SmapDrivPrivData->HookTable[0];
133 if (HookTableAt0 != NULL && HookTableAt0->LinkStateUp != NULL) {
134 if (HookTableAt0->LinkStateUp()) {
135 return;
136 }
137 }
138 }
139#endif
140#if defined(BUILDING_SMAP_NETMAN)
141 NetManToggleNetIFLinkState(SmapDrivPrivData->NetIFID, NETMAN_NETIF_ETH_LINK_STATE_UP);
142#elif defined(BUILDING_SMAP_PS2IP)
143 (void)SmapDrivPrivData;
144
145 PS2IPLinkStateUp();
146#elif defined(BUILDING_SMAP_NETDEV)
147 SetEventFlag(SmapDrivPrivData->m_devops.evfid, sceInetDevEFP_StartDone);
148#else
149 (void)SmapDrivPrivData;
150#endif
151}
152
153void *SMapCommonStackAllocRxPacket(struct SmapDriverData *SmapDrivPrivData, u16 LengthRounded, void **payload)
154{
155 void *pbuf;
156#ifdef BUILDING_SMAP_MODULAR
157 {
158 const SmapModularHookTable_t *HookTableAt0;
159
160 HookTableAt0 = SmapDrivPrivData->HookTable[0];
161 if (HookTableAt0 != NULL && HookTableAt0->StackAllocRxPacket != NULL) {
162 void *res;
163
164 res = HookTableAt0->StackAllocRxPacket(LengthRounded, payload);
165 if (res != NULL) {
166 return res;
167 }
168 }
169 }
170#endif
171#if defined(BUILDING_SMAP_NETMAN)
172 (void)SmapDrivPrivData;
173 pbuf = NetManNetProtStackAllocRxPacket(LengthRounded, payload);
174#elif defined(BUILDING_SMAP_PS2IP)
175 (void)SmapDrivPrivData;
176 struct pbuf *pbuf_struct;
177
178 pbuf_struct = pbuf_alloc(PBUF_RAW, LengthRounded, PBUF_POOL);
179 pbuf = (void *)pbuf_struct;
180
181 if (pbuf_struct != NULL && payload != NULL) {
182 *payload = pbuf_struct->payload;
183 }
184#elif defined(BUILDING_SMAP_NETDEV)
185 sceInetPkt_t *pkt;
186 pkt = sceInetAllocPkt(&SmapDrivPrivData->m_devops, LengthRounded);
187 if (pkt != NULL && payload != NULL) {
188 *payload = pkt->wp;
189 }
190 pbuf = pkt;
191#else
192 (void)SmapDrivPrivData;
193 (void)LengthRounded;
194 if (payload != NULL) {
195 *payload = NULL;
196 }
197 pbuf = NULL;
198#endif
199 return pbuf;
200}
201
202void SMapStackEnQRxPacket(struct SmapDriverData *SmapDrivPrivData, void *pbuf, u16 length)
203{
204#ifdef BUILDING_SMAP_MODULAR
205 {
206 const SmapModularHookTable_t *HookTableAt0;
207
208 HookTableAt0 = SmapDrivPrivData->HookTable[0];
209 if (HookTableAt0 != NULL && HookTableAt0->EnQRxPacket != NULL) {
210 if (HookTableAt0->EnQRxPacket(pbuf)) {
211 return;
212 }
213 }
214 }
215#endif
216#if defined(BUILDING_SMAP_NETMAN)
217 (void)SmapDrivPrivData;
218 (void)length;
219 NetManNetProtStackEnQRxPacket(pbuf);
220#elif defined(BUILDING_SMAP_PS2IP)
221 (void)SmapDrivPrivData;
222 (void)length;
223 SMapLowLevelInput(pbuf);
224#elif defined(BUILDING_SMAP_NETDEV)
225 {
226 sceInetPkt_t *pkt;
227
228 pkt = (sceInetPkt_t *)pbuf;
229 pkt->wp = &pkt->rp[length];
230 sceInetPktEnQ(&SmapDrivPrivData->m_devops.rcvq, pkt);
231 }
232#else
233 (void)SmapDrivPrivData;
234 (void)length;
235 (void)pbuf;
236#endif
237}
void * payload
Definition tcpip.h:235
@ PBUF_POOL
Definition tcpip.h:225
@ PBUF_RAW
Definition tcpip.h:196
Definition tcpip.h:230