2005-04-17 02:20:36 +04:00
# ifndef LLC_C_EV_H
# define LLC_C_EV_H
/*
* Copyright ( c ) 1997 by Procom Technology , Inc .
* 2001 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 <net/sock.h>
/* Connection component state transition event qualifiers */
/* Types of events (possible values in 'ev->type') */
# define LLC_CONN_EV_TYPE_SIMPLE 1
# define LLC_CONN_EV_TYPE_CONDITION 2
# define LLC_CONN_EV_TYPE_PRIM 3
# define LLC_CONN_EV_TYPE_PDU 4 /* command/response PDU */
# define LLC_CONN_EV_TYPE_ACK_TMR 5
# define LLC_CONN_EV_TYPE_P_TMR 6
# define LLC_CONN_EV_TYPE_REJ_TMR 7
# define LLC_CONN_EV_TYPE_BUSY_TMR 8
# define LLC_CONN_EV_TYPE_RPT_STATUS 9
# define LLC_CONN_EV_TYPE_SENDACK_TMR 10
# define NBR_CONN_EV 5
/* Connection events which cause state transitions when fully qualified */
# define LLC_CONN_EV_CONN_REQ 1
# define LLC_CONN_EV_CONN_RESP 2
# define LLC_CONN_EV_DATA_REQ 3
# define LLC_CONN_EV_DISC_REQ 4
# define LLC_CONN_EV_RESET_REQ 5
# define LLC_CONN_EV_RESET_RESP 6
# define LLC_CONN_EV_LOCAL_BUSY_DETECTED 7
# define LLC_CONN_EV_LOCAL_BUSY_CLEARED 8
# define LLC_CONN_EV_RX_BAD_PDU 9
# define LLC_CONN_EV_RX_DISC_CMD_Pbit_SET_X 10
# define LLC_CONN_EV_RX_DM_RSP_Fbit_SET_X 11
# define LLC_CONN_EV_RX_FRMR_RSP_Fbit_SET_X 12
# define LLC_CONN_EV_RX_I_CMD_Pbit_SET_X 13
# define LLC_CONN_EV_RX_I_CMD_Pbit_SET_X_UNEXPD_Ns 14
# define LLC_CONN_EV_RX_I_CMD_Pbit_SET_X_INVAL_Ns 15
# define LLC_CONN_EV_RX_I_RSP_Fbit_SET_X 16
# define LLC_CONN_EV_RX_I_RSP_Fbit_SET_X_UNEXPD_Ns 17
# define LLC_CONN_EV_RX_I_RSP_Fbit_SET_X_INVAL_Ns 18
# define LLC_CONN_EV_RX_REJ_CMD_Pbit_SET_X 19
# define LLC_CONN_EV_RX_REJ_RSP_Fbit_SET_X 20
# define LLC_CONN_EV_RX_RNR_CMD_Pbit_SET_X 21
# define LLC_CONN_EV_RX_RNR_RSP_Fbit_SET_X 22
# define LLC_CONN_EV_RX_RR_CMD_Pbit_SET_X 23
# define LLC_CONN_EV_RX_RR_RSP_Fbit_SET_X 24
# define LLC_CONN_EV_RX_SABME_CMD_Pbit_SET_X 25
# define LLC_CONN_EV_RX_UA_RSP_Fbit_SET_X 26
# define LLC_CONN_EV_RX_XXX_CMD_Pbit_SET_X 27
# define LLC_CONN_EV_RX_XXX_RSP_Fbit_SET_X 28
# define LLC_CONN_EV_RX_XXX_YYY 29
# define LLC_CONN_EV_RX_ZZZ_CMD_Pbit_SET_X_INVAL_Nr 30
# define LLC_CONN_EV_RX_ZZZ_RSP_Fbit_SET_X_INVAL_Nr 31
# define LLC_CONN_EV_P_TMR_EXP 32
# define LLC_CONN_EV_ACK_TMR_EXP 33
# define LLC_CONN_EV_REJ_TMR_EXP 34
# define LLC_CONN_EV_BUSY_TMR_EXP 35
# define LLC_CONN_EV_RX_XXX_CMD_Pbit_SET_1 36
# define LLC_CONN_EV_RX_XXX_CMD_Pbit_SET_0 37
# define LLC_CONN_EV_RX_I_CMD_Pbit_SET_0_UNEXPD_Ns 38
# define LLC_CONN_EV_RX_I_RSP_Fbit_SET_0_UNEXPD_Ns 39
# define LLC_CONN_EV_RX_I_RSP_Fbit_SET_1_UNEXPD_Ns 40
# define LLC_CONN_EV_RX_I_CMD_Pbit_SET_1_UNEXPD_Ns 41
# define LLC_CONN_EV_RX_I_CMD_Pbit_SET_0 42
# define LLC_CONN_EV_RX_I_RSP_Fbit_SET_0 43
# define LLC_CONN_EV_RX_I_CMD_Pbit_SET_1 44
# define LLC_CONN_EV_RX_RR_CMD_Pbit_SET_0 45
# define LLC_CONN_EV_RX_RR_RSP_Fbit_SET_0 46
# define LLC_CONN_EV_RX_RR_RSP_Fbit_SET_1 47
# define LLC_CONN_EV_RX_RR_CMD_Pbit_SET_1 48
# define LLC_CONN_EV_RX_RNR_CMD_Pbit_SET_0 49
# define LLC_CONN_EV_RX_RNR_RSP_Fbit_SET_0 50
# define LLC_CONN_EV_RX_RNR_RSP_Fbit_SET_1 51
# define LLC_CONN_EV_RX_RNR_CMD_Pbit_SET_1 52
# define LLC_CONN_EV_RX_REJ_CMD_Pbit_SET_0 53
# define LLC_CONN_EV_RX_REJ_RSP_Fbit_SET_0 54
# define LLC_CONN_EV_RX_REJ_CMD_Pbit_SET_1 55
# define LLC_CONN_EV_RX_I_RSP_Fbit_SET_1 56
# define LLC_CONN_EV_RX_REJ_RSP_Fbit_SET_1 57
# define LLC_CONN_EV_RX_XXX_RSP_Fbit_SET_1 58
# define LLC_CONN_EV_TX_BUFF_FULL 59
# define LLC_CONN_EV_INIT_P_F_CYCLE 100
/*
* Connection event qualifiers ; for some events a certain combination of
* these qualifiers must be TRUE before event recognized valid for state ;
* these constants act as indexes into the Event Qualifier function
* table
*/
# define LLC_CONN_EV_QFY_DATA_FLAG_EQ_1 1
# define LLC_CONN_EV_QFY_DATA_FLAG_EQ_0 2
# define LLC_CONN_EV_QFY_DATA_FLAG_EQ_2 3
# define LLC_CONN_EV_QFY_P_FLAG_EQ_1 4
# define LLC_CONN_EV_QFY_P_FLAG_EQ_0 5
# define LLC_CONN_EV_QFY_P_FLAG_EQ_Fbit 6
# define LLC_CONN_EV_QFY_REMOTE_BUSY_EQ_0 7
# define LLC_CONN_EV_QFY_RETRY_CNT_LT_N2 8
# define LLC_CONN_EV_QFY_RETRY_CNT_GTE_N2 9
# define LLC_CONN_EV_QFY_S_FLAG_EQ_1 10
# define LLC_CONN_EV_QFY_S_FLAG_EQ_0 11
# define LLC_CONN_EV_QFY_INIT_P_F_CYCLE 12
struct llc_conn_state_ev {
u8 type ;
u8 prim ;
u8 prim_type ;
u8 reason ;
u8 status ;
u8 ind_prim ;
u8 cfm_prim ;
} ;
static __inline__ struct llc_conn_state_ev * llc_conn_ev ( struct sk_buff * skb )
{
return ( struct llc_conn_state_ev * ) skb - > cb ;
}
typedef int ( * llc_conn_ev_t ) ( struct sock * sk , struct sk_buff * skb ) ;
typedef int ( * llc_conn_ev_qfyr_t ) ( struct sock * sk , struct sk_buff * skb ) ;
2013-09-21 21:22:45 +04:00
int llc_conn_ev_conn_req ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_data_req ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_disc_req ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rst_req ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_local_busy_detected ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_local_busy_cleared ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_bad_pdu ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_disc_cmd_pbit_set_x ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_dm_rsp_fbit_set_x ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_frmr_rsp_fbit_set_x ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_cmd_pbit_set_x_inval_ns ( struct sock * sk ,
struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_rsp_fbit_set_x ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_rsp_fbit_set_x_unexpd_ns ( struct sock * sk ,
2005-04-17 02:20:36 +04:00
struct sk_buff * skb ) ;
2013-09-21 21:22:45 +04:00
int llc_conn_ev_rx_i_rsp_fbit_set_x_inval_ns ( struct sock * sk ,
struct sk_buff * skb ) ;
int llc_conn_ev_rx_rej_rsp_fbit_set_x ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_sabme_cmd_pbit_set_x ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_ua_rsp_fbit_set_x ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_xxx_cmd_pbit_set_x ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_xxx_rsp_fbit_set_x ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_zzz_cmd_pbit_set_x_inval_nr ( struct sock * sk ,
2005-04-17 02:20:36 +04:00
struct sk_buff * skb ) ;
2013-09-21 21:22:45 +04:00
int llc_conn_ev_rx_zzz_rsp_fbit_set_x_inval_nr ( struct sock * sk ,
struct sk_buff * skb ) ;
int llc_conn_ev_p_tmr_exp ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_ack_tmr_exp ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rej_tmr_exp ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_busy_tmr_exp ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_sendack_tmr_exp ( struct sock * sk , struct sk_buff * skb ) ;
2005-04-17 02:20:36 +04:00
/* NOT_USED functions and their variations */
2013-09-21 21:22:45 +04:00
int llc_conn_ev_rx_xxx_cmd_pbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_xxx_rsp_fbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_cmd_pbit_set_0_unexpd_ns ( struct sock * sk ,
struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_cmd_pbit_set_1_unexpd_ns ( struct sock * sk ,
struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_cmd_pbit_set_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_cmd_pbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_rsp_fbit_set_0_unexpd_ns ( struct sock * sk ,
struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_rsp_fbit_set_1_unexpd_ns ( struct sock * sk ,
struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_rsp_fbit_set_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_i_rsp_fbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rr_cmd_pbit_set_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rr_cmd_pbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rr_rsp_fbit_set_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rr_rsp_fbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rnr_cmd_pbit_set_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rnr_cmd_pbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rnr_rsp_fbit_set_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rnr_rsp_fbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rej_cmd_pbit_set_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rej_cmd_pbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rej_rsp_fbit_set_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_rej_rsp_fbit_set_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_rx_any_frame ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_tx_buffer_full ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_init_p_f_cycle ( struct sock * sk , struct sk_buff * skb ) ;
2005-04-17 02:20:36 +04:00
/* Available connection action qualifiers */
2013-09-21 21:22:45 +04:00
int llc_conn_ev_qlfy_data_flag_eq_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_data_flag_eq_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_data_flag_eq_2 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_p_flag_eq_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_last_frame_eq_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_last_frame_eq_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_p_flag_eq_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_p_flag_eq_f ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_remote_busy_eq_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_remote_busy_eq_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_retry_cnt_lt_n2 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_retry_cnt_gte_n2 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_s_flag_eq_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_s_flag_eq_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_cause_flag_eq_1 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_cause_flag_eq_0 ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_set_status_conn ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_set_status_disc ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_set_status_failed ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_set_status_remote_busy ( struct sock * sk ,
2005-04-17 02:20:36 +04:00
struct sk_buff * skb ) ;
2013-09-21 21:22:45 +04:00
int llc_conn_ev_qlfy_set_status_refuse ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_set_status_conflict ( struct sock * sk , struct sk_buff * skb ) ;
int llc_conn_ev_qlfy_set_status_rst_done ( struct sock * sk , struct sk_buff * skb ) ;
2005-04-17 02:20:36 +04:00
static __inline__ int llc_conn_space ( struct sock * sk , struct sk_buff * skb )
{
return atomic_read ( & sk - > sk_rmem_alloc ) + skb - > truesize <
2012-04-15 09:58:06 +04:00
( unsigned int ) sk - > sk_rcvbuf ;
2005-04-17 02:20:36 +04:00
}
# endif /* LLC_C_EV_H */