123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438 |
- /******************************************************************************
- *
- * Name: skrlmt.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.37 $
- * Date: $Date: 2003/04/15 09:43:43 $
- * Purpose: Header file for Redundant Link ManagemenT.
- *
- ******************************************************************************/
- /******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- * (C)Copyright 2002-2003 Marvell.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
- /******************************************************************************
- *
- * Description:
- *
- * This is the header file for Redundant Link ManagemenT.
- *
- * Include File Hierarchy:
- *
- * "skdrv1st.h"
- * ...
- * "sktypes.h"
- * "skqueue.h"
- * "skaddr.h"
- * "skrlmt.h"
- * ...
- * "skdrv2nd.h"
- *
- ******************************************************************************/
- #ifndef __INC_SKRLMT_H
- #define __INC_SKRLMT_H
- #ifdef __cplusplus
- extern "C" {
- #endif /* cplusplus */
- /* defines ********************************************************************/
- #define SK_RLMT_NET_DOWN_TEMP 1 /* NET_DOWN due to last port down. */
- #define SK_RLMT_NET_DOWN_FINAL 2 /* NET_DOWN due to RLMT_STOP. */
- /* ----- Default queue sizes - must be multiples of 8 KB ----- */
- /* Less than 8 KB free in RX queue => pause frames. */
- #define SK_RLMT_STANDBY_QRXSIZE 128 /* Size of rx standby queue in KB. */
- #define SK_RLMT_STANDBY_QXASIZE 32 /* Size of async standby queue in KB. */
- #define SK_RLMT_STANDBY_QXSSIZE 0 /* Size of sync standby queue in KB. */
- #define SK_RLMT_MAX_TX_BUF_SIZE 60 /* Maximum RLMT transmit size. */
- /* ----- PORT states ----- */
- #define SK_RLMT_PS_INIT 0 /* Port state: Init. */
- #define SK_RLMT_PS_LINK_DOWN 1 /* Port state: Link down. */
- #define SK_RLMT_PS_DOWN 2 /* Port state: Port down. */
- #define SK_RLMT_PS_GOING_UP 3 /* Port state: Going up. */
- #define SK_RLMT_PS_UP 4 /* Port state: Up. */
- /* ----- RLMT states ----- */
- #define SK_RLMT_RS_INIT 0 /* RLMT state: Init. */
- #define SK_RLMT_RS_NET_DOWN 1 /* RLMT state: Net down. */
- #define SK_RLMT_RS_NET_UP 2 /* RLMT state: Net up. */
- /* ----- PORT events ----- */
- #define SK_RLMT_LINK_UP 1001 /* Link came up. */
- #define SK_RLMT_LINK_DOWN 1002 /* Link went down. */
- #define SK_RLMT_PORT_ADDR 1003 /* Port address changed. */
- /* ----- RLMT events ----- */
- #define SK_RLMT_START 2001 /* Start RLMT. */
- #define SK_RLMT_STOP 2002 /* Stop RLMT. */
- #define SK_RLMT_PACKET_RECEIVED 2003 /* Packet was received for RLMT. */
- #define SK_RLMT_STATS_CLEAR 2004 /* Clear statistics. */
- #define SK_RLMT_STATS_UPDATE 2005 /* Update statistics. */
- #define SK_RLMT_PREFPORT_CHANGE 2006 /* Change preferred port. */
- #define SK_RLMT_MODE_CHANGE 2007 /* New RlmtMode. */
- #define SK_RLMT_SET_NETS 2008 /* Number of Nets (1 or 2). */
- /* ----- RLMT mode bits ----- */
- /*
- * CAUTION: These defines are private to RLMT.
- * Please use the RLMT mode defines below.
- */
- #define SK_RLMT_CHECK_LINK 1 /* Check Link. */
- #define SK_RLMT_CHECK_LOC_LINK 2 /* Check other link on same adapter. */
- #define SK_RLMT_CHECK_SEG 4 /* Check segmentation. */
- #ifndef RLMT_CHECK_REMOTE
- #define SK_RLMT_CHECK_OTHERS SK_RLMT_CHECK_LOC_LINK
- #else /* RLMT_CHECK_REMOTE */
- #define SK_RLMT_CHECK_REM_LINK 8 /* Check link(s) on other adapter(s). */
- #define SK_RLMT_MAX_REMOTE_PORTS_CHECKED 3
- #define SK_RLMT_CHECK_OTHERS \
- (SK_RLMT_CHECK_LOC_LINK | SK_RLMT_CHECK_REM_LINK)
- #endif /* RLMT_CHECK_REMOTE */
- #ifndef SK_RLMT_ENABLE_TRANSPARENT
- #define SK_RLMT_TRANSPARENT 0 /* RLMT transparent - inactive. */
- #else /* SK_RLMT_ENABLE_TRANSPARENT */
- #define SK_RLMT_TRANSPARENT 128 /* RLMT transparent. */
- #endif /* SK_RLMT_ENABLE_TRANSPARENT */
- /* ----- RLMT modes ----- */
- /* Check Link State. */
- #define SK_RLMT_MODE_CLS (SK_RLMT_CHECK_LINK)
- /* Check Local Ports: check other links on the same adapter. */
- #define SK_RLMT_MODE_CLP (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK)
- /* Check Local Ports and Segmentation Status. */
- #define SK_RLMT_MODE_CLPSS \
- (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK | SK_RLMT_CHECK_SEG)
- #ifdef RLMT_CHECK_REMOTE
- /* Check Local and Remote Ports: check links (local or remote). */
- Name of define TBD!
- #define SK_RLMT_MODE_CRP \
- (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK | SK_RLMT_CHECK_REM_LINK)
- /* Check Local and Remote Ports and Segmentation Status. */
- Name of define TBD!
- #define SK_RLMT_MODE_CRPSS \
- (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK | \
- SK_RLMT_CHECK_REM_LINK | SK_RLMT_CHECK_SEG)
- #endif /* RLMT_CHECK_REMOTE */
- /* ----- RLMT lookahead result bits ----- */
- #define SK_RLMT_RX_RLMT 1 /* Give packet to RLMT. */
- #define SK_RLMT_RX_PROTOCOL 2 /* Give packet to protocol. */
- /* Macros */
- #if 0
- SK_AC *pAC /* adapter context */
- SK_U32 PortNum /* receiving port */
- unsigned PktLen /* received packet's length */
- SK_BOOL IsBc /* Flag: packet is broadcast */
- unsigned *pOffset /* offs. of bytes to present to SK_RLMT_LOOKAHEAD */
- unsigned *pNumBytes /* #Bytes to present to SK_RLMT_LOOKAHEAD */
- #endif /* 0 */
- #define SK_RLMT_PRE_LOOKAHEAD(pAC,PortNum,PktLen,IsBc,pOffset,pNumBytes) { \
- SK_AC *_pAC; \
- SK_U32 _PortNum; \
- _pAC = (pAC); \
- _PortNum = (SK_U32)(PortNum); \
- /* _pAC->Rlmt.Port[_PortNum].PacketsRx++; */ \
- _pAC->Rlmt.Port[_PortNum].PacketsPerTimeSlot++; \
- if (_pAC->Rlmt.RlmtOff) { \
- *(pNumBytes) = 0; \
- } \
- else {\
- if ((_pAC->Rlmt.Port[_PortNum].Net->RlmtMode & SK_RLMT_TRANSPARENT) != 0) { \
- *(pNumBytes) = 0; \
- } \
- else if (IsBc) { \
- if (_pAC->Rlmt.Port[_PortNum].Net->RlmtMode != SK_RLMT_MODE_CLS) { \
- *(pNumBytes) = 6; \
- *(pOffset) = 6; \
- } \
- else { \
- *(pNumBytes) = 0; \
- } \
- } \
- else { \
- if ((PktLen) > SK_RLMT_MAX_TX_BUF_SIZE) { \
- /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
- *(pNumBytes) = 0; \
- } \
- else { \
- *(pNumBytes) = 6; \
- *(pOffset) = 0; \
- } \
- } \
- } \
- }
- #if 0
- SK_AC *pAC /* adapter context */
- SK_U32 PortNum /* receiving port */
- SK_U8 *pLaPacket, /* received packet's data (points to pOffset) */
- SK_BOOL IsBc /* Flag: packet is broadcast */
- SK_BOOL IsMc /* Flag: packet is multicast */
- unsigned *pForRlmt /* Result: bits SK_RLMT_RX_RLMT, SK_RLMT_RX_PROTOCOL */
- SK_RLMT_LOOKAHEAD() expects *pNumBytes from
- packet offset *pOffset (s.a.) at *pLaPacket.
- If you use SK_RLMT_LOOKAHEAD in a path where you already know if the packet is
- BC, MC, or UC, you should use constants for IsBc and IsMc, so that your compiler
- can trash unneeded parts of the if construction.
- #endif /* 0 */
- #define SK_RLMT_LOOKAHEAD(pAC,PortNum,pLaPacket,IsBc,IsMc,pForRlmt) { \
- SK_AC *_pAC; \
- SK_U32 _PortNum; \
- SK_U8 *_pLaPacket; \
- _pAC = (pAC); \
- _PortNum = (SK_U32)(PortNum); \
- _pLaPacket = (SK_U8 *)(pLaPacket); \
- if (IsBc) {\
- if (!SK_ADDR_EQUAL(_pLaPacket, _pAC->Addr.Net[_pAC->Rlmt.Port[ \
- _PortNum].Net->NetNumber].CurrentMacAddress.a)) { \
- _pAC->Rlmt.Port[_PortNum].BcTimeStamp = SkOsGetTime(_pAC); \
- _pAC->Rlmt.CheckSwitch = SK_TRUE; \
- } \
- /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
- *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
- } \
- else if (IsMc) { \
- if (SK_ADDR_EQUAL(_pLaPacket, BridgeMcAddr.a)) { \
- _pAC->Rlmt.Port[_PortNum].BpduPacketsPerTimeSlot++; \
- if (_pAC->Rlmt.Port[_PortNum].Net->RlmtMode & SK_RLMT_CHECK_SEG) { \
- *(pForRlmt) = SK_RLMT_RX_RLMT | SK_RLMT_RX_PROTOCOL; \
- } \
- else { \
- *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
- } \
- } \
- else if (SK_ADDR_EQUAL(_pLaPacket, SkRlmtMcAddr.a)) { \
- *(pForRlmt) = SK_RLMT_RX_RLMT; \
- } \
- else { \
- /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
- *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
- } \
- } \
- else { \
- if (SK_ADDR_EQUAL( \
- _pLaPacket, \
- _pAC->Addr.Port[_PortNum].CurrentMacAddress.a)) { \
- *(pForRlmt) = SK_RLMT_RX_RLMT; \
- } \
- else { \
- /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
- *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
- } \
- } \
- }
- #ifdef SK_RLMT_FAST_LOOKAHEAD
- Error: SK_RLMT_FAST_LOOKAHEAD no longer used. Use new macros for lookahead.
- #endif /* SK_RLMT_FAST_LOOKAHEAD */
- #ifdef SK_RLMT_SLOW_LOOKAHEAD
- Error: SK_RLMT_SLOW_LOOKAHEAD no longer used. Use new macros for lookahead.
- #endif /* SK_RLMT_SLOW_LOOKAHEAD */
- /* typedefs *******************************************************************/
- #ifdef SK_RLMT_MBUF_PRIVATE
- typedef struct s_RlmtMbuf {
- some content
- } SK_RLMT_MBUF;
- #endif /* SK_RLMT_MBUF_PRIVATE */
- #ifdef SK_LA_INFO
- typedef struct s_Rlmt_PacketInfo {
- unsigned PacketLength; /* Length of packet. */
- unsigned PacketType; /* Directed/Multicast/Broadcast. */
- } SK_RLMT_PINFO;
- #endif /* SK_LA_INFO */
- typedef struct s_RootId {
- SK_U8 Id[8]; /* Root Bridge Id. */
- } SK_RLMT_ROOT_ID;
- typedef struct s_port {
- SK_MAC_ADDR CheckAddr;
- SK_BOOL SuspectTx;
- } SK_PORT_CHECK;
- typedef struct s_RlmtNet SK_RLMT_NET;
- typedef struct s_RlmtPort {
- /* ----- Public part (read-only) ----- */
- SK_U8 PortState; /* Current state of this port. */
- /* For PNMI */
- SK_BOOL LinkDown;
- SK_BOOL PortDown;
- SK_U8 Align01;
- SK_U32 PortNumber; /* Number of port on adapter. */
- SK_RLMT_NET * Net; /* Net port belongs to. */
- SK_U64 TxHelloCts;
- SK_U64 RxHelloCts;
- SK_U64 TxSpHelloReqCts;
- SK_U64 RxSpHelloCts;
- /* ----- Private part ----- */
- /* SK_U64 PacketsRx; */ /* Total packets received. */
- SK_U32 PacketsPerTimeSlot; /* Packets rxed between TOs. */
- /* SK_U32 DataPacketsPerTimeSlot; */ /* Data packets ... */
- SK_U32 BpduPacketsPerTimeSlot; /* BPDU packets rxed in TS. */
- SK_U64 BcTimeStamp; /* Time of last BC receive. */
- SK_U64 GuTimeStamp; /* Time of entering GOING_UP. */
- SK_TIMER UpTimer; /* Timer struct Link/Port up. */
- SK_TIMER DownRxTimer; /* Timer struct down rx. */
- SK_TIMER DownTxTimer; /* Timer struct down tx. */
- SK_U32 CheckingState; /* Checking State. */
- SK_ADDR_PORT * AddrPort;
- SK_U8 Random[4]; /* Random value. */
- unsigned PortsChecked; /* #ports checked. */
- unsigned PortsSuspect; /* #ports checked that are s. */
- SK_PORT_CHECK PortCheck[1];
- /* SK_PORT_CHECK PortCheck[SK_MAX_MACS - 1]; */
- SK_BOOL PortStarted; /* Port is started. */
- SK_BOOL PortNoRx; /* NoRx for >= 1 time slot. */
- SK_BOOL RootIdSet;
- SK_RLMT_ROOT_ID Root; /* Root Bridge Id. */
- } SK_RLMT_PORT;
- struct s_RlmtNet {
- /* ----- Public part (read-only) ----- */
- SK_U32 NetNumber; /* Number of net. */
- SK_RLMT_PORT * Port[SK_MAX_MACS]; /* Ports that belong to this net. */
- SK_U32 NumPorts; /* Number of ports. */
- SK_U32 PrefPort; /* Preferred port. */
- /* For PNMI */
- SK_U32 ChgBcPrio; /* Change Priority of last broadcast received */
- SK_U32 RlmtMode; /* Check ... */
- SK_U32 ActivePort; /* Active port. */
- SK_U32 Preference; /* 0xFFFFFFFF: Automatic. */
- SK_U8 RlmtState; /* Current RLMT state. */
- /* ----- Private part ----- */
- SK_BOOL RootIdSet;
- SK_U16 Align01;
- int LinksUp; /* #Links up. */
- int PortsUp; /* #Ports up. */
- SK_U32 TimeoutValue; /* RLMT timeout value. */
- SK_U32 CheckingState; /* Checking State. */
- SK_RLMT_ROOT_ID Root; /* Root Bridge Id. */
- SK_TIMER LocTimer; /* Timer struct. */
- SK_TIMER SegTimer; /* Timer struct. */
- };
- typedef struct s_Rlmt {
- /* ----- Public part (read-only) ----- */
- SK_U32 NumNets; /* Number of nets. */
- SK_U32 NetsStarted; /* Number of nets started. */
- SK_RLMT_NET Net[SK_MAX_NETS]; /* Array of available nets. */
- SK_RLMT_PORT Port[SK_MAX_MACS]; /* Array of available ports. */
- /* ----- Private part ----- */
- SK_BOOL CheckSwitch;
- SK_BOOL RlmtOff; /* set to zero if the Mac addresses
- are equal or the second one
- is zero */
- SK_U16 Align01;
- } SK_RLMT;
- extern SK_MAC_ADDR BridgeMcAddr;
- extern SK_MAC_ADDR SkRlmtMcAddr;
- /* function prototypes ********************************************************/
- #ifndef SK_KR_PROTO
- /* Functions provided by SkRlmt */
- /* ANSI/C++ compliant function prototypes */
- extern void SkRlmtInit(
- SK_AC *pAC,
- SK_IOC IoC,
- int Level);
- extern int SkRlmtEvent(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 Event,
- SK_EVPARA Para);
- #else /* defined(SK_KR_PROTO) */
- /* Non-ANSI/C++ compliant function prototypes */
- #error KR-style function prototypes are not yet provided.
- #endif /* defined(SK_KR_PROTO)) */
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
- #endif /* __INC_SKRLMT_H */
|