
# Copyright 2017-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


States:
    ST_EAP_SETUP:
        Events:
            EVT_EAP_SETUP:
                Actions:
                    - _eapSetup
                NextState: ST_EAP_START
    ST_EAP_START:
        Events:
            EVT_EAP_START:
                Actions:
                    - _eapStart
                NextState: ST_EAP_ID_REQ
    ST_EAP_ID_REQ:
        Events:
            EVT_EAP_ID_REQ:
                Actions:
                    - _eapIdReq
                NextState: ST_EAP_TLS_HELLO_REQ
    ST_EAP_TLS_HELLO_REQ:
        Events:
            EVT_EAP_TLS_HELLO_REQ:
                Actions:
                    - _eapTlsHelloReq
                NextState: ST_EAP_TLS_CERT_REQ
    ST_EAP_TLS_CERT_REQ:
        Events:
            EVT_EAP_TLS_CERT_REQ:
                Actions:
                    - _eapTlsCertReq
                NextState: ST_EAP_TLS_CHANGE_CIPHER_SPEC
    ST_EAP_TLS_CHANGE_CIPHER_SPEC:
        Events:
            EVT_EAP_TLS_CHANGE_CIPHER_SPEC:
                Actions:
                    - _eapTlsChangeCipherSpec
                NextState: ST_EAP_TLS_FINISHED
    ST_EAP_TLS_FINISHED:
        Events:
            EVT_EAP_TLS_FINISHED:
                Actions:
                    - _eapTlsFinished
                NextState: ST_EAP_TLS_DONE
        