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
Kernel - Commenting changes only
[tpg/acess2.git]
/
KernelLand
/
Modules
/
IPStack
/
udp.c
diff --git
a/KernelLand/Modules/IPStack/udp.c
b/KernelLand/Modules/IPStack/udp.c
index
cbdcd56
..
1d80569
100644
(file)
--- a/
KernelLand/Modules/IPStack/udp.c
+++ b/
KernelLand/Modules/IPStack/udp.c
@@
-15,8
+15,8
@@
void UDP_Unreachable(tInterface *Interface, int Code, void *Address, int Length,
void UDP_SendPacketTo(tUDPChannel *Channel, int AddrType, const void *Address, Uint16 Port, const void *Data, size_t Length);
// --- Client Channels
tVFS_Node *UDP_Channel_Init(tInterface *Interface);
void UDP_SendPacketTo(tUDPChannel *Channel, int AddrType, const void *Address, Uint16 Port, const void *Data, size_t Length);
// --- Client Channels
tVFS_Node *UDP_Channel_Init(tInterface *Interface);
-
Uint64 UDP_Channel_Read(tVFS_Node *Node, Uint64 Offset, Uint64
Length, void *Buffer);
-
Uint64 UDP_Channel_Write(tVFS_Node *Node, Uint64 Offset, Uint64
Length, const void *Buffer);
+
size_t UDP_Channel_Read(tVFS_Node *Node, off_t Offset, size_t
Length, void *Buffer);
+
size_t UDP_Channel_Write(tVFS_Node *Node, off_t Offset, size_t
Length, const void *Buffer);
int UDP_Channel_IOCtl(tVFS_Node *Node, int ID, void *Data);
void UDP_Channel_Close(tVFS_Node *Node);
// --- Helpers
int UDP_Channel_IOCtl(tVFS_Node *Node, int ID, void *Data);
void UDP_Channel_Close(tVFS_Node *Node);
// --- Helpers
@@
-144,7
+144,7
@@
void UDP_Unreachable(tInterface *Interface, int Code, void *Address, int Length,
*/
void UDP_SendPacketTo(tUDPChannel *Channel, int AddrType, const void *Address, Uint16 Port, const void *Data, size_t Length)
{
*/
void UDP_SendPacketTo(tUDPChannel *Channel, int AddrType, const void *Address, Uint16 Port, const void *Data, size_t Length)
{
- tUDPHeader
*
hdr;
+ tUDPHeader hdr;
if(Channel->Interface && Channel->Interface->Type != AddrType) return ;
if(Channel->Interface && Channel->Interface->Type != AddrType) return ;
@@
-152,17
+152,17
@@
void UDP_SendPacketTo(tUDPChannel *Channel, int AddrType, const void *Address, U
{
case 4:
// Create the packet
{
case 4:
// Create the packet
- hdr = malloc(sizeof(tUDPHeader)+Length);
- hdr->SourcePort = htons( Channel->LocalPort );
- hdr->DestPort = htons( Port );
- hdr->Length = htons( sizeof(tUDPHeader) + Length );
- hdr->Checksum = 0; // Checksum can be zero on IPv4
- memcpy(hdr->Data, Data, Length);
+ hdr.SourcePort = htons( Channel->LocalPort );
+ hdr.DestPort = htons( Port );
+ hdr.Length = htons( sizeof(tUDPHeader) + Length );
+ hdr.Checksum = 0; // Checksum can be zero on IPv4
// Pass on the the IPv4 Layer
// Pass on the the IPv4 Layer
+ tIPStackBuffer *buffer = IPStack_Buffer_CreateBuffer(2 + IPV4_BUFFERS);
+ IPStack_Buffer_AppendSubBuffer(buffer, Length, 0, Data, NULL, NULL);
+ IPStack_Buffer_AppendSubBuffer(buffer, sizeof(hdr), 0, &hdr, NULL, NULL);
// TODO: What if Channel->Interface is NULL here?
// TODO: What if Channel->Interface is NULL here?
- IPv4_SendPacket(Channel->Interface, *(tIPv4*)Address, IP4PROT_UDP, 0, sizeof(tUDPHeader)+Length, hdr);
- // Free allocated packet
- free(hdr);
+ IPv4_SendPacket(Channel->Interface, *(tIPv4*)Address, IP4PROT_UDP, 0, buffer);
+ IPStack_Buffer_DestroyBuffer(buffer);
break;
}
}
break;
}
}
@@
-189,7
+189,7
@@
tVFS_Node *UDP_Channel_Init(tInterface *Interface)
/**
* \brief Read from the channel file (wait for a packet)
*/
/**
* \brief Read from the channel file (wait for a packet)
*/
-
Uint64 UDP_Channel_Read(tVFS_Node *Node, Uint64 Offset, Uint64
Length, void *Buffer)
+
size_t UDP_Channel_Read(tVFS_Node *Node, off_t Offset, size_t
Length, void *Buffer)
{
tUDPChannel *chan = Node->ImplPtr;
tUDPPacket *pack;
{
tUDPChannel *chan = Node->ImplPtr;
tUDPPacket *pack;
@@
-249,13
+249,17
@@
Uint64 UDP_Channel_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buf
/**
* \brief Write to the channel file (send a packet)
*/
/**
* \brief Write to the channel file (send a packet)
*/
-
Uint64 UDP_Channel_Write(tVFS_Node *Node, Uint64 Offset, Uint64
Length, const void *Buffer)
+
size_t UDP_Channel_Write(tVFS_Node *Node, off_t Offset, size_t
Length, const void *Buffer)
{
tUDPChannel *chan = Node->ImplPtr;
const tUDPEndpoint *ep;
const void *data;
int ofs;
{
tUDPChannel *chan = Node->ImplPtr;
const tUDPEndpoint *ep;
const void *data;
int ofs;
- if(chan->LocalPort == 0) return 0;
+
+ if(chan->LocalPort == 0) {
+ Log_Notice("UDP", "Write to channel %p with zero local port", chan);
+ return 0;
+ }
ep = Buffer;
ofs = 2 + 2 + IPStack_GetAddressSize( ep->AddrType );
ep = Buffer;
ofs = 2 + 2 + IPStack_GetAddressSize( ep->AddrType );
UCC
git Repository :: git.ucc.asn.au