7 #include "../lib/libvector/include/vector.h"
10 #include "sys/scheduler.h"
11 #include "net/ethernet.h"
13 volatile vector_t* system_network_incoming_queue = 0;
15 void netstack_processor();
17 void netstack_init() {
18 system_network_incoming_queue = vector_new();
23 void netstack_push(
netcard_entry_t* card,
void* packet_data,
size_t length) {
25 void* data = kcalloc(1, length);
27 memcpy(data, packet_data, length);
31 item->length = length;
33 vector_push_back(system_network_incoming_queue, (
size_t) item);
37 netqueue_item_t* data = (
void *) vector_pop_back(system_network_incoming_queue).element;
43 while(system_network_incoming_queue->size == 0);
45 return netstack_pop();
49 void netstack_processor() {
50 qemu_note(
"NETWORK QUEUE IS WORKING NOW!");
53 qemu_note(
"WAITING FOR PACKET");
56 qemu_note(
"SENDING PACKET");
57 item->card->send_packet(item->data, item->length);
60 qemu_ok(
"PACKET SENT!");
void * memcpy(void *restrict destination, const void *restrict source, size_t n)
Копирование непересекающихся массивов используя SSE.
volatile process_t * get_current_proc(void)
Получить текущий обработчик процесса