?? llc_c_st.c
字號:
/* * llc_c_st.c - This module contains state transition of connection component. * * Description of event functions and actions there is in 802.2 LLC standard, * or in "llc_c_ac.c" and "llc_c_ev.c" modules. * * Copyright (c) 1997 by Procom Technology, Inc. * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. * This program is distributed without any warranty or implied warranty * of merchantability or fitness for a particular purpose. * * See the GNU General Public License for more details. */#include <linux/types.h>#include <net/llc_if.h>#include <net/llc_sap.h>#include <net/llc_c_ev.h>#include <net/llc_c_ac.h>#include <net/llc_c_st.h>#define NONE NULL/* COMMON CONNECTION STATE transitions * Common transitions for * LLC_CONN_STATE_NORMAL, * LLC_CONN_STATE_BUSY, * LLC_CONN_STATE_REJ, * LLC_CONN_STATE_AWAIT, * LLC_CONN_STATE_AWAIT_BUSY and * LLC_CONN_STATE_AWAIT_REJ states *//* State transitions for LLC_CONN_EV_DISC_REQ event */static llc_conn_action_t llc_common_actions_1[] = { [0] = llc_conn_ac_send_disc_cmd_p_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = llc_conn_ac_set_cause_flag_1, [5] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_1 = { .ev = llc_conn_ev_disc_req, .next_state = LLC_CONN_STATE_D_CONN, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_1,};/* State transitions for LLC_CONN_EV_RESET_REQ event */static llc_conn_action_t llc_common_actions_2[] = { [0] = llc_conn_ac_send_sabme_cmd_p_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = llc_conn_ac_set_cause_flag_1, [5] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_2 = { .ev = llc_conn_ev_rst_req, .next_state = LLC_CONN_STATE_RESET, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_2,};/* State transitions for LLC_CONN_EV_RX_SABME_CMD_Pbit_SET_X event */static llc_conn_action_t llc_common_actions_3[] = { [0] = llc_conn_ac_stop_all_timers, [1] = llc_conn_ac_set_vs_0, [2] = llc_conn_ac_set_vr_0, [3] = llc_conn_ac_send_ua_rsp_f_set_p, [4] = llc_conn_ac_rst_ind, [5] = llc_conn_ac_set_p_flag_0, [6] = llc_conn_ac_set_remote_busy_0, [7] = llc_conn_reset, [8] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_3 = { .ev = llc_conn_ev_rx_sabme_cmd_pbit_set_x, .next_state = LLC_CONN_STATE_NORMAL, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_3,};/* State transitions for LLC_CONN_EV_RX_DISC_CMD_Pbit_SET_X event */static llc_conn_action_t llc_common_actions_4[] = { [0] = llc_conn_ac_stop_all_timers, [1] = llc_conn_ac_send_ua_rsp_f_set_p, [2] = llc_conn_ac_disc_ind, [3] = llc_conn_disc, [4] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_4 = { .ev = llc_conn_ev_rx_disc_cmd_pbit_set_x, .next_state = LLC_CONN_STATE_ADM, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_4,};/* State transitions for LLC_CONN_EV_RX_FRMR_RSP_Fbit_SET_X event */static llc_conn_action_t llc_common_actions_5[] = { [0] = llc_conn_ac_send_sabme_cmd_p_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = llc_conn_ac_rst_ind, [5] = llc_conn_ac_set_cause_flag_0, [6] = llc_conn_reset, [7] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_5 = { .ev = llc_conn_ev_rx_frmr_rsp_fbit_set_x, .next_state = LLC_CONN_STATE_RESET, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_5,};/* State transitions for LLC_CONN_EV_RX_DM_RSP_Fbit_SET_X event */static llc_conn_action_t llc_common_actions_6[] = { [0] = llc_conn_ac_disc_ind, [1] = llc_conn_ac_stop_all_timers, [2] = llc_conn_disc, [3] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_6 = { .ev = llc_conn_ev_rx_dm_rsp_fbit_set_x, .next_state = LLC_CONN_STATE_ADM, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_6,};/* State transitions for LLC_CONN_EV_RX_ZZZ_CMD_Pbit_SET_X_INVAL_Nr event */static llc_conn_action_t llc_common_actions_7a[] = { [0] = llc_conn_ac_send_frmr_rsp_f_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_7a = { .ev = llc_conn_ev_rx_zzz_cmd_pbit_set_x_inval_nr, .next_state = LLC_CONN_STATE_ERROR, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_7a,};/* State transitions for LLC_CONN_EV_RX_I_CMD_Pbit_SET_X_INVAL_Ns event */static llc_conn_action_t llc_common_actions_7b[] = { [0] = llc_conn_ac_send_frmr_rsp_f_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_7b = { .ev = llc_conn_ev_rx_i_cmd_pbit_set_x_inval_ns, .next_state = LLC_CONN_STATE_ERROR, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_7b,};/* State transitions for LLC_CONN_EV_RX_ZZZ_RSP_Fbit_SET_X_INVAL_Nr event */static llc_conn_action_t llc_common_actions_8a[] = { [0] = llc_conn_ac_send_frmr_rsp_f_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_8a = { .ev = llc_conn_ev_rx_zzz_rsp_fbit_set_x_inval_nr, .next_state = LLC_CONN_STATE_ERROR, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_8a,};/* State transitions for LLC_CONN_EV_RX_I_RSP_Fbit_SET_X_INVAL_Ns event */static llc_conn_action_t llc_common_actions_8b[] = { [0] = llc_conn_ac_send_frmr_rsp_f_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_8b = { .ev = llc_conn_ev_rx_i_rsp_fbit_set_x_inval_ns, .next_state = LLC_CONN_STATE_ERROR, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_8b,};/* State transitions for LLC_CONN_EV_RX_BAD_PDU event */static llc_conn_action_t llc_common_actions_8c[] = { [0] = llc_conn_ac_send_frmr_rsp_f_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_8c = { .ev = llc_conn_ev_rx_bad_pdu, .next_state = LLC_CONN_STATE_ERROR, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_8c,};/* State transitions for LLC_CONN_EV_RX_UA_RSP_Fbit_SET_X event */static llc_conn_action_t llc_common_actions_9[] = { [0] = llc_conn_ac_send_frmr_rsp_f_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_9 = { .ev = llc_conn_ev_rx_ua_rsp_fbit_set_x, .next_state = LLC_CONN_STATE_ERROR, .ev_qualifiers = NONE, .ev_actions = llc_common_actions_9,};/* State transitions for LLC_CONN_EV_RX_XXX_RSP_Fbit_SET_1 event */#if 0static llc_conn_ev_qfyr_t llc_common_ev_qfyrs_10[] = { [0] = llc_conn_ev_qlfy_p_flag_eq_0, [1] = NULL,};static llc_conn_action_t llc_common_actions_10[] = { [0] = llc_conn_ac_send_frmr_rsp_f_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_10 = { .ev = llc_conn_ev_rx_xxx_rsp_fbit_set_1, .next_state = LLC_CONN_STATE_ERROR, .ev_qualifiers = llc_common_ev_qfyrs_10, .ev_actions = llc_common_actions_10,};#endif/* State transitions for LLC_CONN_EV_P_TMR_EXP event */static llc_conn_ev_qfyr_t llc_common_ev_qfyrs_11a[] = { [0] = llc_conn_ev_qlfy_retry_cnt_gte_n2, [1] = NULL,};static llc_conn_action_t llc_common_actions_11a[] = { [0] = llc_conn_ac_send_sabme_cmd_p_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = llc_conn_ac_set_cause_flag_0, [5] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_11a = { .ev = llc_conn_ev_p_tmr_exp, .next_state = LLC_CONN_STATE_RESET, .ev_qualifiers = llc_common_ev_qfyrs_11a, .ev_actions = llc_common_actions_11a,};/* State transitions for LLC_CONN_EV_ACK_TMR_EXP event */static llc_conn_ev_qfyr_t llc_common_ev_qfyrs_11b[] = { [0] = llc_conn_ev_qlfy_retry_cnt_gte_n2, [1] = NULL,};static llc_conn_action_t llc_common_actions_11b[] = { [0] = llc_conn_ac_send_sabme_cmd_p_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = llc_conn_ac_set_cause_flag_0, [5] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_11b = { .ev = llc_conn_ev_ack_tmr_exp, .next_state = LLC_CONN_STATE_RESET, .ev_qualifiers = llc_common_ev_qfyrs_11b, .ev_actions = llc_common_actions_11b,};/* State transitions for LLC_CONN_EV_REJ_TMR_EXP event */static llc_conn_ev_qfyr_t llc_common_ev_qfyrs_11c[] = { [0] = llc_conn_ev_qlfy_retry_cnt_gte_n2, [1] = NULL,};static llc_conn_action_t llc_common_actions_11c[] = { [0] = llc_conn_ac_send_sabme_cmd_p_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = llc_conn_ac_set_cause_flag_0, [5] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_11c = { .ev = llc_conn_ev_rej_tmr_exp, .next_state = LLC_CONN_STATE_RESET, .ev_qualifiers = llc_common_ev_qfyrs_11c, .ev_actions = llc_common_actions_11c,};/* State transitions for LLC_CONN_EV_BUSY_TMR_EXP event */static llc_conn_ev_qfyr_t llc_common_ev_qfyrs_11d[] = { [0] = llc_conn_ev_qlfy_retry_cnt_gte_n2, [1] = NULL,};static llc_conn_action_t llc_common_actions_11d[] = { [0] = llc_conn_ac_send_sabme_cmd_p_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_stop_other_timers, [3] = llc_conn_ac_set_retry_cnt_0, [4] = llc_conn_ac_set_cause_flag_0, [5] = NULL,};static struct llc_conn_state_trans llc_common_state_trans_11d = { .ev = llc_conn_ev_busy_tmr_exp, .next_state = LLC_CONN_STATE_RESET, .ev_qualifiers = llc_common_ev_qfyrs_11d, .ev_actions = llc_common_actions_11d,};/* * Common dummy state transition; must be last entry for all state * transition groups - it'll be on .bss, so will be zeroed. */static struct llc_conn_state_trans llc_common_state_trans_end;/* LLC_CONN_STATE_ADM transitions *//* State transitions for LLC_CONN_EV_CONN_REQ event */static llc_conn_action_t llc_adm_actions_1[] = { [0] = llc_conn_ac_send_sabme_cmd_p_set_x, [1] = llc_conn_ac_start_ack_timer, [2] = llc_conn_ac_set_retry_cnt_0, [3] = llc_conn_ac_set_s_flag_0, [4] = NULL,};static struct llc_conn_state_trans llc_adm_state_trans_1 = { .ev = llc_conn_ev_conn_req, .next_state = LLC_CONN_STATE_SETUP, .ev_qualifiers = NONE, .ev_actions = llc_adm_actions_1,};/* State transitions for LLC_CONN_EV_RX_SABME_CMD_Pbit_SET_X event */static llc_conn_action_t llc_adm_actions_2[] = { [0] = llc_conn_ac_send_ua_rsp_f_set_p, [1] = llc_conn_ac_set_vs_0, [2] = llc_conn_ac_set_vr_0, [3] = llc_conn_ac_set_retry_cnt_0, [4] = llc_conn_ac_set_p_flag_0, [5] = llc_conn_ac_set_remote_busy_0, [6] = llc_conn_ac_conn_ind, [7] = NULL,};static struct llc_conn_state_trans llc_adm_state_trans_2 = { .ev = llc_conn_ev_rx_sabme_cmd_pbit_set_x, .next_state = LLC_CONN_STATE_NORMAL, .ev_qualifiers = NONE, .ev_actions = llc_adm_actions_2,};/* State transitions for LLC_CONN_EV_RX_DISC_CMD_Pbit_SET_X event */static llc_conn_action_t llc_adm_actions_3[] = { [0] = llc_conn_ac_send_dm_rsp_f_set_p, [1] = llc_conn_disc, [2] = NULL,};static struct llc_conn_state_trans llc_adm_state_trans_3 = { .ev = llc_conn_ev_rx_disc_cmd_pbit_set_x, .next_state = LLC_CONN_STATE_ADM, .ev_qualifiers = NONE, .ev_actions = llc_adm_actions_3,};/* State transitions for LLC_CONN_EV_RX_XXX_CMD_Pbit_SET_1 event */static llc_conn_action_t llc_adm_actions_4[] = { [0] = llc_conn_ac_send_dm_rsp_f_set_1, [1] = llc_conn_disc, [2] = NULL,};static struct llc_conn_state_trans llc_adm_state_trans_4 = { .ev = llc_conn_ev_rx_xxx_cmd_pbit_set_1, .next_state = LLC_CONN_STATE_ADM, .ev_qualifiers = NONE, .ev_actions = llc_adm_actions_4,};/* State transitions for LLC_CONN_EV_RX_XXX_YYY event */static llc_conn_action_t llc_adm_actions_5[] = { [0] = llc_conn_disc, [1] = NULL,};static struct llc_conn_state_trans llc_adm_state_trans_5 = { .ev = llc_conn_ev_rx_any_frame, .next_state = LLC_CONN_OUT_OF_SVC, .ev_qualifiers = NONE, .ev_actions = llc_adm_actions_5,};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -