Toon posts:

[C] datastructuur protocolstack

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ga een UDP protocolstack ontwikkelen in C, daarvoor moet de stack om kunnen gaan met zowel ARP als UDP, de datastructuren en de verzendfunctie wil ik er zo uit laten:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
typedef struct
{
   eth_header ethernetHeader;
   void* data; // pointer naar arpFrame of ipFrame
}ethernetFrame;

typedef struct
{
   elem1 element1;
   elem2 element2;
   etc...
} arpFrame;

typedef struct
{
   ip_header ipHeader;
   void* data; // pointer naar udpFrame
}ipFrame;

typedef struct
{
   udp_header udpHeader;
   void* data; // pointer naar dataToSend
}udpFrame

typedef struct
{
   elem1 element1;
   elem2 element2;
   etc...
} dataToSend;


int sendData( void* data, int dataLength )
// De data waarna in data gewezen wordt en de lengte dataLength heeft
// wordt naar over het netwerk verstuurd
// 
// Functieresultaat:
// - 0 = gelukt
// - 1 = mislukt


Mijn vraag is nu, hoe kan ik in de functie sendData er voor zorgen dat de data die
ik in de datastructuren heb gedefinieerd achter elkaar kan versturen op deze manier:

- Voor een ARP frame
<<Ethernet Header>><<Arp Frame>>

- Voor een UDP frame
<<Ethernet Header>><<IP header>><< UDP frame>><<data To Send>>

Kan dit voor mijn ontwikkelde datastructuren, zo ja hoe?, of moet ik ze aanpassen

Verwijderd

char sendbuffer[1024];

memcpy(sendbuffer, my_eth_header, sizeof(eth_header));
memcpy(sendbuffer + sizeof(eth_header), my_ip_header, sizeof(ip_header));
memcpy(sendbuffer + sizeof(eth_header) + sizeof(ip_header), my_udp_header, sizeof(udp_header));
memcpy(sendbuffer + sizeof(eth_header) + sizeof(ip_header) + sizeof(udp_header), my_data, my_datasize);

int status= sendData(sendbuffer, sizeof(eth_header) + sizeof(ip_header) + sizeof(udp_header) + my_datasize);

Het gaat dus niet in een keer met je eigen datastructuren, want daarin zitten pointers naar de volgstructuren. Vooropgesteld natuurlijk, dat de headers gevuld zijn met data in net-formaat en niet meer geconverteerd moeten worden.