From d8176f43789e5feecb777ffc94851c52632efb8c Mon Sep 17 00:00:00 2001 From: JianBo He Date: Thu, 16 Sep 2021 15:27:26 +0800 Subject: [PATCH] chore(gw): pass listener id into listener params --- apps/emqx_gateway/src/coap/emqx_coap_channel.erl | 6 ++++++ apps/emqx_gateway/src/coap/emqx_coap_impl.erl | 4 ++-- apps/emqx_gateway/src/emqx_gateway_ctx.erl | 4 ++-- apps/emqx_gateway/src/emqx_gateway_utils.erl | 6 +----- apps/emqx_gateway/src/exproto/emqx_exproto_channel.erl | 7 ++++++- apps/emqx_gateway/src/exproto/emqx_exproto_impl.erl | 1 + apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl | 6 ++++++ apps/emqx_gateway/src/lwm2m/emqx_lwm2m_impl.erl | 1 + apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl | 6 ++++++ apps/emqx_gateway/src/mqttsn/emqx_sn_impl.erl | 5 +++-- apps/emqx_gateway/test/emqx_lwm2m_SUITE.erl | 2 +- 11 files changed, 35 insertions(+), 13 deletions(-) diff --git a/apps/emqx_gateway/src/coap/emqx_coap_channel.erl b/apps/emqx_gateway/src/coap/emqx_coap_channel.erl index 86b1f023f..8ec1d568a 100644 --- a/apps/emqx_gateway/src/coap/emqx_coap_channel.erl +++ b/apps/emqx_gateway/src/coap/emqx_coap_channel.erl @@ -103,9 +103,15 @@ init(ConnInfo = #{peername := {PeerHost, _}, #{ctx := Ctx} = Config) -> Peercert = maps:get(peercert, ConnInfo, undefined), Mountpoint = maps:get(mountpoint, Config, <<>>), + ListenerId = case maps:get(listener, Config, undefined) of + undefined -> undefined; + {GwName, Type, LisName} -> + emqx_gateway_utils:listener_id(GwName, Type, LisName) + end, ClientInfo = set_peercert_infos( Peercert, #{ zone => default + , listener => ListenerId , protocol => 'coap' , peerhost => PeerHost , sockport => SockPort diff --git a/apps/emqx_gateway/src/coap/emqx_coap_impl.erl b/apps/emqx_gateway/src/coap/emqx_coap_impl.erl index 055eab759..5fd557def 100644 --- a/apps/emqx_gateway/src/coap/emqx_coap_impl.erl +++ b/apps/emqx_gateway/src/coap/emqx_coap_impl.erl @@ -100,8 +100,8 @@ start_listener(GwName, Ctx, {Type, LisName, ListenOn, SocketOpts, Cfg}) -> start_listener(GwName, Ctx, Type, LisName, ListenOn, SocketOpts, Cfg) -> Name = emqx_gateway_utils:listener_id(GwName, Type, LisName), - NCfg = Cfg#{ - ctx => Ctx, + NCfg = Cfg#{ctx => Ctx, + listener => {GwName, Type, LisName}, frame_mod => emqx_coap_frame, chann_mod => emqx_coap_channel }, diff --git a/apps/emqx_gateway/src/emqx_gateway_ctx.erl b/apps/emqx_gateway/src/emqx_gateway_ctx.erl index a790645c5..54714974a 100644 --- a/apps/emqx_gateway/src/emqx_gateway_ctx.erl +++ b/apps/emqx_gateway/src/emqx_gateway_ctx.erl @@ -29,8 +29,8 @@ -type context() :: #{ %% Gateway Name gwname := gateway_name() - %% Autenticator - , auth := emqx_authentication:chain_name() | undefined + %% Authentication chains + , auth := [emqx_authentication:chain_name()] | undefined %% The ConnectionManager PID , cm := pid() }. diff --git a/apps/emqx_gateway/src/emqx_gateway_utils.erl b/apps/emqx_gateway/src/emqx_gateway_utils.erl index 6d19cbbcf..acc98bd3f 100644 --- a/apps/emqx_gateway/src/emqx_gateway_utils.erl +++ b/apps/emqx_gateway/src/emqx_gateway_utils.erl @@ -226,11 +226,7 @@ sock_opts(Name, Opts) -> %% Envs active_n(Options) -> - maps:get( - active_n, - maps:get(listener, Options, #{active_n => ?ACTIVE_N}), - ?ACTIVE_N - ). + maps:get(active_n, Options, ?ACTIVE_N). -spec idle_timeout(map()) -> pos_integer(). idle_timeout(Options) -> diff --git a/apps/emqx_gateway/src/exproto/emqx_exproto_channel.erl b/apps/emqx_gateway/src/exproto/emqx_exproto_channel.erl index 3de231958..1cc48e574 100644 --- a/apps/emqx_gateway/src/exproto/emqx_exproto_channel.erl +++ b/apps/emqx_gateway/src/exproto/emqx_exproto_channel.erl @@ -139,7 +139,12 @@ init(ConnInfo = #{socktype := Socktype, GRpcChann = maps:get(handler, Options), PoolName = maps:get(pool_name, Options), NConnInfo = default_conninfo(ConnInfo), - ClientInfo = default_clientinfo(ConnInfo), + ListenerId = case maps:get(listener, Options, undefined) of + undefined -> undefined; + {GwName, Type, LisName} -> + emqx_gateway_utils:listener_id(GwName, Type, LisName) + end, + ClientInfo = maps:put(listener, ListenerId, default_clientinfo(ConnInfo)), Channel = #channel{ ctx = Ctx, gcli = #{channel => GRpcChann, pool_name => PoolName}, diff --git a/apps/emqx_gateway/src/exproto/emqx_exproto_impl.erl b/apps/emqx_gateway/src/exproto/emqx_exproto_impl.erl index 3e142f3dc..87170fff2 100644 --- a/apps/emqx_gateway/src/exproto/emqx_exproto_impl.erl +++ b/apps/emqx_gateway/src/exproto/emqx_exproto_impl.erl @@ -156,6 +156,7 @@ start_listener(GwName, Ctx, Type, LisName, ListenOn, SocketOpts, Cfg) -> Name = emqx_gateway_utils:listener_id(GwName, Type, LisName), NCfg = Cfg#{ ctx => Ctx, + listener => {GwName, Type, LisName}, frame_mod => emqx_exproto_frame, chann_mod => emqx_exproto_channel }, diff --git a/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl b/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl index 6ad78742f..db610749c 100644 --- a/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl +++ b/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl @@ -89,9 +89,15 @@ init(ConnInfo = #{peername := {PeerHost, _}, #{ctx := Ctx} = Config) -> Peercert = maps:get(peercert, ConnInfo, undefined), Mountpoint = maps:get(mountpoint, Config, undefined), + ListenerId = case maps:get(listener, Config, undefined) of + undefined -> undefined; + {GwName, Type, LisName} -> + emqx_gateway_utils:listener_id(GwName, Type, LisName) + end, ClientInfo = set_peercert_infos( Peercert, #{ zone => default + , listener => ListenerId , protocol => lwm2m , peerhost => PeerHost , sockport => SockPort diff --git a/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_impl.erl b/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_impl.erl index 649a14643..b5cce573f 100644 --- a/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_impl.erl +++ b/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_impl.erl @@ -102,6 +102,7 @@ start_listener(GwName, Ctx, {Type, LisName, ListenOn, SocketOpts, Cfg}) -> start_listener(GwName, Ctx, Type, LisName, ListenOn, SocketOpts, Cfg) -> Name = emqx_gateway_utils:listener_id(GwName, Type, LisName), NCfg = Cfg#{ ctx => Ctx + , listener => {GwName, Type, LisName} , frame_mod => emqx_coap_frame , chann_mod => emqx_lwm2m_channel }, diff --git a/apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl b/apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl index 34e6ec8d6..85921ce79 100644 --- a/apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl +++ b/apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl @@ -116,9 +116,15 @@ init(ConnInfo = #{peername := {PeerHost, _}, Registry = maps:get(registry, Option), GwId = maps:get(gateway_id, Option), EnableQoS3 = maps:get(enable_qos3, Option, true), + ListenerId = case maps:get(listener, Option, undefined) of + undefined -> undefined; + {GwName, Type, LisName} -> + emqx_gateway_utils:listener_id(GwName, Type, LisName) + end, ClientInfo = set_peercert_infos( Peercert, #{ zone => default + , listener => ListenerId , protocol => 'mqtt-sn' , peerhost => PeerHost , sockport => SockPort diff --git a/apps/emqx_gateway/src/mqttsn/emqx_sn_impl.erl b/apps/emqx_gateway/src/mqttsn/emqx_sn_impl.erl index a79173cff..f5660e0dc 100644 --- a/apps/emqx_gateway/src/mqttsn/emqx_sn_impl.erl +++ b/apps/emqx_gateway/src/mqttsn/emqx_sn_impl.erl @@ -121,6 +121,7 @@ start_listener(GwName, Ctx, Type, LisName, ListenOn, SocketOpts, Cfg) -> Name = emqx_gateway_utils:listener_id(GwName, Type, LisName), NCfg = Cfg#{ ctx => Ctx, + listene => {GwName, Type, LisName}, frame_mod => emqx_sn_frame, chann_mod => emqx_sn_channel }, @@ -138,13 +139,13 @@ merge_default(Options) -> end. stop_listener(GwName, {Type, LisName, ListenOn, SocketOpts, Cfg}) -> - StopRet = stop_listener(GwName, LisName, Type, ListenOn, SocketOpts, Cfg), + StopRet = stop_listener(GwName, Type, LisName, ListenOn, SocketOpts, Cfg), ListenOnStr = emqx_gateway_utils:format_listenon(ListenOn), case StopRet of ok -> ?ULOG("Gateway ~s:~s:~s on ~s stopped.~n", [GwName, Type, LisName, ListenOnStr]); {error, Reason} -> - ?ELOG("Failed to stop gatewat ~s:~s:~s on ~s: ~0p~n", + ?ELOG("Failed to stop gateway ~s:~s:~s on ~s: ~0p~n", [GwName, Type, LisName, ListenOnStr, Reason]) end, StopRet. diff --git a/apps/emqx_gateway/test/emqx_lwm2m_SUITE.erl b/apps/emqx_gateway/test/emqx_lwm2m_SUITE.erl index 2ee2312df..f36c1e816 100644 --- a/apps/emqx_gateway/test/emqx_lwm2m_SUITE.erl +++ b/apps/emqx_gateway/test/emqx_lwm2m_SUITE.erl @@ -33,7 +33,7 @@ gateway.lwm2m { xml_dir = \"../../lib/emqx_gateway/src/lwm2m/lwm2m_xml\" lifetime_min = 1s lifetime_max = 86400s - qmode_time_windonw = 22 + qmode_time_window = 22 auto_observe = false mountpoint = \"lwm2m/%u\" update_msg_publish_condition = contains_object_list