⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 llc_c_ev.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
{	const struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);	return LLC_PDU_IS_RSP(pdu) && LLC_PDU_TYPE_IS_S(pdu) &&	       LLC_S_PF_IS_0(pdu) &&	       LLC_S_PDU_RSP(pdu) == LLC_2_PDU_RSP_RNR ? 0 : 1;}int llc_conn_ev_rx_rnr_rsp_fbit_set_1(struct sock *sk, struct sk_buff *skb){	const struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);	return LLC_PDU_IS_RSP(pdu) && LLC_PDU_TYPE_IS_S(pdu) &&	       LLC_S_PF_IS_1(pdu) &&	       LLC_S_PDU_RSP(pdu) == LLC_2_PDU_RSP_RNR ? 0 : 1;}int llc_conn_ev_rx_rr_cmd_pbit_set_0(struct sock *sk, struct sk_buff *skb){	const struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);	return LLC_PDU_IS_CMD(pdu) && LLC_PDU_TYPE_IS_S(pdu) &&	       LLC_S_PF_IS_0(pdu) &&	       LLC_S_PDU_CMD(pdu) == LLC_2_PDU_CMD_RR ? 0 : 1;}int llc_conn_ev_rx_rr_cmd_pbit_set_1(struct sock *sk, struct sk_buff *skb){	const struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);	return LLC_PDU_IS_CMD(pdu) && LLC_PDU_TYPE_IS_S(pdu) &&	       LLC_S_PF_IS_1(pdu) &&	       LLC_S_PDU_CMD(pdu) == LLC_2_PDU_CMD_RR ? 0 : 1;}int llc_conn_ev_rx_rr_rsp_fbit_set_0(struct sock *sk, struct sk_buff *skb){	const struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);	return llc_conn_space(sk, skb) &&	       LLC_PDU_IS_RSP(pdu) && LLC_PDU_TYPE_IS_S(pdu) &&	       LLC_S_PF_IS_0(pdu) &&	       LLC_S_PDU_RSP(pdu) == LLC_2_PDU_RSP_RR ? 0 : 1;}int llc_conn_ev_rx_rr_rsp_fbit_set_1(struct sock *sk, struct sk_buff *skb){	const struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);	return llc_conn_space(sk, skb) &&	       LLC_PDU_IS_RSP(pdu) && LLC_PDU_TYPE_IS_S(pdu) &&	       LLC_S_PF_IS_1(pdu) &&	       LLC_S_PDU_RSP(pdu) == LLC_2_PDU_RSP_RR ? 0 : 1;}int llc_conn_ev_rx_sabme_cmd_pbit_set_x(struct sock *sk, struct sk_buff *skb){	const struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb);	return LLC_PDU_IS_CMD(pdu) && LLC_PDU_TYPE_IS_U(pdu) &&	       LLC_U_PDU_CMD(pdu) == LLC_2_PDU_CMD_SABME ? 0 : 1;}int llc_conn_ev_rx_ua_rsp_fbit_set_x(struct sock *sk, struct sk_buff *skb){	struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb);	return LLC_PDU_IS_RSP(pdu) && LLC_PDU_TYPE_IS_U(pdu) &&	       LLC_U_PDU_RSP(pdu) == LLC_2_PDU_RSP_UA ? 0 : 1;}int llc_conn_ev_rx_xxx_cmd_pbit_set_1(struct sock *sk, struct sk_buff *skb){	u16 rc = 1;	const struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);	if (LLC_PDU_IS_CMD(pdu)) {		if (LLC_PDU_TYPE_IS_I(pdu) || LLC_PDU_TYPE_IS_S(pdu)) {			if (LLC_I_PF_IS_1(pdu))				rc = 0;		} else if (LLC_PDU_TYPE_IS_U(pdu) && LLC_U_PF_IS_1(pdu))			rc = 0;	}	return rc;}int llc_conn_ev_rx_xxx_cmd_pbit_set_x(struct sock *sk, struct sk_buff *skb){	u16 rc = 1;	const struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb);	if (LLC_PDU_IS_CMD(pdu)) {		if (LLC_PDU_TYPE_IS_I(pdu) || LLC_PDU_TYPE_IS_S(pdu))			rc = 0;		else if (LLC_PDU_TYPE_IS_U(pdu))			switch (LLC_U_PDU_CMD(pdu)) {			case LLC_2_PDU_CMD_SABME:			case LLC_2_PDU_CMD_DISC:				rc = 0;				break;			}	}	return rc;}int llc_conn_ev_rx_xxx_rsp_fbit_set_x(struct sock *sk, struct sk_buff *skb){	u16 rc = 1;	const struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb);	if (LLC_PDU_IS_RSP(pdu)) {		if (LLC_PDU_TYPE_IS_I(pdu) || LLC_PDU_TYPE_IS_S(pdu))			rc = 0;		else if (LLC_PDU_TYPE_IS_U(pdu))			switch (LLC_U_PDU_RSP(pdu)) {			case LLC_2_PDU_RSP_UA:			case LLC_2_PDU_RSP_DM:			case LLC_2_PDU_RSP_FRMR:				rc = 0;				break;			}	}	return rc;}int llc_conn_ev_rx_zzz_cmd_pbit_set_x_inval_nr(struct sock *sk,					       struct sk_buff *skb){	u16 rc = 1;	const struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);	const u8 vs = llc_sk(sk)->vS;	const u8 nr = LLC_I_GET_NR(pdu);	if (LLC_PDU_IS_CMD(pdu) &&	    (LLC_PDU_TYPE_IS_I(pdu) || LLC_PDU_TYPE_IS_S(pdu)) &&	    nr != vs && llc_util_nr_inside_tx_window(sk, nr)) {		dprintk("%s: matched, state=%d, vs=%d, nr=%d\n",			__FUNCTION__, llc_sk(sk)->state, vs, nr);		rc = 0;	}	return rc;}int llc_conn_ev_rx_zzz_rsp_fbit_set_x_inval_nr(struct sock *sk,					       struct sk_buff *skb){	u16 rc = 1;	const struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);	const u8 vs = llc_sk(sk)->vS;	const u8 nr = LLC_I_GET_NR(pdu);	if (LLC_PDU_IS_RSP(pdu) &&	    (LLC_PDU_TYPE_IS_I(pdu) || LLC_PDU_TYPE_IS_S(pdu)) &&	    nr != vs && llc_util_nr_inside_tx_window(sk, nr)) {		rc = 0;		dprintk("%s: matched, state=%d, vs=%d, nr=%d\n",			__FUNCTION__, llc_sk(sk)->state, vs, nr);	}	return rc;}int llc_conn_ev_rx_any_frame(struct sock *sk, struct sk_buff *skb){	return 0;}int llc_conn_ev_p_tmr_exp(struct sock *sk, struct sk_buff *skb){	const struct llc_conn_state_ev *ev = llc_conn_ev(skb);	return ev->type != LLC_CONN_EV_TYPE_P_TMR;}int llc_conn_ev_ack_tmr_exp(struct sock *sk, struct sk_buff *skb){	const struct llc_conn_state_ev *ev = llc_conn_ev(skb);	return ev->type != LLC_CONN_EV_TYPE_ACK_TMR;}int llc_conn_ev_rej_tmr_exp(struct sock *sk, struct sk_buff *skb){	const struct llc_conn_state_ev *ev = llc_conn_ev(skb);	return ev->type != LLC_CONN_EV_TYPE_REJ_TMR;}int llc_conn_ev_busy_tmr_exp(struct sock *sk, struct sk_buff *skb){	const struct llc_conn_state_ev *ev = llc_conn_ev(skb);	return ev->type != LLC_CONN_EV_TYPE_BUSY_TMR;}int llc_conn_ev_init_p_f_cycle(struct sock *sk, struct sk_buff *skb){	return 1;}int llc_conn_ev_tx_buffer_full(struct sock *sk, struct sk_buff *skb){	const struct llc_conn_state_ev *ev = llc_conn_ev(skb);	return ev->type == LLC_CONN_EV_TYPE_SIMPLE &&	       ev->prim_type == LLC_CONN_EV_TX_BUFF_FULL ? 0 : 1;}/* Event qualifier functions * * these functions simply verify the value of a state flag associated with * the connection and return either a 0 for success or a non-zero value * for not-success; verify the event is the type we expect */int llc_conn_ev_qlfy_data_flag_eq_1(struct sock *sk, struct sk_buff *skb){	return llc_sk(sk)->data_flag != 1;}int llc_conn_ev_qlfy_data_flag_eq_0(struct sock *sk, struct sk_buff *skb){	return llc_sk(sk)->data_flag;}int llc_conn_ev_qlfy_data_flag_eq_2(struct sock *sk, struct sk_buff *skb){	return llc_sk(sk)->data_flag != 2;}int llc_conn_ev_qlfy_p_flag_eq_1(struct sock *sk, struct sk_buff *skb){	return llc_sk(sk)->p_flag != 1;}/** *	conn_ev_qlfy_last_frame_eq_1 - checks if frame is last in tx window *	@sk: current connection structure. *	@skb: current event. * *	This function determines when frame which is sent, is last frame of *	transmit window, if it is then this function return zero else return *	one.  This function is used for sending last frame of transmit window *	as I-format command with p-bit set to one. Returns 0 if frame is last *	frame, 1 otherwise. */int llc_conn_ev_qlfy_last_frame_eq_1(struct sock *sk, struct sk_buff *skb){	return !(skb_queue_len(&llc_sk(sk)->pdu_unack_q) + 1 == llc_sk(sk)->k);}/** *	conn_ev_qlfy_last_frame_eq_0 - checks if frame isn't last in tx window *	@sk: current connection structure. *	@skb: current event. * *	This function determines when frame which is sent, isn't last frame of *	transmit window, if it isn't then this function return zero else return *	one. Returns 0 if frame isn't last frame, 1 otherwise. */int llc_conn_ev_qlfy_last_frame_eq_0(struct sock *sk, struct sk_buff *skb){	return skb_queue_len(&llc_sk(sk)->pdu_unack_q) + 1 == llc_sk(sk)->k;}int llc_conn_ev_qlfy_p_flag_eq_0(struct sock *sk, struct sk_buff *skb){	return llc_sk(sk)->p_flag;}int llc_conn_ev_qlfy_p_flag_eq_f(struct sock *sk, struct sk_buff *skb){	u8 f_bit;	llc_pdu_decode_pf_bit(skb, &f_bit);	return llc_sk(sk)->p_flag == f_bit ? 0 : 1;}int llc_conn_ev_qlfy_remote_busy_eq_0(struct sock *sk, struct sk_buff *skb){	return llc_sk(sk)->remote_busy_flag;}int llc_conn_ev_qlfy_remote_busy_eq_1(struct sock *sk, struct sk_buff *skb){	return !llc_sk(sk)->remote_busy_flag;}int llc_conn_ev_qlfy_retry_cnt_lt_n2(struct sock *sk, struct sk_buff *skb){	return !(llc_sk(sk)->retry_count < llc_sk(sk)->n2);}int llc_conn_ev_qlfy_retry_cnt_gte_n2(struct sock *sk, struct sk_buff *skb){	return !(llc_sk(sk)->retry_count >= llc_sk(sk)->n2);}int llc_conn_ev_qlfy_s_flag_eq_1(struct sock *sk, struct sk_buff *skb){	return !llc_sk(sk)->s_flag;}int llc_conn_ev_qlfy_s_flag_eq_0(struct sock *sk, struct sk_buff *skb){	return llc_sk(sk)->s_flag;}int llc_conn_ev_qlfy_cause_flag_eq_1(struct sock *sk, struct sk_buff *skb){	return !llc_sk(sk)->cause_flag;}int llc_conn_ev_qlfy_cause_flag_eq_0(struct sock *sk, struct sk_buff *skb){	return llc_sk(sk)->cause_flag;}int llc_conn_ev_qlfy_set_status_conn(struct sock *sk, struct sk_buff *skb){	struct llc_conn_state_ev *ev = llc_conn_ev(skb);	ev->status = LLC_STATUS_CONN;	return 0;}int llc_conn_ev_qlfy_set_status_disc(struct sock *sk, struct sk_buff *skb){	struct llc_conn_state_ev *ev = llc_conn_ev(skb);	ev->status = LLC_STATUS_DISC;	return 0;}int llc_conn_ev_qlfy_set_status_failed(struct sock *sk, struct sk_buff *skb){	struct llc_conn_state_ev *ev = llc_conn_ev(skb);	ev->status = LLC_STATUS_FAILED;	return 0;}int llc_conn_ev_qlfy_set_status_remote_busy(struct sock *sk,					    struct sk_buff *skb){	struct llc_conn_state_ev *ev = llc_conn_ev(skb);	ev->status = LLC_STATUS_REMOTE_BUSY;	return 0;}int llc_conn_ev_qlfy_set_status_refuse(struct sock *sk, struct sk_buff *skb){	struct llc_conn_state_ev *ev = llc_conn_ev(skb);	ev->status = LLC_STATUS_REFUSE;	return 0;}int llc_conn_ev_qlfy_set_status_conflict(struct sock *sk, struct sk_buff *skb){	struct llc_conn_state_ev *ev = llc_conn_ev(skb);	ev->status = LLC_STATUS_CONFLICT;	return 0;}int llc_conn_ev_qlfy_set_status_rst_done(struct sock *sk, struct sk_buff *skb){	struct llc_conn_state_ev *ev = llc_conn_ev(skb);	ev->status = LLC_STATUS_RESET_DONE;	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -