From 9c63790cc5235784c2d6b636d2b9537d026d6971 Mon Sep 17 00:00:00 2001 From: Philippe Houdoin Date: Thu, 25 Sep 2003 14:12:56 +0000 Subject: [PATCH] Check-in recent changes. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4816 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/tests/kits/net/new_stack/BUILD | 6 +- src/tests/kits/net/new_stack/arp/arp.c | 12 +- .../net/new_stack/arp/arp_module_x86.proj | Bin 12008 -> 11968 bytes .../loopback/loopback_module_x86.proj | Bin 12017 -> 11973 bytes src/tests/kits/net/new_stack/net_interface.h | 124 --------- src/tests/kits/net/new_stack/net_layer.h | 43 --- src/tests/kits/net/new_stack/net_protocol.h | 17 -- src/tests/kits/net/new_stack/stack/datalink.c | 254 ------------------ src/tests/kits/net/new_stack/stack/datalink.h | 24 -- .../net/new_stack/stack/stack_module_x86.proj | Bin 13096 -> 13346 bytes 10 files changed, 14 insertions(+), 466 deletions(-) delete mode 100644 src/tests/kits/net/new_stack/net_interface.h delete mode 100644 src/tests/kits/net/new_stack/net_layer.h delete mode 100644 src/tests/kits/net/new_stack/net_protocol.h delete mode 100644 src/tests/kits/net/new_stack/stack/datalink.c delete mode 100644 src/tests/kits/net/new_stack/stack/datalink.h diff --git a/src/tests/kits/net/new_stack/BUILD b/src/tests/kits/net/new_stack/BUILD index 3efd6fc84c..b57208b76e 100644 --- a/src/tests/kits/net/new_stack/BUILD +++ b/src/tests/kits/net/new_stack/BUILD @@ -1,11 +1,11 @@ Jampfiles should replace these BeIDE projects files in the future. But, beware: -- the net_server binary should be symlinked as _APP_ in each sub-drectories, so +- the net_stack_server binary should be symlinked as _APP_ in each sub-drectories, so each module can be linked against it to find the kernel module API exported in this app. -- the net_server will try to load the modules from a local add-ons folder, which should +- the net_stack_server will try to load the modules from a local add-ons folder, which should be setup by hands today: please symlink each module like this: - net_server + net_stack_server add-ons\ generic\ memory_pool -> ../../memory_pool/memory_pool diff --git a/src/tests/kits/net/new_stack/arp/arp.c b/src/tests/kits/net/new_stack/arp/arp.c index eb1c3ce06d..75c423f9fa 100644 --- a/src/tests/kits/net/new_stack/arp/arp.c +++ b/src/tests/kits/net/new_stack/arp/arp.c @@ -42,10 +42,20 @@ status_t enable(net_layer *me, bool enable) status_t input_buffer(net_layer *me, net_buffer *buffer) { +// uint16 *protocol; + if (!buffer) return B_ERROR; - +/* + if (g_stack->find_buffer_attribut(buffer, "ethernet:protocol", &protocol) != B_OK) + return B_ERROR; + + if (protocol != 0x0806) + // Not an ARP packet + return B_ERROR; +*/ // TODO! + return B_OK; } diff --git a/src/tests/kits/net/new_stack/arp/arp_module_x86.proj b/src/tests/kits/net/new_stack/arp/arp_module_x86.proj index 87305745b124eb31782596e206747f1a6a9fe8e8..a5f4927bfb8036c62b751069b922e30b1b6fd70a 100644 GIT binary patch delta 123 zcmaD6dmxs>*VDz7fkAJ_MvfEgEEjgGG)&&W=eSvvIt*Zt(xv+Ahyq+RWaF3 Kw|nwW-S+@l8YhSV delta 130 zcmX>Q`y!UZ*VDz7fkE%VMvfEgEDFbz8zyhybKES-aZe>!TIsJ#KvCK`9R@H+ky845 zIhVJg04Uy)rrOYQTO7;=Nqzy!Su-#+xMk)T0=btN7?`Aiva`!SZo*VDz7fkE%(MvfEgEEPg(4U;$UIc^r^xTg{OtEe>XbB)crw{d pw_HgDB*MVRz~Gmdn+jx!0I@(`YDs)%UP)?ET4HkQ=FPf7i~#dQEG7T| diff --git a/src/tests/kits/net/new_stack/net_interface.h b/src/tests/kits/net/new_stack/net_interface.h deleted file mode 100644 index 60e2c7e3f9..0000000000 --- a/src/tests/kits/net/new_stack/net_interface.h +++ /dev/null @@ -1,124 +0,0 @@ -/* net_interface.h - * definitions of interface networking module API - */ - -#ifndef OBOS_NET_INTERFACE_H -#define OBOS_NET_INTERFACE_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct net_buffer; - -typedef struct if_data { - /* generic interface information */ - // ifmedia_t ifi_media; /* media, see if_media.h */ - uint8 ifi_type; /* ethernet, tokenring, etc */ - uint8 ifi_addrlen; /* media address length */ - uint8 ifi_hdrlen; /* media header length */ - uint32 ifi_mtu; /* maximum transmission unit */ - /* this does not count framing; */ - /* e.g. ethernet would be 1500 */ - uint32 ifi_metric; /* routing metric (external only) */ - /* volatile statistics */ - uint32 ifi_ipackets; /* packets received on interface */ - uint32 ifi_ierrors; /* input errors on interface */ - uint32 ifi_opackets; /* packets sent on interface */ - uint32 ifi_oerrors; /* output errors on interface */ - uint32 ifi_collisions; /* collisions on csma interfaces */ - uint32 ifi_ibytes; /* total number of octets received */ - uint32 ifi_obytes; /* total number of octets sent */ - uint32 ifi_imcasts; /* packets received via multicast */ - uint32 ifi_omcasts; /* packets sent via multicast */ - uint32 ifi_iqdrops; /* dropped on input, this interface */ - uint32 ifi_noproto; /* destined for unsupported protocol */ - bigtime_t ifi_lastchange; /* time of last administrative change */ -} ifdata_t; - -#define if_mtu if_data.ifi_mtu -#define if_type if_data.ifi_type -#define if_media if_data.ifi_media -#define if_addrlen if_data.ifi_addrlen -#define if_hdrlen if_data.ifi_hdrlen -#define if_metric if_data.ifi_metric -#define if_baudrate if_data.ifi_baudrate -#define if_ipackets if_data.ifi_ipackets -#define if_ierrors if_data.ifi_ierrors -#define if_opackets if_data.ifi_opackets -#define if_oerrors if_data.ifi_oerrors -#define if_collisions if_data.ifi_collisions -#define if_ibytes if_data.ifi_ibytes -#define if_obytes if_data.ifi_obytes -#define if_imcasts if_data.ifi_imcasts -#define if_omcasts if_data.ifi_omcasts -#define if_noproto if_data.ifi_noproto -#define if_lastchange if_data.ifi_lastchange - - - -#define IFF_UP 0x1 /* interface is up */ -#define IFF_BROADCAST 0x2 /* broadcast address valid */ -#define IFF_DEBUG 0x4 /* turn on debugging */ -#define IFF_LOOPBACK 0x8 /* is a loopback net */ -#define IFF_POINTOPOINT 0x10 /* interface is point-to-point link */ -#define IFF_PTP IFF_POINTOPOINT -#define IFF_NOARP 0x40 /* don't arp */ -#define IFF_AUTOUP 0x80 /* for autodial ppp - anytime the interface is downed, it will immediately be re-upped by the datalink */ -#define IFF_PROMISC 0x100 /* receive all packets */ -#define IFF_ALLMULTI 0x200 /* receive all multicast packets */ -#define IFF_SIMPLEX 0x800 /* can't hear own transmissions */ -#define IFF_MULTICAST 0x8000 /* supports multicast */ - -/* flags set internally only: */ -#define IFF_CANTCHANGE (IFF_BROADCAST|IFF_LOOPBACK|IFF_POINTOPOINT| \ - IFF_NOARP|IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI) - - - -typedef struct ifnet { - struct ifnet *if_next; - char *if_name; - uint32 if_flags; - struct net_interface_module_info *module; - struct if_data if_data; - volatile thread_id if_reader_thread; -} ifnet_t; - -typedef struct net_interface_hwaddr { - uint32 len; - uint8 hwaddr[256]; -} net_interface_hwaddr; - -struct net_interface_module_info { - module_info info; - - status_t (*init)(void * params); - status_t (*uninit)(ifnet_t *ifnet); - - status_t (*up)(ifnet_t *ifnet); - status_t (*down)(ifnet_t *ifnet); - - status_t (*send_buffer)(ifnet_t *ifnet, struct net_buffer *buffer); - status_t (*receive_buffer)(ifnet_t *ifnet, struct net_buffer **buffer); - - status_t (*control)(ifnet_t *ifnet, int opcode, void *arg); - - status_t (*get_hardware_address)(ifnet_t *ifnet, net_interface_hwaddr *hwaddr); - status_t (*get_multicast_addresses)(ifnet_t *ifnet, net_interface_hwaddr **hwaddr, int nb_addresses); - status_t (*set_multicast_addresses)(ifnet_t *ifnet, net_interface_hwaddr *hwaddr, int nb_addresses); - - status_t (*set_mtu)(ifnet_t *ifnet, uint32 mtu); - status_t (*set_promiscuous)(ifnet_t *ifnet, bool enable); - status_t (*set_media)(ifnet_t *ifnet, uint32 media); -}; - -#define NET_INTERFACE_MODULE_ROOT "network/interfaces/" - -#ifdef __cplusplus -} -#endif - -#endif /* OBOS_NET_INTERFACE_H */ diff --git a/src/tests/kits/net/new_stack/net_layer.h b/src/tests/kits/net/new_stack/net_layer.h deleted file mode 100644 index 6ed0b24da5..0000000000 --- a/src/tests/kits/net/new_stack/net_layer.h +++ /dev/null @@ -1,43 +0,0 @@ -/* net_layer.h - * definitions of networking layer(s) API - */ - -#ifndef OBOS_NET_LAYER_H -#define OBOS_NET_LAYER_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct net_buffer; - -typedef struct net_layer { - struct net_layer *next; - char *name; - int level; - uint32 kind; // Filter, consumer, producer, etc... - int chaining_constraint; - struct net_layer_module_info *module; - struct net_layer **layers_above; - struct net_layer **layers_below; -} net_layer; - -struct net_layer_module_info { - module_info info; - - status_t (*init)(void * params); - status_t (*uninit)(net_layer *me); - status_t (*enable)(net_layer *me, bool enable); - status_t (*input_buffer)(net_layer *me, struct net_buffer *buffer); - status_t (*output_buffer)(net_layer *me, struct net_buffer *buffer); -}; - -#define NET_LAYER_MODULE_ROOT "network/layers/" - -#ifdef __cplusplus -} -#endif - -#endif /* OBOS_NET_LAYER_H */ diff --git a/src/tests/kits/net/new_stack/net_protocol.h b/src/tests/kits/net/new_stack/net_protocol.h deleted file mode 100644 index 8409ae415e..0000000000 --- a/src/tests/kits/net/new_stack/net_protocol.h +++ /dev/null @@ -1,17 +0,0 @@ -/* net_protocol.h - * definitions of protocol networking module API - */ - -#ifndef OBOS_NET_PROTOCOL_H -#define OBOS_NET_PROTOCOL_H - -#include - -struct net_protocol_module_info { - module_info module; - -}; - -#define NET_PROTOCOL_MODULE_ROOT "network/protocols/" - -#endif /* OBOS_NET_PROTOCOL_H */ diff --git a/src/tests/kits/net/new_stack/stack/datalink.c b/src/tests/kits/net/new_stack/stack/datalink.c deleted file mode 100644 index bf8582f864..0000000000 --- a/src/tests/kits/net/new_stack/stack/datalink.c +++ /dev/null @@ -1,254 +0,0 @@ -/* core.c */ - -/* This the heart of network stack - */ - -#include -#include -#include -#include - -#include -#include - -#include "datalink.h" -#include "buffer.h" - -/* Defines we need */ -#define NETWORK_INTERFACES "network/interfaces" -#define NETWORK_PROTOCOLS "network/protocols" - -struct interfaces_list { - ifnet_t *first; - sem_id lock; -}; - -static struct interfaces_list g_interfaces; - -status_t enable_interface(ifnet_t *iface, bool enable); -status_t interface_reader(void *args); - - -// #pragma mark [Start/Stop functions] - - -// -------------------------------------------------- -status_t start_datalink_layer() -{ - void *module_list; - ifnet_t *iface; - - g_interfaces.first = NULL; - - g_interfaces.lock = create_sem(1, "net_interfaces list lock"); - if (g_interfaces.lock < B_OK) - return B_ERROR; - -#ifdef _KERNEL_MODE - set_sem_owner(g_interfaces.lock, B_SYSTEM_TEAM); -#endif - - // Load all network/interfaces/* modules and let them - // register any interface they may support by calling init() - module_list = open_module_list(NET_INTERFACE_MODULE_ROOT); - if (module_list) { - size_t sz; - char module_name[256]; - struct net_interface_module_info *nimi; - - sz = sizeof(module_name); - while(read_next_module_name(module_list, module_name, &sz) == B_OK) { - if (strlen(module_name) && get_module(module_name, (module_info **) &nimi) == B_OK) { - printf("datalink: initing %s interface module...\n", module_name); - // allow this module to register one or more interfaces - nimi->init(NULL); - }; - sz = sizeof(module_name); - }; - close_module_list(module_list); - }; - - // auto-start interface(s) - acquire_sem(g_interfaces.lock); - iface = g_interfaces.first; - while (iface) { - enable_interface(iface, true); - iface = iface->if_next; - }; - release_sem(g_interfaces.lock); - - puts("net datalink layer started."); - return B_OK; -} - -// -------------------------------------------------- -status_t stop_datalink_layer() -{ - ifnet_t *iface, *next; - - delete_sem(g_interfaces.lock); - g_interfaces.lock = -1; - - // free the remaining interfaces entries - iface = g_interfaces.first; - while (iface) { - printf("datalink: uninit interface %s\n", iface->if_name); - // down the interface if currently up - enable_interface(iface, false); - - iface->module->uninit(iface); - iface = iface->if_next; - }; - - // unload all interface modules... and free iface structs - iface = g_interfaces.first; - while (iface) { - printf("datalink: unloading %s interface module\n", iface->module->info.name); - next = iface->if_next; - put_module(iface->module->info.name); - free(iface); - iface = next; - }; - - puts("net datalink layer stopped."); - - return B_OK; -} - - - -// #pragma mark [Public functions] - -// -------------------------------------------------- -status_t register_interface(ifnet_t *iface) -{ - status_t status; - - if (!iface) - return B_ERROR; - - iface->if_reader_thread = -1; - - status = acquire_sem(g_interfaces.lock); - if (status != B_OK) - return status; - - iface->if_next = g_interfaces.first; - g_interfaces.first = iface; - - release_sem(g_interfaces.lock); - - printf("datalink: register_interface(%s)\n", iface->if_name); - return B_OK; -} - -// -------------------------------------------------- -status_t unregister_interface(ifnet_t *iface) -{ - status_t status; - - if (!iface) - return B_ERROR; - - status = acquire_sem(g_interfaces.lock); - if (status != B_OK) - return status; - - if (g_interfaces.first == iface) - g_interfaces.first = iface->if_next; - else { - ifnet_t * p = g_interfaces.first; - while (p && p->if_next != iface) - p = p->if_next; - - if (!p) - printf("datalink: unregister_interface(): %p iface not found in list!\n", iface); - else - p->if_next = iface->if_next; - }; - - release_sem(g_interfaces.lock); - - printf("datalink: unregister_interface(%s)\n", iface->if_name); - - enable_interface(iface, false); - iface->module->uninit(iface); - put_module(iface->module->info.name); - free(iface); - return B_OK; -} - - -// ---------------------------------------------------- -status_t enable_interface(ifnet_t *iface, bool enable) -{ - if (enable) { - // enable this interface - thread_id tid; - char name[B_OS_NAME_LENGTH * 2]; - - if (iface->if_flags & IFF_UP) - // already up - return B_OK; - - iface->module->up(iface); - - strncpy(name, iface->if_name, sizeof(name)); - strncat(name, " reader", sizeof(name)); - tid = spawn_kernel_thread(interface_reader, name, B_NORMAL_PRIORITY, iface); - if (tid < 0) { - printf("datalink: enable_interface(%s): failed to start reader thread -> %d [%s]\n", - iface->if_name, (int) tid, strerror(tid)); - return tid; - }; - - iface->if_reader_thread = tid; - iface->if_flags |= IFF_UP; - printf("datalink: %s interface reader started.\n", iface->if_name); - return resume_thread(tid); - - } else { - - // disable this interface - if ((iface->if_flags & IFF_UP) == 0) - // already down - return B_OK; - - if (iface->if_reader_thread) { - status_t status; - - send_signal_etc(iface->if_reader_thread, SIGTERM, 0); - wait_for_thread(iface->if_reader_thread, &status); - iface->if_reader_thread = -1; - printf("datalink: %s interface reader stopped.\n", iface->if_name); - }; - - iface->if_flags &= ~IFF_UP; - return iface->module->down(iface); - }; -} - - -// ---------------------------------------------------- -status_t interface_reader(void *args) -{ - ifnet_t *iface = args; - net_buffer *buffer; - status_t status; - - if (!iface || iface->module == NULL) - return B_ERROR; - - while(iface->if_flags & IFF_UP) { - buffer = NULL; - status = iface->module->receive_buffer(iface, &buffer); - if (status < B_OK || buffer == NULL) - continue; - - dump_buffer(buffer); - delete_buffer(buffer, false); - }; - - return B_OK; -} - diff --git a/src/tests/kits/net/new_stack/stack/datalink.h b/src/tests/kits/net/new_stack/stack/datalink.h deleted file mode 100644 index fc8134f756..0000000000 --- a/src/tests/kits/net/new_stack/stack/datalink.h +++ /dev/null @@ -1,24 +0,0 @@ -/* datalink.h - * private definitions for network datalink layer - */ - -#ifndef OBOS_NET_STACK_DATALINK_H -#define OBOS_NET_STACK_DATALINK_H - -#include "net_interface.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern status_t start_datalink_layer(); -extern status_t stop_datalink_layer(); - -extern status_t register_interface(ifnet_t *ifnet); -extern status_t unregister_interface(ifnet_t *ifnet); - -#ifdef __cplusplus -} -#endif - -#endif /* OBOS_NET_STACK_DATALINK_H */ diff --git a/src/tests/kits/net/new_stack/stack/stack_module_x86.proj b/src/tests/kits/net/new_stack/stack/stack_module_x86.proj index c34e47d5b52d4c527821880b602fc78182c186e8..2e218fa059718c480e49ac252958f498ed3352c9 100644 GIT binary patch delta 599 zcmZ3HwkU(c*VDz7fx$#-BgaX0W*Mc1$s70_H;Zx{QK@HPfC9$glEma}2&d(?c*7ZK zrN1r#MQP`BAYv&}N`Eis@-`Fz#g|knG=S8A*dW<2Ksjp$h6cCH976^MMr9!W4HUir z#H=9s1|YUC_~_!BnVSk^iUYB5Noqxje#K-vL(R#Jx=SYe>ggzWrn}_;rQ-iX0gw#_ z4M6iijLABNYLiX$6cwQMa4;}%`~-^g05RAf4L}CS9#r7uj(!cpc|&z&5$c xKmzJ*hP6NgZvhRI0AeOIlTl2K#$&3^J!s_mcN zAtY^&jYKDV8VCfF?MQ~-3=Bf*Kubh`m<7qUFJMPrGU!Fv26Z6ARR#v;TR^1}K+KHL c!paWym*`|QqacK~$&Zax^+