25#ifndef _NETSIM_ETHERNET_H_
26#define _NETSIM_ETHERNET_H_
31#pragma comment(lib,"NetworkStack.lib")
32#pragma comment(lib,"Metrics.lib")
34#define isETHConfigured(d,i) (DEVICE_MACLAYER(d,i)->nMacProtocolId == MAC_PROTOCOL_IEEE802_3)
75#define ETH_HDR_CBPDU 1
82 void* (*fncopy)(
void*);
104#define ETH_BPDU_LEN 60
113#define IEEE801_1Q_TAG_LEN 4
114#define VLAN_TPID 0x8100
124#define SWITCHTABLE_ALLOC() (ptrSWITCHTABLE)list_alloc(sizeof(SWITCHTABLE),offsetof(SWITCHTABLE,ele))
125#define SWITCHTABLE_ADD(l,m) LIST_ADD_LAST((void**)(l),m)
126#define SWITCHTABLE_NEXT(t) t=(ptrSWITCHTABLE)LIST_NEXT(t)
127#define SWITCHTABLE_GET(d,in) (GET_ETH_LAN(d,in,0)->switchTable)
128#define SWITCHTABLE_GET_LAN(lan) (lan->switchTable)
224#define ETH_PHY_GET(d,i) ((ptrETH_PHY)DEVICE_PHYLAYER(d,i)->phyVar)
struct stru_eth_packet * ptrETH_HDR
struct stru_ethernet_lan * ptrETH_LAN
void store_eth_param_macin(NetSim_PACKET *packet, NETSIM_ID devId, NETSIM_ID in, ptrETH_LAN lan)
void check_move_frame_up(NETSIM_ID d, NETSIM_ID in, ptrETH_LAN lan, NetSim_PACKET *packet, double time)
struct stru_ethernet_spt * ptrETH_SPT
void vlan_macout_forward_packet(NETSIM_ID d, NETSIM_ID in, UINT16 vlanId, NETSIM_ID incoming, NetSim_PACKET *packet, double time)
void init_spanning_tree_protocol()
UINT16 eth_get_incoming_vlanid(NetSim_PACKET *packet, NETSIM_ID devId)
bool isVLANTagPresent(NetSim_PACKET *packet)
ptrETH_LAN GET_ETH_LAN(NETSIM_ID d, NETSIM_ID i, UINT16 vlanId)
struct stru_eth_packet ETH_HDR
enum enum_port_type SWITCH_PORTTYPE
ptrETH_VAR GET_ETH_VAR(NETSIM_ID d)
struct stru_ethernet_var * ptrETH_VAR
void set_eth_hdr(NetSim_PACKET *packet, UINT type, void *var, void *(fncopy)(void *), void(*fnfree)(void *))
struct stru_eth_phy ETH_PHY
struct stru_ethernet_var ETH_VAR
@ SWITCHINGTECHNIQUE_CUT_THROUGH
@ SWITCHINGTECHNIQUE_NULL
@ SWITCHINGTECHNIQUE_STORE_FORWARD
@ SWITCHINGTECHNIQUE_FRAGMENT_FREE
struct stru_eth_bpdu ETH_BPDU
PNETSIM_MACADDRESS multicastSPTMAC
void free_eth_hdr(NetSim_PACKET *packet)
struct ieee802_1q_tag IEEE801_1Q_TAG
ptrETH_IF GET_ETH_IF(ptrETH_LAN lan, NETSIM_ID i)
void print_spanning_tree()
ptrSWITCHTABLE SWITCHTABLE_FIND(ptrETH_LAN lan, PNETSIM_MACADDRESS dest)
int multicast_config_bpdu()
NETSIM_ID find_forward_interface(ptrETH_LAN lan, NetSim_PACKET *packet)
void SET_ETH_VAR(NETSIM_ID d, ptrETH_VAR var)
void print_ethernet_log(char *format,...)
struct stru_SwitchTable * ptrSWITCHTABLE
void vlan_add_trunk_port(ptrETH_VAR eth, NETSIM_ID in)
struct stru_eth_phy * ptrETH_PHY
NETSIM_ID eth_get_incoming_port(NetSim_PACKET *packet, NETSIM_ID devId)
struct stru_SwitchTable SWITCHTABLE
void switchtable_metrics_print(PMETRICSWRITER metricsWriter)
enum enum_eth_packet ETH_PACKET
struct stru_ethernet_spt ETH_SPT
enum enum_SwitchingTechnique SWITCHING_TECHNIQUE
struct stru_eth_interface_var * ptrETH_IF
void vlan_macin_forward_packet()
void SWITCHTABLE_NEW(ptrETH_LAN lan, PNETSIM_MACADDRESS dest, NETSIM_ID outport)
struct stru_eth_interface_var ETH_IF
void process_configbpdu()
VLANPORT vlan_port_type_from_str(char *val)
void * get_eth_hdr_var(NetSim_PACKET *packet)
void clear_eth_incoming(NetSim_PACKET *packet)
void FREE_ETH_VAR(NETSIM_ID d)
void store_eth_incoming(NetSim_PACKET *packet, NETSIM_ID devId, NETSIM_ID incomingPort, UINT16 vlanId)
NETSIM_ID get_interface_id(NETSIM_ID d, NETSIM_ID c)
void forward_frame(NETSIM_ID d, NETSIM_ID in, ptrETH_LAN lan, NetSim_PACKET *packet, double time)
void vlan_forward_to_all_trunk(NETSIM_ID d, NetSim_PACKET *packet, ptrETH_LAN lan, double time)
enum enum_PortState SWITCH_PORTSTATE
struct ieee802_1q_tag * ptrIEEE801_1Q_TAG
struct stru_eth_bpdu * ptrETH_BPDU
UINT8 protocolVersionIdentifier
UINT16 protocolIdentifier
PNETSIM_MACADDRESS macAddress
SWITCH_PORTSTATE portState
NETSIM_ID connectedDevice
NETSIM_ID connectedInterface
ptrSWITCHTABLE switchTable
SWITCHING_TECHNIQUE switchingTechnique