26
26
#define _MLACP_FSM_H
27
27
28
28
#include "../include/port.h"
29
+ #include "../include/mlacp_tlv.h"
29
30
30
31
#define MLCAP_SYNC_PHY_DEV_SEC 1 /*every 1 sec*/
31
32
33
+ #define MLACP_LOCAL_IF_DOWN_TIMER 600 // 600 seconds.
34
+
32
35
#define MLACP (csm_ptr ) (csm_ptr->app_csm.mlacp)
33
36
34
37
struct CSM ;
@@ -47,7 +50,7 @@ typedef enum MLACP_APP_STATE MLACP_APP_STATE_E;
47
50
/* for sender only*/
48
51
enum MLACP_SYNC_STATE
49
52
{
50
- MLACP_SYNC_SYSCONF = 0 ,
53
+ MLACP_SYNC_SYSCONF = 0 ,
51
54
MLACP_SYNC_AGGCONF ,
52
55
MLACP_SYNC_AGGSTATE ,
53
56
MLACP_SYNC_AGGINFO ,
@@ -66,6 +69,85 @@ struct Remote_System
66
69
uint32_t node_id ;
67
70
};
68
71
72
+ /****************************************************************
73
+ * Debug counters to track message sent and received between
74
+ * MC-LAG peers over ICCP
75
+ ***************************************************************/
76
+ typedef uint8_t ICCP_DBG_CNTR_DIR_e ;
77
+ enum ICCP_DBG_CNTR_DIR_e
78
+ {
79
+ ICCP_DBG_CNTR_DIR_TX = 0 ,
80
+ ICCP_DBG_CNTR_DIR_RX = 1 ,
81
+ ICCP_DBG_CNTR_DIR_MAX
82
+ };
83
+
84
+ typedef uint8_t ICCP_DBG_CNTR_STS_e ;
85
+ enum ICCP_DBG_CNTR_STS_e
86
+ {
87
+ ICCP_DBG_CNTR_STS_OK = 0 ,
88
+ ICCP_DBG_CNTR_STS_ERR = 1 , /* Send error or receive processing error*/
89
+ ICCP_DBG_CNTR_STS_MAX
90
+ };
91
+
92
+ /* Change MCLAGDCTL_MAX_DBG_COUNTERS if ICCP_DBG_CNTR_MSG_MAX is more than 32 */
93
+ enum ICCP_DBG_CNTR_MSG
94
+ {
95
+ ICCP_DBG_CNTR_MSG_SYS_CONFIG = 0 ,
96
+ ICCP_DBG_CNTR_MSG_AGGR_CONFIG = 1 ,
97
+ ICCP_DBG_CNTR_MSG_AGGR_STATE = 2 ,
98
+ ICCP_DBG_CNTR_MSG_MAC_INFO = 3 ,
99
+ ICCP_DBG_CNTR_MSG_ARP_INFO = 4 ,
100
+ ICCP_DBG_CNTR_MSG_L2MC_INFO = 5 ,
101
+ ICCP_DBG_CNTR_MSG_PORTCHANNEL_INFO = 6 ,
102
+ ICCP_DBG_CNTR_MSG_PEER_LINK_INFO = 7 ,
103
+ ICCP_DBG_CNTR_MSG_HEART_BEAT = 8 ,
104
+ ICCP_DBG_CNTR_MSG_NAK = 9 ,
105
+ ICCP_DBG_CNTR_MSG_SYNC_DATA = 10 ,
106
+ ICCP_DBG_CNTR_MSG_SYNC_REQ = 11 ,
107
+ ICCP_DBG_CNTR_MSG_WARM_BOOT = 12 ,
108
+ ICCP_DBG_CNTR_MSG_IF_UP_ACK = 13 ,
109
+ ICCP_DBG_CNTR_MSG_STP_CONNECT = 14 ,
110
+ ICCP_DBG_CNTR_MSG_STP_DISCONNECT = 15 ,
111
+ ICCP_DBG_CNTR_MSG_STP_SYSTEM_CONFIG = 16 ,
112
+ ICCP_DBG_CNTR_MSG_STP_REGION_NAME = 17 ,
113
+ ICCP_DBG_CNTR_MSG_STP_REVISION_LEVEL = 18 ,
114
+ ICCP_DBG_CNTR_MSG_STP_INSTANCE_PRIORITY = 19 ,
115
+ ICCP_DBG_CNTR_MSG_STP_CONFIGURATION_DIGEST = 20 ,
116
+ ICCP_DBG_CNTR_MSG_STP_TC_INSTANCES = 21 ,
117
+ ICCP_DBG_CNTR_MSG_STP_ROOT_TIME_PARAM = 22 ,
118
+ ICCP_DBG_CNTR_MSG_STP_MIST_ROOT_TIME_PARAM = 23 ,
119
+ ICCP_DBG_CNTR_MSG_STP_SYNC_REQ = 24 ,
120
+ ICCP_DBG_CNTR_MSG_STP_SYNC_DATA = 25 ,
121
+ ICCP_DBG_CNTR_MSG_STP_PO_PORT_MAP = 26 ,
122
+ ICCP_DBG_CNTR_MSG_STP_AGE_OUT = 27 ,
123
+ ICCP_DBG_CNTR_MSG_STP_COMMON_MSG = 28 ,
124
+ ICCP_DBG_CNTR_MSG_MAX
125
+ };
126
+ typedef enum ICCP_DBG_CNTR_MSG ICCP_DBG_CNTR_MSG_e ;
127
+
128
+ /* Count messages sent to MCLAG peer */
129
+ #define MLACP_SET_ICCP_TX_DBG_COUNTER (csm , tlv_type , status )\
130
+ do{\
131
+ ICCP_DBG_CNTR_MSG_e dbg_type;\
132
+ dbg_type = mlacp_fsm_iccp_to_dbg_msg_type(tlv_type);\
133
+ if (csm && ((dbg_type) < ICCP_DBG_CNTR_MSG_MAX) && ((status) < ICCP_DBG_CNTR_STS_MAX))\
134
+ ++MLACP(csm).dbg_counters.iccp_counters[dbg_type][ICCP_DBG_CNTR_DIR_TX][status];\
135
+ }while(0);
136
+
137
+ /* Count messages received from MCLAG peer */
138
+ #define MLACP_SET_ICCP_RX_DBG_COUNTER (csm , tlv_type , status )\
139
+ do{\
140
+ ICCP_DBG_CNTR_MSG_e dbg_type;\
141
+ dbg_type = mlacp_fsm_iccp_to_dbg_msg_type(tlv_type);\
142
+ if (csm && ((dbg_type) < ICCP_DBG_CNTR_MSG_MAX) && ((status) < ICCP_DBG_CNTR_STS_MAX))\
143
+ ++MLACP(csm).dbg_counters.iccp_counters[dbg_type][ICCP_DBG_CNTR_DIR_RX][status];\
144
+ }while(0);
145
+
146
+ typedef struct mlacp_dbg_counter_info
147
+ {
148
+ uint64_t iccp_counters [ICCP_DBG_CNTR_MSG_MAX ][ICCP_DBG_CNTR_DIR_MAX ][ICCP_DBG_CNTR_STS_MAX ];
149
+ }mlacp_dbg_counter_info_t ;
150
+
69
151
struct mLACP
70
152
{
71
153
int id ;
@@ -88,22 +170,30 @@ struct mLACP
88
170
TAILQ_HEAD (arp_info_list , Msg ) arp_list ;
89
171
TAILQ_HEAD (ndisc_msg_list , Msg ) ndisc_msg_list ;
90
172
TAILQ_HEAD (ndisc_info_list , Msg ) ndisc_list ;
91
- TAILQ_HEAD (mac_msg_list , Msg ) mac_msg_list ;
92
- TAILQ_HEAD (mac_info_list , Msg ) mac_list ;
173
+ TAILQ_HEAD (mac_msg_list , MACMsg ) mac_msg_list ;
174
+
175
+ struct mac_rb_tree mac_rb ;
93
176
94
177
LIST_HEAD (lif_list , LocalInterface ) lif_list ;
95
178
LIST_HEAD (lif_purge_list , LocalInterface ) lif_purge_list ;
96
179
LIST_HEAD (pif_list , PeerInterface ) pif_list ;
180
+
181
+ /* ICCP message tx/rx debug counters */
182
+ mlacp_dbg_counter_info_t dbg_counters ;
97
183
};
98
184
99
185
void mlacp_init (struct CSM * csm , int all );
100
186
void mlacp_finalize (struct CSM * csm );
101
187
void mlacp_fsm_transit (struct CSM * csm );
102
188
void mlacp_enqueue_msg (struct CSM * , struct Msg * );
103
189
struct Msg * mlacp_dequeue_msg (struct CSM * );
190
+ char * mlacp_state (struct CSM * csm );
104
191
105
192
/* from app_csm*/
106
193
extern int mlacp_bind_local_if (struct CSM * csm , struct LocalInterface * local_if );
107
194
extern int mlacp_unbind_local_if (struct LocalInterface * local_if );
108
195
196
+ /* Debug counter API */
197
+ ICCP_DBG_CNTR_MSG_e mlacp_fsm_iccp_to_dbg_msg_type (uint32_t tlv_type );
198
+
109
199
#endif /* _MLACP_HANDLER_H */
0 commit comments