Commit often, they says ;-)

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5889 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Houdoin
2004-01-03 18:38:04 +00:00
parent c29a3f4826
commit 7b3d386b18
3 changed files with 60 additions and 38 deletions
+2 -2
View File
@@ -18,7 +18,7 @@ typedef struct memory_pool memory_pool;
// for_each_pool_node() callback prototype:
typedef status_t (*pool_iterate_func)(memory_pool * pool, void * node, void * cookie);
struct memory_pool_module_info {
typedef struct {
module_info module;
memory_pool * (*new_pool)(size_t node_size, uint32 node_count);
@@ -26,7 +26,7 @@ struct memory_pool_module_info {
void * (*new_pool_node)(memory_pool * pool);
status_t (*delete_pool_node)(memory_pool * pool, void * node);
status_t (*for_each_pool_node)(memory_pool * pool, pool_iterate_func iterate, void * cookie);
};
} memory_pool_module_info;
#define MEMORY_POOL_MODULE_NAME "generic/memory_pool/v1"
+57 -33
View File
@@ -31,47 +31,64 @@ typedef int benaphore;
// Networking layer(s) definitions
typedef struct net_layer net_layer;
typedef struct net_layer_module_info net_layer_module_info;
#define NET_LAYER_MODULES_ROOT "network/layers/"
typedef struct net_layer_module_info {
struct net_layer_module_info {
module_info info;
status_t (*init)(net_layer *me);
status_t (*uninit)(net_layer *me);
status_t (*enable)(net_layer *me, bool enable);
status_t (*control)(net_layer *me, int opcode, ...);
status_t (*input_buffer)(net_layer *me, struct net_buffer *buffer);
status_t (*output_buffer)(net_layer *me, struct net_buffer *buffer);
} net_layer_module_info;
status_t (*process_input)(net_layer *me, struct net_buffer *buffer);
status_t (*process_output)(net_layer *me, struct net_buffer *buffer);
};
struct net_layer {
struct net_layer *next;
char *name;
net_layer_module_info *module;
void *cookie;
struct net_layer **layers_above;
struct net_layer **layers_below;
struct net_layer *next;
char *name;
char *type; // "frame", "ethernet" "ipv4", "ppp", etc. Joker (*) allowed
char *sub_type; // joker (*) allowed here too.
int priority; // negative values reserved for packet sniffing, high value = lesser priority
net_layer_module_info *module;
void *cookie;
uint32 use_count;
struct net_layer **layers_above;
struct net_layer **layers_below;
};
// Networking attributs
// Networking attributes
typedef const void *net_attribute_id;
#define NET_ATTRIBUTE_TYPE_MASK 0xFF // Up to 256 basic types
#define NET_ATTRIBUTE_FLAGS_MASK 0xFFFFFF00
enum {
NET_ATTRIBUT_BOOL,
NET_ATTRIBUT_BYTE,
NET_ATTRIBUT_INT16,
NET_ATTRIBUT_INT32,
NET_ATTRIBUT_INT64,
NET_ATTRIBUT_DATA,
NET_ATTRIBUT_STRING,
NET_ATTRIBUT_POINTER
NET_ATTRIBUTE_BOOL,
NET_ATTRIBUTE_BYTE,
NET_ATTRIBUTE_INT16,
NET_ATTRIBUTE_INT32,
NET_ATTRIBUTE_INT64,
NET_ATTRIBUTE_DATA,
NET_ATTRIBUTE_STRING,
NET_ATTRIBUTE_POINTER,
NET_ATTRIBUTE_IOVEC
};
// Network stack main module definition
struct net_stack_module_info {
module_info module;
// Global stack control
status_t (*start)(void);
status_t (*stop)(void);
// Attributes IDs atomizer
net_attribute_id (*register_attribute_id)(const char *name);
/*
* Socket layer
@@ -81,17 +98,18 @@ struct net_stack_module_info {
* Net layers handling
*/
status_t (*register_layer)(const char *name, net_layer_module_info *module, void *cookie, net_layer **me);
status_t (*register_layer)(const char *name, const char *type, int priority,
net_layer_module_info *module, void *cookie, net_layer **layer);
status_t (*unregister_layer)(net_layer *layer);
net_layer * (*find_layer)(const char *name);
status_t (*add_layer_attribut)(net_layer *layer, const char *name, int type, ...);
status_t (*remove_layer_attribut)(net_layer *layer, const char *name);
status_t (*find_layer_attribut)(net_layer *layer, const char *name,
int *type, void **attribut, size_t *size);
status_t (*add_layer_attribute)(net_layer *layer, net_attribute_id id, int type, ...);
status_t (*remove_layer_attribute)(net_layer *layer, net_attribute_id id);
status_t (*find_layer_attribute)(net_layer *layer, net_attribute_id id,
int *type, void **value, size_t *size);
status_t (*push_buffer_up)(net_layer *me, net_buffer *buffer);
status_t (*push_buffer_down)(net_layer *me, net_buffer *buffer);
status_t (*send_up)(net_layer *me, net_buffer *buffer);
status_t (*send_down)(net_layer *me, net_buffer *buffer);
/*
* Buffer(s) support
@@ -116,15 +134,18 @@ struct net_stack_module_info {
uint32 (*read_buffer)(net_buffer *buffer, uint32 offset, void *data, uint32 bytes);
uint32 (*write_buffer)(net_buffer *buffer, uint32 offset, const void *data, uint32 bytes);
status_t (*add_buffer_attribut)(net_buffer *buffer, const char *name, int type, ...);
status_t (*remove_buffer_attribut)(net_buffer *buffer, const char *name);
status_t (*find_buffer_attribut)(net_buffer *buffer, const char *name,
int *type, void **attribut, size_t *size);
// Flags to combine with
#define FROM_BUFFER 0x010000
#define NETWORK_ORDER 0x020000
status_t (*add_buffer_attribute)(net_buffer *buffer, net_attribute_id id, int type, ...);
status_t (*remove_buffer_attribute)(net_buffer *buffer, net_attribute_id id);
status_t (*find_buffer_attribute)(net_buffer *buffer, net_attribute_id id,
int *type, void **value, size_t *size);
void (*dump_buffer)(net_buffer *buffer);
// Buffer queues support
// Buffers queues support
net_buffer_queue * (*new_buffer_queue)(size_t max_bytes);
status_t (*delete_buffer_queue)(net_buffer_queue *queue);
@@ -142,13 +163,16 @@ struct net_stack_module_info {
// Lockers
// Misc.
void (*dump_memory)(const char *prefix, const void *data, uint32 len);
// Memory Pools support
memory_pool * (*new_pool)(size_t node_size, uint32 node_count);
status_t (*delete_pool)(memory_pool *pool);
void * (*new_pool_node)(memory_pool *pool);
status_t (*delete_pool_node)(memory_pool *pool, void *node);
status_t (*for_each_pool_node)(memory_pool *pool, pool_iterate_func iterate, void *cookie);
};
#define NET_STACK_MODULE_NAME "network/stack/v1"
@@ -13,8 +13,6 @@
struct net_stack_module_info * g_stack = NULL;
void my_free(void * ptr, ...)
{
printf("my_free(%p)\n", ptr);
@@ -103,7 +101,7 @@ int main(int argc, char **argv)
fflush(stdin);
fgetc(stdin);;
test_buffer();
// test_buffer();
g_stack->stop();
};