1*c22d69bfSAxel Dörfler /* 2*c22d69bfSAxel Dörfler * Copyright 2006, Haiku, Inc. All Rights Reserved. 3*c22d69bfSAxel Dörfler * Distributed under the terms of the MIT License. 4*c22d69bfSAxel Dörfler */ 5*c22d69bfSAxel Dörfler #ifndef NET_PROTOCOL_H 6*c22d69bfSAxel Dörfler #define NET_PROTOCOL_H 7*c22d69bfSAxel Dörfler 8*c22d69bfSAxel Dörfler 9*c22d69bfSAxel Dörfler #include <net_buffer.h> 10*c22d69bfSAxel Dörfler #include <net_socket.h> 11*c22d69bfSAxel Dörfler 12*c22d69bfSAxel Dörfler 13*c22d69bfSAxel Dörfler // level flags to pass to control() 14*c22d69bfSAxel Dörfler #define LEVEL_SET_OPTION 0x10000000 15*c22d69bfSAxel Dörfler #define LEVEL_GET_OPTION 0x20000000 16*c22d69bfSAxel Dörfler #define LEVEL_DRIVER_IOCTL 0x0f000000 17*c22d69bfSAxel Dörfler #define LEVEL_MASK 0x0fffffff 18*c22d69bfSAxel Dörfler 19*c22d69bfSAxel Dörfler typedef struct net_protocol { 20*c22d69bfSAxel Dörfler struct net_protocol *next; 21*c22d69bfSAxel Dörfler struct net_protocol_module_info *module; 22*c22d69bfSAxel Dörfler net_socket *socket; 23*c22d69bfSAxel Dörfler } net_protocol; 24*c22d69bfSAxel Dörfler 25*c22d69bfSAxel Dörfler struct net_protocol_module_info { 26*c22d69bfSAxel Dörfler module_info info; 27*c22d69bfSAxel Dörfler 28*c22d69bfSAxel Dörfler net_protocol *(*init_protocol)(net_socket *socket); 29*c22d69bfSAxel Dörfler status_t (*uninit_protocol)(net_protocol *self); 30*c22d69bfSAxel Dörfler 31*c22d69bfSAxel Dörfler status_t (*open)(net_protocol *self); 32*c22d69bfSAxel Dörfler status_t (*close)(net_protocol *self); 33*c22d69bfSAxel Dörfler status_t (*free)(net_protocol *self); 34*c22d69bfSAxel Dörfler 35*c22d69bfSAxel Dörfler status_t (*connect)(net_protocol *self, const struct sockaddr *address); 36*c22d69bfSAxel Dörfler status_t (*accept)(net_protocol *self, struct net_socket **_acceptedSocket); 37*c22d69bfSAxel Dörfler status_t (*control)(net_protocol *self, int level, int option, void *value, 38*c22d69bfSAxel Dörfler size_t *_length); 39*c22d69bfSAxel Dörfler 40*c22d69bfSAxel Dörfler status_t (*bind)(net_protocol *self, struct sockaddr *address); 41*c22d69bfSAxel Dörfler status_t (*unbind)(net_protocol *self, struct sockaddr *address); 42*c22d69bfSAxel Dörfler status_t (*listen)(net_protocol *self, int count); 43*c22d69bfSAxel Dörfler status_t (*shutdown)(net_protocol *self, int direction); 44*c22d69bfSAxel Dörfler 45*c22d69bfSAxel Dörfler status_t (*send_data)(net_protocol *self, net_buffer *buffer); 46*c22d69bfSAxel Dörfler status_t (*send_routed_data)(net_protocol *self, 47*c22d69bfSAxel Dörfler struct net_route *route, net_buffer *buffer); 48*c22d69bfSAxel Dörfler ssize_t (*send_avail)(net_protocol *self); 49*c22d69bfSAxel Dörfler 50*c22d69bfSAxel Dörfler status_t (*read_data)(net_protocol *self, size_t numBytes, uint32 flags, 51*c22d69bfSAxel Dörfler net_buffer **_buffer); 52*c22d69bfSAxel Dörfler ssize_t (*read_avail)(net_protocol *self); 53*c22d69bfSAxel Dörfler 54*c22d69bfSAxel Dörfler struct net_domain *(*get_domain)(net_protocol *self); 55*c22d69bfSAxel Dörfler size_t (*get_mtu)(net_protocol *self, const struct sockaddr *address); 56*c22d69bfSAxel Dörfler 57*c22d69bfSAxel Dörfler status_t (*receive_data)(net_buffer *data); 58*c22d69bfSAxel Dörfler status_t (*error)(uint32 code, net_buffer *data); 59*c22d69bfSAxel Dörfler 60*c22d69bfSAxel Dörfler status_t (*error_reply)(net_protocol *self, net_buffer *causedError, 61*c22d69bfSAxel Dörfler uint32 code, void *errorData); 62*c22d69bfSAxel Dörfler }; 63*c22d69bfSAxel Dörfler 64*c22d69bfSAxel Dörfler #endif // NET_PROTOCOL_H 65