Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

PlantUML Macro
@startuml
skinparam defaultTextAlignment center
!pragma useVerticalIf on
start
:core_thread_start_function;
:rbus_register\n(rbus_message_cb)|
:read_wifi_ps_db|
:wifi_hal_init|
:wifi_hal_events_register\n(wifi_hal_cb)|
repeat :for_each_radio
:wifi_hal_setRadioOperatingParams|
:wifi_hal_createVAP|
repeat while()
repeat :event_queue_wait;
split
    :rbus_event\n(web_config_message)<
    :decode_message|
    if (msg eq webconfig_msg) then (yes)
        if (validate_msg() eq SUCCESS) then (yes)
            :rbus_send_to_webconfig(ACK)>
        else (no)
            :rbus_send_to_webconfig(NACK)>
            stop
        endif
        if (wifi_hal_func() eq SUCCESS\n(HAL Wrapper)) then (yes)
            :write_wifi_ps_db|
            :rbus_send_to_webconfig(SUCCESS)>
        else (no)
            :rbus_send_to_webconfig(FAILURE)>
        endif
    elseif (msg eq ovdsbmgr_msg) then (yes)
        if (validate_msg() eq SUCCESS) then (yes)
            :rbus_send_to_ovsdbmgr(ACK)>
        else (no)
            :rbus_send_to_ovsdbmgr(NACK)>
            stop
        endif
        if (wifi_hal_func() eq SUCCESS\n(HAL Wrapper)) then (yes)
            :write_wifi_ps_db|
            :rbus_send_to_ovsdbmgr(SUCCESS)>
        else (no)
            :rbus_send_to_ovsdbmgr(FAILURE)>
        endif
    endif
split again
    :dml_event\n(web_config_message)<
    :decode_message|
    if (validate_msg() eq SUCCESS) then (yes)
        if (wifi_hal_func() eq SUCCESS) then (yes)
            :write_wifi_ps_db|
        endif
    endif
split again
    :hal_event\n(hal_cb_event)<
    if (event eq assoc_event) then (yes)
        :create_ovsdb_state_blob)|
        :rbus_send_to_ovsdbmgr(json_blob)>
    elseif (event eq disassoc_event) then (yes)
        :create_ovsdb_state_blob)|
        :rbus_send_to_ovsdbmgr(json_blob)>
    elseif (event eq vap_up_event) then (yes)
        :create_ovsdb_state_blob)|
        :rbus_send_to_ovsdbmgr(json_blob)>
    elseif (event eq vap_down_event) then (yes)
        :create_ovsdb_state_blob)|
        :rbus_send_to_ovsdbmgr(json_blob)>
    elseif (event eq bsal_event) then (yes)
        if (bsal_event eq bsal_event_probe_req) then (yes)
            :handle_bm_probe|
        elseif (bsal_event eq bsal_event_client_connect) then (yes)
            :handle_bm_client_connect|
        elseif (bsal_event eq bsal_event_client_disconnect) then (yes)
            :handle_bm_client_disconnect|
        elseif (bsal_event eq bsal_event_rssi_xing) then (yes)
            :handle_bm_rssi_xing|
        endif
    endif
split again
    :timeout<
    :stats_collection|
end split
repeat while()
:core_thread_end;
stop

start
:rbus_message_cb;
:create_rbus_event|
:event_queue_push(rbus_event)>
stop

start
:wifi_hal_cb;
:create_hal_event|
:event_queue_push(hal_event)>
stop

@enduml


Message Sequence Diagrams

Initialization

PlantUML Macro
@startuml
hide footbox
skinparam SequenceMessageAlign center
participant AGENT as "Core Thread"
participant HAL as "WiFi HAL Wrapper"
participant HOSTAP as "hostap"
participant DRIVER as "WiFi Driver"
participant LINUX as "Linux System"

group ctrl-plane
AGENT -> HAL: wifi_init
group Interfaces Enumeration
HAL -> LINUX: nl_80211cmd(NL80211_CMD_GET_WIPHY, NLM_F_DUMP, wiphy_dump_handler)
LINUX -> HAL: wiphy_dump_handler(NL80211_ATTR_WIPHY = 0, NL80211_ATTR_WIPHY_NAME, NL80211_ATTR_SUPPORTED_COMMANDS)
LINUX -> HAL: wiphy_dump_handler(NL80211_ATTR_WIPHY = 1, NL80211_ATTR_WIPHY_NAME, NL80211_ATTR_SUPPORTED_COMMANDS)
LINUX -> HAL: wiphy_dump_handler(NL80211_ATTR_WIPHY = 2, NL80211_ATTR_WIPHY_NAME, NL80211_ATTR_SUPPORTED_COMMANDS)
end
group for each Interface
HAL -> LINUX: HAL -> LINUX: nl_80211cmd(NL80211_CMD_GET_WIPHY, NL80211_ATTR_WIPHY = i, wiphy_get_info_handler)
LINUX -> HAL: wiphy_get_info_handler(NL80211_ATTR_CIPHER_SUITES, NL80211_ATTR_WIPHY_BANDS)
group for each band in NL80211_ATTR_WIPHY_BANDS
HAL -> HAL: phy_info_frequencies
HAL -> HAL: phy_info_ht_capa
HAL -> HAL: phy_info_vht_capa
HAL -> HAL: phy_info_rates
end group
end
HAL -> HOSTAP: eloop_init
HAL -> HOSTAP: eap_server_register_methods
HAL --> AGENT: Success
AGENT -> HAL: wifi_getHalCapability
HAL <-> DRIVER: get phy device capabilities
HAL --> AGENT: Success
group for each Radio
AGENT -> HAL: wifi_setRadioOperatingParameters(index, radio_param)
HAL <-> DRIVER: set radio parameters
HAL -> HOSTAP: update_hostap_config_params (update struct hostapd_config for this radio)
HAL --> AGENT: Success
AGENT -> HAL: wifi_createVAP(radio, vap_map)
group for each VAP
HAL --> LINUX: create interface
group vap_mode_ap
HAL -> LINUX: nl80211_cmd(NL80211_CMD_SET_INTERFACE, NL80211_IFTYPE_AP)
HAL -> HOSTAP: update_hostap_data (update struct hostapd_data for this interface)
HAL -> HOSTAP: update_hostap_bss (update struct hostapd_bss_config for this interface)
HAL -> HOSTAP: update_hostap_iface (update struct hostapd_iface for this interface)
HAL -> HOSTAP: setup_driver(wpa_drv_ops)
HAL -> HOSTAP: drv_init
HAL -> HOSTAP: hostapd_setup_bss(hostapd_data)
HOSTAP -> HAL: flush
HAL -> DRIVER: wifi_drv_flush
HOSTAP -> HAL: sta_deauth
HAL -> DRIVER: wifi_drv_sta_deauth
HOSTAP -> HAL: set_key
HAL -> DRIVER: wifi_drv_set_key
HOSTAP -> HAL: set_ap
HAL -> DRIVER: wifi_drv_set_ap
HOSTAP -> HAL: set_operstate
HAL -> DRIVER: nl80211_register_mgmt_frames(NL80211_CMD_FRAME, process_mgmt_frame)
HAL -> LINUX: bridge_rx(raw socket listen)
end
group vap_mode_sta
HAL -> LINUX: nl80211_cmd(NL80211_CMD_SET_INTERFACE, NL80211_IFTYPE_STA)
HAL -> LINUX: nl80211_start_scan(NL80211_CMD_TRIGGER_SCAN)
HAL -> LINUX: interface_rx(raw socket listen)
end
end
HAL --> AGENT: Success
end
AGENT -> HAL: wifi_run
HAL -> HOSTAP: eloop_run
HOSTAP -> HOSTAP: eloop
end

@enduml


Epic details:

  • Jira
    serverJIRA - 2
    serverId11deff04-0380-3a3d-a916-0849d4e573f7
    keyREFPLTB-2020

...