From 6207c9f1c19d9c7bb157c296bcdd7fa45c430edd Mon Sep 17 00:00:00 2001 From: helge Date: Wed, 16 Dec 2020 13:33:39 -0800 Subject: [PATCH] working clients show up --- include/ovsdb_ap_tables.hrl | 42 +++++++++++++++++++++++++++++++------ src/ovsdb_ap_config.erl | 20 ++++++++++++++++-- src/ovsdb_ap_rpc.erl | 11 +++++++--- 3 files changed, 62 insertions(+), 11 deletions(-) diff --git a/include/ovsdb_ap_tables.hrl b/include/ovsdb_ap_tables.hrl index b9302a8..ae522f0 100644 --- a/include/ovsdb_ap_tables.hrl +++ b/include/ovsdb_ap_tables.hrl @@ -40,15 +40,29 @@ -record ('AWLAN_Node',{ key_id :: binary() | ets_dont_care(), mqtt_settings = [<<"map">>,[]] :: term() | ets_dont_care(), - redirector_addr = <<>> :: term() | ets_dont_care(), - manager_addr = <<>> :: term() | ets_dont_care(), sku_number = [<<"set">>,[]] :: term() | ets_dont_care(), - serial_number = <<>> :: term() | ets_dont_care(), model = <<>>:: term() | ets_dont_care(), + version_matrix = [<<"map">>,[]] :: term() | ets_dont_care(), + id = <<"">> :: term(), firmware_version = <<>> :: term() | ets_dont_care(), + firmware_url = <<"">> :: term(), + upgrade_dl_timer = 0 :: term(), platform_version = <<>> :: term() | ets_dont_care(), - revision = <<>> :: term() | ets_dont_care(), - version_matrix = [<<"map">>,[]] :: term() | ets_dont_care() + firmware_pass = <<"">> :: term(), + upgrade_timer = 0 :: term(), + max_backoff = 60 :: term(), + led_config = [<<"map">>,[]] :: term(), + redirector_addr = <<>> :: term() | ets_dont_care(), + serial_number = <<>> :: term() | ets_dont_care(), + '_version' = [<<"uuid">>,<<"33fad8ee-4cd8-4818-a247-a4161ce3f2b0">>] :: term(), + mqtt_headers = [<<"map">>,[]] :: term(), + min_backoff = 30 :: term(), + device_mode = [<<"set">>,[]] :: term(), + upgrade_status = 0 :: term(), + revision = <<"1">> :: term() | ets_dont_care(), + mqtt_topics = [<<"map">>,[]] :: term(), + manager_addr = <<>> :: term() | ets_dont_care(), + factory_reset = [<<"set">>,[]] :: term() }). @@ -157,7 +171,23 @@ -record ('DHCP_leased_IP', { - key_id :: binary() | ets_dont_care() + key_id :: binary() | ets_dont_care(), + db_status = 1 :: term(), + subnet_mask = <<"255.255.255.0">> :: term(), + hostname = <<"">> :: term(), + secondary_dns = <<"0.0.0.0/0">> :: term(), + inet_addr = <<"">> :: term(), + lease_time = 43200 :: term(), + hwaddr = <<"">> :: term(), + '_version' = [<<"uuid">>,<<"463c9bfd-e539-419c-83d2-6048a1a9e2a7">>] :: term(), + manuf_id = 0 :: term(), + vendor_class = <<"">> :: term(), + device_type = 0 :: term(), + dhcp_server = <<"192.168.1.1">> :: term(), + device_name = <<"">> :: term(), + fingerprint = <<"1,121,3,6,15,114,119,252">> :: term(), + primary_dns = <<"192.168.1.1">> :: term(), + gateway = <<"192.168.1.1">> :: term() }). -record ('Wifi_Radio_Config', { diff --git a/src/ovsdb_ap_config.erl b/src/ovsdb_ap_config.erl index d7e2488..5be040d 100644 --- a/src/ovsdb_ap_config.erl +++ b/src/ovsdb_ap_config.erl @@ -53,7 +53,8 @@ configure (#cfg{ca_name=CAName, id=ID, redirector=R}=Config) -> {lan_addr,<<"192.168.1.1">>}, {lan_mac,Info#client_info.lan_mac0}, {tip_redirector,R}, - {wifi_clients,Info#client_info.wifi_clients} + {wifi_clients,Info#client_info.wifi_clients}, + {name,Info#client_info.name} % {serial,<<"21P10C69717951">>}, % {type,<<"EA8300">>}, % {wan_addr,<<"10.20.0.113">>}, @@ -101,6 +102,7 @@ initialize_ap_tables (Store, APC) -> create_table('Wifi_Inet_State',APC,Store), create_table('Wifi_RRM_Config',APC,Store), create_table('Wifi_Stats_Config',APC,Store), + create_table ('DHCP_leased_IP',APC,Store), create_table('Wifi_Associated_Clients',APC,Store). %%------------------------------------------------------------------------------ @@ -378,7 +380,7 @@ create_table ('Wifi_RRM_Config',_APC,Store) -> }); create_table ('Wifi_Associated_Clients',APC,Store) -> - io:format("CONFIGURED WIFI CLIENTS:~n~p~n",[proplists:get_value(wifi_clients,APC)]), + %io:format("CONFIGURED WIFI CLIENTS:~n~p~n",[proplists:get_value(wifi_clients,APC)]), F = fun({_,_,[MAC|_]}) -> ets:insert(Store, #'Wifi_Associated_Clients'{ key_id = utils:uuid_b(), @@ -399,6 +401,19 @@ create_table ('Wifi_Associated_Clients',APC,Store) -> % oftag = [<<"set">>,[]] % }); +create_table ('DHCP_leased_IP',APC,Store) -> + F = fun(N,{_,_,[MAC|_]}) -> + ets:insert(Store, #'DHCP_leased_IP'{ + key_id = utils:uuid_b(), + '_version' = [<<"uuid">>, utils:uuid_b()], + hostname = iolist_to_binary([proplists:get_value(name,APC),"_",integer_to_list(N)]), + inet_addr = iolist_to_binary(["192.168.1.",integer_to_list(N+1)]), + hwaddr = MAC + }) + end, + CL = proplists:get_value(wifi_clients,APC), + [F(N,X) || {N,X} <- lists:zip(lists:seq(1,length(CL)),CL)]; + create_table ('Wifi_Stats_Config',_APC,Store) -> ets:insert(Store, #'Wifi_Stats_Config'{ key_id = <<"f84b6834-80d6-4fd6-af73-98e3f4f96033">>, @@ -423,6 +438,7 @@ create_table ('AWLAN_Node',APC,Store) -> key_id = utils:uuid_b(), redirector_addr = proplists:get_value(tip_redirector,APC), serial_number = proplists:get_value(serial,APC), + id = proplists:get_value(serial,APC), model = proplists:get_value(type,APC), revision = <<"1">>, platform_version = <<"OPENWRT_EA8300">>, diff --git a/src/ovsdb_ap_rpc.erl b/src/ovsdb_ap_rpc.erl index 82a75b2..21649ce 100644 --- a/src/ovsdb_ap_rpc.erl +++ b/src/ovsdb_ap_rpc.erl @@ -32,8 +32,9 @@ eval_req(<<"transact">>,Id,#{<<"params">>:=_P},_Store) -> eval_req(<<"monitor">>,Id,#{<<"params">>:=[<<"Open_vSwitch">>,NSpace|Tables]},Store) when length(Tables)==1 -> Mon = req_monitor(NSpace,maps:to_list(hd(Tables)),Store), Res = make_result(Id,Mon), - %Json = iolist_to_binary(jiffy:encode(Res)), - io:format("MONITOR REQUEST (~s):~n",[NSpace]), %,Json]), + % Json = iolist_to_binary(jiffy:encode(Res,[pretty])), + % io:format("MONITOR REQUEST (~s):~n~s~n",[NSpace,Json]), + io:format("MONITOR REQUEST (~s):~n",[NSpace]), {ok, Res}; eval_req(<<"monitor">>,Id,P,_) -> ?L_EA("unrecognized monitor request: ~p",[P]), @@ -95,7 +96,11 @@ req_monitor (NameSpace,[{Table,Operations}|_],Store) -> case Table of <<"Wifi_Associated_Clients">> -> Res = monitor_result(modify,M,Store), - timer:apply_after(3000,?MODULE,publish_monitor,[self(),NameSpace,Res]), + timer:apply_after(5000,?MODULE,publish_monitor,[self(),NameSpace,Res]), + #{}; + <<"DHCP_leased_IP">> -> + Res = monitor_result(modify,M,Store), + timer:apply_after(5500,?MODULE,publish_monitor,[self(),NameSpace,Res]), #{}; _ -> Ret