138 lines
7.2 KiB
C
138 lines
7.2 KiB
C
/************************************************************************/
|
|
/* Copyright (C) 1999 RouterWare, Inc. */
|
|
/* Unpublished - rights reserved under the Copyright Laws of the */
|
|
/* United States. Use, duplication, or disclosure by the */
|
|
/* Government is subject to restrictions as set forth in */
|
|
/* subparagraph (c)(1)(ii) of the Rights in Technical Data and */
|
|
/* Computer Software clause at 252.227-7013. */
|
|
/* RouterWare, Inc., 3961 MacArthur Blvd. Suite 212, Newport Beach, CA */
|
|
/************************************************************************/
|
|
#if !defined (__RW_DRIVER_MANAGER_IF_H__)
|
|
#define __RW_DRIVER_MANAGER_IF_H__
|
|
/****************************************************************************************************************************/
|
|
|
|
typedef UINT RW_PORT_HANDLE;
|
|
typedef void* RW_PORT_BINDING_HANDLE;
|
|
typedef void* RW_DRIVER_RECEIVE_INDICATE_HANDLE;
|
|
|
|
#define RW_INVALID_PORT_BINDING_HANDLE NULL
|
|
|
|
/****************************************************************************************************************************/
|
|
typedef enum RW_DEVICE_DRIVER_TYPE
|
|
{
|
|
RW_ETHERNET_DRIVER = 1,
|
|
RW_PPP_DRIVER = 2
|
|
} RW_DEVICE_DRIVER_TYPE;
|
|
/****************************************************************************************************************************/
|
|
typedef struct RW_DEVICE_DRIVER_IF
|
|
{
|
|
RW_DEVICE_DRIVER_TYPE rw_device_driver_type;
|
|
|
|
UINT (*fp_device_driver_get_mtu)(struct RW_DEVICE_DRIVER_IF* p_rw_device_driver_if,
|
|
RW_PORT_HANDLE port_handle);
|
|
UINT (*fp_device_driver_get_speed)(struct RW_DEVICE_DRIVER_IF* p_rw_device_driver_if,
|
|
RW_PORT_HANDLE port_handle);
|
|
/* This function has a *pointer* to the port handle as one of its parameters */
|
|
struct RW_DEVICE_MESSAGE* (*fp_device_driver_receive)(struct RW_DEVICE_DRIVER_IF* p_rw_device_driver_if,
|
|
RW_PORT_BINDING_HANDLE* p_rw_port_binding_handle);
|
|
bool (*fp_device_driver_send)(struct RW_DEVICE_DRIVER_IF* p_rw_device_driver_if,
|
|
RW_PORT_HANDLE port_handle,
|
|
struct RW_DEVICE_MESSAGE* p_rw_device_message);
|
|
} RW_DEVICE_DRIVER_IF;
|
|
/****************************************************************************************************************************/
|
|
typedef struct RW_DRIVER_MANAGER_IF
|
|
{
|
|
RW_DRIVER_RECEIVE_INDICATE_HANDLE (*fp_rw_driver_manager_if_register_device_driver)
|
|
(struct RW_DRIVER_MANAGER_IF* p_rw_driver_manager_if,
|
|
struct RW_DEVICE_DRIVER_IF* p_rw_device_driver_if,
|
|
const char* p_device_driver_name);
|
|
bool (*fp_rw_driver_manager_if_deregister_device_driver)
|
|
(struct RW_DRIVER_MANAGER_IF* p_rw_driver_manager_if,
|
|
struct RW_DEVICE_DRIVER_IF* p_rw_device_driver_if);
|
|
|
|
bool (*fp_rw_driver_manager_if_device_driver_receive_indicate)
|
|
(struct RW_DRIVER_MANAGER_IF* p_rw_driver_manager_if,
|
|
RW_DRIVER_RECEIVE_INDICATE_HANDLE rw_driver_receive_indicate_handle);
|
|
|
|
RW_PORT_BINDING_HANDLE (*fp_rw_driver_manager_if_device_driver_port_up)
|
|
(struct RW_DRIVER_MANAGER_IF* p_rw_driver_manager_if,
|
|
struct RW_DEVICE_DRIVER_IF* p_rw_device_driver_if,
|
|
RW_PORT_HANDLE port_handle);
|
|
bool (*fp_rw_driver_manager_if_device_driver_port_down)
|
|
(struct RW_DRIVER_MANAGER_IF* p_rw_driver_manager_if,
|
|
struct RW_DEVICE_DRIVER_IF* p_rw_device_driver_if,
|
|
RW_PORT_HANDLE port_handle);
|
|
} RW_DRIVER_MANAGER_IF;
|
|
/****************************************************************************************************************************/
|
|
typedef struct RW_ETHERNET_DRIVER_IF
|
|
{
|
|
RW_DEVICE_DRIVER_IF parent;
|
|
|
|
bool (*fp_get_mac_address) (struct RW_DEVICE_DRIVER_IF* p_rw_device_driver_if, RW_PORT_HANDLE port_handle,
|
|
BYTE* p_buffer, UINT buffer_size);
|
|
} RW_ETHERNET_DRIVER_IF;
|
|
/****************************************************************************************************************************/
|
|
typedef struct RW_PPP_DRIVER_IF
|
|
{
|
|
RW_DEVICE_DRIVER_IF parent;
|
|
|
|
bool (*fp_get_local_address) (struct RW_PPP_DRIVER_IF* p_rw_ppp_driver_if, RW_PORT_HANDLE port_handle, IP_ADDRESS*);
|
|
} RW_PPP_DRIVER_IF;
|
|
/****************************************************************************************************************************/
|
|
typedef enum RW_DEVICE_MESSAGE_TYPE
|
|
{
|
|
ETHERNET_MESSAGE_TYPE = 1,
|
|
PPP_MESSAGE_TYPE = 2
|
|
} RW_DEVICE_MESSAGE_TYPE;
|
|
/****************************************************************************************************************************/
|
|
typedef enum RW_ENCAPSULATION_TYPE
|
|
{
|
|
TYPE2 = 1,
|
|
SNAP = 2
|
|
} RW_ENCAPSULATION_TYPE;
|
|
/****************************************************************************************************************************/
|
|
typedef struct RW_DEVICE_MESSAGE
|
|
{
|
|
RW_DEVICE_MESSAGE_TYPE type;
|
|
RW_PACKET_HANDLE payload;
|
|
} RW_DEVICE_MESSAGE;
|
|
/****************************************************************************************************************************/
|
|
void rw_device_message_construct (RW_DEVICE_MESSAGE* p_rw_device_message);
|
|
void rw_device_message_destruct (RW_DEVICE_MESSAGE* p_rw_device_message);
|
|
/****************************************************************************************************************************/
|
|
typedef struct RW_ETHERNET_MESSAGE
|
|
{
|
|
RW_DEVICE_MESSAGE parent;
|
|
ETHERNET_PROTOCOL_TYPE protocol_id;
|
|
UINT port_number;
|
|
BYTE source_mac_address[ETHERNET_MAC_ADDRESS_LENGTH];
|
|
BYTE destination_mac_address[ETHERNET_MAC_ADDRESS_LENGTH];
|
|
RW_ENCAPSULATION_TYPE encapsulation_type;
|
|
} RW_ETHERNET_MESSAGE;
|
|
/****************************************************************************************************************************/
|
|
void rw_ethernet_message_construct (RW_ETHERNET_MESSAGE* p_rw_ethernet_message);
|
|
void rw_ethernet_message_destruct (RW_ETHERNET_MESSAGE* p_rw_ethernet_message);
|
|
|
|
RW_ETHERNET_MESSAGE* rw_ethernet_message_create (void);
|
|
bool rw_ethernet_message_destroy (RW_ETHERNET_MESSAGE* p_rw_ethernet_message);
|
|
|
|
bool rw_ethernet_message_serialize (RW_ETHERNET_MESSAGE* p_rw_ethernet_message, RW_PACKET_HANDLE* payload);
|
|
bool rw_ethernet_message_deserialize (RW_ETHERNET_MESSAGE* p_rw_ethernet_message, RW_PACKET_HANDLE payload);
|
|
/* ************************************************************************************************************************ */
|
|
typedef struct RW_PPP_MESSAGE
|
|
{
|
|
RW_DEVICE_MESSAGE parent;
|
|
/* And some more message header fields */
|
|
} RW_PPP_MESSAGE;
|
|
/****************************************************************************************************************************/
|
|
void rw_ppp_message_construct (RW_PPP_MESSAGE* p_rw_ppp_message);
|
|
void rw_ppp_message_destruct (RW_PPP_MESSAGE* p_rw_ppp_message);
|
|
|
|
RW_PPP_MESSAGE* rw_ppp_message_create (void);
|
|
bool rw_ppp_message_destroy (RW_PPP_MESSAGE* p_rw_ppp_message);
|
|
|
|
bool rw_ppp_message_serialize (RW_PPP_MESSAGE* p_rw_ppp_message, RW_PACKET_HANDLE* payload);
|
|
bool rw_ppp_message_deserialize (RW_PPP_MESSAGE* p_rw_ppp_message, RW_PACKET_HANDLE payload);
|
|
/* ************************************************************************************************************************ */
|
|
#endif /* __RW_DRIVER_MANAGER_IF_H__ */
|