Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 3845 → Rev 3846

/branches/network/uspace/srv/net/netif/netif.h
37,79 → 37,34
#ifndef __NET_NETIF_H__
#define __NET_NETIF_H__
 
#include "netif_device_id_type.h"
#include "device.h"
 
#define ll_message( device, message, arg2, arg3, result1, result2, result3 ) \
if(( device )->ll_registered >= 0 ) async_msg_3(( device )->ll_registered, ( message ), ( device )->device_id, arg2, arg3 )
#define nil_message( device, message, arg2, arg3, result1, result2, result3 ) \
if(( device )->nil_phone >= 0 ) async_msg_3(( device )->nil_phone, ( message ), ( device )->device_id, arg2, arg3 )
 
typedef enum netif_state netif_state_t;
typedef struct device device_t;
typedef device_t * device_ref;
typedef struct netif_globals netif_globals_t;
 
typedef struct netif_device_stats netif_device_stats_t;
typedef netif_device_stats_t * netif_device_stats_ref;
typedef struct netif_device netif_device_t;
typedef netif_device_t * netif_device_ref;
typedef struct netif_globals netif_globals_t;
DEVICE_MAP_DECLARE( device_map, device_t );
 
DEVICE_MAP_DECLARE( netif_device_map, netif_device_t );
 
enum netif_state{
NETIF_NULL = 0,
NETIF_STOPPED,
NETIF_ACTIVE,
NETIF_CARRIER_LOST
struct device{
device_id_t device_id;
int nil_phone;
device_stats_t stats;
device_state_t state;
int flags;
size_t mtu;
void * specific;
};
 
// based on linux_kernel/include/linux/netdevice.h
 
struct netif_device_stats{
unsigned long rx_packets; /* total packets received */
unsigned long tx_packets; /* total packets transmitted */
unsigned long rx_bytes; /* total bytes received */
unsigned long tx_bytes; /* total bytes transmitted */
unsigned long rx_errors; /* bad packets received */
unsigned long tx_errors; /* packet transmit problems */
unsigned long rx_dropped; /* no space in linux buffers */
unsigned long tx_dropped; /* no space available in linux */
unsigned long multicast; /* multicast packets received */
unsigned long collisions;
 
/* detailed rx_errors: */
unsigned long rx_length_errors;
unsigned long rx_over_errors; /* receiver ring buff overflow */
unsigned long rx_crc_errors; /* recved pkt with crc error */
unsigned long rx_frame_errors; /* recv'd frame alignment error */
unsigned long rx_fifo_errors; /* recv'r fifo overrun */
unsigned long rx_missed_errors; /* receiver missed packet */
 
/* detailed tx_errors */
unsigned long tx_aborted_errors;
unsigned long tx_carrier_errors;
unsigned long tx_fifo_errors;
unsigned long tx_heartbeat_errors;
unsigned long tx_window_errors;
 
/* for cslip etc */
unsigned long rx_compressed;
unsigned long tx_compressed;
};
 
struct netif_device{
netif_device_id_t device_id;
int ll_registered;
netif_device_stats_t stats;
netif_state_t state;
int flags;
size_t mtu;
void * specific;
};
 
struct netif_globals{
int networking_phone;
netif_device_map_t netif_device_map;
int networking_phone;
device_map_t device_map;
};
 
int netif_device_find( netif_device_id_t device_id, netif_device_ref * device );
void netif_device_stats_null( netif_device_stats_ref stats );
int find_device( device_id_t device_id, device_ref * device );
void null_device_stats( device_stats_ref stats );
 
#endif