2016-06-21 12 views
0

Ich bin ein neues UDP-Protokoll im Kernel zu kodieren, so dass ich nur den UDP-Code gegabelte, um einen Vorsprung zu bekommen. Ich brauche einige neue Felder in der Header-Struktur als die bestehenden. Ich habe eine neue Struktur dafür erstellt, aber ich weiß nicht, wo diese Struktur initialisiert wird, um den Daten voranzustellen, während ich einen udp-Rahmen mit der Funktion udp_sendmsg (die ich aus dem udp-Code kopiert habe) aussende.Wo ist udp Header zu Daten im Kernel-Code hinzugefügt

Um klar zu sein, ich möchte nur die Kopfzeile ändern, die udp_sendmsg() vor den Daten platziert. Es sollte also genügen zu wissen, wo im Kernel-Code der Header und die Daten kombiniert sind.

Vielen Dank.

+0

Sie erwähnen nicht, welcher Kernel im Speziellen, aber 'udp_sendmsg' verweist auf Linux. – cnicutar

Antwort

0

Für IPv4 ein guter Einstiegspunkt ist net/ipv4/udp.c

static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4) 
{ 
    [...] 
    * Create a UDP header 
    */ 
    uh = udp_hdr(skb); 
    uh->source = inet->inet_sport; 
    uh->dest = fl4->fl4_dport; 
    uh->len = htons(len); 
    uh->check = 0; 

besonderes Augenmerk auf udp_hdr bezahlen, die lediglich einen Speicherplatz in den skbuff zurückgibt.

static inline struct udphdr *udp_hdr(const struct sk_buff *skb) 
{ 
    return (struct udphdr *)skb_transport_header(skb); 
} 
+0

Danke. Ich möchte dann eine ähnliche Funktion say net_protocol_hdr() erstellen, die einen Zeiger des Typs struct new_protocol zurückgeben kann. Ich habe bereits struct new_protocol in meiner Header-Datei definiert und werde diesen Header in eine Datei einfügen, die die Definition für die Funktion new_protocol_hdr enthält. Aber wie wird dann der zusätzliche Platz für die neuen Header-Felder im skbuff zugewiesen? –

+0

@GauravSuman Ich glaube, du drehst dich in eine andere Frage um, off-topic hier. – cnicutar

+0

@GauravSuman Check out 'skb_network_header'. – cnicutar