git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Externals/netsurf - Minor fixes, now compiles up to core (requires curl includes)
[tpg/acess2.git]
/
KernelLand
/
Modules
/
IPStack
/
adapters.c
diff --git
a/KernelLand/Modules/IPStack/adapters.c
b/KernelLand/Modules/IPStack/adapters.c
index
83741df
..
d6185b4
100644
(file)
--- a/
KernelLand/Modules/IPStack/adapters.c
+++ b/
KernelLand/Modules/IPStack/adapters.c
@@
-20,8
+20,8
@@
void *IPStack_Adapter_Add(const tIPStack_AdapterType *Type, void *Ptr, const void *HWAddr);
void IPStack_Adapter_Del(void *Handle);
// --- VFS API ---
void *IPStack_Adapter_Add(const tIPStack_AdapterType *Type, void *Ptr, const void *HWAddr);
void IPStack_Adapter_Del(void *Handle);
// --- VFS API ---
-
char *Adapter_ReadDir(tVFS_Node *Node, int Pos
);
-tVFS_Node *Adapter_FindDir(tVFS_Node *Node, const char *Name);
+
int Adapter_ReadDir(tVFS_Node *Node, int Pos, char Name[FILENAME_MAX]
);
+tVFS_Node *Adapter_FindDir(tVFS_Node *Node, const char *Name
, Uint Flags
);
int Adapter_DirIOCtl(tVFS_Node *Node, int Num, void *Data);
int Adapter_IOCtl(tVFS_Node *Node, int Num, void *Data);
// --- "Internal" (IPStack) API ---
int Adapter_DirIOCtl(tVFS_Node *Node, int Num, void *Data);
int Adapter_IOCtl(tVFS_Node *Node, int Num, void *Data);
// --- "Internal" (IPStack) API ---
@@
-83,10
+83,16
@@
void *IPStack_Adapter_Add(const tIPStack_AdapterType *Type, void *Ptr, const voi
gpIP_AdapterList_Last->Next = ret;
gpIP_AdapterList_Last = ret;
Mutex_Release( &glIP_Adapters );
gpIP_AdapterList_Last->Next = ret;
gpIP_AdapterList_Last = ret;
Mutex_Release( &glIP_Adapters );
-
+
+ Log_Log("IPStack", "Adapter %i: %s %02x:%02x:%02x:%02x:%02x:%02x",
+ ret->Index, Type->Name,
+ ret->HWAddr[0], ret->HWAddr[1], ret->HWAddr[2],
+ ret->HWAddr[3], ret->HWAddr[4], ret->HWAddr[5]
+ );
+
// Watch the adapter for incoming packets
// Watch the adapter for incoming packets
-
tTID tid
= Proc_SpawnWorker(Adapter_int_WatchThread, ret);
- if(
tid < 0
) {
+
void *worker
= Proc_SpawnWorker(Adapter_int_WatchThread, ret);
+ if(
!worker
) {
Log_Warning("IPStack", "Unable to create watcher thread for %p", ret);
}
Log_Warning("IPStack", "Unable to create watcher thread for %p", ret);
}
@@
-130,13
+136,14
@@
void IPStack_Adapter_Del(void *Handle)
}
// --- VFS API ---
}
// --- VFS API ---
-
char *Adapter_ReadDir(tVFS_Node *Node, int Pos
)
+
int Adapter_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX]
)
{
{
- if( Pos < 0 ) return
NUL
L;
+ if( Pos < 0 ) return
-EINVA
L;
// Loopback
if( Pos == 0 ) {
// Loopback
if( Pos == 0 ) {
- return strdup("lo");
+ strcpy(Dest, "lo");
+ return 0;
}
Pos --;
}
Pos --;
@@
-144,7
+151,8
@@
char *Adapter_ReadDir(tVFS_Node *Node, int Pos)
tAdapter *a; int i;\
for(i=0,a=list; i < Pos && a; i ++, a = a->Next ); \
if( a ) { \
tAdapter *a; int i;\
for(i=0,a=list; i < Pos && a; i ++, a = a->Next ); \
if( a ) { \
- return Adapter_GetName(a);\
+ strncpy(Dest, Adapter_GetName(a), FILENAME_MAX);\
+ return 0;\
} \
Pos -= i; \
} while(0);
} \
Pos -= i; \
} while(0);
@@
-152,10
+160,10
@@
char *Adapter_ReadDir(tVFS_Node *Node, int Pos)
CHECK_LIST(gpIP_AdapterList, "eth");
// TODO: Support other types of adapters (wifi, tap, ...)
CHECK_LIST(gpIP_AdapterList, "eth");
// TODO: Support other types of adapters (wifi, tap, ...)
- return
NUL
L;
+ return
-EINVA
L;
}
}
-tVFS_Node *Adapter_FindDir(tVFS_Node *Node, const char *Name)
+tVFS_Node *Adapter_FindDir(tVFS_Node *Node, const char *Name
, Uint Flags
)
{
tAdapter *a = Adapter_GetByName(Name);
if(!a)
{
tAdapter *a = Adapter_GetByName(Name);
if(!a)
@@
-256,6
+264,8
@@
void Adapter_SendPacket(tAdapter *Handle, tIPStackBuffer *Buffer)
{
Handle->Type->SendPacket( Handle->CardHandle, Buffer );
}
{
Handle->Type->SendPacket( Handle->CardHandle, Buffer );
}
+
+ IPStack_Buffer_DestroyBuffer(Buffer);
}
// --- Helpers ---
}
// --- Helpers ---
@@
-344,7
+354,9
@@
void IPStack_SendDebugText(const char *Text)
if( CPU_HAS_LOCK(&lLock) )
return ; // Nested!
SHORTLOCK(&lLock);
if( CPU_HAS_LOCK(&lLock) )
return ; // Nested!
SHORTLOCK(&lLock);
+ #if ARCHDIR_is_x86
__asm__ __volatile__ ("sti"); // Start interrupts (x86 specific)
__asm__ __volatile__ ("sti"); // Start interrupts (x86 specific)
+ #endif
// Cache packets until a newline
static char cache[1500 - (sizeof(pkt_hdr) + 4)];
// Cache packets until a newline
static char cache[1500 - (sizeof(pkt_hdr) + 4)];
@@
-370,13
+382,13
@@
void IPStack_SendDebugText(const char *Text)
memcpy(buffer, pkt_hdr, sizeof(pkt_hdr));
memcpy(buffer + sizeof(pkt_hdr), cache, cache_len);
memcpy(buffer, pkt_hdr, sizeof(pkt_hdr));
memcpy(buffer + sizeof(pkt_hdr), cache, cache_len);
-
*(Uint16*)&buffer[14+2] = BigEndian16( sizeof(pkt_hdr)-14 + cache_len );
// IP Size
-
*(Uint16*)&buffer[14+10] = BigEndian16( 0 );
// IP Header
-
*(Uint16*)&buffer[14+20+4] = BigEndian16( 8+cache_len );
// UDP Size
-
*(Uint16*)&buffer[14+20+6] = BigEndian16( 0 );
// UDP Checksum
-
*(Uint32*)&buffer[link_checksum_ofs] = BigEndian32( 0 ); // 802.3 checksum?
+
((Uint16*)buffer)[(14+2)/2] = BigEndian16( sizeof(pkt_hdr)-14 + cache_len );
// IP Size
+
((Uint16*)buffer)[(14+10)/2] = BigEndian16( 0 );
// IP Header
+
((Uint16*)buffer)[(14+20+4)/2] = BigEndian16( 8+cache_len );
// UDP Size
+
((Uint16*)buffer)[(14+20+6)/2] = BigEndian16( 0 );
// UDP Checksum
+
//
*(Uint32*)&buffer[link_checksum_ofs] = BigEndian32( 0 ); // 802.3 checksum?
// TODO: Calculate checksums
// TODO: Calculate checksums
-
*(Uint16*)&buffer[14+10] = BigEndian16( IPv4_Checksum(buffer+14,20) );
// IP Header
+
((Uint16*)buffer)[(14+10)/2] = BigEndian16( IPv4_Checksum(buffer+14,20) );
// IP Header
// Create buffer
tIPStackBuffer *buf = IPStack_Buffer_CreateBuffer(1);
// Create buffer
tIPStackBuffer *buf = IPStack_Buffer_CreateBuffer(1);
UCC
git Repository :: git.ucc.asn.au