00001
00002
00003
00004
00005
00006
00007 #ifndef ETH_INT_H
00008 #define ETH_INT_H
00009
00010 #define ETH_TYPE_HASH_NR 16
00011 #define ETH_VLAN_HASH_NR 16
00012
00013
00014 #define ETH_HASH_VLAN(v,t) \
00015 ((t)= (((v) >> 8) ^ (v)), \
00016 (t)= (((t) >> 4) ^ (t)), \
00017 (t) & (ETH_VLAN_HASH_NR-1))
00018
00019 typedef struct eth_port
00020 {
00021 int etp_flags;
00022 ether_addr_t etp_ethaddr;
00023 acc_t *etp_wr_pack, *etp_rd_pack;
00024 struct eth_fd *etp_sendq_head;
00025 struct eth_fd *etp_sendq_tail;
00026 struct eth_fd *etp_type_any;
00027 struct eth_fd *etp_type[ETH_TYPE_HASH_NR];
00028 event_t etp_sendev;
00029
00030
00031 u16_t etp_vlan;
00032 struct eth_port *etp_vlan_port;
00033 struct eth_port *etp_vlan_tab[ETH_VLAN_HASH_NR];
00034 struct eth_port *etp_vlan_next;
00035
00036 osdep_eth_port_t etp_osdep;
00037 } eth_port_t;
00038
00039 #define EPF_EMPTY 0x0
00040 #define EPF_ENABLED 0x1
00041 #define EPF_GOT_ADDR 0x2
00042 #define EPF_READ_IP 0x20
00043 #define EPF_READ_SP 0x40
00044
00045 extern eth_port_t *eth_port_table;
00046
00047 extern int no_ethWritePort;
00048
00049 void osdep_eth_init ARGS(( void ));
00050 int eth_get_stat ARGS(( eth_port_t *eth_port, eth_stat_t *eth_stat ));
00051 void eth_write_port ARGS(( eth_port_t *eth_port, acc_t *pack ));
00052 void eth_arrive ARGS(( eth_port_t *port, acc_t *pack, size_t pack_size ));
00053 void eth_set_rec_conf ARGS(( eth_port_t *eth_port, u32_t flags ));
00054 void eth_restart_write ARGS(( eth_port_t *eth_port ));
00055 void eth_loop_ev ARGS(( event_t *ev, ev_arg_t ev_arg ));
00056 void eth_reg_vlan ARGS(( eth_port_t *eth_port, eth_port_t *vlan_port ));
00057 void eth_restart_ioctl ARGS(( eth_port_t *eth_port ));
00058
00059 #endif
00060
00061
00062
00063