diff --git a/apps/sdlan/include/sdlan_pb.hrl b/apps/sdlan/include/sdlan_pb.hrl index 2a1f09f..dc11569 100644 --- a/apps/sdlan/include/sdlan_pb.hrl +++ b/apps/sdlan/include/sdlan_pb.hrl @@ -25,17 +25,6 @@ }). -endif. --ifndef('SDL_DEV_ADDR_PB_H'). --define('SDL_DEV_ADDR_PB_H', true). --record(sdl_dev_addr, - {network_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits - mac = <<>> :: iodata() | undefined, % = 2, optional - net_addr = 0 :: non_neg_integer() | undefined, % = 3, optional, 32 bits - net_bit_len = 0 :: non_neg_integer() | undefined, % = 4, optional, 32 bits - network_domain = <<>> :: unicode:chardata() | undefined % = 5, optional - }). --endif. - -ifndef('SDL_EMPTY_PB_H'). -define('SDL_EMPTY_PB_H', true). -record(sdl_empty, @@ -47,24 +36,22 @@ -define('SDL_REGISTER_SUPER_PB_H', true). -record(sdl_register_super, {version = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits - installed_channel = <<>> :: unicode:chardata() | undefined, % = 2, optional - client_id = <<>> :: unicode:chardata() | undefined, % = 3, optional - dev_addr = undefined :: sdlan_pb:sdl_dev_addr() | undefined, % = 4, optional - pub_key = <<>> :: unicode:chardata() | undefined, % = 5, optional - token = <<>> :: unicode:chardata() | undefined, % = 6, optional - network_code = <<>> :: unicode:chardata() | undefined, % = 7, optional - hostname = <<>> :: unicode:chardata() | undefined % = 8, optional + client_id = <<>> :: unicode:chardata() | undefined, % = 2, optional + network_id = 0 :: non_neg_integer() | undefined, % = 3, optional, 32 bits + mac = <<>> :: iodata() | undefined, % = 4, optional + ip = 0 :: non_neg_integer() | undefined, % = 5, optional, 32 bits + mask_len = 0 :: non_neg_integer() | undefined, % = 6, optional, 32 bits + hostname = <<>> :: unicode:chardata() | undefined, % = 7, optional + pub_key = <<>> :: unicode:chardata() | undefined, % = 8, optional + access_token = <<>> :: unicode:chardata() | undefined % = 9, optional }). -endif. -ifndef('SDL_REGISTER_SUPER_ACK_PB_H'). -define('SDL_REGISTER_SUPER_ACK_PB_H', true). -record(sdl_register_super_ack, - {dev_addr = undefined :: sdlan_pb:sdl_dev_addr() | undefined, % = 1, optional - aes_key = <<>> :: iodata() | undefined, % = 2, optional - upgrade_type = 0 :: non_neg_integer() | undefined, % = 3, optional, 32 bits - upgrade_prompt :: unicode:chardata() | undefined, % = 4, optional - upgrade_address :: unicode:chardata() | undefined % = 5, optional + {aes_key = <<>> :: iodata() | undefined, % = 1, optional + session_token = <<>> :: iodata() | undefined % = 2, optional }). -endif. @@ -92,6 +79,40 @@ }). -endif. +-ifndef('SDL_ARP_REQUEST_PB_H'). +-define('SDL_ARP_REQUEST_PB_H', true). +-record(sdl_arp_request, + {target_ip = 0 :: non_neg_integer() | undefined % = 1, optional, 32 bits + }). +-endif. + +-ifndef('SDL_ARP_RESPONSE_PB_H'). +-define('SDL_ARP_RESPONSE_PB_H', true). +-record(sdl_arp_response, + {target_ip = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + target_mac = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('SDL_POLICY_REQUEST_PB_H'). +-define('SDL_POLICY_REQUEST_PB_H', true). +-record(sdl_policy_request, + {src_identity_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + dst_identity_id = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits + version = 0 :: non_neg_integer() | undefined % = 3, optional, 32 bits + }). +-endif. + +-ifndef('SDL_POLICY_RESPONSE_PB_H'). +-define('SDL_POLICY_RESPONSE_PB_H', true). +-record(sdl_policy_response, + {src_identity_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + dst_identity_id = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits + version = 0 :: non_neg_integer() | undefined, % = 3, optional, 32 bits + rules = <<>> :: iodata() | undefined % = 4, optional + }). +-endif. + -ifndef('SDL_NAT_CHANGED_EVENT_PB_H'). -define('SDL_NAT_CHANGED_EVENT_PB_H', true). -record(sdl_nat_changed_event, @@ -118,31 +139,6 @@ }). -endif. --ifndef('SDL_CHANGE_NETWORK_COMMAND_PB_H'). --define('SDL_CHANGE_NETWORK_COMMAND_PB_H', true). --record(sdl_change_network_command, - {dev_addr = undefined :: sdlan_pb:sdl_dev_addr() | undefined, % = 1, optional - aes_key = <<>> :: iodata() | undefined % = 2, optional - }). --endif. - --ifndef('SDL_COMMAND_ACK_PB_H'). --define('SDL_COMMAND_ACK_PB_H', true). --record(sdl_command_ack, - {status = false :: boolean() | 0 | 1 | undefined, % = 1, optional - message :: unicode:chardata() | undefined % = 2, optional - }). --endif. - --ifndef('SDL_FLOWS_PB_H'). --define('SDL_FLOWS_PB_H', true). --record(sdl_flows, - {forward_num = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits - p2p_num = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits - inbound_num = 0 :: non_neg_integer() | undefined % = 3, optional, 32 bits - }). --endif. - -ifndef('SDL_STUN_REQUEST_PB_H'). -define('SDL_STUN_REQUEST_PB_H', true). -record(sdl_stun_request, @@ -171,7 +167,28 @@ dst_mac = <<>> :: iodata() | undefined, % = 3, optional is_p2p = false :: boolean() | 0 | 1 | undefined, % = 4, optional ttl = 0 :: non_neg_integer() | undefined, % = 5, optional, 32 bits - data = <<>> :: iodata() | undefined % = 6, optional + data = <<>> :: iodata() | undefined, % = 6, optional + session_token = <<>> :: iodata() | undefined, % = 7, optional + identity_id = 0 :: non_neg_integer() | undefined % = 8, optional, 32 bits + }). +-endif. + +-ifndef('SDL_STUN_PROBE_PB_H'). +-define('SDL_STUN_PROBE_PB_H', true). +-record(sdl_stun_probe, + {cookie = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + attr = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits + step = 0 :: non_neg_integer() | undefined % = 3, optional, 32 bits + }). +-endif. + +-ifndef('SDL_STUN_PROBE_REPLY_PB_H'). +-define('SDL_STUN_PROBE_REPLY_PB_H', true). +-record(sdl_stun_probe_reply, + {cookie = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + step = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits + port = 0 :: non_neg_integer() | undefined, % = 3, optional, 32 bits + ip = 0 :: non_neg_integer() | undefined % = 4, optional, 32 bits }). -endif. @@ -193,21 +210,4 @@ }). -endif. --ifndef('SDL_STUN_PROBE_PB_H'). --define('SDL_STUN_PROBE_PB_H', true). --record(sdl_stun_probe, - {cookie = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits - attr = 0 :: non_neg_integer() | undefined % = 2, optional, 32 bits - }). --endif. - --ifndef('SDL_STUN_PROBE_REPLY_PB_H'). --define('SDL_STUN_PROBE_REPLY_PB_H', true). --record(sdl_stun_probe_reply, - {cookie = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits - port = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits - ip = 0 :: non_neg_integer() | undefined % = 3, optional, 32 bits - }). --endif. - -endif. diff --git a/apps/sdlan/src/quic/sdlan_quic_channel.erl b/apps/sdlan/src/quic/sdlan_quic_channel.erl index 0b9f19e..70e7a4b 100644 --- a/apps/sdlan/src/quic/sdlan_quic_channel.erl +++ b/apps/sdlan/src/quic/sdlan_quic_channel.erl @@ -8,13 +8,34 @@ %%%------------------------------------------------------------------- -module(sdlan_quic_channel). -author("anlicheng"). +-include("sdlan.hrl"). +-include("sdlan_pb.hrl"). -behaviour(gen_statem). -define(MAX_FRAME_LEN, 16384). +%% 心跳包监测机制 +-define(PING_TICKER, 15000). + +%% 注册失败的的错误码 + +%% token不存在 +-define(NAK_INVALID_TOKEN, 1). +%% 节点被禁用 +-define(NAK_NODE_DISABLE, 2). +%% 没有IP地址可以用 +-define(NAK_NO_IP, 3). +%% 网络错误 +-define(NAK_NETWORK_FAULT, 4). +%% 内部错误 +-define(NAK_INTERNAL_FAULT, 5). +%% hostname被占用 +-define(NAK_HOSTNAME_USED, 6). + %% API -export([start_link/1]). +-export([send_event/3, stop/2]). %% gen_statem callbacks -export([init/1, handle_event/4, terminate/3, code_change/4, callback_mode/0]). @@ -23,13 +44,31 @@ conn :: quicer:connection_handle(), stream_handle :: undefined | quicer:stream_handle(), %% 累积器,用于处理协议framing的解析 - buf = <<>> + buf = <<>>, + + client_id :: undefined | binary(), + %% 网络相关信息id + network_pid :: undefined | pid(), + %% mac地址 + mac :: undefined | binary(), + ip = 0 :: integer(), + + ping_counter = 0, + + %% 标记是否已经注册 + is_registered = false }). %%%=================================================================== %%% API %%%=================================================================== +send_event(Pid, EventType, Event) -> + gen_statem:cast(Pid, {send_event, EventType, Event}). + +stop(Pid, Reason) -> + ok. + %% @doc Creates a gen_statem process which calls Module:init/1 to %% initialize. To ensure a synchronized start-up procedure, this %% function does not return until Module:init/1 has returned. @@ -58,7 +97,7 @@ callback_mode() -> %% gen_statem receives an event from call/2, cast/2, or as a normal %% process message, this function is called. -handle_event(internal, do_init, initializing, State = #state{conn = Conn}) -> +handle_event(internal, do_init, initializing, State=#state{conn = Conn}) -> logger:debug("[sdlan_quic_channel] conn: ~p, do_init", [Conn]), case quicer:accept_stream(Conn, []) of {ok, Stream} -> @@ -69,11 +108,126 @@ handle_event(internal, do_init, initializing, State = #state{conn = Conn}) -> {stop, Reason, State} end; -handle_event(info, {frame, Frame}, _StateName, State = #state{}) -> +handle_event(info, {frame, Frame}, _StateName, State=#state{}) -> logger:debug("[sdlan_quic_channel] get frame: ~p", [Frame]), {keep_state, State}; -%% 处理quicer相关的信息 +handle_event(info, {frame, <>}, registered, State=#state{stream_handle = Stream}) -> + #sdl_register_super{ + client_id = ClientId, network_id = NetworkId, mac = Mac, ip = Ip, mask_len = MaskLen, + hostname = HostName, pub_key = PubKey, access_token = AccessToken} = sdlan_pb:decode_msg(Body, sdl_register_super), + + true = (Mac =/= <<>> andalso PubKey =/= <<>> andalso ClientId =/= <<>>), + %% Mac地址不能是广播地址 + true = not (sdlan_util:is_multicast_mac(Mac) orelse sdlan_util:is_broadcast_mac(Mac)), + + MacBinStr = sdlan_util:format_mac(Mac), + IpAddr = sdlan_ipaddr:int_to_ipv4(Ip), + Params = #{ + <<"network_id">> => NetworkId, + <<"client_id">> => ClientId, + <<"mac">> => MacBinStr, + <<"ip">> => IpAddr, + <<"mask_len">> => MaskLen, + <<"hostname">> => HostName, + <<"access_token">> => AccessToken + }, + %% 参数检查 + logger:debug("[sdlan_register_worker] client_id: ~p, ip: ~p, mac: ~p, host_name: ~p, access_token: ~p, network_id: ~p", + [ClientId, Ip, Mac, HostName, AccessToken, NetworkId]), + + case sdlan_api:auth_access_token(Params) of + {ok, #{<<"result">> := <<"ok">>}} -> + %% 建立到network的对应关系 + case sdlan_network:get_pid(NetworkId) of + NetworkPid when is_pid(NetworkPid) -> + {ok, AesKey, SessionToken} = sdlan_network:attach(NetworkPid, {ClientIp, ClientPort}, ClientId, Mac, Ip, HostName), + + RsaPubKey = sdlan_cipher:rsa_pem_decode(PubKey), + EncodedAesKey = rsa_encode(AesKey, RsaPubKey), + + RegisterSuperAck = sdlan_pb:encode_msg(#sdl_register_super_ack { + aes_key = EncodedAesKey, + session_token = SessionToken + }), + + %% 发送确认信息 + Reply = <>, + + {ok, _} = quicer:send(Stream, <>), + %% 设置节点的在线状态 + Result = sdlan_api:node_online(ClientId, NetworkId, sdlan_ipaddr:int_to_ipv4(Ip)), + logger:debug("[sdlan_register_worker] client_id: ~p, set none online result is: ~p", [ClientId, Result]), + {next_state, registered, State#state{network_pid = NetworkPid, client_id = ClientId, mac = Mac, ip = Ip}}; + undefined -> + logger:warning("[sdlan_register_worker] client_id: ~p, register get error: network not found", [ClientId]), + {ok, _} = quicer:send(Stream, register_nak_reply(PacketId, ?NAK_INTERNAL_FAULT, <<"Internal Error">>)), + {stop, normal, State} + end; + {ok, #{<<"error">> := #{<<"code">> := Code, <<"message">> := Message}}} -> + logger:warning("[sdlan_register_worker] network_id: ~p, client_id: ~p, register get error: ~ts, error_code: ~p", [NetworkId, ClientId, Message, Code]), + {ok, _} = quicer:send(Stream, register_nak_reply(PacketId, Code, Message)), + {stop, normal, State}; + {error, Reason} -> + logger:warning("[sdlan_register_worker] network_id: ~p, client_id: ~p, register get error: ~p", [NetworkId, ClientId, Reason]), + {ok, _} = quicer:send(Stream, register_nak_reply(PacketId, ?NAK_NETWORK_FAULT, <<"Network Error">>)), + {stop, normal, State} + end; + +handle_event(info, {frame, <>}, registered, State=#state{stream_handle = Stream, network_pid = NetworkPid, mac = SrcMac, is_registered = true}) when is_pid(NetworkPid) -> + #sdl_query_info{dst_mac = DstMac} = sdlan_pb:decode_msg(Body, sdl_query_info), + case sdlan_network:peer_info(NetworkPid, SrcMac, DstMac) of + error -> + logger:debug("[sdlan_channel] query_info src_mac is: ~p, dst_mac: ~p, nat_peer not found", + [sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]), + {ok, _} = quicer:send(Stream, <>), + {keep_state, State}; + {ok, {NatPeer = {{Ip0, Ip1, Ip2, Ip3}, NatPort}, NatType}, V6Info} -> + logger:debug("[sdlan_channel] query_info src_mac is: ~p, dst_mac: ~p, nat_peer: ~p", + [sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac), NatPeer]), + + PeerInfo = sdlan_pb:encode_msg(#sdl_peer_info{ + dst_mac = DstMac, + v4_info = #sdl_v4_info { + port = NatPort, + v4 = <>, + nat_type = NatType + }, + v6_info = V6Info + }), + {ok, _} = quicer:send(Stream, <>), + {keep_state, State} + end; + +handle_event(info, {frame, <<0:32, ?PACKET_PING>>}, registered, State = #state{stream_handle = Stream, ping_counter = PingCounter}) -> + %logger:debug("[sdlan_channel] client_id: ~p, get ping", [ClientId]), + {ok, _} = quicer:send(Stream, <<0:32, ?PACKET_PONG>>), + {keep_state, State#state{ping_counter = PingCounter + 1}}; + +handle_event(info, {timeout, _, ping_ticker}, _, State = #state{client_id = ClientId, ping_counter = PingCounter}) -> + %% 等待下一次的心跳检测 + erlang:start_timer(?PING_TICKER, self(), ping_ticker), + case PingCounter > 0 of + true -> + {noreply, State#state{ping_counter = 0}}; + false -> + logger:debug("[sdlan_channel] client_id: ~p, ping losted", [ClientId]), + {stop, normal, State#state{ping_counter = 0}} + end; + +%% 发送指令信息 +handle_event(info, {send_event, EventType, Event}, _, State = #state{stream_handle = Stream, client_id = ClientId, is_registered = true}) -> + logger:debug("[sdlan_channel] client_id: ~p, will send eventType: ~p, event: ~p", [ClientId, EventType, Event]), + {ok, _} = quicer:send(Stream, <<0:32, ?PACKET_EVENT, EventType, Event/binary>>), + {noreply, State}; + +%% 取消注册 +handle_event(info, {frame, <<0:32, ?PACKET_UNREGISTER>>}, registered, State = #state{client_id = ClientId, network_pid = NetworkPid, is_registered = true}) when is_pid(NetworkPid) -> + logger:warning("[sdlan_channel] unregister client_id: ~p", [ClientId]), + % sdlan_network:unregister(NetworkPid, ClientId), + {stop, normal, State}; + +%% 处理quicer相关的信息, 需要转换成内部能够识别的frame消息 handle_event(info, {quic, Data, Stream, _Props}, _StateName, State = #state{stream_handle = Stream, buf = Buf}) -> logger:debug("[sdlan_quic_channel] get message: ~p", [Data]), case decode_frames(<>) of @@ -132,4 +286,15 @@ decode_frames0(<>, _Frames) when Len > ?MAX_FRAME_LEN -> decode_frames0(<>, Frames) -> decode_frames0(Rest, [Frame|Frames]); decode_frames0(Rest, Frames) -> - {ok, Rest, lists:reverse(Frames)}. \ No newline at end of file + {ok, Rest, lists:reverse(Frames)}. + +-spec register_nak_reply(PacketId :: integer(), ErrorCode :: integer(), ErrorMsg :: binary()) -> binary(). +register_nak_reply(PacketId, ErrorCode, ErrorMsg) when is_integer(PacketId), is_integer(ErrorCode), is_binary(ErrorMsg) -> + RegisterNakReply = sdlan_pb:encode_msg(#sdl_register_super_nak { + error_code = ErrorCode, + error_message = ErrorMsg + }), + <>. + +rsa_encode(PlainText, RsaPubKey) when is_binary(PlainText) -> + iolist_to_binary(sdlan_cipher:rsa_encrypt(PlainText, RsaPubKey)). \ No newline at end of file diff --git a/apps/sdlan/src/sdlan_api.erl b/apps/sdlan/src/sdlan_api.erl index 8b671a4..97e0393 100644 --- a/apps/sdlan/src/sdlan_api.erl +++ b/apps/sdlan/src/sdlan_api.erl @@ -13,7 +13,7 @@ %% API -export([get_all_networks/0, get_network/1]). --export([auth_token/3, node_online/3, node_offline/2, flow_report/5, network_forward_report/2, auth_network_code/3]). +-export([node_online/3, node_offline/2, flow_report/5, network_forward_report/2, auth_access_token/1]). -spec get_all_networks() -> {ok, [NetworkId :: integer()]} | {error, Reason :: any()}. get_all_networks() -> @@ -47,23 +47,9 @@ get_network(Id) when is_integer(Id) -> Error end. --spec auth_token(ClientId :: binary(), Token :: binary(), Version :: integer()) -> {ok, Resp :: map()} | {error, Reason :: any()}. -auth_token(ClientId, Token, Version) when is_binary(ClientId), is_binary(Token), is_integer(Version) -> - case catch do_post("auth_token", #{<<"client_id">> => ClientId, <<"token">> => Token, <<"version">> => Version}) of - {ok, Resp} -> - case catch jiffy:decode(Resp, [return_maps]) of - Result when is_map(Result) -> - {ok, Result}; - {error, Reason} -> - {error, Reason} - end; - Error -> - Error - end. - --spec auth_network_code(ClientId :: binary(), NetworkCode :: binary(), Version :: integer()) -> {ok, Resp :: map()} | {error, Reason :: any()}. -auth_network_code(ClientId, NetworkCode, Version) when is_binary(ClientId), is_binary(NetworkCode), is_integer(Version) -> - case catch do_post("check_network", #{<<"client_id">> => ClientId, <<"code">> => NetworkCode, <<"version">> => Version}) of +-spec auth_access_token(Params :: map()) -> {ok, Resp :: map()} | {error, Reason :: any()}. +auth_access_token(Params) when is_map(Params) -> + case catch do_post("auth_token", Params) of {ok, Resp} -> case catch jiffy:decode(Resp, [return_maps]) of Result when is_map(Result) -> diff --git a/apps/sdlan/src/sdlan_hostname_regedit.erl b/apps/sdlan/src/sdlan_hostname_regedit.erl index c934516..ef81b67 100644 --- a/apps/sdlan/src/sdlan_hostname_regedit.erl +++ b/apps/sdlan/src/sdlan_hostname_regedit.erl @@ -10,7 +10,7 @@ -author("anlicheng"). %% API --export([init/0, lookup/1, insert/2]). +-export([init/0, lookup/1, insert/3]). -define(TABLE, sdlan_hostname_regedit). @@ -26,7 +26,10 @@ lookup(FullHostname) when is_binary(FullHostname) -> error end. --spec insert(FullHostname :: binary(), Ip :: integer()) -> no_return(). -insert(FullHostname, Ip) when is_binary(FullHostname), is_integer(Ip) -> +-spec insert(any(), Domain :: binary(), Ip :: integer()) -> no_return(). +insert(HostName, Domain, Ip) when is_binary(HostName), is_binary(Domain), is_integer(Ip), HostName /= <<>> -> + FullHostname = <>, <> = <>, - true = ets:insert(?TABLE, {FullHostname, {Ip0, Ip1, Ip2, Ip3}}). \ No newline at end of file + true = ets:insert(?TABLE, {FullHostname, {Ip0, Ip1, Ip2, Ip3}}); +insert(_, _, _) -> + ok. \ No newline at end of file diff --git a/apps/sdlan/src/sdlan_network.erl b/apps/sdlan/src/sdlan_network.erl index cda4855..529e003 100644 --- a/apps/sdlan/src/sdlan_network.erl +++ b/apps/sdlan/src/sdlan_network.erl @@ -21,8 +21,8 @@ %% API -export([start_link/2]). --export([get_name/1, get_pid/1, assign_ip_addr/6, peer_info/3, unregister/3, debug_info/1, get_network_id/1, get_used_map/1]). --export([forward/5, update_hole/6, disable_client/2, get_channel/2, dropout_client/2, reload/1]). +-export([get_name/1, get_pid/1, peer_info/3, unregister/3, debug_info/1, get_network_id/1, attach/6]). +-export([forward/5, update_hole/6, disable_client/2, get_channel/2]). -export([test_event/1]). %% gen_server callbacks @@ -33,14 +33,20 @@ nat_type :: integer() }). -%% ip的使用信息, 记录主机的动态信息 --record(host, { - client_id :: binary(), +%% ip的使用信息, 记录Node的运行时状态信息 +-record(endpoint, { channel_pid :: undefined | pid(), - monitor_ref :: undefined | reference(), + channel_ref :: undefined | reference(), + + client_id :: binary(), + mac :: binary(), + ip :: integer(), + hostname :: binary(), hole :: undefined | #hole{}, %% 记录ip和ip_v6的映射关系, #{ip_addr :: integer() => {}} - v6_info :: undefined | #sdl_v6_info{} + v6_info :: undefined | #sdl_v6_info{}, + session_token :: binary(), + last_seen :: integer() %% monotonic_time(second), }). -record(state, { @@ -53,19 +59,12 @@ %% 设置网络带宽 throttle_key :: atom(), - %% 转发流量统计 forward_bytes = 0, - %% 同一个网络下公用的密钥, 采用AES-256加密算法;随机生成 aes_key :: binary(), - - %% ip分配器 - %% 记录当前网络下的全部ip地址 - ips = [] :: [Ip :: integer()], - - %% 记录已经使用了的ip, #{mac :: integer() => Host :: #host{}} - used_map = #{} + %% 记录已经使用了的ip, #{mac :: integer() => Host :: #endpoint{}} + endpoints = #{} }). %%%=================================================================== @@ -84,19 +83,14 @@ get_pid(Id) when is_integer(Id) -> get_name(Id) when is_integer(Id) -> list_to_atom("sdlan_network:" ++ integer_to_list(Id)). --spec reload(Pid :: pid()) -> ok | {error, Reason :: any()}. -reload(Pid) when is_pid(Pid) -> - gen_server:call(Pid, reload). - --spec assign_ip_addr(Pid :: pid(), ChannelPid :: pid(), ClientId :: binary(), Mac :: binary(), NetAddr :: integer(), HostName :: binary()) -> - {ok, Domain :: binary(), NetAddr :: integer(), MaskLen :: integer(), AesKey :: binary()} | {error, Reason :: any()}. -assign_ip_addr(Pid, ChannelPid, ClientId, Mac, NetAddr, HostName) when is_pid(Pid), is_pid(ChannelPid), is_binary(ClientId), is_binary(Mac), is_integer(NetAddr) -> - gen_server:call(Pid, {assign_ip_addr, ChannelPid, ClientId, Mac, NetAddr, HostName}). - -spec get_network_id(Pid :: pid()) -> {ok, NetworkId :: integer()}. get_network_id(Pid) when is_pid(Pid) -> gen_server:call(Pid, get_network_id). +-spec attach(Pid :: pid(), ChannelPid :: pid(), ClientId :: binary(), Mac :: binary(), Ip :: integer(), Hostname :: binary()) -> any(). +attach(Pid, ChannelPid, ClientId, Mac, Ip, Hostname) when is_pid(Pid), is_pid(ChannelPid), is_binary(ClientId), is_binary(Mac), is_integer(Ip), is_binary(Hostname) -> + gen_server:call(Pid, {attach, ChannelPid, ClientId, Mac, Ip, Hostname}). + -spec unregister(Pid :: pid(), ClientId :: binary(), Mac :: binary()) -> no_return(). unregister(Pid, ClientId, Mac) when is_pid(Pid), is_binary(ClientId), is_binary(Mac) -> gen_server:cast(Pid, {unregister, ClientId, Mac}). @@ -123,21 +117,10 @@ disable_client(Pid, ClientId) when is_pid(Pid), is_binary(ClientId) -> get_channel(Pid, ClientId) when is_pid(Pid), is_binary(ClientId) -> gen_server:call(Pid, {get_channel, ClientId}). -%% 剔除client_id,channel不关闭; channel会被重新绑定到其他的network里面 --spec dropout_client(Pid :: pid(), ClientId :: binary()) -> {ok, ChannelPid :: pid(), HostName :: binary()} | error. -dropout_client(Pid, ClientId) when is_pid(Pid), is_binary(ClientId) -> - gen_server:call(Pid, {dropout_client, ClientId}). - -spec debug_info(Pid :: pid()) -> map(). debug_info(Pid) when is_pid(Pid) -> gen_server:call(Pid, debug_info). --spec get_used_map(Pid :: pid()) -> map(). -get_used_map(Pid) when is_pid(Pid) -> - gen_server:call(Pid, get_used_map); -get_used_map(undefined) -> - #{}. - %% @doc Spawns the server and registers the local name (unique) -spec(start_link(Name :: atom(), Id :: integer()) -> {ok, Pid :: pid()} | ignore | {error, Reason :: term()}). @@ -160,7 +143,6 @@ init([Id]) when is_integer(Id) -> ignore; {ok, #{<<"id">> := Id, <<"name">> := Name, <<"domain">> := Domain, <<"ipaddr">> := IpAddr0, <<"owner_id">> := OwnerId}} -> {IpAddr, MaskLen} = parse_ipaddr(IpAddr0), - Ips = sdlan_ipaddr:ips(IpAddr, MaskLen), AesKey = sdlan_util:rand_byte(32), %% 限流key ThrottleKey = list_to_atom("network_throttle:" ++ integer_to_list(Id)), @@ -169,15 +151,9 @@ init([Id]) when is_integer(Id) -> %% 每分钟汇报一次转发的流量 erlang:start_timer(?FLOW_REPORT_INTERVAL, self(), flow_report_ticker), - - %% 创建数据库表 - create_mnesia_table(Id), - - logger:debug("[sdlan_network] network: ~p, ips: ~p", [Id, lists:map(fun sdlan_ipaddr:int_to_ipv4/1, Ips)]), - sdlan_domain_regedit:insert(Domain), - {ok, #state{network_id = Id, name = Name, domain = Domain, ipaddr = IpAddr, owner_id = OwnerId, mask_len = MaskLen, ips = Ips, aes_key = AesKey, throttle_key = ThrottleKey}}; + {ok, #state{network_id = Id, name = Name, domain = Domain, ipaddr = IpAddr, owner_id = OwnerId, mask_len = MaskLen, aes_key = AesKey, throttle_key = ThrottleKey}}; {error, Reason} -> logger:warning("[sdlan_network] load network: ~p, get error: ~p", [Id, Reason]), ignore @@ -193,127 +169,59 @@ init([Id]) when is_integer(Id) -> {noreply, NewState :: #state{}, timeout() | hibernate} | {stop, Reason :: term(), Reply :: term(), NewState :: #state{}} | {stop, Reason :: term(), NewState :: #state{}}). -%% 重新加载网络信息 -handle_call(reload, _From, State = #state{network_id = Id, ipaddr = OldIpAddr, mask_len = OldMarkLen, used_map = UsedMap}) -> - case sdlan_api:get_network(Id) of - {ok, #{<<"name">> := Name, <<"ipaddr">> := IpAddr0, <<"owner_id">> := OwnerId}} -> - {IpAddr, MaskLen} = parse_ipaddr(IpAddr0), - case OldIpAddr =:= IpAddr andalso OldMarkLen =:= MaskLen of - true -> - {reply, ok, State#state{name = Name, owner_id = OwnerId}}; - false -> - logger:debug("[sdlan_networkd] network_id: ~p, reload will close all channels", [Id]), - Ips = sdlan_ipaddr:ips(IpAddr, MaskLen), - %% 整个网络下的设备都需要重新连接 - maps:foreach(fun(_, #host{channel_pid = ChannelPid, monitor_ref = MRef}) -> - is_reference(MRef) andalso demonitor(MRef), - is_process_alive(ChannelPid) andalso sdlan_channel:stop(ChannelPid, normal) - end, UsedMap), - %% 清理掉数据库中的数据 - ok = client_model:delete_clients(Id), - - {reply, ok, State#state{name = Name, ipaddr = IpAddr, - owner_id = OwnerId, mask_len = MaskLen, ips = Ips, used_map = maps:new()}} - end; - {error, Reason} -> - logger:warning("[sdlan_network] reload network: ~p, get error: ~p", [Id, Reason]), - {reply, {error, Reason}, State} - end; - %% 给客户端分配ip地址 -handle_call({assign_ip_addr, ChannelPid, ClientId, Mac, NetAddr0, HostName}, _From, - State = #state{network_id = NetworkId, domain = Domain, ips = Ips, used_map = UsedMap, mask_len = MaskLen, aes_key = AesKey}) -> - +handle_call({attach, ChannelPid, ClientId, Mac, Ip, Hostname}, _From, + State = #state{network_id = NetworkId, domain = Domain, endpoints = Endpoints, aes_key = AesKey}) -> %% 分配ip地址的时候,以mac地址为唯一基准 - logger:debug("[sdlan_network] alloc_ip, network_id: ~p, ips: ~p, client_id: ~p, mac: ~p, net_addr: ~p", - [NetworkId, Ips, ClientId, sdlan_util:format_mac(Mac), sdlan_ipaddr:int_to_ipv4(NetAddr0)]), + logger:debug("[sdlan_network] alloc_ip, network_id: ~p, client_id: ~p, mac: ~p, ip_addr: ~p", + [NetworkId, ClientId, sdlan_util:format_mac(Mac), sdlan_ipaddr:int_to_ipv4(Ip)]), + %% 添加域名->ip的映射关系 + sdlan_hostname_regedit:insert(Hostname, Domain, Ip), - case client_model:alloc_ip(NetworkId, Ips, ClientId, Mac, NetAddr0, HostName) of - {ok, Ip} -> - %% 关闭之前的channel - maybe_close_channel(maps:get(Mac, UsedMap, undefined)), + %% mac对应的Endpoint存在,并且对应的ip变了,需要通知端上清理arp + %% 重复attach需要清理之前的绑定信息 + maybe + {ok, #endpoint{ip = OldIp, channel_pid = OldChannelPid, channel_ref = OldChannelRef}} ?= maps:find(Mac, Endpoints), + true ?= OldIp =/= Ip, + NatChangedEvent = sdlan_pb:encode_msg(#sdl_nat_changed_event{ + mac = Mac, + ip = Ip + }), + broadcast(fun(#endpoint{channel_pid = ChannelPid}) -> + sdlan_quic_channel:send_event(ChannelPid, ?PACKET_EVENT_NAT_CHANGED, NatChangedEvent) + end, [Mac], Endpoints), - %% 添加域名->ip的映射关系 - case HostName =/= <<>> of - true -> - FullHostname = <>, - sdlan_hostname_regedit:insert(FullHostname, Ip); - false -> - ok - end, + %% 清理就的绑定关系 + is_reference(OldChannelRef) andalso demonitor(OldChannelRef), + case OldChannelPid /= undefined andalso is_process_alive(OldChannelPid) of + true -> + sdlan_quic_channel:stop(OldChannelPid, rebind); + false -> + ok + end + end, - %% 建立到新的channel之间的关系 - MRef = monitor(process, ChannelPid), - NUsedMap = maps:put(Mac, #host{client_id = ClientId, channel_pid = ChannelPid, monitor_ref = MRef}, UsedMap), + ChannelRef = monitor(process, ChannelPid), + SessionToken = gen_session_token(), + Endpoint = #endpoint{channel_pid = ChannelPid, channel_ref = ChannelRef, + client_id = ClientId, mac = Mac, ip = Ip, hostname = Hostname, session_token = SessionToken, last_seen = erlang:monotonic_time(second)}, - {reply, {ok, Domain, Ip, MaskLen, AesKey}, State#state{used_map = NUsedMap}}; - {error, Reason} -> - {reply, {error, Reason}, State} - end; - -handle_call(get_used_map, _From, State = #state{used_map = UsedMap}) -> - UsedInfos = maps:map(fun(_, #host{hole = Hole, v6_info = V6Info}) -> - HoleMap = case Hole of - #hole{peer = {NatIp, NatPort}} -> - #{ - <<"nat_ip">> => sdlan_ipaddr:int_to_ipv4(sdlan_ipaddr:ipv4_to_int(NatIp)), - <<"nat_port">> => NatPort - }; - _ -> - #{} - end, - - V6Map = case V6Info of - #sdl_v6_info{v6 = IpV6, port = Port} -> - #{ - <<"v6_ip">> => sdlan_ipaddr:ipv6_bytes_to_binary(IpV6), - <<"v6_port">> => Port - }; - _ -> - #{} - end, - #{<<"hole">> => HoleMap, <<"v6_info">> => V6Map} - end, UsedMap), - - {reply, {ok, UsedInfos}, State}; + {reply, {ok, AesKey, SessionToken}, State#state{endpoints = maps:put(Mac, Endpoint, Endpoints)}}; %% client设置为禁止状态,不允许重连 -handle_call({disable_client, ClientId}, _From, State = #state{network_id = NetworkId, used_map = UsedMap}) -> - case lists:search(fun({_, #host{client_id = ClientId0}}) -> ClientId =:= ClientId0 end, maps:to_list(UsedMap)) of - {value, {Mac, #host{channel_pid = ChannelPid, monitor_ref = MRef}}} -> - is_reference(MRef) andalso demonitor(MRef), - sdlan_channel:stop(ChannelPid, disable), - NUsedMap = maps:remove(Mac, UsedMap), - %% 将客户端设置为禁止状态 - client_model:disable_client(NetworkId, ClientId), - - {reply, ok, State#state{used_map = NUsedMap}}; - false -> - {reply, error, State} +handle_call({disable_client, ClientId}, _From, State = #state{endpoints = Endpoints}) -> + case search_endpoint(fun(_, #endpoint{client_id = ClientId0}) -> ClientId =:= ClientId0 end, Endpoints) of + {ok, Mac, _} -> + {reply, ok, State#state{endpoints = maps:remove(Mac, Endpoints)}}; + error -> + {reply, ok, State} end; -handle_call({get_channel, ClientId}, _From, State = #state{used_map = UsedMap}) -> - case lists:search(fun({_, #host{client_id = ClientId0}}) -> ClientId =:= ClientId0 end, maps:to_list(UsedMap)) of - {value, {_Ip, #host{channel_pid = ChannelPid}}} -> +handle_call({get_channel, ClientId}, _From, State = #state{endpoints = Endpoints}) -> + case search_endpoint(fun(_, #endpoint{client_id = ClientId0}) -> ClientId =:= ClientId0 end, Endpoints) of + {ok, _, #endpoint{channel_pid = ChannelPid}} -> {reply, {ok, ChannelPid}, State}; - false -> - {reply, error, State} - end; - -%% 区别在于是否关闭掉channel, 这里是在网络迁移中的功能; drop的时候需要从当前网络中移除 -handle_call({dropout_client, ClientId}, _From, State = #state{network_id = NetworkId, used_map = UsedMap}) -> - case lists:search(fun({_, #host{client_id = ClientId0}}) -> ClientId =:= ClientId0 end, maps:to_list(UsedMap)) of - {value, {Mac, #host{channel_pid = ChannelPid, monitor_ref = MRef}}} -> - is_reference(MRef) andalso demonitor(MRef), - NUsedMap = maps:remove(Mac, UsedMap), - %% 从数据库删除 - case client_model:delete_client(NetworkId, ClientId) of - {ok, #client{host_name = HostName}} -> - {reply, {ok, ChannelPid, HostName}, State#state{used_map = NUsedMap}}; - {error, _} -> - {reply, error, State} - end; - false -> + error -> {reply, error, State} end; @@ -321,43 +229,33 @@ handle_call(get_network_id, _From, State = #state{network_id = NetworkId}) -> {reply, {ok, NetworkId}, State}; %% 网络存在的nat_peer信息 -handle_call({peer_info, SrcMac, DstMac}, _From, State = #state{used_map = UsedMap}) -> - case maps:find(DstMac, UsedMap) of - {ok, #host{channel_pid = DstChannelPid, hole = #hole{peer = DstNatPeer, nat_type = DstNatType}, v6_info = DstV6Info}} -> +handle_call({peer_info, SrcMac, DstMac}, _From, State = #state{endpoints = Endpoints}) -> + case maps:find(DstMac, Endpoints) of + {ok, #endpoint{channel_pid = DstChannelPid, hole = #hole{peer = DstNatPeer, nat_type = DstNatType}, v6_info = DstV6Info}} -> %% 让目标服务器发送sendRegister事件(2024-06-25 新增,提高打洞的成功率) - case maps:get(SrcMac, UsedMap, undefined) of - #host{hole = #hole{peer = {SrcNatIp, SrcNatPort}, nat_type = NatType}, v6_info = SrcV6Info} -> - Event = sdlan_pb:encode_msg(#sdl_send_register_event { - dst_mac = SrcMac, - nat_ip = sdlan_ipaddr:ipv4_to_int(SrcNatIp), - nat_type = NatType, - nat_port = SrcNatPort, - v6_info = SrcV6Info - }), - sdlan_channel:send_event(DstChannelPid, ?PACKET_EVENT_SEND_REGISTER, Event); - _ -> - ok + maybe + {ok, #endpoint{hole = #hole{peer = {SrcNatIp, SrcNatPort}, nat_type = SrcNatType}, v6_info = SrcV6Info}} ?= maps:find(SrcMac, Endpoints), + RegisterEvent = sdlan_pb:encode_msg(#sdl_send_register_event { + dst_mac = SrcMac, + nat_ip = sdlan_ipaddr:ipv4_to_int(SrcNatIp), + nat_type = SrcNatType, + nat_port = SrcNatPort, + v6_info = SrcV6Info + }), + sdlan_quic_channel:send_event(DstChannelPid, ?PACKET_EVENT_SEND_REGISTER, RegisterEvent) end, {reply, {ok, {DstNatPeer, DstNatType}, DstV6Info}, State}; _ -> {reply, error, State} end; -handle_call(debug_info, _From, State = #state{network_id = NetworkId, ipaddr = IpAddr, mask_len = MaskLen, owner_id = OwnerId, ips = Ips, used_map = UsedMap}) -> +handle_call(debug_info, _From, State = #state{network_id = NetworkId, ipaddr = IpAddr, mask_len = MaskLen, owner_id = OwnerId, endpoints = Endpoints}) -> Reply = #{ <<"network_id">> => NetworkId, <<"ipaddr">> => IpAddr, <<"mask_len">> => MaskLen, <<"owner_id">> => OwnerId, - <<"ips">> => lists:map(fun sdlan_ipaddr:int_to_ipv4/1, Ips), - <<"used_ips">> => lists:map(fun({_, Host = #host{client_id = ClientId}}) -> - case client_model:get_client(NetworkId, ClientId) of - error -> - #{}; - {ok, #client{mac = Mac, ip = Ip}} -> - format_host(Host, Ip, Mac) - end - end, maps:to_list(UsedMap)) + <<"used_ips">> => lists:map(fun format_endpoint/1, maps:to_list(Endpoints)) }, {reply, Reply, State}. @@ -368,34 +266,24 @@ handle_call(debug_info, _From, State = #state{network_id = NetworkId, ipaddr = I {noreply, NewState :: #state{}, timeout() | hibernate} | {stop, Reason :: term(), NewState :: #state{}}). %% 网络数据转发, mac地址单播 -handle_cast({forward, Sock, SrcMac, DstMac, Packet}, State = #state{network_id = NetworkId, used_map = UsedMap, throttle_key = ThrottleKey, forward_bytes = ForwardBytes}) - when is_map_key(SrcMac, UsedMap), is_map_key(DstMac, UsedMap) -> +handle_cast({forward, Sock, SrcMac, DstMac, Packet}, State = #state{network_id = NetworkId, endpoints = Endpoints, throttle_key = ThrottleKey, forward_bytes = ForwardBytes}) + when is_map_key(SrcMac, Endpoints), is_map_key(DstMac, Endpoints) -> PacketBytes = byte_size(Packet), - case maps:find(DstMac, UsedMap) of - {ok, #host{hole = #hole{peer = Peer = {Ip, Port}}}} -> - case throttle:check(sdlan_network, ThrottleKey) of - {ok, _RestCount, _LeftToReset} -> + case maps:find(DstMac, Endpoints) of + {ok, #endpoint{hole = #hole{peer = Peer = {Ip, Port}}}} -> + case limiting_check(ThrottleKey) of + pass -> %% client和stun之间必须有心跳机制保持nat映射可用,并且通过服务转发的udp包肯定可以到达对端的nat logger:debug("[sdlan_network] forward data networkd_id: ~p, src_mac: ~p, dst_mac: ~p, hole: ~p", [NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac), Peer]), gen_udp:send(Sock, Ip, Port, Packet), {noreply, State#state{forward_bytes = ForwardBytes + PacketBytes}}; - {limit_exceeded, 0, _LeftToReset} -> - %% 尝试获取其他网络是否有让渡的资源 - case sdlan_network_coordinator:checkout() of - ok -> - logger:debug("[sdlan_network] use release forward data networkd_id: ~p, src_mac: ~p, dst_mac: ~p, hole: ~p", - [NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac), Peer]), - - gen_udp:send(Sock, Ip, Port, Packet), - {noreply, State#state{forward_bytes = ForwardBytes + PacketBytes}}; - error -> - logger:notice("[sdlan_network] networkd_id: ~p, src_mac: ~p, dst_mac: ~p, rate limited, discard", - [NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]), - {noreply, State} - end + denied -> + logger:notice("[sdlan_network] networkd_id: ~p, src_mac: ~p, dst_mac: ~p, rate limited, discard", + [NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]), + {noreply, State} end; {ok, _} -> logger:debug("[sdlan_network] networkd_id: ~p, src_mac: ~p, dst_mac: ~p, hole not found", @@ -408,23 +296,16 @@ handle_cast({forward, Sock, SrcMac, DstMac, Packet}, State = #state{network_id = end; %% 网络数据转发, ip广播或组播, 不限流 -handle_cast({forward, Sock, SrcMac, DstMac, Packet}, State = #state{network_id = NetworkId, used_map = UsedMap, forward_bytes = ForwardBytes}) - when is_map_key(SrcMac, UsedMap) -> +handle_cast({forward, Sock, SrcMac, DstMac, Packet}, State = #state{network_id = NetworkId, endpoints = Endpoints, forward_bytes = ForwardBytes}) + when is_map_key(SrcMac, Endpoints) -> %% 广播地址和组播地址,需要转发到整个网络 case sdlan_util:is_broadcast_mac(DstMac) orelse sdlan_util:is_multicast_mac(DstMac) of true -> PacketBytes = byte_size(Packet), %% 消息广播 - maps:foreach(fun(Mac, #host{hole = Hole}) -> - case {Mac =/= SrcMac, Hole} of - {true, #hole{peer = {NatIp, NatPort}}} -> - logger:debug("[sdlan_network] call me here"), - gen_udp:send(Sock, NatIp, NatPort, Packet); - _ -> - ok - end - end, UsedMap), - + broadcast(fun(#endpoint{hole = #hole{peer = {NatIp, NatPort}}}) -> + gen_udp:send(Sock, NatIp, NatPort, Packet) + end, [SrcMac], Endpoints), %% client和stun之间必须有心跳机制保持nat映射可用,并且通过服务转发的udp包肯定可以到达对端的nat logger:debug("[sdlan_network] broadcast data networkd_id: ~p, src_mac: ~p, dst_mac: ~p", [NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]), @@ -442,34 +323,30 @@ handle_cast({forward, _Sock, SrcMac, DstMac, _Packet}, State = #state{network_id {noreply, State}; %% 删除ip的占用并关闭channel -handle_cast({unregister, _ClientId, Mac}, State = #state{network_id = NetworkId, used_map = UsedMap}) -> +handle_cast({unregister, _ClientId, Mac}, State = #state{network_id = NetworkId, endpoints = Endpoints}) -> logger:debug("[sdlan_network] networkd_id: ~p, unregister Mac: ~p", [NetworkId, sdlan_util:format_mac(Mac)]), - case maps:take(Mac, UsedMap) of - error -> - {noreply, State}; - {#host{channel_pid = ChannelPid, monitor_ref = MRef}, NUsedMap} -> - is_reference(MRef) andalso demonitor(MRef), - sdlan_channel:stop(ChannelPid, normal), - {noreply, State#state{used_map = NUsedMap}} - end; + {noreply, State#state{endpoints = maps:remove(Mac, Endpoints)}}; %% 需要判断,client是属于当前网络的 -handle_cast({update_hole, ClientId, Mac, Peer, NatType, V6Info}, State = #state{network_id = NetworkId, used_map = UsedMap}) -> - case {maps:find(Mac, UsedMap), client_model:get_client(NetworkId, ClientId)} of - {{ok, Host0 = #host{client_id = ClientId0, hole = OldHole}}, {ok, #client{ip = Ip}}} when ClientId =:= ClientId0 -> - case OldHole =:= undefined orelse (OldHole#hole.peer =/= Peer orelse OldHole#hole.nat_type =/= NatType) of - true -> - NatChangedEvent = sdlan_pb:encode_msg(#sdl_nat_changed_event{ - mac = Mac, - ip = Ip - }), - broadcast(?PACKET_EVENT_NAT_CHANGED, NatChangedEvent, Mac, UsedMap); - false -> - ok +handle_cast({update_hole, SessionToken, ClientId, Mac, Peer, NatType, V6Info}, State = #state{endpoints = Endpoints}) -> + case maps:find(Mac, Endpoints) of + %% ClientId =:= ClientId0, SessionToken =:= SessionToken0 + {ok, Endpoint0 = #endpoint{ip = Ip, client_id = ClientId, hole = OldHole, session_token = SessionToken}} -> + NHole = #hole{peer = Peer, nat_type = NatType}, + maybe + true ?= not same_hole(OldHole, NHole), + NatChangedEvent = sdlan_pb:encode_msg(#sdl_nat_changed_event{ + mac = Mac, + ip = Ip + }), + broadcast(fun(#endpoint{channel_pid = ChannelPid}) -> + sdlan_quic_channel:send_event(ChannelPid, ?PACKET_EVENT_NAT_CHANGED, NatChangedEvent) + end, [Mac], Endpoints) end, - Host = Host0#host{hole = #hole{peer = Peer, nat_type = NatType}, v6_info = V6Info}, + NEndpoint = Endpoint0#endpoint{hole = NHole, v6_info = V6Info, last_seen = erlang:monotonic_time(second)}, + logger:debug("[sdlan_network] mac: ~p, ip: ~p, endpoint is: ~p", [Mac, Ip, NEndpoint]), - {noreply, State#state{used_map = maps:put(Mac, Host, UsedMap)}}; + {noreply, State#state{endpoints = maps:put(Mac, NEndpoint, Endpoints)}}; _ -> {noreply, State} end. @@ -485,15 +362,11 @@ handle_info({timeout, _, flow_report_ticker}, State = #state{network_id = Networ catch sdlan_api:network_forward_report(NetworkId, ForwardBytes), {noreply, State#state{forward_bytes = 0}}; -handle_info({'EXIT', _Pid, shutdown}, State = #state{network_id = NetworkId, used_map = UsedMap}) -> - logger:warning("[sdlan_network] network: ~p, get shutdown message", [NetworkId]), - broadcast_shutdown(UsedMap), - {stop, shutdown, State}; %% Channel进程退出, hole里面的数据也需要清理 -handle_info({'DOWN', _MRef, process, ChannelPid, Reason}, State = #state{network_id = NetworkId, used_map = UsedMap}) -> +handle_info({'DOWN', _MRef, process, ChannelPid, Reason}, State = #state{network_id = NetworkId, endpoints = Endpoints}) -> logger:notice("[sdlan_network] network_id: ~p, channel_pid: ~p, close with reason: ~p", [NetworkId, ChannelPid, Reason]), - NUsedMap = maps:filter(fun(_, #host{channel_pid = ChannelPid0}) -> ChannelPid =/= ChannelPid0 end, UsedMap), - {noreply, State#state{used_map = NUsedMap}}. + NEndpoints = maps:filter(fun(_, #endpoint{channel_pid = ChannelPid0}) -> ChannelPid =/= ChannelPid0 end, Endpoints), + {noreply, State#state{endpoints = NEndpoints}}. %% @private %% @doc This function is called by a gen_server when it is about to @@ -502,9 +375,20 @@ handle_info({'DOWN', _MRef, process, ChannelPid, Reason}, State = #state{network %% with Reason. The return value is ignored. -spec(terminate(Reason :: (normal | shutdown | {shutdown, term()} | term()), State :: #state{}) -> term()). -terminate(Reason, #state{network_id = NetworkId, used_map = UsedMap}) -> +terminate(Reason, #state{network_id = NetworkId, endpoints = Endpoints}) -> + broadcast(fun(#endpoint{channel_pid = ChannelPid}) -> + case is_process_alive(ChannelPid) of + true -> + NetworkShutdownEvent = sdlan_pb:encode_msg(#sdl_network_shutdown_event{ + message = <<"Network shutdown">> + }), + sdlan_quic_channel:send_event(ChannelPid, ?PACKET_EVENT_NETWORK_SHUTDOWN, NetworkShutdownEvent), + sdlan_quic_channel:stop(ChannelPid, normal); + false -> + ok + end + end, Endpoints), logger:debug("[sdlan_network] network: ~p, will terminate with reason: ~p", [NetworkId, Reason]), - broadcast_shutdown(UsedMap), ok. %% @private @@ -519,56 +403,6 @@ code_change(_OldVsn, State = #state{}, _Extra) -> %%% Internal functions %%%=================================================================== -%% 创建数据库表 --spec create_mnesia_table(NetworkId :: integer()) -> no_return(). -create_mnesia_table(NetworkId) when is_integer(NetworkId) -> - Tab = client_model:get_table_name(NetworkId), - Tables = mnesia:system_info(tables), - case lists:member(Tab, Tables) of - true -> - ok; - false -> - Res = client_model:create_table(Tab), - logger:debug("[sdlan_network] create table result: ~p", [Res]) - end. - --spec maybe_close_channel(undefined | #host{}) -> no_return(). -maybe_close_channel(#host{channel_pid = ChannelPid0, monitor_ref = MRef0}) -> - case is_pid(ChannelPid0) andalso is_process_alive(ChannelPid0) of - true -> - is_reference(MRef0) andalso demonitor(MRef0), - sdlan_channel:stop(ChannelPid0, channel_rebind); - false -> - ok - end; -maybe_close_channel(_) -> - ok. - --spec broadcast(EventType :: integer(), Event :: binary(), ExcludeMac :: binary(), UsedMap :: map()) -> no_return(). -broadcast(EventType, Event, ExcludeMac, UsedMap) when is_map(UsedMap), is_binary(ExcludeMac), is_integer(EventType), is_binary(Event) -> - maps:foreach(fun(Mac, #host{channel_pid = ChannelPid}) -> - case is_process_alive(ChannelPid) andalso ExcludeMac /= Mac of - true -> - sdlan_channel:send_event(ChannelPid, EventType, Event); - false -> - ok - end - end, UsedMap). - -broadcast_shutdown(UsedMap) when is_map(UsedMap) -> - maps:foreach(fun(_, #host{channel_pid = ChannelPid}) -> - case is_process_alive(ChannelPid) of - true -> - NetworkShutdownEvent = sdlan_pb:encode_msg(#sdl_network_shutdown_event { - message = <<"Network shutdown">> - }), - sdlan_channel:send_event(ChannelPid, ?PACKET_EVENT_NETWORK_SHUTDOWN, NetworkShutdownEvent), - sdlan_channel:stop(ChannelPid, normal); - false -> - ok - end - end, UsedMap). - %% 解析IpAddr: <<"192.168.172/24">> -spec parse_ipaddr(IpAddr0 :: binary()) -> {IpAddr :: binary(), MaskLen :: integer()}. parse_ipaddr(IpAddr0) when is_binary(IpAddr0) -> @@ -580,18 +414,43 @@ parse_ipaddr(IpAddr0) when is_binary(IpAddr0) -> {IpAddr0, 24} end. --spec format_host(Host :: #host{}, Ip :: integer(), Mac :: binary()) -> map(). -format_host(#host{client_id = ClientId, hole = Hole, v6_info = V6Info}, Ip, Mac) when is_integer(Ip), is_binary(Mac) -> - HoleMap = case Hole of - undefined -> - #{}; - #hole{peer = {NatIp, NatPort}, nat_type = NatType} -> - #{ - nat_ip => NatIp, - nat_port => NatPort, - nat_type => NatType - } - end, +-spec limiting_check(ThrottleKey :: any()) -> pass | denied. +limiting_check(ThrottleKey) -> + case throttle:check(sdlan_network, ThrottleKey) of + {ok, _RestCount, _LeftToReset} -> + pass; + {limit_exceeded, 0, _LeftToReset} -> + %% 尝试获取其他网络是否有让渡的资源 + case sdlan_network_coordinator:checkout() of + ok -> + pass; + error -> + denied + end + end. + +-spec broadcast(Fun :: fun((#endpoint{}) -> no_return()), Endpoints :: map()) -> no_return(). +broadcast(Fun, Endpoints) when is_function(Fun, 1), is_map(Endpoints) -> + broadcast(Fun, [], Endpoints). + +-spec broadcast(Fun :: fun((#endpoint{}) -> no_return()), ExcludeMacs :: [binary()], Endpoints :: map()) -> no_return(). +broadcast(Fun, ExcludeMacs, Endpoints) when is_function(Fun, 1), is_map(Endpoints), is_list(ExcludeMacs) -> + maps:foreach(fun(Mac, Endpoint) -> + case lists:member(Mac, ExcludeMacs) of + true -> + ok; + false -> + Fun(Endpoint) + end + end, Endpoints). + +-spec format_endpoint({Mac :: binary(), Host :: #endpoint{}}) -> map(). +format_endpoint({Mac, #endpoint{client_id = ClientId, ip = Ip, hole = #hole{peer = {NatIp, NatPort}, nat_type = NatType}, v6_info = V6Info}}) -> + HoleMap = #{ + nat_ip => NatIp, + nat_port => NatPort, + nat_type => NatType + }, V6InfoMap = case V6Info of undefined -> @@ -599,7 +458,6 @@ format_host(#host{client_id = ClientId, hole = Hole, v6_info = V6Info}, Ip, Mac) #sdl_v6_info{v6 = V6, port = V6Port} -> #{v6 => V6, port => V6Port} end, - #{ client_id => ClientId, mac => sdlan_util:format_mac(Mac), @@ -607,3 +465,30 @@ format_host(#host{client_id = ClientId, hole = Hole, v6_info = V6Info}, Ip, Mac) hole_map => HoleMap, v6_info => V6InfoMap }. + +-spec search_endpoint(F :: fun((term(), term()) -> boolean()), Endpoints :: map()) -> error | {ok, Key :: any(), Val :: any()}. +search_endpoint(F, Endpoints) when is_function(F, 2), is_map(Endpoints) -> + search_endpoint0(F, maps:iterator(Endpoints)). +search_endpoint0(F, Iter) when is_function(F, 2) -> + case maps:next(Iter) of + {Key, Value, NextIter} -> + case F(Key, Value) of + true -> + {ok, Key, Value}; + false -> + search_endpoint0(F, NextIter) + end; + 'none' -> + error + end. + +-spec same_hole(Hole :: #hole{}, Hole :: #hole{}) -> boolean(). +same_hole(#hole{peer = OldPeer, nat_type = OldNatType}, #hole{peer = Peer, nat_type = NatType}) when OldPeer =:= Peer, OldNatType =:= NatType -> + true; +same_hole(_, _) -> + false. + +-spec gen_session_token() -> binary(). +gen_session_token() -> + Bytes = crypto:strong_rand_bytes(32), + base64:encode(Bytes). \ No newline at end of file diff --git a/apps/sdlan/src/sdlan_pb.erl b/apps/sdlan/src/sdlan_pb.erl index a7c4c8c..a9dc2c5 100644 --- a/apps/sdlan/src/sdlan_pb.erl +++ b/apps/sdlan/src/sdlan_pb.erl @@ -59,8 +59,6 @@ -type sdl_v6_info() :: #sdl_v6_info{}. --type sdl_dev_addr() :: #sdl_dev_addr{}. - -type sdl_empty() :: #sdl_empty{}. -type sdl_register_super() :: #sdl_register_super{}. @@ -73,35 +71,37 @@ -type sdl_peer_info() :: #sdl_peer_info{}. +-type sdl_arp_request() :: #sdl_arp_request{}. + +-type sdl_arp_response() :: #sdl_arp_response{}. + +-type sdl_policy_request() :: #sdl_policy_request{}. + +-type sdl_policy_response() :: #sdl_policy_response{}. + -type sdl_nat_changed_event() :: #sdl_nat_changed_event{}. -type sdl_send_register_event() :: #sdl_send_register_event{}. -type sdl_network_shutdown_event() :: #sdl_network_shutdown_event{}. --type sdl_change_network_command() :: #sdl_change_network_command{}. - --type sdl_command_ack() :: #sdl_command_ack{}. - --type sdl_flows() :: #sdl_flows{}. - -type sdl_stun_request() :: #sdl_stun_request{}. -type sdl_stun_reply() :: #sdl_stun_reply{}. -type sdl_data() :: #sdl_data{}. --type sdl_register() :: #sdl_register{}. - --type sdl_register_ack() :: #sdl_register_ack{}. - -type sdl_stun_probe() :: #sdl_stun_probe{}. -type sdl_stun_probe_reply() :: #sdl_stun_probe_reply{}. --export_type(['sdl_v4_info'/0, 'sdl_v6_info'/0, 'sdl_dev_addr'/0, 'sdl_empty'/0, 'sdl_register_super'/0, 'sdl_register_super_ack'/0, 'sdl_register_super_nak'/0, 'sdl_query_info'/0, 'sdl_peer_info'/0, 'sdl_nat_changed_event'/0, 'sdl_send_register_event'/0, 'sdl_network_shutdown_event'/0, 'sdl_change_network_command'/0, 'sdl_command_ack'/0, 'sdl_flows'/0, 'sdl_stun_request'/0, 'sdl_stun_reply'/0, 'sdl_data'/0, 'sdl_register'/0, 'sdl_register_ack'/0, 'sdl_stun_probe'/0, 'sdl_stun_probe_reply'/0]). --type '$msg_name'() :: sdl_v4_info | sdl_v6_info | sdl_dev_addr | sdl_empty | sdl_register_super | sdl_register_super_ack | sdl_register_super_nak | sdl_query_info | sdl_peer_info | sdl_nat_changed_event | sdl_send_register_event | sdl_network_shutdown_event | sdl_change_network_command | sdl_command_ack | sdl_flows | sdl_stun_request | sdl_stun_reply | sdl_data | sdl_register | sdl_register_ack | sdl_stun_probe | sdl_stun_probe_reply. --type '$msg'() :: sdl_v4_info() | sdl_v6_info() | sdl_dev_addr() | sdl_empty() | sdl_register_super() | sdl_register_super_ack() | sdl_register_super_nak() | sdl_query_info() | sdl_peer_info() | sdl_nat_changed_event() | sdl_send_register_event() | sdl_network_shutdown_event() | sdl_change_network_command() | sdl_command_ack() | sdl_flows() | sdl_stun_request() | sdl_stun_reply() | sdl_data() | sdl_register() | sdl_register_ack() | sdl_stun_probe() | sdl_stun_probe_reply(). +-type sdl_register() :: #sdl_register{}. + +-type sdl_register_ack() :: #sdl_register_ack{}. + +-export_type(['sdl_v4_info'/0, 'sdl_v6_info'/0, 'sdl_empty'/0, 'sdl_register_super'/0, 'sdl_register_super_ack'/0, 'sdl_register_super_nak'/0, 'sdl_query_info'/0, 'sdl_peer_info'/0, 'sdl_arp_request'/0, 'sdl_arp_response'/0, 'sdl_policy_request'/0, 'sdl_policy_response'/0, 'sdl_nat_changed_event'/0, 'sdl_send_register_event'/0, 'sdl_network_shutdown_event'/0, 'sdl_stun_request'/0, 'sdl_stun_reply'/0, 'sdl_data'/0, 'sdl_stun_probe'/0, 'sdl_stun_probe_reply'/0, 'sdl_register'/0, 'sdl_register_ack'/0]). +-type '$msg_name'() :: sdl_v4_info | sdl_v6_info | sdl_empty | sdl_register_super | sdl_register_super_ack | sdl_register_super_nak | sdl_query_info | sdl_peer_info | sdl_arp_request | sdl_arp_response | sdl_policy_request | sdl_policy_response | sdl_nat_changed_event | sdl_send_register_event | sdl_network_shutdown_event | sdl_stun_request | sdl_stun_reply | sdl_data | sdl_stun_probe | sdl_stun_probe_reply | sdl_register | sdl_register_ack. +-type '$msg'() :: sdl_v4_info() | sdl_v6_info() | sdl_empty() | sdl_register_super() | sdl_register_super_ack() | sdl_register_super_nak() | sdl_query_info() | sdl_peer_info() | sdl_arp_request() | sdl_arp_response() | sdl_policy_request() | sdl_policy_response() | sdl_nat_changed_event() | sdl_send_register_event() | sdl_network_shutdown_event() | sdl_stun_request() | sdl_stun_reply() | sdl_data() | sdl_stun_probe() | sdl_stun_probe_reply() | sdl_register() | sdl_register_ack(). -export_type(['$msg_name'/0, '$msg'/0]). -if(?OTP_RELEASE >= 24). @@ -130,26 +130,26 @@ encode_msg(Msg, MsgName, Opts) -> case MsgName of sdl_v4_info -> encode_msg_sdl_v4_info(id(Msg, TrUserData), TrUserData); sdl_v6_info -> encode_msg_sdl_v6_info(id(Msg, TrUserData), TrUserData); - sdl_dev_addr -> encode_msg_sdl_dev_addr(id(Msg, TrUserData), TrUserData); sdl_empty -> encode_msg_sdl_empty(id(Msg, TrUserData), TrUserData); sdl_register_super -> encode_msg_sdl_register_super(id(Msg, TrUserData), TrUserData); sdl_register_super_ack -> encode_msg_sdl_register_super_ack(id(Msg, TrUserData), TrUserData); sdl_register_super_nak -> encode_msg_sdl_register_super_nak(id(Msg, TrUserData), TrUserData); sdl_query_info -> encode_msg_sdl_query_info(id(Msg, TrUserData), TrUserData); sdl_peer_info -> encode_msg_sdl_peer_info(id(Msg, TrUserData), TrUserData); + sdl_arp_request -> encode_msg_sdl_arp_request(id(Msg, TrUserData), TrUserData); + sdl_arp_response -> encode_msg_sdl_arp_response(id(Msg, TrUserData), TrUserData); + sdl_policy_request -> encode_msg_sdl_policy_request(id(Msg, TrUserData), TrUserData); + sdl_policy_response -> encode_msg_sdl_policy_response(id(Msg, TrUserData), TrUserData); sdl_nat_changed_event -> encode_msg_sdl_nat_changed_event(id(Msg, TrUserData), TrUserData); sdl_send_register_event -> encode_msg_sdl_send_register_event(id(Msg, TrUserData), TrUserData); sdl_network_shutdown_event -> encode_msg_sdl_network_shutdown_event(id(Msg, TrUserData), TrUserData); - sdl_change_network_command -> encode_msg_sdl_change_network_command(id(Msg, TrUserData), TrUserData); - sdl_command_ack -> encode_msg_sdl_command_ack(id(Msg, TrUserData), TrUserData); - sdl_flows -> encode_msg_sdl_flows(id(Msg, TrUserData), TrUserData); sdl_stun_request -> encode_msg_sdl_stun_request(id(Msg, TrUserData), TrUserData); sdl_stun_reply -> encode_msg_sdl_stun_reply(id(Msg, TrUserData), TrUserData); sdl_data -> encode_msg_sdl_data(id(Msg, TrUserData), TrUserData); - sdl_register -> encode_msg_sdl_register(id(Msg, TrUserData), TrUserData); - sdl_register_ack -> encode_msg_sdl_register_ack(id(Msg, TrUserData), TrUserData); sdl_stun_probe -> encode_msg_sdl_stun_probe(id(Msg, TrUserData), TrUserData); - sdl_stun_probe_reply -> encode_msg_sdl_stun_probe_reply(id(Msg, TrUserData), TrUserData) + sdl_stun_probe_reply -> encode_msg_sdl_stun_probe_reply(id(Msg, TrUserData), TrUserData); + sdl_register -> encode_msg_sdl_register(id(Msg, TrUserData), TrUserData); + sdl_register_ack -> encode_msg_sdl_register_ack(id(Msg, TrUserData), TrUserData) end. @@ -210,64 +210,12 @@ encode_msg_sdl_v6_info(#sdl_v6_info{port = F1, v6 = F2}, Bin, TrUserData) -> end end. -encode_msg_sdl_dev_addr(Msg, TrUserData) -> encode_msg_sdl_dev_addr(Msg, <<>>, TrUserData). - - -encode_msg_sdl_dev_addr(#sdl_dev_addr{network_id = F1, mac = F2, net_addr = F3, net_bit_len = F4, network_domain = F5}, Bin, TrUserData) -> - B1 = if F1 == undefined -> Bin; - true -> - begin - TrF1 = id(F1, TrUserData), - if TrF1 =:= 0 -> Bin; - true -> e_varint(TrF1, <>, TrUserData) - end - end - end, - B2 = if F2 == undefined -> B1; - true -> - begin - TrF2 = id(F2, TrUserData), - case iolist_size(TrF2) of - 0 -> B1; - _ -> e_type_bytes(TrF2, <>, TrUserData) - end - end - end, - B3 = if F3 == undefined -> B2; - true -> - begin - TrF3 = id(F3, TrUserData), - if TrF3 =:= 0 -> B2; - true -> e_varint(TrF3, <>, TrUserData) - end - end - end, - B4 = if F4 == undefined -> B3; - true -> - begin - TrF4 = id(F4, TrUserData), - if TrF4 =:= 0 -> B3; - true -> e_varint(TrF4, <>, TrUserData) - end - end - end, - if F5 == undefined -> B4; - true -> - begin - TrF5 = id(F5, TrUserData), - case is_empty_string(TrF5) of - true -> B4; - false -> e_type_string(TrF5, <>, TrUserData) - end - end - end. - encode_msg_sdl_empty(_Msg, _TrUserData) -> <<>>. encode_msg_sdl_register_super(Msg, TrUserData) -> encode_msg_sdl_register_super(Msg, <<>>, TrUserData). -encode_msg_sdl_register_super(#sdl_register_super{version = F1, installed_channel = F2, client_id = F3, dev_addr = F4, pub_key = F5, token = F6, network_code = F7, hostname = F8}, Bin, TrUserData) -> +encode_msg_sdl_register_super(#sdl_register_super{version = F1, client_id = F2, network_id = F3, mac = F4, ip = F5, mask_len = F6, hostname = F7, pub_key = F8, access_token = F9}, Bin, TrUserData) -> B1 = if F1 == undefined -> Bin; true -> begin @@ -291,9 +239,8 @@ encode_msg_sdl_register_super(#sdl_register_super{version = F1, installed_channe true -> begin TrF3 = id(F3, TrUserData), - case is_empty_string(TrF3) of - true -> B2; - false -> e_type_string(TrF3, <>, TrUserData) + if TrF3 =:= 0 -> B2; + true -> e_varint(TrF3, <>, TrUserData) end end end, @@ -301,8 +248,9 @@ encode_msg_sdl_register_super(#sdl_register_super{version = F1, installed_channe true -> begin TrF4 = id(F4, TrUserData), - if TrF4 =:= undefined -> B3; - true -> e_mfield_sdl_register_super_dev_addr(TrF4, <>, TrUserData) + case iolist_size(TrF4) of + 0 -> B3; + _ -> e_type_bytes(TrF4, <>, TrUserData) end end end, @@ -310,9 +258,8 @@ encode_msg_sdl_register_super(#sdl_register_super{version = F1, installed_channe true -> begin TrF5 = id(F5, TrUserData), - case is_empty_string(TrF5) of - true -> B4; - false -> e_type_string(TrF5, <>, TrUserData) + if TrF5 =:= 0 -> B4; + true -> e_varint(TrF5, <>, TrUserData) end end end, @@ -320,9 +267,8 @@ encode_msg_sdl_register_super(#sdl_register_super{version = F1, installed_channe true -> begin TrF6 = id(F6, TrUserData), - case is_empty_string(TrF6) of - true -> B5; - false -> e_type_string(TrF6, <>, TrUserData) + if TrF6 =:= 0 -> B5; + true -> e_varint(TrF6, <>, TrUserData) end end end, @@ -336,13 +282,23 @@ encode_msg_sdl_register_super(#sdl_register_super{version = F1, installed_channe end end end, - if F8 == undefined -> B7; + B8 = if F8 == undefined -> B7; + true -> + begin + TrF8 = id(F8, TrUserData), + case is_empty_string(TrF8) of + true -> B7; + false -> e_type_string(TrF8, <>, TrUserData) + end + end + end, + if F9 == undefined -> B8; true -> begin - TrF8 = id(F8, TrUserData), - case is_empty_string(TrF8) of - true -> B7; - false -> e_type_string(TrF8, <>, TrUserData) + TrF9 = id(F9, TrUserData), + case is_empty_string(TrF9) of + true -> B8; + false -> e_type_string(TrF9, <>, TrUserData) end end end. @@ -350,40 +306,26 @@ encode_msg_sdl_register_super(#sdl_register_super{version = F1, installed_channe encode_msg_sdl_register_super_ack(Msg, TrUserData) -> encode_msg_sdl_register_super_ack(Msg, <<>>, TrUserData). -encode_msg_sdl_register_super_ack(#sdl_register_super_ack{dev_addr = F1, aes_key = F2, upgrade_type = F3, upgrade_prompt = F4, upgrade_address = F5}, Bin, TrUserData) -> +encode_msg_sdl_register_super_ack(#sdl_register_super_ack{aes_key = F1, session_token = F2}, Bin, TrUserData) -> B1 = if F1 == undefined -> Bin; true -> begin TrF1 = id(F1, TrUserData), - if TrF1 =:= undefined -> Bin; - true -> e_mfield_sdl_register_super_ack_dev_addr(TrF1, <>, TrUserData) + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) end end end, - B2 = if F2 == undefined -> B1; - true -> - begin - TrF2 = id(F2, TrUserData), - case iolist_size(TrF2) of - 0 -> B1; - _ -> e_type_bytes(TrF2, <>, TrUserData) - end - end - end, - B3 = if F3 == undefined -> B2; - true -> - begin - TrF3 = id(F3, TrUserData), - if TrF3 =:= 0 -> B2; - true -> e_varint(TrF3, <>, TrUserData) - end - end - end, - B4 = if F4 == undefined -> B3; - true -> begin TrF4 = id(F4, TrUserData), e_type_string(TrF4, <>, TrUserData) end - end, - if F5 == undefined -> B4; - true -> begin TrF5 = id(F5, TrUserData), e_type_string(TrF5, <>, TrUserData) end + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end end. encode_msg_sdl_register_super_nak(Msg, TrUserData) -> encode_msg_sdl_register_super_nak(Msg, <<>>, TrUserData). @@ -452,6 +394,118 @@ encode_msg_sdl_peer_info(#sdl_peer_info{dst_mac = F1, v4_info = F2, v6_info = F3 true -> begin TrF3 = id(F3, TrUserData), e_mfield_sdl_peer_info_v6_info(TrF3, <>, TrUserData) end end. +encode_msg_sdl_arp_request(Msg, TrUserData) -> encode_msg_sdl_arp_request(Msg, <<>>, TrUserData). + + +encode_msg_sdl_arp_request(#sdl_arp_request{target_ip = F1}, Bin, TrUserData) -> + if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end. + +encode_msg_sdl_arp_response(Msg, TrUserData) -> encode_msg_sdl_arp_response(Msg, <<>>, TrUserData). + + +encode_msg_sdl_arp_response(#sdl_arp_response{target_ip = F1, target_mac = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end + end. + +encode_msg_sdl_policy_request(Msg, TrUserData) -> encode_msg_sdl_policy_request(Msg, <<>>, TrUserData). + + +encode_msg_sdl_policy_request(#sdl_policy_request{src_identity_id = F1, dst_identity_id = F2, version = F3}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end, + if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> e_varint(TrF3, <>, TrUserData) + end + end + end. + +encode_msg_sdl_policy_response(Msg, TrUserData) -> encode_msg_sdl_policy_response(Msg, <<>>, TrUserData). + + +encode_msg_sdl_policy_response(#sdl_policy_response{src_identity_id = F1, dst_identity_id = F2, version = F3, rules = F4}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end, + B3 = if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> e_varint(TrF3, <>, TrUserData) + end + end + end, + if F4 == undefined -> B3; + true -> + begin + TrF4 = id(F4, TrUserData), + case iolist_size(TrF4) of + 0 -> B3; + _ -> e_type_bytes(TrF4, <>, TrUserData) + end + end + end. + encode_msg_sdl_nat_changed_event(Msg, TrUserData) -> encode_msg_sdl_nat_changed_event(Msg, <<>>, TrUserData). @@ -536,79 +590,6 @@ encode_msg_sdl_network_shutdown_event(#sdl_network_shutdown_event{message = F1}, end end. -encode_msg_sdl_change_network_command(Msg, TrUserData) -> encode_msg_sdl_change_network_command(Msg, <<>>, TrUserData). - - -encode_msg_sdl_change_network_command(#sdl_change_network_command{dev_addr = F1, aes_key = F2}, Bin, TrUserData) -> - B1 = if F1 == undefined -> Bin; - true -> - begin - TrF1 = id(F1, TrUserData), - if TrF1 =:= undefined -> Bin; - true -> e_mfield_sdl_change_network_command_dev_addr(TrF1, <>, TrUserData) - end - end - end, - if F2 == undefined -> B1; - true -> - begin - TrF2 = id(F2, TrUserData), - case iolist_size(TrF2) of - 0 -> B1; - _ -> e_type_bytes(TrF2, <>, TrUserData) - end - end - end. - -encode_msg_sdl_command_ack(Msg, TrUserData) -> encode_msg_sdl_command_ack(Msg, <<>>, TrUserData). - - -encode_msg_sdl_command_ack(#sdl_command_ack{status = F1, message = F2}, Bin, TrUserData) -> - B1 = if F1 == undefined -> Bin; - true -> - begin - TrF1 = id(F1, TrUserData), - if TrF1 =:= false -> Bin; - true -> e_type_bool(TrF1, <>, TrUserData) - end - end - end, - if F2 == undefined -> B1; - true -> begin TrF2 = id(F2, TrUserData), e_type_string(TrF2, <>, TrUserData) end - end. - -encode_msg_sdl_flows(Msg, TrUserData) -> encode_msg_sdl_flows(Msg, <<>>, TrUserData). - - -encode_msg_sdl_flows(#sdl_flows{forward_num = F1, p2p_num = F2, inbound_num = F3}, Bin, TrUserData) -> - B1 = if F1 == undefined -> Bin; - true -> - begin - TrF1 = id(F1, TrUserData), - if TrF1 =:= 0 -> Bin; - true -> e_varint(TrF1, <>, TrUserData) - end - end - end, - B2 = if F2 == undefined -> B1; - true -> - begin - TrF2 = id(F2, TrUserData), - if TrF2 =:= 0 -> B1; - true -> e_varint(TrF2, <>, TrUserData) - end - end - end, - if F3 == undefined -> B2; - true -> - begin - TrF3 = id(F3, TrUserData), - if TrF3 =:= 0 -> B2; - true -> e_varint(TrF3, <>, TrUserData) - end - end - end. - encode_msg_sdl_stun_request(Msg, TrUserData) -> encode_msg_sdl_stun_request(Msg, <<>>, TrUserData). @@ -690,7 +671,7 @@ encode_msg_sdl_stun_reply(#sdl_stun_reply{cookie = F1}, Bin, TrUserData) -> encode_msg_sdl_data(Msg, TrUserData) -> encode_msg_sdl_data(Msg, <<>>, TrUserData). -encode_msg_sdl_data(#sdl_data{network_id = F1, src_mac = F2, dst_mac = F3, is_p2p = F4, ttl = F5, data = F6}, Bin, TrUserData) -> +encode_msg_sdl_data(#sdl_data{network_id = F1, src_mac = F2, dst_mac = F3, is_p2p = F4, ttl = F5, data = F6, session_token = F7, identity_id = F8}, Bin, TrUserData) -> B1 = if F1 == undefined -> Bin; true -> begin @@ -738,13 +719,105 @@ encode_msg_sdl_data(#sdl_data{network_id = F1, src_mac = F2, dst_mac = F3, is_p2 end end end, - if F6 == undefined -> B5; + B6 = if F6 == undefined -> B5; + true -> + begin + TrF6 = id(F6, TrUserData), + case iolist_size(TrF6) of + 0 -> B5; + _ -> e_type_bytes(TrF6, <>, TrUserData) + end + end + end, + B7 = if F7 == undefined -> B6; + true -> + begin + TrF7 = id(F7, TrUserData), + case iolist_size(TrF7) of + 0 -> B6; + _ -> e_type_bytes(TrF7, <>, TrUserData) + end + end + end, + if F8 == undefined -> B7; true -> begin - TrF6 = id(F6, TrUserData), - case iolist_size(TrF6) of - 0 -> B5; - _ -> e_type_bytes(TrF6, <>, TrUserData) + TrF8 = id(F8, TrUserData), + if TrF8 =:= 0 -> B7; + true -> e_varint(TrF8, <>, TrUserData) + end + end + end. + +encode_msg_sdl_stun_probe(Msg, TrUserData) -> encode_msg_sdl_stun_probe(Msg, <<>>, TrUserData). + + +encode_msg_sdl_stun_probe(#sdl_stun_probe{cookie = F1, attr = F2, step = F3}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end, + if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> e_varint(TrF3, <>, TrUserData) + end + end + end. + +encode_msg_sdl_stun_probe_reply(Msg, TrUserData) -> encode_msg_sdl_stun_probe_reply(Msg, <<>>, TrUserData). + + +encode_msg_sdl_stun_probe_reply(#sdl_stun_probe_reply{cookie = F1, step = F2, port = F3, ip = F4}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end, + B3 = if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> e_varint(TrF3, <>, TrUserData) + end + end + end, + if F4 == undefined -> B3; + true -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> e_varint(TrF4, <>, TrUserData) end end end. @@ -817,71 +890,6 @@ encode_msg_sdl_register_ack(#sdl_register_ack{network_id = F1, src_mac = F2, dst end end. -encode_msg_sdl_stun_probe(Msg, TrUserData) -> encode_msg_sdl_stun_probe(Msg, <<>>, TrUserData). - - -encode_msg_sdl_stun_probe(#sdl_stun_probe{cookie = F1, attr = F2}, Bin, TrUserData) -> - B1 = if F1 == undefined -> Bin; - true -> - begin - TrF1 = id(F1, TrUserData), - if TrF1 =:= 0 -> Bin; - true -> e_varint(TrF1, <>, TrUserData) - end - end - end, - if F2 == undefined -> B1; - true -> - begin - TrF2 = id(F2, TrUserData), - if TrF2 =:= 0 -> B1; - true -> e_varint(TrF2, <>, TrUserData) - end - end - end. - -encode_msg_sdl_stun_probe_reply(Msg, TrUserData) -> encode_msg_sdl_stun_probe_reply(Msg, <<>>, TrUserData). - - -encode_msg_sdl_stun_probe_reply(#sdl_stun_probe_reply{cookie = F1, port = F2, ip = F3}, Bin, TrUserData) -> - B1 = if F1 == undefined -> Bin; - true -> - begin - TrF1 = id(F1, TrUserData), - if TrF1 =:= 0 -> Bin; - true -> e_varint(TrF1, <>, TrUserData) - end - end - end, - B2 = if F2 == undefined -> B1; - true -> - begin - TrF2 = id(F2, TrUserData), - if TrF2 =:= 0 -> B1; - true -> e_varint(TrF2, <>, TrUserData) - end - end - end, - if F3 == undefined -> B2; - true -> - begin - TrF3 = id(F3, TrUserData), - if TrF3 =:= 0 -> B2; - true -> e_varint(TrF3, <>, TrUserData) - end - end - end. - -e_mfield_sdl_register_super_dev_addr(Msg, Bin, TrUserData) -> - SubBin = encode_msg_sdl_dev_addr(Msg, <<>>, TrUserData), - Bin2 = e_varint(byte_size(SubBin), Bin), - <>. - -e_mfield_sdl_register_super_ack_dev_addr(Msg, Bin, TrUserData) -> - SubBin = encode_msg_sdl_dev_addr(Msg, <<>>, TrUserData), - Bin2 = e_varint(byte_size(SubBin), Bin), - <>. - e_mfield_sdl_peer_info_v4_info(Msg, Bin, TrUserData) -> SubBin = encode_msg_sdl_v4_info(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), @@ -897,11 +905,6 @@ e_mfield_sdl_send_register_event_v6_info(Msg, Bin, TrUserData) -> Bin2 = e_varint(byte_size(SubBin), Bin), <>. -e_mfield_sdl_change_network_command_dev_addr(Msg, Bin, TrUserData) -> - SubBin = encode_msg_sdl_dev_addr(Msg, <<>>, TrUserData), - Bin2 = e_varint(byte_size(SubBin), Bin), - <>. - e_mfield_sdl_stun_request_v6_info(Msg, Bin, TrUserData) -> SubBin = encode_msg_sdl_v6_info(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), @@ -1047,26 +1050,26 @@ decode_msg_1_catch(Bin, MsgName, TrUserData) -> decode_msg_2_doit(sdl_v4_info, Bin, TrUserData) -> id(decode_msg_sdl_v4_info(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_v6_info, Bin, TrUserData) -> id(decode_msg_sdl_v6_info(Bin, TrUserData), TrUserData); -decode_msg_2_doit(sdl_dev_addr, Bin, TrUserData) -> id(decode_msg_sdl_dev_addr(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_empty, Bin, TrUserData) -> id(decode_msg_sdl_empty(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_register_super, Bin, TrUserData) -> id(decode_msg_sdl_register_super(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_register_super_ack, Bin, TrUserData) -> id(decode_msg_sdl_register_super_ack(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_register_super_nak, Bin, TrUserData) -> id(decode_msg_sdl_register_super_nak(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_query_info, Bin, TrUserData) -> id(decode_msg_sdl_query_info(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_peer_info, Bin, TrUserData) -> id(decode_msg_sdl_peer_info(Bin, TrUserData), TrUserData); +decode_msg_2_doit(sdl_arp_request, Bin, TrUserData) -> id(decode_msg_sdl_arp_request(Bin, TrUserData), TrUserData); +decode_msg_2_doit(sdl_arp_response, Bin, TrUserData) -> id(decode_msg_sdl_arp_response(Bin, TrUserData), TrUserData); +decode_msg_2_doit(sdl_policy_request, Bin, TrUserData) -> id(decode_msg_sdl_policy_request(Bin, TrUserData), TrUserData); +decode_msg_2_doit(sdl_policy_response, Bin, TrUserData) -> id(decode_msg_sdl_policy_response(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_nat_changed_event, Bin, TrUserData) -> id(decode_msg_sdl_nat_changed_event(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_send_register_event, Bin, TrUserData) -> id(decode_msg_sdl_send_register_event(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_network_shutdown_event, Bin, TrUserData) -> id(decode_msg_sdl_network_shutdown_event(Bin, TrUserData), TrUserData); -decode_msg_2_doit(sdl_change_network_command, Bin, TrUserData) -> id(decode_msg_sdl_change_network_command(Bin, TrUserData), TrUserData); -decode_msg_2_doit(sdl_command_ack, Bin, TrUserData) -> id(decode_msg_sdl_command_ack(Bin, TrUserData), TrUserData); -decode_msg_2_doit(sdl_flows, Bin, TrUserData) -> id(decode_msg_sdl_flows(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_stun_request, Bin, TrUserData) -> id(decode_msg_sdl_stun_request(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_stun_reply, Bin, TrUserData) -> id(decode_msg_sdl_stun_reply(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_data, Bin, TrUserData) -> id(decode_msg_sdl_data(Bin, TrUserData), TrUserData); -decode_msg_2_doit(sdl_register, Bin, TrUserData) -> id(decode_msg_sdl_register(Bin, TrUserData), TrUserData); -decode_msg_2_doit(sdl_register_ack, Bin, TrUserData) -> id(decode_msg_sdl_register_ack(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_stun_probe, Bin, TrUserData) -> id(decode_msg_sdl_stun_probe(Bin, TrUserData), TrUserData); -decode_msg_2_doit(sdl_stun_probe_reply, Bin, TrUserData) -> id(decode_msg_sdl_stun_probe_reply(Bin, TrUserData), TrUserData). +decode_msg_2_doit(sdl_stun_probe_reply, Bin, TrUserData) -> id(decode_msg_sdl_stun_probe_reply(Bin, TrUserData), TrUserData); +decode_msg_2_doit(sdl_register, Bin, TrUserData) -> id(decode_msg_sdl_register(Bin, TrUserData), TrUserData); +decode_msg_2_doit(sdl_register_ack, Bin, TrUserData) -> id(decode_msg_sdl_register_ack(Bin, TrUserData), TrUserData). @@ -1179,78 +1182,6 @@ skip_32_sdl_v6_info(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_64_sdl_v6_info(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_v6_info(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). -decode_msg_sdl_dev_addr(Bin, TrUserData) -> dfp_read_field_def_sdl_dev_addr(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), TrUserData). - -dfp_read_field_def_sdl_dev_addr(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_dev_addr_network_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_dev_addr(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_dev_addr_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_dev_addr(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_dev_addr_net_addr(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_dev_addr(<<32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_dev_addr_net_bit_len(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_dev_addr(<<42, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_dev_addr_network_domain(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_dev_addr(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, _) -> #sdl_dev_addr{network_id = F@_1, mac = F@_2, net_addr = F@_3, net_bit_len = F@_4, network_domain = F@_5}; -dfp_read_field_def_sdl_dev_addr(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dg_read_field_def_sdl_dev_addr(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). - -dg_read_field_def_sdl_dev_addr(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_dev_addr(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dg_read_field_def_sdl_dev_addr(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> - Key = X bsl N + Acc, - case Key of - 8 -> d_field_sdl_dev_addr_network_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 18 -> d_field_sdl_dev_addr_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 24 -> d_field_sdl_dev_addr_net_addr(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 32 -> d_field_sdl_dev_addr_net_bit_len(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 42 -> d_field_sdl_dev_addr_network_domain(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - _ -> - case Key band 7 of - 0 -> skip_varint_sdl_dev_addr(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 1 -> skip_64_sdl_dev_addr(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 2 -> skip_length_delimited_sdl_dev_addr(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 3 -> skip_group_sdl_dev_addr(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 5 -> skip_32_sdl_dev_addr(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) - end - end; -dg_read_field_def_sdl_dev_addr(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, _) -> #sdl_dev_addr{network_id = F@_1, mac = F@_2, net_addr = F@_3, net_bit_len = F@_4, network_domain = F@_5}. - -d_field_sdl_dev_addr_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_sdl_dev_addr_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_dev_addr_network_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_dev_addr(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, TrUserData). - -d_field_sdl_dev_addr_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_sdl_dev_addr_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_dev_addr_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> - {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_dev_addr(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, TrUserData). - -d_field_sdl_dev_addr_net_addr(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_sdl_dev_addr_net_addr(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_dev_addr_net_addr(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_dev_addr(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, TrUserData). - -d_field_sdl_dev_addr_net_bit_len(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_sdl_dev_addr_net_bit_len(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_dev_addr_net_bit_len(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_dev_addr(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, TrUserData). - -d_field_sdl_dev_addr_network_domain(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_sdl_dev_addr_network_domain(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_dev_addr_network_domain(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, TrUserData) -> - {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_dev_addr(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, TrUserData). - -skip_varint_sdl_dev_addr(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> skip_varint_sdl_dev_addr(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -skip_varint_sdl_dev_addr(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_sdl_dev_addr(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). - -skip_length_delimited_sdl_dev_addr(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> skip_length_delimited_sdl_dev_addr(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -skip_length_delimited_sdl_dev_addr(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> - Length = X bsl N + Acc, - <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_sdl_dev_addr(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). - -skip_group_sdl_dev_addr(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> - {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_sdl_dev_addr(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). - -skip_32_sdl_dev_addr(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_sdl_dev_addr(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). - -skip_64_sdl_dev_addr(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_sdl_dev_addr(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). - decode_msg_sdl_empty(Bin, TrUserData) -> dfp_read_field_def_sdl_empty(Bin, 0, 0, 0, TrUserData). dfp_read_field_def_sdl_empty(<<>>, 0, 0, _, _) -> #sdl_empty{}; @@ -1286,213 +1217,182 @@ skip_32_sdl_empty(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> dfp_read_fiel skip_64_sdl_empty(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> dfp_read_field_def_sdl_empty(Rest, Z1, Z2, F, TrUserData). decode_msg_sdl_register_super(Bin, TrUserData) -> - dfp_read_field_def_sdl_register_super(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(undefined, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). + dfp_read_field_def_sdl_register_super(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). -dfp_read_field_def_sdl_register_super(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_register_super_version(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -dfp_read_field_def_sdl_register_super(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> - d_field_sdl_register_super_installed_channel(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -dfp_read_field_def_sdl_register_super(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_register_super_client_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -dfp_read_field_def_sdl_register_super(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_register_super_dev_addr(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -dfp_read_field_def_sdl_register_super(<<42, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_register_super_pub_key(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -dfp_read_field_def_sdl_register_super(<<50, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_register_super_token(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -dfp_read_field_def_sdl_register_super(<<58, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_register_super_network_code(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -dfp_read_field_def_sdl_register_super(<<66, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_register_super_hostname(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -dfp_read_field_def_sdl_register_super(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _) -> - #sdl_register_super{version = F@_1, installed_channel = F@_2, client_id = F@_3, dev_addr = F@_4, pub_key = F@_5, token = F@_6, network_code = F@_7, hostname = F@_8}; -dfp_read_field_def_sdl_register_super(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dg_read_field_def_sdl_register_super(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). +dfp_read_field_def_sdl_register_super(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + d_field_sdl_register_super_version(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dfp_read_field_def_sdl_register_super(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + d_field_sdl_register_super_client_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dfp_read_field_def_sdl_register_super(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + d_field_sdl_register_super_network_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dfp_read_field_def_sdl_register_super(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + d_field_sdl_register_super_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dfp_read_field_def_sdl_register_super(<<40, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + d_field_sdl_register_super_ip(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dfp_read_field_def_sdl_register_super(<<48, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + d_field_sdl_register_super_mask_len(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dfp_read_field_def_sdl_register_super(<<58, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + d_field_sdl_register_super_hostname(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dfp_read_field_def_sdl_register_super(<<66, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + d_field_sdl_register_super_pub_key(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dfp_read_field_def_sdl_register_super(<<74, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + d_field_sdl_register_super_access_token(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dfp_read_field_def_sdl_register_super(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, _) -> + #sdl_register_super{version = F@_1, client_id = F@_2, network_id = F@_3, mac = F@_4, ip = F@_5, mask_len = F@_6, hostname = F@_7, pub_key = F@_8, access_token = F@_9}; +dfp_read_field_def_sdl_register_super(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> dg_read_field_def_sdl_register_super(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). -dg_read_field_def_sdl_register_super(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 32 - 7 -> - dg_read_field_def_sdl_register_super(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -dg_read_field_def_sdl_register_super(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> +dg_read_field_def_sdl_register_super(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 32 - 7 -> + dg_read_field_def_sdl_register_super(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +dg_read_field_def_sdl_register_super(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> Key = X bsl N + Acc, case Key of - 8 -> d_field_sdl_register_super_version(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 18 -> d_field_sdl_register_super_installed_channel(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 26 -> d_field_sdl_register_super_client_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 34 -> d_field_sdl_register_super_dev_addr(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 42 -> d_field_sdl_register_super_pub_key(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 50 -> d_field_sdl_register_super_token(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 58 -> d_field_sdl_register_super_network_code(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 66 -> d_field_sdl_register_super_hostname(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 8 -> d_field_sdl_register_super_version(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 18 -> d_field_sdl_register_super_client_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 24 -> d_field_sdl_register_super_network_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 34 -> d_field_sdl_register_super_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 40 -> d_field_sdl_register_super_ip(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 48 -> d_field_sdl_register_super_mask_len(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 58 -> d_field_sdl_register_super_hostname(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 66 -> d_field_sdl_register_super_pub_key(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 74 -> d_field_sdl_register_super_access_token(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); _ -> case Key band 7 of - 0 -> skip_varint_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 1 -> skip_64_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 2 -> skip_length_delimited_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 3 -> skip_group_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); - 5 -> skip_32_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) + 0 -> skip_varint_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 1 -> skip_64_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 2 -> skip_length_delimited_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 3 -> skip_group_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); + 5 -> skip_32_sdl_register_super(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) end end; -dg_read_field_def_sdl_register_super(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _) -> - #sdl_register_super{version = F@_1, installed_channel = F@_2, client_id = F@_3, dev_addr = F@_4, pub_key = F@_5, token = F@_6, network_code = F@_7, hostname = F@_8}. +dg_read_field_def_sdl_register_super(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, _) -> + #sdl_register_super{version = F@_1, client_id = F@_2, network_id = F@_3, mac = F@_4, ip = F@_5, mask_len = F@_6, hostname = F@_7, pub_key = F@_8, access_token = F@_9}. -d_field_sdl_register_super_version(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> - d_field_sdl_register_super_version(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -d_field_sdl_register_super_version(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> +d_field_sdl_register_super_version(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + d_field_sdl_register_super_version(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +d_field_sdl_register_super_version(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). + dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). -d_field_sdl_register_super_installed_channel(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> - d_field_sdl_register_super_installed_channel(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -d_field_sdl_register_super_installed_channel(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> +d_field_sdl_register_super_client_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + d_field_sdl_register_super_client_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +d_field_sdl_register_super_client_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). + dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). -d_field_sdl_register_super_client_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> - d_field_sdl_register_super_client_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -d_field_sdl_register_super_client_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> +d_field_sdl_register_super_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + d_field_sdl_register_super_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +d_field_sdl_register_super_network_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). + +d_field_sdl_register_super_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + d_field_sdl_register_super_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +d_field_sdl_register_super_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). + dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). -d_field_sdl_register_super_dev_addr(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> - d_field_sdl_register_super_dev_addr(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -d_field_sdl_register_super_dev_addr(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, Prev, F@_5, F@_6, F@_7, F@_8, TrUserData) -> - {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id(decode_msg_sdl_dev_addr(Bs, TrUserData), TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super(RestF, - 0, - 0, - F, - F@_1, - F@_2, - F@_3, - if Prev == undefined -> NewFValue; - true -> merge_msg_sdl_dev_addr(Prev, NewFValue, TrUserData) - end, - F@_5, - F@_6, - F@_7, - F@_8, - TrUserData). +d_field_sdl_register_super_ip(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + d_field_sdl_register_super_ip(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +d_field_sdl_register_super_ip(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, F@_7, F@_8, F@_9, TrUserData). -d_field_sdl_register_super_pub_key(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> - d_field_sdl_register_super_pub_key(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -d_field_sdl_register_super_pub_key(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, F@_7, F@_8, TrUserData) -> +d_field_sdl_register_super_mask_len(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + d_field_sdl_register_super_mask_len(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +d_field_sdl_register_super_mask_len(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, F@_7, F@_8, F@_9, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, F@_7, F@_8, F@_9, TrUserData). + +d_field_sdl_register_super_hostname(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + d_field_sdl_register_super_hostname(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +d_field_sdl_register_super_hostname(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _, F@_8, F@_9, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, F@_7, F@_8, TrUserData). + dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, NewFValue, F@_8, F@_9, TrUserData). -d_field_sdl_register_super_token(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> - d_field_sdl_register_super_token(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -d_field_sdl_register_super_token(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, F@_7, F@_8, TrUserData) -> +d_field_sdl_register_super_pub_key(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + d_field_sdl_register_super_pub_key(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +d_field_sdl_register_super_pub_key(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, _, F@_9, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, F@_7, F@_8, TrUserData). + dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, NewFValue, F@_9, TrUserData). -d_field_sdl_register_super_network_code(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> - d_field_sdl_register_super_network_code(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -d_field_sdl_register_super_network_code(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _, F@_8, TrUserData) -> +d_field_sdl_register_super_access_token(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + d_field_sdl_register_super_access_token(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +d_field_sdl_register_super_access_token(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, NewFValue, F@_8, TrUserData). + dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, NewFValue, TrUserData). -d_field_sdl_register_super_hostname(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> - d_field_sdl_register_super_hostname(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -d_field_sdl_register_super_hostname(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, _, TrUserData) -> - {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, NewFValue, TrUserData). +skip_varint_sdl_register_super(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + skip_varint_sdl_register_super(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +skip_varint_sdl_register_super(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + dfp_read_field_def_sdl_register_super(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). -skip_varint_sdl_register_super(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> skip_varint_sdl_register_super(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -skip_varint_sdl_register_super(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dfp_read_field_def_sdl_register_super(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). - -skip_length_delimited_sdl_register_super(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> - skip_length_delimited_sdl_register_super(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); -skip_length_delimited_sdl_register_super(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> +skip_length_delimited_sdl_register_super(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) when N < 57 -> + skip_length_delimited_sdl_register_super(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData); +skip_length_delimited_sdl_register_super(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_sdl_register_super(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). + dfp_read_field_def_sdl_register_super(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). -skip_group_sdl_register_super(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> +skip_group_sdl_register_super(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_sdl_register_super(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). + dfp_read_field_def_sdl_register_super(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). -skip_32_sdl_register_super(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dfp_read_field_def_sdl_register_super(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). +skip_32_sdl_register_super(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + dfp_read_field_def_sdl_register_super(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). -skip_64_sdl_register_super(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dfp_read_field_def_sdl_register_super(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). +skip_64_sdl_register_super(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData) -> + dfp_read_field_def_sdl_register_super(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, TrUserData). -decode_msg_sdl_register_super_ack(Bin, TrUserData) -> dfp_read_field_def_sdl_register_super_ack(Bin, 0, 0, 0, id(undefined, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(undefined, TrUserData), id(undefined, TrUserData), TrUserData). +decode_msg_sdl_register_super_ack(Bin, TrUserData) -> dfp_read_field_def_sdl_register_super_ack(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). -dfp_read_field_def_sdl_register_super_ack(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_register_super_ack_dev_addr(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_register_super_ack(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_register_super_ack_aes_key(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_register_super_ack(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_register_super_ack_upgrade_type(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_register_super_ack(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_register_super_ack_upgrade_prompt(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_register_super_ack(<<42, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_sdl_register_super_ack_upgrade_address(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_sdl_register_super_ack(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, _) -> #sdl_register_super_ack{dev_addr = F@_1, aes_key = F@_2, upgrade_type = F@_3, upgrade_prompt = F@_4, upgrade_address = F@_5}; -dfp_read_field_def_sdl_register_super_ack(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dg_read_field_def_sdl_register_super_ack(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). +dfp_read_field_def_sdl_register_super_ack(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_register_super_ack_aes_key(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_sdl_register_super_ack(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_register_super_ack_session_token(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_sdl_register_super_ack(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_register_super_ack{aes_key = F@_1, session_token = F@_2}; +dfp_read_field_def_sdl_register_super_ack(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_sdl_register_super_ack(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). -dg_read_field_def_sdl_register_super_ack(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 32 - 7 -> - dg_read_field_def_sdl_register_super_ack(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dg_read_field_def_sdl_register_super_ack(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> +dg_read_field_def_sdl_register_super_ack(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_register_super_ack(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_sdl_register_super_ack(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> Key = X bsl N + Acc, case Key of - 10 -> d_field_sdl_register_super_ack_dev_addr(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 18 -> d_field_sdl_register_super_ack_aes_key(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 24 -> d_field_sdl_register_super_ack_upgrade_type(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 34 -> d_field_sdl_register_super_ack_upgrade_prompt(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 42 -> d_field_sdl_register_super_ack_upgrade_address(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 10 -> d_field_sdl_register_super_ack_aes_key(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> d_field_sdl_register_super_ack_session_token(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); _ -> case Key band 7 of - 0 -> skip_varint_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 1 -> skip_64_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 2 -> skip_length_delimited_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 3 -> skip_group_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 5 -> skip_32_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + 0 -> skip_varint_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_sdl_register_super_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) end end; -dg_read_field_def_sdl_register_super_ack(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, _) -> #sdl_register_super_ack{dev_addr = F@_1, aes_key = F@_2, upgrade_type = F@_3, upgrade_prompt = F@_4, upgrade_address = F@_5}. +dg_read_field_def_sdl_register_super_ack(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_register_super_ack{aes_key = F@_1, session_token = F@_2}. -d_field_sdl_register_super_ack_dev_addr(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_sdl_register_super_ack_dev_addr(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_register_super_ack_dev_addr(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, F@_2, F@_3, F@_4, F@_5, TrUserData) -> - {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id(decode_msg_sdl_dev_addr(Bs, TrUserData), TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super_ack(RestF, - 0, - 0, - F, - if Prev == undefined -> NewFValue; - true -> merge_msg_sdl_dev_addr(Prev, NewFValue, TrUserData) - end, - F@_2, - F@_3, - F@_4, - F@_5, - TrUserData). - -d_field_sdl_register_super_ack_aes_key(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_sdl_register_super_ack_aes_key(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_register_super_ack_aes_key(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> +d_field_sdl_register_super_ack_aes_key(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_register_super_ack_aes_key(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_sdl_register_super_ack_aes_key(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super_ack(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, TrUserData). + dfp_read_field_def_sdl_register_super_ack(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). -d_field_sdl_register_super_ack_upgrade_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> - d_field_sdl_register_super_ack_upgrade_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_register_super_ack_upgrade_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_register_super_ack(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, TrUserData). - -d_field_sdl_register_super_ack_upgrade_prompt(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> - d_field_sdl_register_super_ack_upgrade_prompt(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_register_super_ack_upgrade_prompt(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, TrUserData) -> +d_field_sdl_register_super_ack_session_token(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_register_super_ack_session_token(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_sdl_register_super_ack_session_token(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super_ack(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, TrUserData). + dfp_read_field_def_sdl_register_super_ack(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). -d_field_sdl_register_super_ack_upgrade_address(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> - d_field_sdl_register_super_ack_upgrade_address(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_sdl_register_super_ack_upgrade_address(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, TrUserData) -> - {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_register_super_ack(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, TrUserData). +skip_varint_sdl_register_super_ack(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_sdl_register_super_ack(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_sdl_register_super_ack(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_register_super_ack(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). -skip_varint_sdl_register_super_ack(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> skip_varint_sdl_register_super_ack(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -skip_varint_sdl_register_super_ack(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_sdl_register_super_ack(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). - -skip_length_delimited_sdl_register_super_ack(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> - skip_length_delimited_sdl_register_super_ack(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -skip_length_delimited_sdl_register_super_ack(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> +skip_length_delimited_sdl_register_super_ack(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_sdl_register_super_ack(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_sdl_register_super_ack(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_sdl_register_super_ack(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + dfp_read_field_def_sdl_register_super_ack(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). -skip_group_sdl_register_super_ack(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> +skip_group_sdl_register_super_ack(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_sdl_register_super_ack(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + dfp_read_field_def_sdl_register_super_ack(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). -skip_32_sdl_register_super_ack(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_sdl_register_super_ack(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). +skip_32_sdl_register_super_ack(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_register_super_ack(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). -skip_64_sdl_register_super_ack(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_sdl_register_super_ack(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). +skip_64_sdl_register_super_ack(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_register_super_ack(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). decode_msg_sdl_register_super_nak(Bin, TrUserData) -> dfp_read_field_def_sdl_register_super_nak(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). @@ -1665,6 +1565,224 @@ skip_32_sdl_peer_info(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUser skip_64_sdl_peer_info(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_peer_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). +decode_msg_sdl_arp_request(Bin, TrUserData) -> dfp_read_field_def_sdl_arp_request(Bin, 0, 0, 0, id(0, TrUserData), TrUserData). + +dfp_read_field_def_sdl_arp_request(<<8, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_sdl_arp_request_target_ip(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_sdl_arp_request(<<>>, 0, 0, _, F@_1, _) -> #sdl_arp_request{target_ip = F@_1}; +dfp_read_field_def_sdl_arp_request(Other, Z1, Z2, F, F@_1, TrUserData) -> dg_read_field_def_sdl_arp_request(Other, Z1, Z2, F, F@_1, TrUserData). + +dg_read_field_def_sdl_arp_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_arp_request(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +dg_read_field_def_sdl_arp_request(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_sdl_arp_request_target_ip(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_sdl_arp_request(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> skip_64_sdl_arp_request(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> skip_length_delimited_sdl_arp_request(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> skip_group_sdl_arp_request(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> skip_32_sdl_arp_request(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +dg_read_field_def_sdl_arp_request(<<>>, 0, 0, _, F@_1, _) -> #sdl_arp_request{target_ip = F@_1}. + +d_field_sdl_arp_request_target_ip(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_sdl_arp_request_target_ip(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_sdl_arp_request_target_ip(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_arp_request(RestF, 0, 0, F, NewFValue, TrUserData). + +skip_varint_sdl_arp_request(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> skip_varint_sdl_arp_request(Rest, Z1, Z2, F, F@_1, TrUserData); +skip_varint_sdl_arp_request(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_arp_request(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_length_delimited_sdl_arp_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> skip_length_delimited_sdl_arp_request(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +skip_length_delimited_sdl_arp_request(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_sdl_arp_request(Rest2, 0, 0, F, F@_1, TrUserData). + +skip_group_sdl_arp_request(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_sdl_arp_request(Rest, 0, Z2, FNum, F@_1, TrUserData). + +skip_32_sdl_arp_request(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_arp_request(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_64_sdl_arp_request(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_arp_request(Rest, Z1, Z2, F, F@_1, TrUserData). + +decode_msg_sdl_arp_response(Bin, TrUserData) -> dfp_read_field_def_sdl_arp_response(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +dfp_read_field_def_sdl_arp_response(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_arp_response_target_ip(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_sdl_arp_response(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_arp_response_target_mac(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_sdl_arp_response(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_arp_response{target_ip = F@_1, target_mac = F@_2}; +dfp_read_field_def_sdl_arp_response(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_sdl_arp_response(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_sdl_arp_response(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_arp_response(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_sdl_arp_response(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_sdl_arp_response_target_ip(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> d_field_sdl_arp_response_target_mac(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_sdl_arp_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_sdl_arp_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_sdl_arp_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_sdl_arp_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_sdl_arp_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_sdl_arp_response(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_arp_response{target_ip = F@_1, target_mac = F@_2}. + +d_field_sdl_arp_response_target_ip(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_arp_response_target_ip(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_sdl_arp_response_target_ip(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_arp_response(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_sdl_arp_response_target_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_arp_response_target_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_sdl_arp_response_target_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_sdl_arp_response(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +skip_varint_sdl_arp_response(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_sdl_arp_response(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_sdl_arp_response(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_arp_response(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_sdl_arp_response(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_sdl_arp_response(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_sdl_arp_response(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_sdl_arp_response(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_sdl_arp_response(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_sdl_arp_response(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_sdl_arp_response(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_arp_response(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_sdl_arp_response(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_arp_response(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +decode_msg_sdl_policy_request(Bin, TrUserData) -> dfp_read_field_def_sdl_policy_request(Bin, 0, 0, 0, id(0, TrUserData), id(0, TrUserData), id(0, TrUserData), TrUserData). + +dfp_read_field_def_sdl_policy_request(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_policy_request_src_identity_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_sdl_policy_request(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_policy_request_dst_identity_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_sdl_policy_request(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_policy_request_version(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_sdl_policy_request(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_policy_request{src_identity_id = F@_1, dst_identity_id = F@_2, version = F@_3}; +dfp_read_field_def_sdl_policy_request(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dg_read_field_def_sdl_policy_request(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +dg_read_field_def_sdl_policy_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_policy_request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +dg_read_field_def_sdl_policy_request(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_sdl_policy_request_src_identity_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 16 -> d_field_sdl_policy_request_dst_identity_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 24 -> d_field_sdl_policy_request_version(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_sdl_policy_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 1 -> skip_64_sdl_policy_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 2 -> skip_length_delimited_sdl_policy_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 3 -> skip_group_sdl_policy_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 5 -> skip_32_sdl_policy_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) + end + end; +dg_read_field_def_sdl_policy_request(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_policy_request{src_identity_id = F@_1, dst_identity_id = F@_2, version = F@_3}. + +d_field_sdl_policy_request_src_identity_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_policy_request_src_identity_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_sdl_policy_request_src_identity_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_policy_request(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData). + +d_field_sdl_policy_request_dst_identity_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_policy_request_dst_identity_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_sdl_policy_request_dst_identity_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_policy_request(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). + +d_field_sdl_policy_request_version(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_policy_request_version(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_sdl_policy_request_version(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_policy_request(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). + +skip_varint_sdl_policy_request(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> skip_varint_sdl_policy_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +skip_varint_sdl_policy_request(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_policy_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +skip_length_delimited_sdl_policy_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> skip_length_delimited_sdl_policy_request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +skip_length_delimited_sdl_policy_request(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_sdl_policy_request(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). + +skip_group_sdl_policy_request(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_sdl_policy_request(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). + +skip_32_sdl_policy_request(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_policy_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +skip_64_sdl_policy_request(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_policy_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +decode_msg_sdl_policy_response(Bin, TrUserData) -> dfp_read_field_def_sdl_policy_response(Bin, 0, 0, 0, id(0, TrUserData), id(0, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +dfp_read_field_def_sdl_policy_response(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_policy_response_src_identity_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dfp_read_field_def_sdl_policy_response(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_policy_response_dst_identity_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dfp_read_field_def_sdl_policy_response(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_policy_response_version(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dfp_read_field_def_sdl_policy_response(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_policy_response_rules(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dfp_read_field_def_sdl_policy_response(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, _) -> #sdl_policy_response{src_identity_id = F@_1, dst_identity_id = F@_2, version = F@_3, rules = F@_4}; +dfp_read_field_def_sdl_policy_response(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dg_read_field_def_sdl_policy_response(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData). + +dg_read_field_def_sdl_policy_response(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_policy_response(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dg_read_field_def_sdl_policy_response(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_sdl_policy_response_src_identity_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData); + 16 -> d_field_sdl_policy_response_dst_identity_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData); + 24 -> d_field_sdl_policy_response_version(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData); + 34 -> d_field_sdl_policy_response_rules(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_sdl_policy_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData); + 1 -> skip_64_sdl_policy_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData); + 2 -> skip_length_delimited_sdl_policy_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData); + 3 -> skip_group_sdl_policy_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData); + 5 -> skip_32_sdl_policy_response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData) + end + end; +dg_read_field_def_sdl_policy_response(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, _) -> #sdl_policy_response{src_identity_id = F@_1, dst_identity_id = F@_2, version = F@_3, rules = F@_4}. + +d_field_sdl_policy_response_src_identity_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_policy_response_src_identity_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +d_field_sdl_policy_response_src_identity_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_policy_response(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, TrUserData). + +d_field_sdl_policy_response_dst_identity_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_policy_response_dst_identity_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +d_field_sdl_policy_response_dst_identity_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_policy_response(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, TrUserData). + +d_field_sdl_policy_response_version(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_policy_response_version(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +d_field_sdl_policy_response_version(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_policy_response(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, TrUserData). + +d_field_sdl_policy_response_rules(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_policy_response_rules(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +d_field_sdl_policy_response_rules(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_sdl_policy_response(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, TrUserData). + +skip_varint_sdl_policy_response(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> skip_varint_sdl_policy_response(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +skip_varint_sdl_policy_response(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_sdl_policy_response(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData). + +skip_length_delimited_sdl_policy_response(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> skip_length_delimited_sdl_policy_response(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +skip_length_delimited_sdl_policy_response(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_sdl_policy_response(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, TrUserData). + +skip_group_sdl_policy_response(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_sdl_policy_response(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, TrUserData). + +skip_32_sdl_policy_response(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_sdl_policy_response(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData). + +skip_64_sdl_policy_response(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_sdl_policy_response(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData). + decode_msg_sdl_nat_changed_event(Bin, TrUserData) -> dfp_read_field_def_sdl_nat_changed_event(Bin, 0, 0, 0, id(<<>>, TrUserData), id(0, TrUserData), TrUserData). dfp_read_field_def_sdl_nat_changed_event(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_nat_changed_event_mac(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); @@ -1845,174 +1963,6 @@ skip_32_sdl_network_shutdown_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUse skip_64_sdl_network_shutdown_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_network_shutdown_event(Rest, Z1, Z2, F, F@_1, TrUserData). -decode_msg_sdl_change_network_command(Bin, TrUserData) -> dfp_read_field_def_sdl_change_network_command(Bin, 0, 0, 0, id(undefined, TrUserData), id(<<>>, TrUserData), TrUserData). - -dfp_read_field_def_sdl_change_network_command(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_change_network_command_dev_addr(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_sdl_change_network_command(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_change_network_command_aes_key(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_sdl_change_network_command(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_change_network_command{dev_addr = F@_1, aes_key = F@_2}; -dfp_read_field_def_sdl_change_network_command(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_sdl_change_network_command(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). - -dg_read_field_def_sdl_change_network_command(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_change_network_command(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -dg_read_field_def_sdl_change_network_command(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> - Key = X bsl N + Acc, - case Key of - 10 -> d_field_sdl_change_network_command_dev_addr(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); - 18 -> d_field_sdl_change_network_command_aes_key(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); - _ -> - case Key band 7 of - 0 -> skip_varint_sdl_change_network_command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 1 -> skip_64_sdl_change_network_command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 2 -> skip_length_delimited_sdl_change_network_command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 3 -> skip_group_sdl_change_network_command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 5 -> skip_32_sdl_change_network_command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) - end - end; -dg_read_field_def_sdl_change_network_command(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_change_network_command{dev_addr = F@_1, aes_key = F@_2}. - -d_field_sdl_change_network_command_dev_addr(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_change_network_command_dev_addr(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_sdl_change_network_command_dev_addr(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, F@_2, TrUserData) -> - {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id(decode_msg_sdl_dev_addr(Bs, TrUserData), TrUserData), Rest2} end, - dfp_read_field_def_sdl_change_network_command(RestF, - 0, - 0, - F, - if Prev == undefined -> NewFValue; - true -> merge_msg_sdl_dev_addr(Prev, NewFValue, TrUserData) - end, - F@_2, - TrUserData). - -d_field_sdl_change_network_command_aes_key(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_change_network_command_aes_key(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_sdl_change_network_command_aes_key(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> - {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_change_network_command(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). - -skip_varint_sdl_change_network_command(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_sdl_change_network_command(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -skip_varint_sdl_change_network_command(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_change_network_command(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). - -skip_length_delimited_sdl_change_network_command(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_sdl_change_network_command(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -skip_length_delimited_sdl_change_network_command(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> - Length = X bsl N + Acc, - <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_sdl_change_network_command(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). - -skip_group_sdl_change_network_command(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> - {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_sdl_change_network_command(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). - -skip_32_sdl_change_network_command(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_change_network_command(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). - -skip_64_sdl_change_network_command(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_change_network_command(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). - -decode_msg_sdl_command_ack(Bin, TrUserData) -> dfp_read_field_def_sdl_command_ack(Bin, 0, 0, 0, id(false, TrUserData), id(undefined, TrUserData), TrUserData). - -dfp_read_field_def_sdl_command_ack(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_command_ack_status(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_sdl_command_ack(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_command_ack_message(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_sdl_command_ack(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_command_ack{status = F@_1, message = F@_2}; -dfp_read_field_def_sdl_command_ack(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_sdl_command_ack(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). - -dg_read_field_def_sdl_command_ack(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_command_ack(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -dg_read_field_def_sdl_command_ack(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> - Key = X bsl N + Acc, - case Key of - 8 -> d_field_sdl_command_ack_status(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); - 18 -> d_field_sdl_command_ack_message(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); - _ -> - case Key band 7 of - 0 -> skip_varint_sdl_command_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 1 -> skip_64_sdl_command_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 2 -> skip_length_delimited_sdl_command_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 3 -> skip_group_sdl_command_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 5 -> skip_32_sdl_command_ack(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) - end - end; -dg_read_field_def_sdl_command_ack(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_command_ack{status = F@_1, message = F@_2}. - -d_field_sdl_command_ack_status(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_command_ack_status(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_sdl_command_ack_status(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> - {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, TrUserData), Rest}, - dfp_read_field_def_sdl_command_ack(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). - -d_field_sdl_command_ack_message(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_command_ack_message(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_sdl_command_ack_message(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> - {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_command_ack(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). - -skip_varint_sdl_command_ack(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_sdl_command_ack(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -skip_varint_sdl_command_ack(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_command_ack(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). - -skip_length_delimited_sdl_command_ack(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_sdl_command_ack(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -skip_length_delimited_sdl_command_ack(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> - Length = X bsl N + Acc, - <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_sdl_command_ack(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). - -skip_group_sdl_command_ack(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> - {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_sdl_command_ack(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). - -skip_32_sdl_command_ack(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_command_ack(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). - -skip_64_sdl_command_ack(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_command_ack(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). - -decode_msg_sdl_flows(Bin, TrUserData) -> dfp_read_field_def_sdl_flows(Bin, 0, 0, 0, id(0, TrUserData), id(0, TrUserData), id(0, TrUserData), TrUserData). - -dfp_read_field_def_sdl_flows(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_flows_forward_num(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); -dfp_read_field_def_sdl_flows(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_flows_p2p_num(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); -dfp_read_field_def_sdl_flows(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_flows_inbound_num(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); -dfp_read_field_def_sdl_flows(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_flows{forward_num = F@_1, p2p_num = F@_2, inbound_num = F@_3}; -dfp_read_field_def_sdl_flows(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dg_read_field_def_sdl_flows(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). - -dg_read_field_def_sdl_flows(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_flows(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -dg_read_field_def_sdl_flows(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> - Key = X bsl N + Acc, - case Key of - 8 -> d_field_sdl_flows_forward_num(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); - 16 -> d_field_sdl_flows_p2p_num(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); - 24 -> d_field_sdl_flows_inbound_num(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); - _ -> - case Key band 7 of - 0 -> skip_varint_sdl_flows(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); - 1 -> skip_64_sdl_flows(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); - 2 -> skip_length_delimited_sdl_flows(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); - 3 -> skip_group_sdl_flows(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); - 5 -> skip_32_sdl_flows(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) - end - end; -dg_read_field_def_sdl_flows(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_flows{forward_num = F@_1, p2p_num = F@_2, inbound_num = F@_3}. - -d_field_sdl_flows_forward_num(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_flows_forward_num(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -d_field_sdl_flows_forward_num(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_flows(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData). - -d_field_sdl_flows_p2p_num(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_flows_p2p_num(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -d_field_sdl_flows_p2p_num(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_flows(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). - -d_field_sdl_flows_inbound_num(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_flows_inbound_num(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -d_field_sdl_flows_inbound_num(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_flows(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). - -skip_varint_sdl_flows(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> skip_varint_sdl_flows(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); -skip_varint_sdl_flows(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_flows(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). - -skip_length_delimited_sdl_flows(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> skip_length_delimited_sdl_flows(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -skip_length_delimited_sdl_flows(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> - Length = X bsl N + Acc, - <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_sdl_flows(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). - -skip_group_sdl_flows(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> - {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_sdl_flows(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). - -skip_32_sdl_flows(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_flows(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). - -skip_64_sdl_flows(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_flows(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). - decode_msg_sdl_stun_request(Bin, TrUserData) -> dfp_read_field_def_sdl_stun_request(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), id(undefined, TrUserData), TrUserData). @@ -2164,84 +2114,230 @@ skip_32_sdl_stun_reply(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> df skip_64_sdl_stun_reply(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_stun_reply(Rest, Z1, Z2, F, F@_1, TrUserData). -decode_msg_sdl_data(Bin, TrUserData) -> dfp_read_field_def_sdl_data(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(false, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), TrUserData). +decode_msg_sdl_data(Bin, TrUserData) -> + dfp_read_field_def_sdl_data(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(false, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), TrUserData). -dfp_read_field_def_sdl_data(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_sdl_data_network_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -dfp_read_field_def_sdl_data(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_sdl_data_src_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -dfp_read_field_def_sdl_data(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_sdl_data_dst_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -dfp_read_field_def_sdl_data(<<32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_sdl_data_is_p2p(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -dfp_read_field_def_sdl_data(<<40, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_sdl_data_ttl(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -dfp_read_field_def_sdl_data(<<50, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_sdl_data_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -dfp_read_field_def_sdl_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _) -> #sdl_data{network_id = F@_1, src_mac = F@_2, dst_mac = F@_3, is_p2p = F@_4, ttl = F@_5, data = F@_6}; -dfp_read_field_def_sdl_data(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dg_read_field_def_sdl_data(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). +dfp_read_field_def_sdl_data(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_data_network_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +dfp_read_field_def_sdl_data(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_data_src_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +dfp_read_field_def_sdl_data(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_data_dst_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +dfp_read_field_def_sdl_data(<<32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_data_is_p2p(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +dfp_read_field_def_sdl_data(<<40, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_data_ttl(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +dfp_read_field_def_sdl_data(<<50, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_data_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +dfp_read_field_def_sdl_data(<<58, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_data_session_token(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +dfp_read_field_def_sdl_data(<<64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_data_identity_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +dfp_read_field_def_sdl_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _) -> #sdl_data{network_id = F@_1, src_mac = F@_2, dst_mac = F@_3, is_p2p = F@_4, ttl = F@_5, data = F@_6, session_token = F@_7, identity_id = F@_8}; +dfp_read_field_def_sdl_data(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dg_read_field_def_sdl_data(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). -dg_read_field_def_sdl_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -dg_read_field_def_sdl_data(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> +dg_read_field_def_sdl_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 32 - 7 -> + dg_read_field_def_sdl_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +dg_read_field_def_sdl_data(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> Key = X bsl N + Acc, case Key of - 8 -> d_field_sdl_data_network_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); - 18 -> d_field_sdl_data_src_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); - 26 -> d_field_sdl_data_dst_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); - 32 -> d_field_sdl_data_is_p2p(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); - 40 -> d_field_sdl_data_ttl(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); - 50 -> d_field_sdl_data_data(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 8 -> d_field_sdl_data_network_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 18 -> d_field_sdl_data_src_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 26 -> d_field_sdl_data_dst_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 32 -> d_field_sdl_data_is_p2p(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 40 -> d_field_sdl_data_ttl(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 50 -> d_field_sdl_data_data(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 58 -> d_field_sdl_data_session_token(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 64 -> d_field_sdl_data_identity_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); _ -> case Key band 7 of - 0 -> skip_varint_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); - 1 -> skip_64_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); - 2 -> skip_length_delimited_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); - 3 -> skip_group_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); - 5 -> skip_32_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) + 0 -> skip_varint_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 1 -> skip_64_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 2 -> skip_length_delimited_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 3 -> skip_group_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); + 5 -> skip_32_sdl_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) end end; -dg_read_field_def_sdl_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _) -> #sdl_data{network_id = F@_1, src_mac = F@_2, dst_mac = F@_3, is_p2p = F@_4, ttl = F@_5, data = F@_6}. +dg_read_field_def_sdl_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _) -> #sdl_data{network_id = F@_1, src_mac = F@_2, dst_mac = F@_3, is_p2p = F@_4, ttl = F@_5, data = F@_6, session_token = F@_7, identity_id = F@_8}. -d_field_sdl_data_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_sdl_data_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -d_field_sdl_data_network_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> +d_field_sdl_data_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> + d_field_sdl_data_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +d_field_sdl_data_network_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_data(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + dfp_read_field_def_sdl_data(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). -d_field_sdl_data_src_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_sdl_data_src_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -d_field_sdl_data_src_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, TrUserData) -> +d_field_sdl_data_src_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> + d_field_sdl_data_src_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +d_field_sdl_data_src_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, TrUserData). + dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). -d_field_sdl_data_dst_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_sdl_data_dst_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -d_field_sdl_data_dst_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, TrUserData) -> +d_field_sdl_data_dst_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> + d_field_sdl_data_dst_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +d_field_sdl_data_dst_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, TrUserData). + dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). -d_field_sdl_data_is_p2p(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_sdl_data_is_p2p(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -d_field_sdl_data_is_p2p(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, F@_6, TrUserData) -> +d_field_sdl_data_is_p2p(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> + d_field_sdl_data_is_p2p(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +d_field_sdl_data_is_p2p(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, F@_6, F@_7, F@_8, TrUserData) -> {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, TrUserData), Rest}, - dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, F@_6, TrUserData). + dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, F@_6, F@_7, F@_8, TrUserData). -d_field_sdl_data_ttl(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_sdl_data_ttl(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -d_field_sdl_data_ttl(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, TrUserData) -> +d_field_sdl_data_ttl(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> d_field_sdl_data_ttl(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +d_field_sdl_data_ttl(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, F@_7, F@_8, TrUserData) -> {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, TrUserData). + dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, F@_7, F@_8, TrUserData). -d_field_sdl_data_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_sdl_data_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -d_field_sdl_data_data(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, TrUserData) -> +d_field_sdl_data_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> d_field_sdl_data_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +d_field_sdl_data_data(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, F@_7, F@_8, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, TrUserData). + dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, F@_7, F@_8, TrUserData). -skip_varint_sdl_data(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> skip_varint_sdl_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -skip_varint_sdl_data(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_sdl_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). +d_field_sdl_data_session_token(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> + d_field_sdl_data_session_token(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +d_field_sdl_data_session_token(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _, F@_8, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, NewFValue, F@_8, TrUserData). -skip_length_delimited_sdl_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> skip_length_delimited_sdl_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); -skip_length_delimited_sdl_data(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> +d_field_sdl_data_identity_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> + d_field_sdl_data_identity_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +d_field_sdl_data_identity_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, NewFValue, TrUserData). + +skip_varint_sdl_data(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> skip_varint_sdl_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +skip_varint_sdl_data(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dfp_read_field_def_sdl_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). + +skip_length_delimited_sdl_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 -> + skip_length_delimited_sdl_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData); +skip_length_delimited_sdl_data(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_sdl_data(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + dfp_read_field_def_sdl_data(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). -skip_group_sdl_data(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> +skip_group_sdl_data(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_sdl_data(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + dfp_read_field_def_sdl_data(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). -skip_32_sdl_data(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_sdl_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). +skip_32_sdl_data(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dfp_read_field_def_sdl_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). -skip_64_sdl_data(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_sdl_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). +skip_64_sdl_data(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dfp_read_field_def_sdl_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData). + +decode_msg_sdl_stun_probe(Bin, TrUserData) -> dfp_read_field_def_sdl_stun_probe(Bin, 0, 0, 0, id(0, TrUserData), id(0, TrUserData), id(0, TrUserData), TrUserData). + +dfp_read_field_def_sdl_stun_probe(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_stun_probe_cookie(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_sdl_stun_probe(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_stun_probe_attr(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_sdl_stun_probe(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_stun_probe_step(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_sdl_stun_probe(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_stun_probe{cookie = F@_1, attr = F@_2, step = F@_3}; +dfp_read_field_def_sdl_stun_probe(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dg_read_field_def_sdl_stun_probe(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +dg_read_field_def_sdl_stun_probe(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_stun_probe(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +dg_read_field_def_sdl_stun_probe(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_sdl_stun_probe_cookie(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 16 -> d_field_sdl_stun_probe_attr(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 24 -> d_field_sdl_stun_probe_step(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 1 -> skip_64_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 2 -> skip_length_delimited_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 3 -> skip_group_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 5 -> skip_32_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) + end + end; +dg_read_field_def_sdl_stun_probe(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_stun_probe{cookie = F@_1, attr = F@_2, step = F@_3}. + +d_field_sdl_stun_probe_cookie(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_stun_probe_cookie(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_sdl_stun_probe_cookie(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_stun_probe(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData). + +d_field_sdl_stun_probe_attr(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_stun_probe_attr(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_sdl_stun_probe_attr(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_stun_probe(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). + +d_field_sdl_stun_probe_step(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_stun_probe_step(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_sdl_stun_probe_step(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_stun_probe(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). + +skip_varint_sdl_stun_probe(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> skip_varint_sdl_stun_probe(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +skip_varint_sdl_stun_probe(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_stun_probe(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +skip_length_delimited_sdl_stun_probe(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> skip_length_delimited_sdl_stun_probe(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +skip_length_delimited_sdl_stun_probe(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_sdl_stun_probe(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). + +skip_group_sdl_stun_probe(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_sdl_stun_probe(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). + +skip_32_sdl_stun_probe(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_stun_probe(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +skip_64_sdl_stun_probe(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_stun_probe(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +decode_msg_sdl_stun_probe_reply(Bin, TrUserData) -> dfp_read_field_def_sdl_stun_probe_reply(Bin, 0, 0, 0, id(0, TrUserData), id(0, TrUserData), id(0, TrUserData), id(0, TrUserData), TrUserData). + +dfp_read_field_def_sdl_stun_probe_reply(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_stun_probe_reply_cookie(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dfp_read_field_def_sdl_stun_probe_reply(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_stun_probe_reply_step(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dfp_read_field_def_sdl_stun_probe_reply(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_stun_probe_reply_port(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dfp_read_field_def_sdl_stun_probe_reply(<<32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_stun_probe_reply_ip(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dfp_read_field_def_sdl_stun_probe_reply(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, _) -> #sdl_stun_probe_reply{cookie = F@_1, step = F@_2, port = F@_3, ip = F@_4}; +dfp_read_field_def_sdl_stun_probe_reply(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dg_read_field_def_sdl_stun_probe_reply(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData). + +dg_read_field_def_sdl_stun_probe_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_stun_probe_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +dg_read_field_def_sdl_stun_probe_reply(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_sdl_stun_probe_reply_cookie(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData); + 16 -> d_field_sdl_stun_probe_reply_step(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData); + 24 -> d_field_sdl_stun_probe_reply_port(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData); + 32 -> d_field_sdl_stun_probe_reply_ip(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData); + 1 -> skip_64_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData); + 2 -> skip_length_delimited_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData); + 3 -> skip_group_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData); + 5 -> skip_32_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData) + end + end; +dg_read_field_def_sdl_stun_probe_reply(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, _) -> #sdl_stun_probe_reply{cookie = F@_1, step = F@_2, port = F@_3, ip = F@_4}. + +d_field_sdl_stun_probe_reply_cookie(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_stun_probe_reply_cookie(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +d_field_sdl_stun_probe_reply_cookie(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_stun_probe_reply(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, TrUserData). + +d_field_sdl_stun_probe_reply_step(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_stun_probe_reply_step(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +d_field_sdl_stun_probe_reply_step(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_stun_probe_reply(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, TrUserData). + +d_field_sdl_stun_probe_reply_port(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_stun_probe_reply_port(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +d_field_sdl_stun_probe_reply_port(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_stun_probe_reply(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, TrUserData). + +d_field_sdl_stun_probe_reply_ip(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_stun_probe_reply_ip(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +d_field_sdl_stun_probe_reply_ip(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_stun_probe_reply(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, TrUserData). + +skip_varint_sdl_stun_probe_reply(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> skip_varint_sdl_stun_probe_reply(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +skip_varint_sdl_stun_probe_reply(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_sdl_stun_probe_reply(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData). + +skip_length_delimited_sdl_stun_probe_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> skip_length_delimited_sdl_stun_probe_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData); +skip_length_delimited_sdl_stun_probe_reply(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_sdl_stun_probe_reply(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, TrUserData). + +skip_group_sdl_stun_probe_reply(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_sdl_stun_probe_reply(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, TrUserData). + +skip_32_sdl_stun_probe_reply(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_sdl_stun_probe_reply(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData). + +skip_64_sdl_stun_probe_reply(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_sdl_stun_probe_reply(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData). decode_msg_sdl_register(Bin, TrUserData) -> dfp_read_field_def_sdl_register(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). @@ -2359,115 +2455,6 @@ skip_32_sdl_register_ack(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrU skip_64_sdl_register_ack(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_register_ack(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). -decode_msg_sdl_stun_probe(Bin, TrUserData) -> dfp_read_field_def_sdl_stun_probe(Bin, 0, 0, 0, id(0, TrUserData), id(0, TrUserData), TrUserData). - -dfp_read_field_def_sdl_stun_probe(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_stun_probe_cookie(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_sdl_stun_probe(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_stun_probe_attr(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_sdl_stun_probe(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_stun_probe{cookie = F@_1, attr = F@_2}; -dfp_read_field_def_sdl_stun_probe(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_sdl_stun_probe(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). - -dg_read_field_def_sdl_stun_probe(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_stun_probe(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -dg_read_field_def_sdl_stun_probe(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> - Key = X bsl N + Acc, - case Key of - 8 -> d_field_sdl_stun_probe_cookie(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); - 16 -> d_field_sdl_stun_probe_attr(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); - _ -> - case Key band 7 of - 0 -> skip_varint_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 1 -> skip_64_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 2 -> skip_length_delimited_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 3 -> skip_group_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 5 -> skip_32_sdl_stun_probe(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) - end - end; -dg_read_field_def_sdl_stun_probe(<<>>, 0, 0, _, F@_1, F@_2, _) -> #sdl_stun_probe{cookie = F@_1, attr = F@_2}. - -d_field_sdl_stun_probe_cookie(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_stun_probe_cookie(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_sdl_stun_probe_cookie(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_stun_probe(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). - -d_field_sdl_stun_probe_attr(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_stun_probe_attr(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_sdl_stun_probe_attr(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_stun_probe(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). - -skip_varint_sdl_stun_probe(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_sdl_stun_probe(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -skip_varint_sdl_stun_probe(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_stun_probe(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). - -skip_length_delimited_sdl_stun_probe(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_sdl_stun_probe(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -skip_length_delimited_sdl_stun_probe(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> - Length = X bsl N + Acc, - <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_sdl_stun_probe(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). - -skip_group_sdl_stun_probe(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> - {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_sdl_stun_probe(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). - -skip_32_sdl_stun_probe(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_stun_probe(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). - -skip_64_sdl_stun_probe(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_stun_probe(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). - -decode_msg_sdl_stun_probe_reply(Bin, TrUserData) -> dfp_read_field_def_sdl_stun_probe_reply(Bin, 0, 0, 0, id(0, TrUserData), id(0, TrUserData), id(0, TrUserData), TrUserData). - -dfp_read_field_def_sdl_stun_probe_reply(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_stun_probe_reply_cookie(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); -dfp_read_field_def_sdl_stun_probe_reply(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_stun_probe_reply_port(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); -dfp_read_field_def_sdl_stun_probe_reply(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_stun_probe_reply_ip(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); -dfp_read_field_def_sdl_stun_probe_reply(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_stun_probe_reply{cookie = F@_1, port = F@_2, ip = F@_3}; -dfp_read_field_def_sdl_stun_probe_reply(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dg_read_field_def_sdl_stun_probe_reply(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). - -dg_read_field_def_sdl_stun_probe_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_stun_probe_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -dg_read_field_def_sdl_stun_probe_reply(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> - Key = X bsl N + Acc, - case Key of - 8 -> d_field_sdl_stun_probe_reply_cookie(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); - 16 -> d_field_sdl_stun_probe_reply_port(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); - 24 -> d_field_sdl_stun_probe_reply_ip(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); - _ -> - case Key band 7 of - 0 -> skip_varint_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); - 1 -> skip_64_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); - 2 -> skip_length_delimited_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); - 3 -> skip_group_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); - 5 -> skip_32_sdl_stun_probe_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) - end - end; -dg_read_field_def_sdl_stun_probe_reply(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_stun_probe_reply{cookie = F@_1, port = F@_2, ip = F@_3}. - -d_field_sdl_stun_probe_reply_cookie(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_stun_probe_reply_cookie(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -d_field_sdl_stun_probe_reply_cookie(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_stun_probe_reply(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData). - -d_field_sdl_stun_probe_reply_port(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_stun_probe_reply_port(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -d_field_sdl_stun_probe_reply_port(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_stun_probe_reply(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). - -d_field_sdl_stun_probe_reply_ip(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_stun_probe_reply_ip(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -d_field_sdl_stun_probe_reply_ip(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_sdl_stun_probe_reply(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). - -skip_varint_sdl_stun_probe_reply(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> skip_varint_sdl_stun_probe_reply(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); -skip_varint_sdl_stun_probe_reply(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_stun_probe_reply(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). - -skip_length_delimited_sdl_stun_probe_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> skip_length_delimited_sdl_stun_probe_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); -skip_length_delimited_sdl_stun_probe_reply(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> - Length = X bsl N + Acc, - <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_sdl_stun_probe_reply(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). - -skip_group_sdl_stun_probe_reply(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> - {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_sdl_stun_probe_reply(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). - -skip_32_sdl_stun_probe_reply(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_stun_probe_reply(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). - -skip_64_sdl_stun_probe_reply(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_stun_probe_reply(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). - read_group(Bin, FieldNum) -> {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), <> = Bin, @@ -2536,26 +2523,26 @@ merge_msgs(Prev, New, MsgName, Opts) -> case MsgName of sdl_v4_info -> merge_msg_sdl_v4_info(Prev, New, TrUserData); sdl_v6_info -> merge_msg_sdl_v6_info(Prev, New, TrUserData); - sdl_dev_addr -> merge_msg_sdl_dev_addr(Prev, New, TrUserData); sdl_empty -> merge_msg_sdl_empty(Prev, New, TrUserData); sdl_register_super -> merge_msg_sdl_register_super(Prev, New, TrUserData); sdl_register_super_ack -> merge_msg_sdl_register_super_ack(Prev, New, TrUserData); sdl_register_super_nak -> merge_msg_sdl_register_super_nak(Prev, New, TrUserData); sdl_query_info -> merge_msg_sdl_query_info(Prev, New, TrUserData); sdl_peer_info -> merge_msg_sdl_peer_info(Prev, New, TrUserData); + sdl_arp_request -> merge_msg_sdl_arp_request(Prev, New, TrUserData); + sdl_arp_response -> merge_msg_sdl_arp_response(Prev, New, TrUserData); + sdl_policy_request -> merge_msg_sdl_policy_request(Prev, New, TrUserData); + sdl_policy_response -> merge_msg_sdl_policy_response(Prev, New, TrUserData); sdl_nat_changed_event -> merge_msg_sdl_nat_changed_event(Prev, New, TrUserData); sdl_send_register_event -> merge_msg_sdl_send_register_event(Prev, New, TrUserData); sdl_network_shutdown_event -> merge_msg_sdl_network_shutdown_event(Prev, New, TrUserData); - sdl_change_network_command -> merge_msg_sdl_change_network_command(Prev, New, TrUserData); - sdl_command_ack -> merge_msg_sdl_command_ack(Prev, New, TrUserData); - sdl_flows -> merge_msg_sdl_flows(Prev, New, TrUserData); sdl_stun_request -> merge_msg_sdl_stun_request(Prev, New, TrUserData); sdl_stun_reply -> merge_msg_sdl_stun_reply(Prev, New, TrUserData); sdl_data -> merge_msg_sdl_data(Prev, New, TrUserData); - sdl_register -> merge_msg_sdl_register(Prev, New, TrUserData); - sdl_register_ack -> merge_msg_sdl_register_ack(Prev, New, TrUserData); sdl_stun_probe -> merge_msg_sdl_stun_probe(Prev, New, TrUserData); - sdl_stun_probe_reply -> merge_msg_sdl_stun_probe_reply(Prev, New, TrUserData) + sdl_stun_probe_reply -> merge_msg_sdl_stun_probe_reply(Prev, New, TrUserData); + sdl_register -> merge_msg_sdl_register(Prev, New, TrUserData); + sdl_register_ack -> merge_msg_sdl_register_ack(Prev, New, TrUserData) end. -compile({nowarn_unused_function,merge_msg_sdl_v4_info/3}). @@ -2584,94 +2571,58 @@ merge_msg_sdl_v6_info(#sdl_v6_info{port = PFport, v6 = PFv6}, #sdl_v6_info{port true -> NFv6 end}. --compile({nowarn_unused_function,merge_msg_sdl_dev_addr/3}). -merge_msg_sdl_dev_addr(#sdl_dev_addr{network_id = PFnetwork_id, mac = PFmac, net_addr = PFnet_addr, net_bit_len = PFnet_bit_len, network_domain = PFnetwork_domain}, - #sdl_dev_addr{network_id = NFnetwork_id, mac = NFmac, net_addr = NFnet_addr, net_bit_len = NFnet_bit_len, network_domain = NFnetwork_domain}, _) -> - #sdl_dev_addr{network_id = - if NFnetwork_id =:= undefined -> PFnetwork_id; - true -> NFnetwork_id - end, - mac = - if NFmac =:= undefined -> PFmac; - true -> NFmac - end, - net_addr = - if NFnet_addr =:= undefined -> PFnet_addr; - true -> NFnet_addr - end, - net_bit_len = - if NFnet_bit_len =:= undefined -> PFnet_bit_len; - true -> NFnet_bit_len - end, - network_domain = - if NFnetwork_domain =:= undefined -> PFnetwork_domain; - true -> NFnetwork_domain - end}. - -compile({nowarn_unused_function,merge_msg_sdl_empty/3}). merge_msg_sdl_empty(_Prev, New, _TrUserData) -> New. -compile({nowarn_unused_function,merge_msg_sdl_register_super/3}). -merge_msg_sdl_register_super(#sdl_register_super{version = PFversion, installed_channel = PFinstalled_channel, client_id = PFclient_id, dev_addr = PFdev_addr, pub_key = PFpub_key, token = PFtoken, network_code = PFnetwork_code, - hostname = PFhostname}, - #sdl_register_super{version = NFversion, installed_channel = NFinstalled_channel, client_id = NFclient_id, dev_addr = NFdev_addr, pub_key = NFpub_key, token = NFtoken, network_code = NFnetwork_code, hostname = NFhostname}, TrUserData) -> +merge_msg_sdl_register_super(#sdl_register_super{version = PFversion, client_id = PFclient_id, network_id = PFnetwork_id, mac = PFmac, ip = PFip, mask_len = PFmask_len, hostname = PFhostname, pub_key = PFpub_key, access_token = PFaccess_token}, + #sdl_register_super{version = NFversion, client_id = NFclient_id, network_id = NFnetwork_id, mac = NFmac, ip = NFip, mask_len = NFmask_len, hostname = NFhostname, pub_key = NFpub_key, access_token = NFaccess_token}, _) -> #sdl_register_super{version = if NFversion =:= undefined -> PFversion; true -> NFversion end, - installed_channel = - if NFinstalled_channel =:= undefined -> PFinstalled_channel; - true -> NFinstalled_channel - end, client_id = if NFclient_id =:= undefined -> PFclient_id; true -> NFclient_id end, - dev_addr = - if PFdev_addr /= undefined, NFdev_addr /= undefined -> merge_msg_sdl_dev_addr(PFdev_addr, NFdev_addr, TrUserData); - PFdev_addr == undefined -> NFdev_addr; - NFdev_addr == undefined -> PFdev_addr + network_id = + if NFnetwork_id =:= undefined -> PFnetwork_id; + true -> NFnetwork_id + end, + mac = + if NFmac =:= undefined -> PFmac; + true -> NFmac + end, + ip = + if NFip =:= undefined -> PFip; + true -> NFip + end, + mask_len = + if NFmask_len =:= undefined -> PFmask_len; + true -> NFmask_len + end, + hostname = + if NFhostname =:= undefined -> PFhostname; + true -> NFhostname end, pub_key = if NFpub_key =:= undefined -> PFpub_key; true -> NFpub_key end, - token = - if NFtoken =:= undefined -> PFtoken; - true -> NFtoken - end, - network_code = - if NFnetwork_code =:= undefined -> PFnetwork_code; - true -> NFnetwork_code - end, - hostname = - if NFhostname =:= undefined -> PFhostname; - true -> NFhostname + access_token = + if NFaccess_token =:= undefined -> PFaccess_token; + true -> NFaccess_token end}. -compile({nowarn_unused_function,merge_msg_sdl_register_super_ack/3}). -merge_msg_sdl_register_super_ack(#sdl_register_super_ack{dev_addr = PFdev_addr, aes_key = PFaes_key, upgrade_type = PFupgrade_type, upgrade_prompt = PFupgrade_prompt, upgrade_address = PFupgrade_address}, - #sdl_register_super_ack{dev_addr = NFdev_addr, aes_key = NFaes_key, upgrade_type = NFupgrade_type, upgrade_prompt = NFupgrade_prompt, upgrade_address = NFupgrade_address}, TrUserData) -> - #sdl_register_super_ack{dev_addr = - if PFdev_addr /= undefined, NFdev_addr /= undefined -> merge_msg_sdl_dev_addr(PFdev_addr, NFdev_addr, TrUserData); - PFdev_addr == undefined -> NFdev_addr; - NFdev_addr == undefined -> PFdev_addr - end, - aes_key = +merge_msg_sdl_register_super_ack(#sdl_register_super_ack{aes_key = PFaes_key, session_token = PFsession_token}, #sdl_register_super_ack{aes_key = NFaes_key, session_token = NFsession_token}, _) -> + #sdl_register_super_ack{aes_key = if NFaes_key =:= undefined -> PFaes_key; true -> NFaes_key end, - upgrade_type = - if NFupgrade_type =:= undefined -> PFupgrade_type; - true -> NFupgrade_type - end, - upgrade_prompt = - if NFupgrade_prompt =:= undefined -> PFupgrade_prompt; - true -> NFupgrade_prompt - end, - upgrade_address = - if NFupgrade_address =:= undefined -> PFupgrade_address; - true -> NFupgrade_address + session_token = + if NFsession_token =:= undefined -> PFsession_token; + true -> NFsession_token end}. -compile({nowarn_unused_function,merge_msg_sdl_register_super_nak/3}). @@ -2709,6 +2660,60 @@ merge_msg_sdl_peer_info(#sdl_peer_info{dst_mac = PFdst_mac, v4_info = PFv4_info, NFv6_info == undefined -> PFv6_info end}. +-compile({nowarn_unused_function,merge_msg_sdl_arp_request/3}). +merge_msg_sdl_arp_request(#sdl_arp_request{target_ip = PFtarget_ip}, #sdl_arp_request{target_ip = NFtarget_ip}, _) -> + #sdl_arp_request{target_ip = + if NFtarget_ip =:= undefined -> PFtarget_ip; + true -> NFtarget_ip + end}. + +-compile({nowarn_unused_function,merge_msg_sdl_arp_response/3}). +merge_msg_sdl_arp_response(#sdl_arp_response{target_ip = PFtarget_ip, target_mac = PFtarget_mac}, #sdl_arp_response{target_ip = NFtarget_ip, target_mac = NFtarget_mac}, _) -> + #sdl_arp_response{target_ip = + if NFtarget_ip =:= undefined -> PFtarget_ip; + true -> NFtarget_ip + end, + target_mac = + if NFtarget_mac =:= undefined -> PFtarget_mac; + true -> NFtarget_mac + end}. + +-compile({nowarn_unused_function,merge_msg_sdl_policy_request/3}). +merge_msg_sdl_policy_request(#sdl_policy_request{src_identity_id = PFsrc_identity_id, dst_identity_id = PFdst_identity_id, version = PFversion}, + #sdl_policy_request{src_identity_id = NFsrc_identity_id, dst_identity_id = NFdst_identity_id, version = NFversion}, _) -> + #sdl_policy_request{src_identity_id = + if NFsrc_identity_id =:= undefined -> PFsrc_identity_id; + true -> NFsrc_identity_id + end, + dst_identity_id = + if NFdst_identity_id =:= undefined -> PFdst_identity_id; + true -> NFdst_identity_id + end, + version = + if NFversion =:= undefined -> PFversion; + true -> NFversion + end}. + +-compile({nowarn_unused_function,merge_msg_sdl_policy_response/3}). +merge_msg_sdl_policy_response(#sdl_policy_response{src_identity_id = PFsrc_identity_id, dst_identity_id = PFdst_identity_id, version = PFversion, rules = PFrules}, + #sdl_policy_response{src_identity_id = NFsrc_identity_id, dst_identity_id = NFdst_identity_id, version = NFversion, rules = NFrules}, _) -> + #sdl_policy_response{src_identity_id = + if NFsrc_identity_id =:= undefined -> PFsrc_identity_id; + true -> NFsrc_identity_id + end, + dst_identity_id = + if NFdst_identity_id =:= undefined -> PFdst_identity_id; + true -> NFdst_identity_id + end, + version = + if NFversion =:= undefined -> PFversion; + true -> NFversion + end, + rules = + if NFrules =:= undefined -> PFrules; + true -> NFrules + end}. + -compile({nowarn_unused_function,merge_msg_sdl_nat_changed_event/3}). merge_msg_sdl_nat_changed_event(#sdl_nat_changed_event{mac = PFmac, ip = PFip}, #sdl_nat_changed_event{mac = NFmac, ip = NFip}, _) -> #sdl_nat_changed_event{mac = @@ -2752,44 +2757,6 @@ merge_msg_sdl_network_shutdown_event(#sdl_network_shutdown_event{message = PFmes true -> NFmessage end}. --compile({nowarn_unused_function,merge_msg_sdl_change_network_command/3}). -merge_msg_sdl_change_network_command(#sdl_change_network_command{dev_addr = PFdev_addr, aes_key = PFaes_key}, #sdl_change_network_command{dev_addr = NFdev_addr, aes_key = NFaes_key}, TrUserData) -> - #sdl_change_network_command{dev_addr = - if PFdev_addr /= undefined, NFdev_addr /= undefined -> merge_msg_sdl_dev_addr(PFdev_addr, NFdev_addr, TrUserData); - PFdev_addr == undefined -> NFdev_addr; - NFdev_addr == undefined -> PFdev_addr - end, - aes_key = - if NFaes_key =:= undefined -> PFaes_key; - true -> NFaes_key - end}. - --compile({nowarn_unused_function,merge_msg_sdl_command_ack/3}). -merge_msg_sdl_command_ack(#sdl_command_ack{status = PFstatus, message = PFmessage}, #sdl_command_ack{status = NFstatus, message = NFmessage}, _) -> - #sdl_command_ack{status = - if NFstatus =:= undefined -> PFstatus; - true -> NFstatus - end, - message = - if NFmessage =:= undefined -> PFmessage; - true -> NFmessage - end}. - --compile({nowarn_unused_function,merge_msg_sdl_flows/3}). -merge_msg_sdl_flows(#sdl_flows{forward_num = PFforward_num, p2p_num = PFp2p_num, inbound_num = PFinbound_num}, #sdl_flows{forward_num = NFforward_num, p2p_num = NFp2p_num, inbound_num = NFinbound_num}, _) -> - #sdl_flows{forward_num = - if NFforward_num =:= undefined -> PFforward_num; - true -> NFforward_num - end, - p2p_num = - if NFp2p_num =:= undefined -> PFp2p_num; - true -> NFp2p_num - end, - inbound_num = - if NFinbound_num =:= undefined -> PFinbound_num; - true -> NFinbound_num - end}. - -compile({nowarn_unused_function,merge_msg_sdl_stun_request/3}). merge_msg_sdl_stun_request(#sdl_stun_request{cookie = PFcookie, client_id = PFclient_id, network_id = PFnetwork_id, mac = PFmac, ip = PFip, nat_type = PFnat_type, v6_info = PFv6_info}, #sdl_stun_request{cookie = NFcookie, client_id = NFclient_id, network_id = NFnetwork_id, mac = NFmac, ip = NFip, nat_type = NFnat_type, v6_info = NFv6_info}, TrUserData) -> @@ -2831,8 +2798,8 @@ merge_msg_sdl_stun_reply(#sdl_stun_reply{cookie = PFcookie}, #sdl_stun_reply{coo end}. -compile({nowarn_unused_function,merge_msg_sdl_data/3}). -merge_msg_sdl_data(#sdl_data{network_id = PFnetwork_id, src_mac = PFsrc_mac, dst_mac = PFdst_mac, is_p2p = PFis_p2p, ttl = PFttl, data = PFdata}, - #sdl_data{network_id = NFnetwork_id, src_mac = NFsrc_mac, dst_mac = NFdst_mac, is_p2p = NFis_p2p, ttl = NFttl, data = NFdata}, _) -> +merge_msg_sdl_data(#sdl_data{network_id = PFnetwork_id, src_mac = PFsrc_mac, dst_mac = PFdst_mac, is_p2p = PFis_p2p, ttl = PFttl, data = PFdata, session_token = PFsession_token, identity_id = PFidentity_id}, + #sdl_data{network_id = NFnetwork_id, src_mac = NFsrc_mac, dst_mac = NFdst_mac, is_p2p = NFis_p2p, ttl = NFttl, data = NFdata, session_token = NFsession_token, identity_id = NFidentity_id}, _) -> #sdl_data{network_id = if NFnetwork_id =:= undefined -> PFnetwork_id; true -> NFnetwork_id @@ -2856,8 +2823,50 @@ merge_msg_sdl_data(#sdl_data{network_id = PFnetwork_id, src_mac = PFsrc_mac, dst data = if NFdata =:= undefined -> PFdata; true -> NFdata + end, + session_token = + if NFsession_token =:= undefined -> PFsession_token; + true -> NFsession_token + end, + identity_id = + if NFidentity_id =:= undefined -> PFidentity_id; + true -> NFidentity_id end}. +-compile({nowarn_unused_function,merge_msg_sdl_stun_probe/3}). +merge_msg_sdl_stun_probe(#sdl_stun_probe{cookie = PFcookie, attr = PFattr, step = PFstep}, #sdl_stun_probe{cookie = NFcookie, attr = NFattr, step = NFstep}, _) -> + #sdl_stun_probe{cookie = + if NFcookie =:= undefined -> PFcookie; + true -> NFcookie + end, + attr = + if NFattr =:= undefined -> PFattr; + true -> NFattr + end, + step = + if NFstep =:= undefined -> PFstep; + true -> NFstep + end}. + +-compile({nowarn_unused_function,merge_msg_sdl_stun_probe_reply/3}). +merge_msg_sdl_stun_probe_reply(#sdl_stun_probe_reply{cookie = PFcookie, step = PFstep, port = PFport, ip = PFip}, #sdl_stun_probe_reply{cookie = NFcookie, step = NFstep, port = NFport, ip = NFip}, _) -> + #sdl_stun_probe_reply{cookie = + if NFcookie =:= undefined -> PFcookie; + true -> NFcookie + end, + step = + if NFstep =:= undefined -> PFstep; + true -> NFstep + end, + port = + if NFport =:= undefined -> PFport; + true -> NFport + end, + ip = + if NFip =:= undefined -> PFip; + true -> NFip + end}. + -compile({nowarn_unused_function,merge_msg_sdl_register/3}). merge_msg_sdl_register(#sdl_register{network_id = PFnetwork_id, src_mac = PFsrc_mac, dst_mac = PFdst_mac}, #sdl_register{network_id = NFnetwork_id, src_mac = NFsrc_mac, dst_mac = NFdst_mac}, _) -> #sdl_register{network_id = @@ -2888,32 +2897,6 @@ merge_msg_sdl_register_ack(#sdl_register_ack{network_id = PFnetwork_id, src_mac true -> NFdst_mac end}. --compile({nowarn_unused_function,merge_msg_sdl_stun_probe/3}). -merge_msg_sdl_stun_probe(#sdl_stun_probe{cookie = PFcookie, attr = PFattr}, #sdl_stun_probe{cookie = NFcookie, attr = NFattr}, _) -> - #sdl_stun_probe{cookie = - if NFcookie =:= undefined -> PFcookie; - true -> NFcookie - end, - attr = - if NFattr =:= undefined -> PFattr; - true -> NFattr - end}. - --compile({nowarn_unused_function,merge_msg_sdl_stun_probe_reply/3}). -merge_msg_sdl_stun_probe_reply(#sdl_stun_probe_reply{cookie = PFcookie, port = PFport, ip = PFip}, #sdl_stun_probe_reply{cookie = NFcookie, port = NFport, ip = NFip}, _) -> - #sdl_stun_probe_reply{cookie = - if NFcookie =:= undefined -> PFcookie; - true -> NFcookie - end, - port = - if NFport =:= undefined -> PFport; - true -> NFport - end, - ip = - if NFip =:= undefined -> PFip; - true -> NFip - end}. - verify_msg(Msg) when tuple_size(Msg) >= 1 -> verify_msg(Msg, element(1, Msg), []); verify_msg(X) -> mk_type_error(not_a_known_message, X, []). @@ -2927,26 +2910,26 @@ verify_msg(Msg, MsgName, Opts) -> case MsgName of sdl_v4_info -> v_msg_sdl_v4_info(Msg, [MsgName], TrUserData); sdl_v6_info -> v_msg_sdl_v6_info(Msg, [MsgName], TrUserData); - sdl_dev_addr -> v_msg_sdl_dev_addr(Msg, [MsgName], TrUserData); sdl_empty -> v_msg_sdl_empty(Msg, [MsgName], TrUserData); sdl_register_super -> v_msg_sdl_register_super(Msg, [MsgName], TrUserData); sdl_register_super_ack -> v_msg_sdl_register_super_ack(Msg, [MsgName], TrUserData); sdl_register_super_nak -> v_msg_sdl_register_super_nak(Msg, [MsgName], TrUserData); sdl_query_info -> v_msg_sdl_query_info(Msg, [MsgName], TrUserData); sdl_peer_info -> v_msg_sdl_peer_info(Msg, [MsgName], TrUserData); + sdl_arp_request -> v_msg_sdl_arp_request(Msg, [MsgName], TrUserData); + sdl_arp_response -> v_msg_sdl_arp_response(Msg, [MsgName], TrUserData); + sdl_policy_request -> v_msg_sdl_policy_request(Msg, [MsgName], TrUserData); + sdl_policy_response -> v_msg_sdl_policy_response(Msg, [MsgName], TrUserData); sdl_nat_changed_event -> v_msg_sdl_nat_changed_event(Msg, [MsgName], TrUserData); sdl_send_register_event -> v_msg_sdl_send_register_event(Msg, [MsgName], TrUserData); sdl_network_shutdown_event -> v_msg_sdl_network_shutdown_event(Msg, [MsgName], TrUserData); - sdl_change_network_command -> v_msg_sdl_change_network_command(Msg, [MsgName], TrUserData); - sdl_command_ack -> v_msg_sdl_command_ack(Msg, [MsgName], TrUserData); - sdl_flows -> v_msg_sdl_flows(Msg, [MsgName], TrUserData); sdl_stun_request -> v_msg_sdl_stun_request(Msg, [MsgName], TrUserData); sdl_stun_reply -> v_msg_sdl_stun_reply(Msg, [MsgName], TrUserData); sdl_data -> v_msg_sdl_data(Msg, [MsgName], TrUserData); - sdl_register -> v_msg_sdl_register(Msg, [MsgName], TrUserData); - sdl_register_ack -> v_msg_sdl_register_ack(Msg, [MsgName], TrUserData); sdl_stun_probe -> v_msg_sdl_stun_probe(Msg, [MsgName], TrUserData); sdl_stun_probe_reply -> v_msg_sdl_stun_probe_reply(Msg, [MsgName], TrUserData); + sdl_register -> v_msg_sdl_register(Msg, [MsgName], TrUserData); + sdl_register_ack -> v_msg_sdl_register_ack(Msg, [MsgName], TrUserData); _ -> mk_type_error(not_a_known_message, Msg, []) end. @@ -2986,31 +2969,6 @@ v_msg_sdl_v6_info(#sdl_v6_info{port = F1, v6 = F2}, Path, TrUserData) -> ok; v_msg_sdl_v6_info(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_v6_info}, X, Path). --compile({nowarn_unused_function,v_submsg_sdl_dev_addr/3}). --dialyzer({nowarn_function,v_submsg_sdl_dev_addr/3}). -v_submsg_sdl_dev_addr(Msg, Path, TrUserData) -> v_msg_sdl_dev_addr(Msg, Path, TrUserData). - --compile({nowarn_unused_function,v_msg_sdl_dev_addr/3}). --dialyzer({nowarn_function,v_msg_sdl_dev_addr/3}). -v_msg_sdl_dev_addr(#sdl_dev_addr{network_id = F1, mac = F2, net_addr = F3, net_bit_len = F4, network_domain = F5}, Path, TrUserData) -> - if F1 == undefined -> ok; - true -> v_type_uint32(F1, [network_id | Path], TrUserData) - end, - if F2 == undefined -> ok; - true -> v_type_bytes(F2, [mac | Path], TrUserData) - end, - if F3 == undefined -> ok; - true -> v_type_uint32(F3, [net_addr | Path], TrUserData) - end, - if F4 == undefined -> ok; - true -> v_type_uint32(F4, [net_bit_len | Path], TrUserData) - end, - if F5 == undefined -> ok; - true -> v_type_string(F5, [network_domain | Path], TrUserData) - end, - ok; -v_msg_sdl_dev_addr(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_dev_addr}, X, Path). - -compile({nowarn_unused_function,v_msg_sdl_empty/3}). -dialyzer({nowarn_function,v_msg_sdl_empty/3}). v_msg_sdl_empty(#sdl_empty{}, _Path, _) -> ok; @@ -3018,51 +2976,45 @@ v_msg_sdl_empty(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_empty} -compile({nowarn_unused_function,v_msg_sdl_register_super/3}). -dialyzer({nowarn_function,v_msg_sdl_register_super/3}). -v_msg_sdl_register_super(#sdl_register_super{version = F1, installed_channel = F2, client_id = F3, dev_addr = F4, pub_key = F5, token = F6, network_code = F7, hostname = F8}, Path, TrUserData) -> +v_msg_sdl_register_super(#sdl_register_super{version = F1, client_id = F2, network_id = F3, mac = F4, ip = F5, mask_len = F6, hostname = F7, pub_key = F8, access_token = F9}, Path, TrUserData) -> if F1 == undefined -> ok; true -> v_type_uint32(F1, [version | Path], TrUserData) end, if F2 == undefined -> ok; - true -> v_type_string(F2, [installed_channel | Path], TrUserData) + true -> v_type_string(F2, [client_id | Path], TrUserData) end, if F3 == undefined -> ok; - true -> v_type_string(F3, [client_id | Path], TrUserData) + true -> v_type_uint32(F3, [network_id | Path], TrUserData) end, if F4 == undefined -> ok; - true -> v_submsg_sdl_dev_addr(F4, [dev_addr | Path], TrUserData) + true -> v_type_bytes(F4, [mac | Path], TrUserData) end, if F5 == undefined -> ok; - true -> v_type_string(F5, [pub_key | Path], TrUserData) + true -> v_type_uint32(F5, [ip | Path], TrUserData) end, if F6 == undefined -> ok; - true -> v_type_string(F6, [token | Path], TrUserData) + true -> v_type_uint32(F6, [mask_len | Path], TrUserData) end, if F7 == undefined -> ok; - true -> v_type_string(F7, [network_code | Path], TrUserData) + true -> v_type_string(F7, [hostname | Path], TrUserData) end, if F8 == undefined -> ok; - true -> v_type_string(F8, [hostname | Path], TrUserData) + true -> v_type_string(F8, [pub_key | Path], TrUserData) + end, + if F9 == undefined -> ok; + true -> v_type_string(F9, [access_token | Path], TrUserData) end, ok; v_msg_sdl_register_super(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_register_super}, X, Path). -compile({nowarn_unused_function,v_msg_sdl_register_super_ack/3}). -dialyzer({nowarn_function,v_msg_sdl_register_super_ack/3}). -v_msg_sdl_register_super_ack(#sdl_register_super_ack{dev_addr = F1, aes_key = F2, upgrade_type = F3, upgrade_prompt = F4, upgrade_address = F5}, Path, TrUserData) -> +v_msg_sdl_register_super_ack(#sdl_register_super_ack{aes_key = F1, session_token = F2}, Path, TrUserData) -> if F1 == undefined -> ok; - true -> v_submsg_sdl_dev_addr(F1, [dev_addr | Path], TrUserData) + true -> v_type_bytes(F1, [aes_key | Path], TrUserData) end, if F2 == undefined -> ok; - true -> v_type_bytes(F2, [aes_key | Path], TrUserData) - end, - if F3 == undefined -> ok; - true -> v_type_uint32(F3, [upgrade_type | Path], TrUserData) - end, - if F4 == undefined -> ok; - true -> v_type_string(F4, [upgrade_prompt | Path], TrUserData) - end, - if F5 == undefined -> ok; - true -> v_type_string(F5, [upgrade_address | Path], TrUserData) + true -> v_type_bytes(F2, [session_token | Path], TrUserData) end, ok; v_msg_sdl_register_super_ack(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_register_super_ack}, X, Path). @@ -3103,6 +3055,60 @@ v_msg_sdl_peer_info(#sdl_peer_info{dst_mac = F1, v4_info = F2, v6_info = F3}, Pa ok; v_msg_sdl_peer_info(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_peer_info}, X, Path). +-compile({nowarn_unused_function,v_msg_sdl_arp_request/3}). +-dialyzer({nowarn_function,v_msg_sdl_arp_request/3}). +v_msg_sdl_arp_request(#sdl_arp_request{target_ip = F1}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [target_ip | Path], TrUserData) + end, + ok; +v_msg_sdl_arp_request(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_arp_request}, X, Path). + +-compile({nowarn_unused_function,v_msg_sdl_arp_response/3}). +-dialyzer({nowarn_function,v_msg_sdl_arp_response/3}). +v_msg_sdl_arp_response(#sdl_arp_response{target_ip = F1, target_mac = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [target_ip | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [target_mac | Path], TrUserData) + end, + ok; +v_msg_sdl_arp_response(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_arp_response}, X, Path). + +-compile({nowarn_unused_function,v_msg_sdl_policy_request/3}). +-dialyzer({nowarn_function,v_msg_sdl_policy_request/3}). +v_msg_sdl_policy_request(#sdl_policy_request{src_identity_id = F1, dst_identity_id = F2, version = F3}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [src_identity_id | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_uint32(F2, [dst_identity_id | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_uint32(F3, [version | Path], TrUserData) + end, + ok; +v_msg_sdl_policy_request(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_policy_request}, X, Path). + +-compile({nowarn_unused_function,v_msg_sdl_policy_response/3}). +-dialyzer({nowarn_function,v_msg_sdl_policy_response/3}). +v_msg_sdl_policy_response(#sdl_policy_response{src_identity_id = F1, dst_identity_id = F2, version = F3, rules = F4}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [src_identity_id | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_uint32(F2, [dst_identity_id | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_uint32(F3, [version | Path], TrUserData) + end, + if F4 == undefined -> ok; + true -> v_type_bytes(F4, [rules | Path], TrUserData) + end, + ok; +v_msg_sdl_policy_response(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_policy_response}, X, Path). + -compile({nowarn_unused_function,v_msg_sdl_nat_changed_event/3}). -dialyzer({nowarn_function,v_msg_sdl_nat_changed_event/3}). v_msg_sdl_nat_changed_event(#sdl_nat_changed_event{mac = F1, ip = F2}, Path, TrUserData) -> @@ -3145,45 +3151,6 @@ v_msg_sdl_network_shutdown_event(#sdl_network_shutdown_event{message = F1}, Path ok; v_msg_sdl_network_shutdown_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_network_shutdown_event}, X, Path). --compile({nowarn_unused_function,v_msg_sdl_change_network_command/3}). --dialyzer({nowarn_function,v_msg_sdl_change_network_command/3}). -v_msg_sdl_change_network_command(#sdl_change_network_command{dev_addr = F1, aes_key = F2}, Path, TrUserData) -> - if F1 == undefined -> ok; - true -> v_submsg_sdl_dev_addr(F1, [dev_addr | Path], TrUserData) - end, - if F2 == undefined -> ok; - true -> v_type_bytes(F2, [aes_key | Path], TrUserData) - end, - ok; -v_msg_sdl_change_network_command(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_change_network_command}, X, Path). - --compile({nowarn_unused_function,v_msg_sdl_command_ack/3}). --dialyzer({nowarn_function,v_msg_sdl_command_ack/3}). -v_msg_sdl_command_ack(#sdl_command_ack{status = F1, message = F2}, Path, TrUserData) -> - if F1 == undefined -> ok; - true -> v_type_bool(F1, [status | Path], TrUserData) - end, - if F2 == undefined -> ok; - true -> v_type_string(F2, [message | Path], TrUserData) - end, - ok; -v_msg_sdl_command_ack(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_command_ack}, X, Path). - --compile({nowarn_unused_function,v_msg_sdl_flows/3}). --dialyzer({nowarn_function,v_msg_sdl_flows/3}). -v_msg_sdl_flows(#sdl_flows{forward_num = F1, p2p_num = F2, inbound_num = F3}, Path, TrUserData) -> - if F1 == undefined -> ok; - true -> v_type_uint32(F1, [forward_num | Path], TrUserData) - end, - if F2 == undefined -> ok; - true -> v_type_uint32(F2, [p2p_num | Path], TrUserData) - end, - if F3 == undefined -> ok; - true -> v_type_uint32(F3, [inbound_num | Path], TrUserData) - end, - ok; -v_msg_sdl_flows(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_flows}, X, Path). - -compile({nowarn_unused_function,v_msg_sdl_stun_request/3}). -dialyzer({nowarn_function,v_msg_sdl_stun_request/3}). v_msg_sdl_stun_request(#sdl_stun_request{cookie = F1, client_id = F2, network_id = F3, mac = F4, ip = F5, nat_type = F6, v6_info = F7}, Path, TrUserData) -> @@ -3222,7 +3189,7 @@ v_msg_sdl_stun_reply(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_s -compile({nowarn_unused_function,v_msg_sdl_data/3}). -dialyzer({nowarn_function,v_msg_sdl_data/3}). -v_msg_sdl_data(#sdl_data{network_id = F1, src_mac = F2, dst_mac = F3, is_p2p = F4, ttl = F5, data = F6}, Path, TrUserData) -> +v_msg_sdl_data(#sdl_data{network_id = F1, src_mac = F2, dst_mac = F3, is_p2p = F4, ttl = F5, data = F6, session_token = F7, identity_id = F8}, Path, TrUserData) -> if F1 == undefined -> ok; true -> v_type_uint32(F1, [network_id | Path], TrUserData) end, @@ -3241,9 +3208,48 @@ v_msg_sdl_data(#sdl_data{network_id = F1, src_mac = F2, dst_mac = F3, is_p2p = F if F6 == undefined -> ok; true -> v_type_bytes(F6, [data | Path], TrUserData) end, + if F7 == undefined -> ok; + true -> v_type_bytes(F7, [session_token | Path], TrUserData) + end, + if F8 == undefined -> ok; + true -> v_type_uint32(F8, [identity_id | Path], TrUserData) + end, ok; v_msg_sdl_data(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_data}, X, Path). +-compile({nowarn_unused_function,v_msg_sdl_stun_probe/3}). +-dialyzer({nowarn_function,v_msg_sdl_stun_probe/3}). +v_msg_sdl_stun_probe(#sdl_stun_probe{cookie = F1, attr = F2, step = F3}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [cookie | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_uint32(F2, [attr | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_uint32(F3, [step | Path], TrUserData) + end, + ok; +v_msg_sdl_stun_probe(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_stun_probe}, X, Path). + +-compile({nowarn_unused_function,v_msg_sdl_stun_probe_reply/3}). +-dialyzer({nowarn_function,v_msg_sdl_stun_probe_reply/3}). +v_msg_sdl_stun_probe_reply(#sdl_stun_probe_reply{cookie = F1, step = F2, port = F3, ip = F4}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [cookie | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_uint32(F2, [step | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_uint32(F3, [port | Path], TrUserData) + end, + if F4 == undefined -> ok; + true -> v_type_uint32(F4, [ip | Path], TrUserData) + end, + ok; +v_msg_sdl_stun_probe_reply(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_stun_probe_reply}, X, Path). + -compile({nowarn_unused_function,v_msg_sdl_register/3}). -dialyzer({nowarn_function,v_msg_sdl_register/3}). v_msg_sdl_register(#sdl_register{network_id = F1, src_mac = F2, dst_mac = F3}, Path, TrUserData) -> @@ -3274,33 +3280,6 @@ v_msg_sdl_register_ack(#sdl_register_ack{network_id = F1, src_mac = F2, dst_mac ok; v_msg_sdl_register_ack(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_register_ack}, X, Path). --compile({nowarn_unused_function,v_msg_sdl_stun_probe/3}). --dialyzer({nowarn_function,v_msg_sdl_stun_probe/3}). -v_msg_sdl_stun_probe(#sdl_stun_probe{cookie = F1, attr = F2}, Path, TrUserData) -> - if F1 == undefined -> ok; - true -> v_type_uint32(F1, [cookie | Path], TrUserData) - end, - if F2 == undefined -> ok; - true -> v_type_uint32(F2, [attr | Path], TrUserData) - end, - ok; -v_msg_sdl_stun_probe(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_stun_probe}, X, Path). - --compile({nowarn_unused_function,v_msg_sdl_stun_probe_reply/3}). --dialyzer({nowarn_function,v_msg_sdl_stun_probe_reply/3}). -v_msg_sdl_stun_probe_reply(#sdl_stun_probe_reply{cookie = F1, port = F2, ip = F3}, Path, TrUserData) -> - if F1 == undefined -> ok; - true -> v_type_uint32(F1, [cookie | Path], TrUserData) - end, - if F2 == undefined -> ok; - true -> v_type_uint32(F2, [port | Path], TrUserData) - end, - if F3 == undefined -> ok; - true -> v_type_uint32(F3, [ip | Path], TrUserData) - end, - ok; -v_msg_sdl_stun_probe_reply(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_stun_probe_reply}, X, Path). - -compile({nowarn_unused_function,v_type_uint32/3}). -dialyzer({nowarn_function,v_type_uint32/3}). v_type_uint32(N, _Path, _TrUserData) when is_integer(N), 0 =< N, N =< 4294967295 -> ok; @@ -3375,34 +3354,35 @@ get_msg_defs() -> #field{name = v4, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, #field{name = nat_type, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]}, {{msg, sdl_v6_info}, [#field{name = port, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = v6, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]}, - {{msg, sdl_dev_addr}, - [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, - #field{name = mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, - #field{name = net_addr, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, - #field{name = net_bit_len, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []}, - #field{name = network_domain, fnum = 5, rnum = 6, type = string, occurrence = defaulty, opts = []}]}, {{msg, sdl_empty}, []}, {{msg, sdl_register_super}, [#field{name = version, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, - #field{name = installed_channel, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}, - #field{name = client_id, fnum = 3, rnum = 4, type = string, occurrence = defaulty, opts = []}, - #field{name = dev_addr, fnum = 4, rnum = 5, type = {msg, sdl_dev_addr}, occurrence = defaulty, opts = []}, - #field{name = pub_key, fnum = 5, rnum = 6, type = string, occurrence = defaulty, opts = []}, - #field{name = token, fnum = 6, rnum = 7, type = string, occurrence = defaulty, opts = []}, - #field{name = network_code, fnum = 7, rnum = 8, type = string, occurrence = defaulty, opts = []}, - #field{name = hostname, fnum = 8, rnum = 9, type = string, occurrence = defaulty, opts = []}]}, - {{msg, sdl_register_super_ack}, - [#field{name = dev_addr, fnum = 1, rnum = 2, type = {msg, sdl_dev_addr}, occurrence = defaulty, opts = []}, - #field{name = aes_key, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, - #field{name = upgrade_type, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, - #field{name = upgrade_prompt, fnum = 4, rnum = 5, type = string, occurrence = optional, opts = []}, - #field{name = upgrade_address, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}]}, + #field{name = client_id, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}, + #field{name = network_id, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, + #field{name = mac, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}, + #field{name = ip, fnum = 5, rnum = 6, type = uint32, occurrence = defaulty, opts = []}, + #field{name = mask_len, fnum = 6, rnum = 7, type = uint32, occurrence = defaulty, opts = []}, + #field{name = hostname, fnum = 7, rnum = 8, type = string, occurrence = defaulty, opts = []}, + #field{name = pub_key, fnum = 8, rnum = 9, type = string, occurrence = defaulty, opts = []}, + #field{name = access_token, fnum = 9, rnum = 10, type = string, occurrence = defaulty, opts = []}]}, + {{msg, sdl_register_super_ack}, [#field{name = aes_key, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = session_token, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]}, {{msg, sdl_register_super_nak}, [#field{name = error_code, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = error_message, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}]}, {{msg, sdl_query_info}, [#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}]}, {{msg, sdl_peer_info}, [#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = v4_info, fnum = 2, rnum = 3, type = {msg, sdl_v4_info}, occurrence = defaulty, opts = []}, #field{name = v6_info, fnum = 3, rnum = 4, type = {msg, sdl_v6_info}, occurrence = optional, opts = []}]}, + {{msg, sdl_arp_request}, [#field{name = target_ip, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}]}, + {{msg, sdl_arp_response}, [#field{name = target_ip, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = target_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]}, + {{msg, sdl_policy_request}, + [#field{name = src_identity_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, + #field{name = dst_identity_id, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, + #field{name = version, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]}, + {{msg, sdl_policy_response}, + [#field{name = src_identity_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, + #field{name = dst_identity_id, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, + #field{name = version, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, + #field{name = rules, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}]}, {{msg, sdl_nat_changed_event}, [#field{name = mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = ip, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}]}, {{msg, sdl_send_register_event}, [#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, @@ -3411,12 +3391,6 @@ get_msg_defs() -> #field{name = nat_type, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []}, #field{name = v6_info, fnum = 5, rnum = 6, type = {msg, sdl_v6_info}, occurrence = optional, opts = []}]}, {{msg, sdl_network_shutdown_event}, [#field{name = message, fnum = 1, rnum = 2, type = string, occurrence = defaulty, opts = []}]}, - {{msg, sdl_change_network_command}, [#field{name = dev_addr, fnum = 1, rnum = 2, type = {msg, sdl_dev_addr}, occurrence = defaulty, opts = []}, #field{name = aes_key, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]}, - {{msg, sdl_command_ack}, [#field{name = status, fnum = 1, rnum = 2, type = bool, occurrence = defaulty, opts = []}, #field{name = message, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]}, - {{msg, sdl_flows}, - [#field{name = forward_num, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, - #field{name = p2p_num, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, - #field{name = inbound_num, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]}, {{msg, sdl_stun_request}, [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = client_id, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}, @@ -3432,7 +3406,18 @@ get_msg_defs() -> #field{name = dst_mac, fnum = 3, rnum = 4, type = bytes, occurrence = defaulty, opts = []}, #field{name = is_p2p, fnum = 4, rnum = 5, type = bool, occurrence = defaulty, opts = []}, #field{name = ttl, fnum = 5, rnum = 6, type = uint32, occurrence = defaulty, opts = []}, - #field{name = data, fnum = 6, rnum = 7, type = bytes, occurrence = defaulty, opts = []}]}, + #field{name = data, fnum = 6, rnum = 7, type = bytes, occurrence = defaulty, opts = []}, + #field{name = session_token, fnum = 7, rnum = 8, type = bytes, occurrence = defaulty, opts = []}, + #field{name = identity_id, fnum = 8, rnum = 9, type = uint32, occurrence = defaulty, opts = []}]}, + {{msg, sdl_stun_probe}, + [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, + #field{name = attr, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, + #field{name = step, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]}, + {{msg, sdl_stun_probe_reply}, + [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, + #field{name = step, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, + #field{name = port, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, + #field{name = ip, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []}]}, {{msg, sdl_register}, [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = src_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, @@ -3440,37 +3425,32 @@ get_msg_defs() -> {{msg, sdl_register_ack}, [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = src_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, - #field{name = dst_mac, fnum = 3, rnum = 4, type = bytes, occurrence = defaulty, opts = []}]}, - {{msg, sdl_stun_probe}, [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = attr, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}]}, - {{msg, sdl_stun_probe_reply}, - [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, - #field{name = port, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, - #field{name = ip, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]}]. + #field{name = dst_mac, fnum = 3, rnum = 4, type = bytes, occurrence = defaulty, opts = []}]}]. get_msg_names() -> [sdl_v4_info, sdl_v6_info, - sdl_dev_addr, sdl_empty, sdl_register_super, sdl_register_super_ack, sdl_register_super_nak, sdl_query_info, sdl_peer_info, + sdl_arp_request, + sdl_arp_response, + sdl_policy_request, + sdl_policy_response, sdl_nat_changed_event, sdl_send_register_event, sdl_network_shutdown_event, - sdl_change_network_command, - sdl_command_ack, - sdl_flows, sdl_stun_request, sdl_stun_reply, sdl_data, - sdl_register, - sdl_register_ack, sdl_stun_probe, - sdl_stun_probe_reply]. + sdl_stun_probe_reply, + sdl_register, + sdl_register_ack]. get_group_names() -> []. @@ -3479,26 +3459,26 @@ get_group_names() -> []. get_msg_or_group_names() -> [sdl_v4_info, sdl_v6_info, - sdl_dev_addr, sdl_empty, sdl_register_super, sdl_register_super_ack, sdl_register_super_nak, sdl_query_info, sdl_peer_info, + sdl_arp_request, + sdl_arp_response, + sdl_policy_request, + sdl_policy_response, sdl_nat_changed_event, sdl_send_register_event, sdl_network_shutdown_event, - sdl_change_network_command, - sdl_command_ack, - sdl_flows, sdl_stun_request, sdl_stun_reply, sdl_data, - sdl_register, - sdl_register_ack, sdl_stun_probe, - sdl_stun_probe_reply]. + sdl_stun_probe_reply, + sdl_register, + sdl_register_ack]. get_enum_names() -> []. @@ -3520,34 +3500,35 @@ find_msg_def(sdl_v4_info) -> #field{name = v4, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, #field{name = nat_type, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]; find_msg_def(sdl_v6_info) -> [#field{name = port, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = v6, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]; -find_msg_def(sdl_dev_addr) -> - [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, - #field{name = mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, - #field{name = net_addr, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, - #field{name = net_bit_len, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []}, - #field{name = network_domain, fnum = 5, rnum = 6, type = string, occurrence = defaulty, opts = []}]; find_msg_def(sdl_empty) -> []; find_msg_def(sdl_register_super) -> [#field{name = version, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, - #field{name = installed_channel, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}, - #field{name = client_id, fnum = 3, rnum = 4, type = string, occurrence = defaulty, opts = []}, - #field{name = dev_addr, fnum = 4, rnum = 5, type = {msg, sdl_dev_addr}, occurrence = defaulty, opts = []}, - #field{name = pub_key, fnum = 5, rnum = 6, type = string, occurrence = defaulty, opts = []}, - #field{name = token, fnum = 6, rnum = 7, type = string, occurrence = defaulty, opts = []}, - #field{name = network_code, fnum = 7, rnum = 8, type = string, occurrence = defaulty, opts = []}, - #field{name = hostname, fnum = 8, rnum = 9, type = string, occurrence = defaulty, opts = []}]; -find_msg_def(sdl_register_super_ack) -> - [#field{name = dev_addr, fnum = 1, rnum = 2, type = {msg, sdl_dev_addr}, occurrence = defaulty, opts = []}, - #field{name = aes_key, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, - #field{name = upgrade_type, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, - #field{name = upgrade_prompt, fnum = 4, rnum = 5, type = string, occurrence = optional, opts = []}, - #field{name = upgrade_address, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}]; + #field{name = client_id, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}, + #field{name = network_id, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, + #field{name = mac, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}, + #field{name = ip, fnum = 5, rnum = 6, type = uint32, occurrence = defaulty, opts = []}, + #field{name = mask_len, fnum = 6, rnum = 7, type = uint32, occurrence = defaulty, opts = []}, + #field{name = hostname, fnum = 7, rnum = 8, type = string, occurrence = defaulty, opts = []}, + #field{name = pub_key, fnum = 8, rnum = 9, type = string, occurrence = defaulty, opts = []}, + #field{name = access_token, fnum = 9, rnum = 10, type = string, occurrence = defaulty, opts = []}]; +find_msg_def(sdl_register_super_ack) -> [#field{name = aes_key, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = session_token, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]; find_msg_def(sdl_register_super_nak) -> [#field{name = error_code, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = error_message, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}]; find_msg_def(sdl_query_info) -> [#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}]; find_msg_def(sdl_peer_info) -> [#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = v4_info, fnum = 2, rnum = 3, type = {msg, sdl_v4_info}, occurrence = defaulty, opts = []}, #field{name = v6_info, fnum = 3, rnum = 4, type = {msg, sdl_v6_info}, occurrence = optional, opts = []}]; +find_msg_def(sdl_arp_request) -> [#field{name = target_ip, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}]; +find_msg_def(sdl_arp_response) -> [#field{name = target_ip, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = target_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]; +find_msg_def(sdl_policy_request) -> + [#field{name = src_identity_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, + #field{name = dst_identity_id, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, + #field{name = version, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]; +find_msg_def(sdl_policy_response) -> + [#field{name = src_identity_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, + #field{name = dst_identity_id, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, + #field{name = version, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, + #field{name = rules, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}]; find_msg_def(sdl_nat_changed_event) -> [#field{name = mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = ip, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}]; find_msg_def(sdl_send_register_event) -> [#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, @@ -3556,12 +3537,6 @@ find_msg_def(sdl_send_register_event) -> #field{name = nat_type, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []}, #field{name = v6_info, fnum = 5, rnum = 6, type = {msg, sdl_v6_info}, occurrence = optional, opts = []}]; find_msg_def(sdl_network_shutdown_event) -> [#field{name = message, fnum = 1, rnum = 2, type = string, occurrence = defaulty, opts = []}]; -find_msg_def(sdl_change_network_command) -> [#field{name = dev_addr, fnum = 1, rnum = 2, type = {msg, sdl_dev_addr}, occurrence = defaulty, opts = []}, #field{name = aes_key, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]; -find_msg_def(sdl_command_ack) -> [#field{name = status, fnum = 1, rnum = 2, type = bool, occurrence = defaulty, opts = []}, #field{name = message, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]; -find_msg_def(sdl_flows) -> - [#field{name = forward_num, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, - #field{name = p2p_num, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, - #field{name = inbound_num, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]; find_msg_def(sdl_stun_request) -> [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = client_id, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}, @@ -3577,7 +3552,18 @@ find_msg_def(sdl_data) -> #field{name = dst_mac, fnum = 3, rnum = 4, type = bytes, occurrence = defaulty, opts = []}, #field{name = is_p2p, fnum = 4, rnum = 5, type = bool, occurrence = defaulty, opts = []}, #field{name = ttl, fnum = 5, rnum = 6, type = uint32, occurrence = defaulty, opts = []}, - #field{name = data, fnum = 6, rnum = 7, type = bytes, occurrence = defaulty, opts = []}]; + #field{name = data, fnum = 6, rnum = 7, type = bytes, occurrence = defaulty, opts = []}, + #field{name = session_token, fnum = 7, rnum = 8, type = bytes, occurrence = defaulty, opts = []}, + #field{name = identity_id, fnum = 8, rnum = 9, type = uint32, occurrence = defaulty, opts = []}]; +find_msg_def(sdl_stun_probe) -> + [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, + #field{name = attr, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, + #field{name = step, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]; +find_msg_def(sdl_stun_probe_reply) -> + [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, + #field{name = step, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, + #field{name = port, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, + #field{name = ip, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []}]; find_msg_def(sdl_register) -> [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = src_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, @@ -3586,11 +3572,6 @@ find_msg_def(sdl_register_ack) -> [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = src_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, #field{name = dst_mac, fnum = 3, rnum = 4, type = bytes, occurrence = defaulty, opts = []}]; -find_msg_def(sdl_stun_probe) -> [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = attr, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}]; -find_msg_def(sdl_stun_probe_reply) -> - [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, - #field{name = port, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, - #field{name = ip, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]; find_msg_def(_) -> error. @@ -3651,51 +3632,51 @@ service_and_rpc_name_to_fqbins(S, R) -> error({gpb_error, {badservice_or_rpc, {S fqbin_to_msg_name(<<"SDLV4Info">>) -> sdl_v4_info; fqbin_to_msg_name(<<"SDLV6Info">>) -> sdl_v6_info; -fqbin_to_msg_name(<<"SDLDevAddr">>) -> sdl_dev_addr; fqbin_to_msg_name(<<"SDLEmpty">>) -> sdl_empty; fqbin_to_msg_name(<<"SDLRegisterSuper">>) -> sdl_register_super; fqbin_to_msg_name(<<"SDLRegisterSuperAck">>) -> sdl_register_super_ack; fqbin_to_msg_name(<<"SDLRegisterSuperNak">>) -> sdl_register_super_nak; fqbin_to_msg_name(<<"SDLQueryInfo">>) -> sdl_query_info; fqbin_to_msg_name(<<"SDLPeerInfo">>) -> sdl_peer_info; +fqbin_to_msg_name(<<"SDLArpRequest">>) -> sdl_arp_request; +fqbin_to_msg_name(<<"SDLArpResponse">>) -> sdl_arp_response; +fqbin_to_msg_name(<<"SDLPolicyRequest">>) -> sdl_policy_request; +fqbin_to_msg_name(<<"SDLPolicyResponse">>) -> sdl_policy_response; fqbin_to_msg_name(<<"SDLNatChangedEvent">>) -> sdl_nat_changed_event; fqbin_to_msg_name(<<"SDLSendRegisterEvent">>) -> sdl_send_register_event; fqbin_to_msg_name(<<"SDLNetworkShutdownEvent">>) -> sdl_network_shutdown_event; -fqbin_to_msg_name(<<"SDLChangeNetworkCommand">>) -> sdl_change_network_command; -fqbin_to_msg_name(<<"SDLCommandAck">>) -> sdl_command_ack; -fqbin_to_msg_name(<<"SDLFlows">>) -> sdl_flows; fqbin_to_msg_name(<<"SDLStunRequest">>) -> sdl_stun_request; fqbin_to_msg_name(<<"SDLStunReply">>) -> sdl_stun_reply; fqbin_to_msg_name(<<"SDLData">>) -> sdl_data; -fqbin_to_msg_name(<<"SDLRegister">>) -> sdl_register; -fqbin_to_msg_name(<<"SDLRegisterAck">>) -> sdl_register_ack; fqbin_to_msg_name(<<"SDLStunProbe">>) -> sdl_stun_probe; fqbin_to_msg_name(<<"SDLStunProbeReply">>) -> sdl_stun_probe_reply; +fqbin_to_msg_name(<<"SDLRegister">>) -> sdl_register; +fqbin_to_msg_name(<<"SDLRegisterAck">>) -> sdl_register_ack; fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). msg_name_to_fqbin(sdl_v4_info) -> <<"SDLV4Info">>; msg_name_to_fqbin(sdl_v6_info) -> <<"SDLV6Info">>; -msg_name_to_fqbin(sdl_dev_addr) -> <<"SDLDevAddr">>; msg_name_to_fqbin(sdl_empty) -> <<"SDLEmpty">>; msg_name_to_fqbin(sdl_register_super) -> <<"SDLRegisterSuper">>; msg_name_to_fqbin(sdl_register_super_ack) -> <<"SDLRegisterSuperAck">>; msg_name_to_fqbin(sdl_register_super_nak) -> <<"SDLRegisterSuperNak">>; msg_name_to_fqbin(sdl_query_info) -> <<"SDLQueryInfo">>; msg_name_to_fqbin(sdl_peer_info) -> <<"SDLPeerInfo">>; +msg_name_to_fqbin(sdl_arp_request) -> <<"SDLArpRequest">>; +msg_name_to_fqbin(sdl_arp_response) -> <<"SDLArpResponse">>; +msg_name_to_fqbin(sdl_policy_request) -> <<"SDLPolicyRequest">>; +msg_name_to_fqbin(sdl_policy_response) -> <<"SDLPolicyResponse">>; msg_name_to_fqbin(sdl_nat_changed_event) -> <<"SDLNatChangedEvent">>; msg_name_to_fqbin(sdl_send_register_event) -> <<"SDLSendRegisterEvent">>; msg_name_to_fqbin(sdl_network_shutdown_event) -> <<"SDLNetworkShutdownEvent">>; -msg_name_to_fqbin(sdl_change_network_command) -> <<"SDLChangeNetworkCommand">>; -msg_name_to_fqbin(sdl_command_ack) -> <<"SDLCommandAck">>; -msg_name_to_fqbin(sdl_flows) -> <<"SDLFlows">>; msg_name_to_fqbin(sdl_stun_request) -> <<"SDLStunRequest">>; msg_name_to_fqbin(sdl_stun_reply) -> <<"SDLStunReply">>; msg_name_to_fqbin(sdl_data) -> <<"SDLData">>; -msg_name_to_fqbin(sdl_register) -> <<"SDLRegister">>; -msg_name_to_fqbin(sdl_register_ack) -> <<"SDLRegisterAck">>; msg_name_to_fqbin(sdl_stun_probe) -> <<"SDLStunProbe">>; msg_name_to_fqbin(sdl_stun_probe_reply) -> <<"SDLStunProbeReply">>; +msg_name_to_fqbin(sdl_register) -> <<"SDLRegister">>; +msg_name_to_fqbin(sdl_register_ack) -> <<"SDLRegisterAck">>; msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). @@ -3735,15 +3716,15 @@ get_all_proto_names() -> ["sdlan_pb"]. get_msg_containment("sdlan_pb") -> - [sdl_change_network_command, - sdl_command_ack, + [sdl_arp_request, + sdl_arp_response, sdl_data, - sdl_dev_addr, sdl_empty, - sdl_flows, sdl_nat_changed_event, sdl_network_shutdown_event, sdl_peer_info, + sdl_policy_request, + sdl_policy_response, sdl_query_info, sdl_register, sdl_register_ack, @@ -3779,21 +3760,21 @@ get_enum_containment(P) -> error({gpb_error, {badproto, P}}). get_proto_by_msg_name_as_fqbin(<<"SDLData">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLRegisterSuper">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLRegister">>) -> "sdlan_pb"; -get_proto_by_msg_name_as_fqbin(<<"SDLDevAddr">>) -> "sdlan_pb"; -get_proto_by_msg_name_as_fqbin(<<"SDLFlows">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLStunRequest">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLSendRegisterEvent">>) -> "sdlan_pb"; +get_proto_by_msg_name_as_fqbin(<<"SDLPolicyRequest">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLNetworkShutdownEvent">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLNatChangedEvent">>) -> "sdlan_pb"; -get_proto_by_msg_name_as_fqbin(<<"SDLChangeNetworkCommand">>) -> "sdlan_pb"; +get_proto_by_msg_name_as_fqbin(<<"SDLArpRequest">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLStunProbe">>) -> "sdlan_pb"; +get_proto_by_msg_name_as_fqbin(<<"SDLPolicyResponse">>) -> "sdlan_pb"; +get_proto_by_msg_name_as_fqbin(<<"SDLArpResponse">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLStunReply">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLStunProbeReply">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLEmpty">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLRegisterSuperNak">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLRegisterSuperAck">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLRegisterAck">>) -> "sdlan_pb"; -get_proto_by_msg_name_as_fqbin(<<"SDLCommandAck">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLV6Info">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLV4Info">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLQueryInfo">>) -> "sdlan_pb";