Split packet queues

This commit is contained in:
Mark
2020-03-20 22:12:51 +02:00
parent 7002562146
commit 8954fa8fef
7 changed files with 144 additions and 28 deletions
+13 -1
View File
@@ -6,11 +6,23 @@ struct netdev;
#define PACKET_DATA_MAX (4056)
struct packet {
size_t size;
struct packet *prev, *next;
struct netdev *dev;
size_t refcount;
char data[PACKET_DATA_MAX];
};
struct packet_qh {
struct packet *packet;
struct packet_qh *prev, *next;
};
struct packet_queue {
struct packet_qh *head, *tail;
};
void packet_ref(struct packet *p);
void packet_unref(struct packet *p);
void packet_queue_init(struct packet_queue *q);
void packet_queue_push(struct packet_queue *q, struct packet *p);
struct packet *packet_queue_pop(struct packet_queue *q);
+16
View File
@@ -0,0 +1,16 @@
#pragma once
#include "sys/types.h"
struct vfs_ioctx;
struct ofile;
struct sockaddr;
struct packet;
int raw_socket_open(struct vfs_ioctx *ioctx, struct ofile *fd, int dom, int type, int proto);
ssize_t raw_socket_send(struct vfs_ioctx *ioctx, struct ofile *fd, const void *buf, size_t lim, struct sockaddr *sa, size_t salen);
ssize_t raw_socket_recv(struct vfs_ioctx *ioctx, struct ofile *fd, void *buf, size_t lim, struct sockaddr *sa, size_t *salen);
int raw_socket_bind(struct vfs_ioctx *ioctx, struct ofile *fd, struct sockaddr *sa, size_t len);
int raw_setsockopt(struct vfs_ioctx *ioctx, struct ofile *fd, int optname, void *optval, size_t optlen);
void raw_socket_close(struct vfs_ioctx *ioctx, struct ofile *fd);
void raw_packet_handle(struct packet *p);