📄 dot3ah.h
字号:
UINT16 tpCfgResvd :2; /*reserved, should be set to 0*/
UINT16 tpStatLink :1; /*1-TP port link up, 0-Link down*/
UINT16 tpStatDuplex :1; /*1-TP port link at full duplex, 0-half duplex*/
UINT16 tpStatSpeed :2; /*00-TP port link at 10M
01-TP port link at 100M
10-TP port link at 1000M
11-invalid*/
UINT16 tpStatLoop :1; /*1-TP port check looped, 0-normal*/
UINT16 tpStatResvd :3; /*reserved, should be set to 0*/
}Bits;
} UNION_RMT_TP_STAT;
typedef union
{
UINT16 rmtFxStatVal;
struct
{
UINT16 fxCfgAuto :1; /*1-FX port auto enable, 0-disable*/
UINT16 fxCfgFEF :1; /*1-FX port FEF enable, 0-disable*/
UINT16 fxCfgFlowCtrl :1; /*1-FX port flow control enable, 0-disable*/
UINT16 fxCfgLoopChk :1; /*1-FX port loopback check enable, 0-disable*/
UINT16 fxCfgResvd :4; /*reserved, should be set to 0*/
UINT16 fxStatLink :1; /*1-FX port link up, 0-Link down*/
UINT16 fxStatLoop :1; /*1-FX port check looped, 0-normal*/
UINT16 fxStatResvd :6; /*reserved, should be set to 0*/
}Bits;
} UNION_RMT_FX_STAT;
typedef union
{
UINT16 rmtGlbStatVal;
struct
{
UINT16 rmtCfgClose :1; /*1-remote close enable, 0-normal*/
UINT16 rmtCfgCOS :1; /*1-remote COS enable, 0-disable*/
UINT16 rmtCfgLFP :1; /*1-remote LFP enable, 0-disable*/
UINT16 rmtCfgResvd :5; /*reserved, should be set to 0*/
UINT16 rmtFirstPwrUp :1; /*1-remote is first power up, need to config,0-normal*/
UINT16 rmtLoopStat :1; /*1-remote looped, 0-unlooped*/
UINT16 rmtStatResvd :6; /*reserved, should be set to 0*/
}Bits;
} UNION_RMT_GLB_STAT;
typedef union
{
UINT16 rmtTpFxSpdLmtVal;
struct
{
UINT16 rmtTpFxSpdLmtEn :1; /*1-rate limit enable, 0-ignore*/
UINT16 rmtTpFxSpdLmtCnt :15; /*rate limit value, 32K step, 0 to disable*/
}Bits;
} UNION_RMT_TP_FX_SPDLMT;
typedef union
{
UINT16 rmtFxTpSpdLmtVal;
struct
{
UINT16 rmtFxTpSpdLmtEn :1; /*1-rate limit enable, 0-ignore*/
UINT16 rmtFxTpSpdLmtCnt :15; /*rate limit value, 32K step, 0 to disable*/
}Bits;
} UNION_RMT_FX_TP_SPDLMT;
typedef union
{
UINT16 rmtSpdLmtVal;
struct
{
UINT16 rmtSpdLmtEn :1; /*1-rate limit enable, 0-ignore*/
UINT16 rmtSpdLmt :15; /*rate limit value, 32K step, 0 to disable*/
}Bits;
} UNION_RMT_SPDLMT;
typedef union
{
UINT8 rmtPktLmtCtrlVal;
struct
{
UINT8 rmtTpFxBcastLmtEn :1; /*1-BroadCast limit enable, 0-ignore*/
UINT8 rmtTpFxBcastLmtdis :1; /*1-BroadCast limit disable, 0-ignore*/
UINT8 rmtFxTpBcastLmtEn :1; /*1-BroadCast limit enable, 0-ignore*/
UINT8 rmtFxTpBcastLmtdis :1; /*1-BroadCast limit disable, 0-ignore*/
UINT8 rmtTpFxMcastLmtEn :1; /*1-MultiCast limit enable, 0-ignore*/
UINT8 rmtTpFxMcastLmtdis :1; /*1-MultiCast limit disable, 0-ignore*/
UINT8 rmtFxTpMcastLmtEn :1; /*1-MultiCast limit enable, 0-ignore*/
UINT8 rmtFxTpMcastLmtdis :1; /*1-MultiCast limit v, 0-ignore*/
}Bits;
} UNION_RMT_PKTLMT_CTRL;
typedef struct
{
UNION_RMT_PKTLMT_CTRL rmtPktLmtCtrl;
UINT8 rmtTpFxBcastLmt; /*limit value, 512K step, 0 to disable*/
UINT8 rmtFxTpBcastLmt;
UINT8 rmtTpFxMcastLmt;
UINT8 rmtFxTpMcastLmt;
}tRMT_PKTLMT_SET;
/*Specific orgnization TLVs definitions*/
/*remote config set request TLV*/
typedef struct
{
UINT8 specTlvType; /*0x01*/
UINT8 specTlvDataLen; /*6*/
UNION_RMT_GLB_CFG rmtGlbCfg; /*remote global config, 2 bytes*/
UNION_RMT_TP_CFG rmtTpCfg; /*remote TP port config, 2 bytes*/
UNION_RMT_FX_CFG rmtFxCfg; /*remote Fiber port config, 2 bytes*/
}tSPEC_CFG_SET_REQ_TLV;
/*remote status get request TLV*/
typedef struct
{
UINT8 specTlvType; /*0x02*/
UINT8 specTlvDataLen; /*0*/
}tSPEC_STAT_GET_REQ_TLV;
/*remote status get response TLV*/
typedef struct
{
UINT8 specTlvType; /*0x03*/
UINT8 specTlvDataLen; /*14*/
UNION_RMT_GLB_STAT rmtGlbStat; /*remote gloabl status, 2 bytes*/
UNION_RMT_TP_STAT rmtTpStat; /*remote TP port config and status, 2 bytes*/
UNION_RMT_FX_STAT rmtFxStat; /*remote Fiber port config and status, 2 bytes*/
UINT16 rmtTpFxSpdLmt; /*TP to FX port direction rate limit value, 0 means no limit*/
UINT16 rmtFxTpSpdLmt; /*FX to TP port direction rate limit value, 0 means no limit*/
UINT8 rmtTpFxBcastLmt; /*TP to FX port direction BCAST limit value, 0 means no limit*/
UINT8 rmtFxTpBcastLmt; /*FX to TP port direction BCAST limit value, 0 means no limit*/
UINT8 rmtTpFxMcastLmt; /*TP to FX port direction MCAST limit value, 0 means no limit*/
UINT8 rmtFxTpMcastLmt; /*FX to TP port direction MCAST limit value, 0 means no limit*/
}tSPEC_STAT_GET_RES_TLV;
/*remote rate limit get request TLV*/
typedef struct
{
UINT8 specTlvType; /*0x04*/
UINT8 specTlvDataLen; /*9*/
UNION_RMT_SPDLMT rmtTpFxSpdLmt; /*remote TP to fiber port speed limit value, 2 bytes*/
UNION_RMT_SPDLMT rmtFxTpSpdLmt; /*remote Fiber to TP port speed limit value, 2 bytes*/
tRMT_PKTLMT_SET rmtPktLmt; /*remote Broadcast and multicast limit value, 5 bytes*/
}tSPEC_RATELMT_SET_REQ_TLV;
/*remote rate limit get response TLV*/
typedef struct
{
UINT8 specTlvType; /*0x06*/
UINT8 specTlvDataLen; /*8*/
UINT16 rmtTpFxSpdLmt; /*TP to FX port direction rate limit value, 0 means no limit*/
UINT16 rmtFxTpSpdLmt; /*FX to TP port direction rate limit value, 0 means no limit*/
UINT8 rmtTpFxBcastLmt; /*TP to FX port direction BCAST limit value, 0 means no limit*/
UINT8 rmtFxTpBcastLmt; /*FX to TP port direction BCAST limit value, 0 means no limit*/
UINT8 rmtTpFxMcastLmt; /*TP to FX port direction MCAST limit value, 0 means no limit*/
UINT8 rmtFxTpMcastLmt; /*FX to TP port direction MCAST limit value, 0 means no limit*/
}tSPEC_RATELMT_GET_RES_TLV;
typedef union
{
UINT8 rmtStatisticSubTypeVal;
struct
{
#define RMT_STATISTIC_GET_TP 1
#define RMT_STATISTIC_GET_FX 0
UINT8 rmtStatisticGetPort :1; /*1-TP port, 0-Fiber port*/
#define LOCAL_RXBYTES 0x01 /*RxBytes(64bits)*/
#define LOCAL_RXSPD_RXPKTS 0x02 /*RxSpeed & RxPkts*/
#define LOCAL_RXUNI_RXMCSATPKTS 0x03 /*RxUniPkts & RxMultiCastPkts*/
#define LOCAL_RXBCAST_RXDROPPKTS 0x04 /*RxBroadCastPkts & RxDropPkts*/
#define LOCAL_RXERR_RXCRCPKTS 0x05 /*RxErrPkts & RxCRCAlignErrPkts*/
#define LOCAL_RXFRAG_RXOVERSIZEPKTS 0x06 /*RxFragmentErrPkts & RxOverSizeErrPkts*/
#define LOCAL_RXUNDERSIZE_RXJABBERPKTS 0x07 /*RxUnderSizeErrPkts & RxJabberErrPkts*/
#define LOCAL_RXPAUSE_RX64BPKTS 0x08 /*RxPausePkts & Rx64BytesPkts*/
#define LOCAL_RX65B127B_RX128B255BPKTS 0x09 /*Rx65-127Pkts & Rx128-255Pkts*/
#define LOCAL_RX256B511B_RX512B1023BPKTS 0x0A /*Rx256-511Pkts & Rx512-1023Pkts*/
#define LOCAL_RX1024B1522BPKTS 0x0B /*Rx1024-1522BytesPkts(32bits)*/
#define LOCAL_TXBYTES 0x0C /*TxBytes(64bits)*/
#define LOCAL_TX_TXUNIPKTS 0x0D /*TxPkts & TxUniPkts*/
#define LOCAL_TXMCAST_TXBCASTPKTS 0x0E /*TxMultiCastPkts & TxBroadCastPkts*/
#define LOCAL_TXPAUSE_TXCOLPKTS 0x0F /*TxPausePkts & TxCollisionPkts*/
#define LOCAL_TXLCOL_TXECOLPKTS 0x10 /*TxLateColPkts & TxExcessiveColPkts*/
#define LOCAL_TXSCOL_TXMCOLPKTS 0x11 /*TxSigleColPkts & TxMultiColPkts*/
#define LOCAL_TXDROPPKTS_TXSPD 0x12 /*TxDropPkts(32bits) & TxSpeed*/
#define RMT_RXBYTES 0x01 /*RxBytes(64bits)*/
#define RMT_RXSPD_RXPKTS 0x02 /*RxSpeed & RxPkts*/
#define RMT_RXUNI_RXMCSATPKTS 0x03 /*RxUniPkts & RxMultiCastPkts*/
#define RMT_RXBCAST_RXDROPPKTS 0x04 /*RxBroadCastPkts & RxDropPkts*/
#define RMT_RXERR_RXCRCPKTS 0x05 /*RxErrPkts & RxCRCAlignErrPkts*/
#define RMT_RXFRAG_RXOVERSIZEPKTS 0x06 /*RxFragmentErrPkts & RxOverSizeErrPkts*/
#define RMT_RXUNDERSIZE_RXJABBERPKTS 0x07 /*RxUnderSizeErrPkts & RxJabberErrPkts*/
#define RMT_RXPAUSE_RX64BPKTS 0x08 /*RxPausePkts & Rx64BytesPkts*/
#define RMT_RX65B127B_RX128B255BPKTS 0x09 /*Rx65-127Pkts & Rx128-255Pkts*/
#define RMT_RX256B511B_RX512B1023BPKTS 0x0A /*Rx256-511Pkts & Rx512-1023Pkts*/
#define RMT_RX1024B1522BPKTS 0x0B /*Rx1024-1522BytesPkts(32bits)*/
#define RMT_TXBYTES 0x0C /*TxBytes(64bits)*/
#define RMT_TX_TXUNIPKTS 0x0D /*TxPkts & TxUniPkts*/
#define RMT_TXMCAST_TXBCASTPKTS 0x0E /*TxMultiCastPkts & TxBroadCastPkts*/
#define RMT_TXPAUSE_TXCOLPKTS 0x0F /*TxPausePkts & TxCollisionPkts*/
#define RMT_TXLCOL_TXECOLPKTS 0x10 /*TxLateColPkts & TxExcessiveColPkts*/
#define RMT_TXSCOL_TXMCOLPKTS 0x11 /*TxSigleColPkts & TxMultiColPkts*/
#define RMT_TXDROPPKTS_TXSPD 0x12 /*TxDropPkts(32bits) & TxSpeed*/
UINT8 rmtStatisticGetType :7; /*get statistics type*/
}Bits;
} UNION_RMT_STATISTIC_SUBTYPE;
/*remote statistic get request TLV*/
typedef struct
{
UINT8 specTlvType; /*0x07*/
UINT8 specTlvDataLen; /*1*/
UNION_RMT_STATISTIC_SUBTYPE rmtStatisticSubType;
}tSPEC_STATISTIC_GET_REQ_TLV;
/*remote Rx&Tx_TP&FB statistic get request TLV*/
typedef struct
{
tSPEC_STATISTIC_GET_REQ_TLV rmtStatisticTPRx;
tSPEC_STATISTIC_GET_REQ_TLV rmtStatisticTPTx;
tSPEC_STATISTIC_GET_REQ_TLV rmtStatisticFBRx;
tSPEC_STATISTIC_GET_REQ_TLV rmtStatisticFBTx;
}tSPEC_STATISTIC_GET_MULTI_TLV;
/*remote statistic get response TLV*/
typedef struct
{
UINT8 specTlvType; /*0x08*/
UINT8 specTlvDataLen; /*9*/
UNION_RMT_STATISTIC_SUBTYPE rmtStatisticSubType;
UINT32 rmtStatHigh_First; /*the first 32 bits value or high 32 bits of 64 bits value*/
UINT32 rmtStatLow_Second; /*the second 32 bits value or low 32 bits of 64 bits value*/
}tSPEC_STATISTIC_GET_RES_TLV;
typedef union
{
UINT8 rmtRegRwCtrlVal;
struct
{
UINT8 rmtRegRW :1; /*1-write remote register, 0-read*/
#define RMT_REG_SW 0x01 /*rmtRegType, read switch reg*/
#define RMT_REG_PHY 0x02 /*PHY register*/
#define RMT_REG_CPU 0x03 /*CPU register*/
UINT8 rmtRegType :7; /*remote reg type*/
}Bits;
} UNION_RMT_REG_RW_CTRL;
/*remote register read&write request and response TLV*/
typedef struct
{
UINT8 specTlvType; /*0x09 for REQ, 0x0A for RES*/
UINT8 specTlvDataLen; /*7*/
UNION_RMT_REG_RW_CTRL rmtRegSubType;
UINT16 rmtRegAddr;
UINT32 rmtRegVal;
}tSPEC_REG_RW_TLV;
/*remote fx info get request TLV*/
typedef struct
{
UINT8 specTlvType; /*0x0B*/
UINT8 specTlvDataLen; /*0*/
}tSPEC_FX_INFO_GET_REQ_TLV;
/*remote fx info get response TLV*/
typedef struct
{
UINT8 specTlvType; /*0x0C*/
UINT8 specTlvDataLen; /*18*/
UINT8 rmtPort1Type; /*0-TP port, 1-two fiber, 2-single fiber*/
UINT8 rmtPort1Mode; /*0-unknown, 1-multi mode, 2-single mode, 3-CWDM wave*/
UINT8 rmtPort1Cnctr; /*0-unknown, 1-sc, 2-fc, 3-st, 4-lc*/
UINT16 rmtPort1Distance; /*0-unknown, when distance>150, unit is m, else unit is km*/
UINT16 rmtPort1TxWaveLen; /*0-unknown*/
UINT16 rmtPort1RxWaveLen; /*0-unknown*/
UINT8 rmtPort2Type; /*0-TP port, 1-two fiber, 2-single fiber*/
UINT8 rmtPort2Mode; /*0-unknown, 1-multi mode, 2-single mode, 3-CWDM wave*/
UINT8 rmtPort2Cnctr; /*0-unknown, 1-sc, 2-fc, 3-st, 4-lc*/
UINT16 rmtPort2Distance; /*0-unknown, when distance>150, unit is m, else unit is km*/
UINT16 rmtPort2TxWaveLen; /*0-unknown*/
UINT16 rmtPort2RxWaveLen; /*0-unknown*/
}tSPEC_FX_INFO_GET_RES_TLV;
extern void dot3ah_init(void);
extern void dot3ah_discovery(void);
extern void dot3ah_send_info(void);
extern STATUS dot3ah_send_spec(void *buf, UINT16 len);
extern void process_dot3ah_oam(struct ethernet_frame* frame);
extern void dot3ahOAMMacAddrSet(UINT16 pbm);
extern void process_oam_spec_tlv(UINT8* working_ptr, UINT16 dataLen);
extern UINT8 dot3ah_port_set(UINT8 port);
extern UINT8 dot3ah_port_get(UINT8 *port);
extern UINT8 dot3ah_enable_set(UINT8 enable);
extern UINT8 dot3ah_enable_get(UINT8 *enable);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -