My Project
Chargement...
Recherche...
Aucune correspondance
buffer-reseau.c
Aller à la documentation de ce fichier.
1
7#include <manux/debug.h>
8#include <manux/string.h> // memcopy
9#include <manux/kmalloc.h>
10
15
20
30BufferReseau * bufferReseauCreer(void * donnees, int taille)
31{
32 BufferReseau * result = (BufferReseau *)kmalloc(sizeof(BufferReseau));
33
34 if (result) {
35 printk_debug(DBG_KERNEL_NET, "Creation d'un buffer reseau de taille %d\n", taille);
36 result->donnees = kmalloc(taille);
37 if (result->donnees) {
38 memcpy(result->donnees, donnees, taille);
39 result->taille = taille;
40 } else {
41 kfree(result);
42 result = NULL;
43 }
44 }
45
46 return result;
47}
48
53{
55
56 if (result) {
57 printk_debug(DBG_KERNEL_NET, "Creation d'une liste de buffers reseau\n");
58 result->premier = NULL;
59 result->dernier = NULL;
60 };
61
62 return result;
63}
64
69{
70 return ((l == NULL) || (l->premier == NULL));
71}
72
77{
78 printk_debug(DBG_KERNEL_NET, "Insertion d'un nouveau buffer\n");
79
80 assert (l != NULL);
81
83
84 if (c) {
85 c->br = b;
86 c->suivant = l->premier;
87 l->premier = c;
88 if (l->dernier == NULL) {
89 l->dernier = c;
90 }
91 return 1;
92 } else {
93 return 0;
94 }
95}
96
103{
104 CelluleBufferReseau * cellResult = NULL;
105
106 printk_debug(DBG_KERNEL_NET, "Extraction d'un buffer\n");
107
108 if ((l != NULL) && (l->premier != NULL)) {
109 cellResult = l->premier;
110 l->premier = cellResult->suivant;
111 if (l->dernier == cellResult) {
112 l->dernier = NULL;
113 }
114 return cellResult->br;
115 } else {
116 return NULL;
117 }
118}
119
124{
125 int n = 0;
126 CelluleBufferReseau * cell;
127 uint8_t * data;
128
129 if (!listeBufferReseauVide(l)) {
130 for (cell = l->premier; cell != NULL; cell = cell->suivant) {
131 n++;
132 }
133 printkc("Il y a %d paquet(s) dans la file :\n", n);
134 for (cell = l->premier; cell != NULL; cell = cell->suivant) {
135 data = (uint8_t*)cell->br->donnees;
136 printkc("l=%d : 0x%x 0x%x 0x%x 0x%x\n", cell->br->taille,
137 data[0],
138 data[1],
139 data[2],
140 data[3]);
141 }
142 } else {
143 printkc("File reseau pas encore initialisee ...\n");
144 }
145}
146
struct _CelluleBufferReseau CelluleBufferReseau
int listeBufferReseauInserer(ListeBufferReseau *l, BufferReseau *b)
Insertion d'un buffer réseau à la fin d'une liste.
void listeBufferReseauAfficher(ListeBufferReseau *l)
Affichage de la liste de buffers.
BufferReseau * bufferReseauCreer(void *donnees, int taille)
Création (allocation et initialisation des champs de base) d'un buffer réseau.
BufferReseau * listeBufferReseauExtraire(ListeBufferReseau *l)
Extraction d'un buffer réseau d'une liste.
struct _ListeBufferReseau ListeBufferReseau
int listeBufferReseauVide(ListeBufferReseau *l)
Une liste de buffers est-elle vide ?
ListeBufferReseau * listeBufferReseauCreer(void)
Création d'une liste vide de buffers réseau.
Définition des buffers réseau et les fonctions associcées.
Définition de kmalloc.
#define printkc
Une version de printk qui écrit dans la console de la tâche en cours.
Definition printk.h:61
#define NULL
Definition stddef.h:10
void * memcpy(void *dest, const void *src, size_t n)
Definition string.c:12
unsigned char uint8_t
Definition types.h:12
void * kmalloc(size_t n)
Allocation d'une zone de n octets.
Definition kmalloc-zs.c:139
void kfree(void *p)
Libération d'une zone mémoire allouée.
Definition kmalloc-zs.c:265
uint16_t b
uint16_t c
#define assert(cond)
Definition debug.h:126
#define DBG_KERNEL_NET
Definition debug.h:30
#define printk_debug(lvl, fmt, args...)
Definition debug.h:86
struct _CelluleBufferReseau * suivant
BufferReseau * br
CelluleBufferReseau * premier
CelluleBufferReseau * dernier
Défnition d'un buffer réseau.