xref: /linux/net/llc/llc_s_st.c (revision 90e63d5354951d37fa2b3b91e6f17b95d2bf9bee)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * llc_s_st.c - Defines SAP component state machine transitions.
4  *
5  * The followed transitions are SAP component state machine transitions
6  * which are described in 802.2 LLC protocol standard document.
7  *
8  * Copyright (c) 1997 by Procom Technology, Inc.
9  *		 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
10  */
11 #include <linux/types.h>
12 #include <net/llc_if.h>
13 #include <net/llc_s_ev.h>
14 #include <net/llc_s_ac.h>
15 #include <net/llc_s_st.h>
16 
17 /* dummy last-transition indicator; common to all state transition groups
18  * last entry for this state
19  * all members are zeros, .bss zeroes it
20  */
21 static const struct llc_sap_state_trans llc_sap_state_trans_end;
22 
23 /* state LLC_SAP_STATE_INACTIVE transition for
24  * LLC_SAP_EV_ACTIVATION_REQ event
25  */
26 static const llc_sap_action_t llc_sap_inactive_state_actions_1[] = {
27 	[0] = llc_sap_action_report_status,
28 	[1] = NULL,
29 };
30 
31 static const struct llc_sap_state_trans llc_sap_inactive_state_trans_1 = {
32 	.ev =		llc_sap_ev_activation_req,
33 	.next_state =	LLC_SAP_STATE_ACTIVE,
34 	.ev_actions =	llc_sap_inactive_state_actions_1,
35 };
36 
37 /* array of pointers; one to each transition */
38 static const struct llc_sap_state_trans *llc_sap_inactive_state_transitions[] = {
39 	[0] = &llc_sap_inactive_state_trans_1,
40 	[1] = &llc_sap_state_trans_end,
41 };
42 
43 /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_UI event */
44 static const llc_sap_action_t llc_sap_active_state_actions_1[] = {
45 	[0] = llc_sap_action_unitdata_ind,
46 	[1] = NULL,
47 };
48 
49 static const struct llc_sap_state_trans llc_sap_active_state_trans_1 = {
50 	.ev =		llc_sap_ev_rx_ui,
51 	.next_state =	LLC_SAP_STATE_ACTIVE,
52 	.ev_actions =	llc_sap_active_state_actions_1,
53 };
54 
55 /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_UNITDATA_REQ event */
56 static const llc_sap_action_t llc_sap_active_state_actions_2[] = {
57 	[0] = llc_sap_action_send_ui,
58 	[1] = NULL,
59 };
60 
61 static const struct llc_sap_state_trans llc_sap_active_state_trans_2 = {
62 	.ev =		llc_sap_ev_unitdata_req,
63 	.next_state =	LLC_SAP_STATE_ACTIVE,
64 	.ev_actions =	llc_sap_active_state_actions_2,
65 };
66 
67 /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_XID_REQ event */
68 static const llc_sap_action_t llc_sap_active_state_actions_3[] = {
69 	[0] = llc_sap_action_send_xid_c,
70 	[1] = NULL,
71 };
72 
73 static const struct llc_sap_state_trans llc_sap_active_state_trans_3 = {
74 	.ev =		llc_sap_ev_xid_req,
75 	.next_state =	LLC_SAP_STATE_ACTIVE,
76 	.ev_actions =	llc_sap_active_state_actions_3,
77 };
78 
79 /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_XID_C event */
80 static const llc_sap_action_t llc_sap_active_state_actions_4[] = {
81 	[0] = llc_sap_action_send_xid_r,
82 	[1] = NULL,
83 };
84 
85 static const struct llc_sap_state_trans llc_sap_active_state_trans_4 = {
86 	.ev =		llc_sap_ev_rx_xid_c,
87 	.next_state =	LLC_SAP_STATE_ACTIVE,
88 	.ev_actions =	llc_sap_active_state_actions_4,
89 };
90 
91 /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_XID_R event */
92 static const llc_sap_action_t llc_sap_active_state_actions_5[] = {
93 	[0] = llc_sap_action_xid_ind,
94 	[1] = NULL,
95 };
96 
97 static const struct llc_sap_state_trans llc_sap_active_state_trans_5 = {
98 	.ev =		llc_sap_ev_rx_xid_r,
99 	.next_state =	LLC_SAP_STATE_ACTIVE,
100 	.ev_actions =	llc_sap_active_state_actions_5,
101 };
102 
103 /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_TEST_REQ event */
104 static const llc_sap_action_t llc_sap_active_state_actions_6[] = {
105 	[0] = llc_sap_action_send_test_c,
106 	[1] = NULL,
107 };
108 
109 static const struct llc_sap_state_trans llc_sap_active_state_trans_6 = {
110 	.ev =		llc_sap_ev_test_req,
111 	.next_state =	LLC_SAP_STATE_ACTIVE,
112 	.ev_actions =	llc_sap_active_state_actions_6,
113 };
114 
115 /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_TEST_C event */
116 static const llc_sap_action_t llc_sap_active_state_actions_7[] = {
117 	[0] = llc_sap_action_send_test_r,
118 	[1] = NULL,
119 };
120 
121 static const struct llc_sap_state_trans llc_sap_active_state_trans_7 = {
122 	.ev =		llc_sap_ev_rx_test_c,
123 	.next_state =	LLC_SAP_STATE_ACTIVE,
124 	.ev_actions =	llc_sap_active_state_actions_7
125 };
126 
127 /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_TEST_R event */
128 static const llc_sap_action_t llc_sap_active_state_actions_8[] = {
129 	[0] = llc_sap_action_test_ind,
130 	[1] = NULL,
131 };
132 
133 static const struct llc_sap_state_trans llc_sap_active_state_trans_8 = {
134 	.ev =		llc_sap_ev_rx_test_r,
135 	.next_state =	LLC_SAP_STATE_ACTIVE,
136 	.ev_actions =	llc_sap_active_state_actions_8,
137 };
138 
139 /* state LLC_SAP_STATE_ACTIVE transition for
140  * LLC_SAP_EV_DEACTIVATION_REQ event
141  */
142 static const llc_sap_action_t llc_sap_active_state_actions_9[] = {
143 	[0] = llc_sap_action_report_status,
144 	[1] = NULL,
145 };
146 
147 static const struct llc_sap_state_trans llc_sap_active_state_trans_9 = {
148 	.ev =		llc_sap_ev_deactivation_req,
149 	.next_state =	LLC_SAP_STATE_INACTIVE,
150 	.ev_actions =	llc_sap_active_state_actions_9
151 };
152 
153 /* array of pointers; one to each transition */
154 static const struct llc_sap_state_trans *llc_sap_active_state_transitions[] = {
155 	[0] = &llc_sap_active_state_trans_2,
156 	[1] = &llc_sap_active_state_trans_1,
157 	[2] = &llc_sap_active_state_trans_3,
158 	[3] = &llc_sap_active_state_trans_4,
159 	[4] = &llc_sap_active_state_trans_5,
160 	[5] = &llc_sap_active_state_trans_6,
161 	[6] = &llc_sap_active_state_trans_7,
162 	[7] = &llc_sap_active_state_trans_8,
163 	[8] = &llc_sap_active_state_trans_9,
164 	[9] = &llc_sap_state_trans_end,
165 };
166 
167 /* SAP state transition table */
168 struct llc_sap_state llc_sap_state_table[LLC_NR_SAP_STATES] = {
169 	[LLC_SAP_STATE_INACTIVE - 1] = {
170 		.curr_state	= LLC_SAP_STATE_INACTIVE,
171 		.transitions	= llc_sap_inactive_state_transitions,
172 	},
173 	[LLC_SAP_STATE_ACTIVE - 1] = {
174 		.curr_state	= LLC_SAP_STATE_ACTIVE,
175 		.transitions	= llc_sap_active_state_transitions,
176 	},
177 };
178