From 7b3d386b188954a743115eefc43faedabfdbc5c3 Mon Sep 17 00:00:00 2001 From: Philippe Houdoin Date: Sat, 3 Jan 2004 18:38:04 +0000 Subject: [PATCH] Commit often, they says ;-) git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5889 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/tests/kits/net/new_stack/memory_pool.h | 4 +- src/tests/kits/net/new_stack/net_stack.h | 90 ++++++++++++------- .../kits/net/new_stack/net_stack_server.cpp | 4 +- 3 files changed, 60 insertions(+), 38 deletions(-) diff --git a/src/tests/kits/net/new_stack/memory_pool.h b/src/tests/kits/net/new_stack/memory_pool.h index 6de7e3404e..57c9eff937 100644 --- a/src/tests/kits/net/new_stack/memory_pool.h +++ b/src/tests/kits/net/new_stack/memory_pool.h @@ -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" diff --git a/src/tests/kits/net/new_stack/net_stack.h b/src/tests/kits/net/new_stack/net_stack.h index 0aaa2686b4..b8823eb82f 100644 --- a/src/tests/kits/net/new_stack/net_stack.h +++ b/src/tests/kits/net/new_stack/net_stack.h @@ -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" diff --git a/src/tests/kits/net/new_stack/net_stack_server.cpp b/src/tests/kits/net/new_stack/net_stack_server.cpp index e847c4352d..008423a9b1 100644 --- a/src/tests/kits/net/new_stack/net_stack_server.cpp +++ b/src/tests/kits/net/new_stack/net_stack_server.cpp @@ -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(); };