fix network
This commit is contained in:
parent
4844e32b6c
commit
e12424f4cf
@ -129,7 +129,9 @@ wait_command_ack(Ref, Timeout) when is_reference(Ref), is_integer(Timeout) ->
|
||||
-spec forward_by_ets(NetworkId :: integer(), Sock :: any(), SrcMac :: binary(), DstMac :: binary(), Packet :: binary()) ->
|
||||
{ok, ForwardBytes :: integer()} | {error, Reason :: any()}.
|
||||
forward_by_ets(NetworkId, Sock, SrcMac, DstMac, Packet) when is_integer(NetworkId), is_binary(SrcMac), is_binary(DstMac), is_binary(Packet) ->
|
||||
case lookup_endpoint(NetworkId, SrcMac) of
|
||||
case endpoint_existing_table_name(NetworkId) of
|
||||
{ok, Table} ->
|
||||
case lookup_endpoint(Table, SrcMac) of
|
||||
#endpoint{} ->
|
||||
case sdlan_util:is_broadcast_mac(DstMac) orelse sdlan_util:is_multicast_mac(DstMac) of
|
||||
true ->
|
||||
@ -141,6 +143,9 @@ forward_by_ets(NetworkId, Sock, SrcMac, DstMac, Packet) when is_integer(NetworkI
|
||||
logger:debug("[sdlan_network] networkd_id: ~p, src_mac: ~p, dst_mac: ~p, forward discard, src not found",
|
||||
[NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]),
|
||||
{error, src_not_found}
|
||||
end;
|
||||
error ->
|
||||
{error, table_not_found}
|
||||
end.
|
||||
|
||||
%% 更新ip地址对应的nat关系
|
||||
@ -434,7 +439,16 @@ limiting_check(ThrottleKey) ->
|
||||
|
||||
-spec endpoint_table_name(NetworkId :: integer()) -> atom().
|
||||
endpoint_table_name(NetworkId) when is_integer(NetworkId) ->
|
||||
list_to_atom("sdlan_network_endpoint:" ++ integer_to_list(NetworkId)).
|
||||
list_to_atom(lists:concat(["sdlan_network_endpoint:", NetworkId])).
|
||||
|
||||
-spec endpoint_existing_table_name(NetworkId :: integer()) -> {ok, atom()} | error.
|
||||
endpoint_existing_table_name(NetworkId) when is_integer(NetworkId) ->
|
||||
try
|
||||
Atom = list_to_existing_atom(lists:concat(["sdlan_network_endpoint:", NetworkId])),
|
||||
{ok, Atom}
|
||||
catch error:_ ->
|
||||
error
|
||||
end.
|
||||
|
||||
-spec throttle_key(NetworkId :: integer()) -> atom().
|
||||
throttle_key(NetworkId) when is_integer(NetworkId) ->
|
||||
@ -458,9 +472,7 @@ insert_endpoint(Table, Mac, Endpoint = #endpoint{}) when is_binary(Mac) ->
|
||||
delete_endpoint(Table, Mac) when is_binary(Mac) ->
|
||||
ets:delete(Table, Mac).
|
||||
|
||||
-spec lookup_endpoint(NetworkIdOrTable :: integer() | ets:tid(), Mac :: binary()) -> #endpoint{} | undefined.
|
||||
lookup_endpoint(NetworkId, Mac) when is_integer(NetworkId), is_binary(Mac) ->
|
||||
lookup_endpoint(endpoint_table_name(NetworkId), Mac);
|
||||
-spec lookup_endpoint(ets:tid(), Mac :: binary()) -> #endpoint{} | undefined.
|
||||
lookup_endpoint(Table, Mac) when is_binary(Mac) ->
|
||||
try ets:lookup(Table, Mac) of
|
||||
[{Mac, Endpoint = #endpoint{}}] ->
|
||||
@ -495,7 +507,9 @@ remove_channel_endpoints(ChannelPid, Table) when is_pid(ChannelPid) ->
|
||||
{ok, integer()} | {error, any()}.
|
||||
forward_unicast_by_ets(NetworkId, Sock, SrcMac, DstMac, Packet) ->
|
||||
PacketBytes = byte_size(Packet),
|
||||
case lookup_endpoint(NetworkId, DstMac) of
|
||||
case endpoint_existing_table_name(NetworkId) of
|
||||
{ok, Table} ->
|
||||
case lookup_endpoint(Table, DstMac) of
|
||||
#endpoint{hole = #hole{peer = Peer = {NatIp, NatPort}}} ->
|
||||
case limiting_check(throttle_key(NetworkId)) of
|
||||
pass ->
|
||||
@ -516,6 +530,9 @@ forward_unicast_by_ets(NetworkId, Sock, SrcMac, DstMac, Packet) ->
|
||||
logger:debug("[sdlan_network] networkd_id: ~p, src_mac: ~p, dst_mac: ~p not found",
|
||||
[NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]),
|
||||
{error, dst_not_found}
|
||||
end;
|
||||
error ->
|
||||
{error, table_not_found}
|
||||
end.
|
||||
|
||||
-spec forward_broadcast_by_ets(NetworkId :: integer(), Sock :: any(), SrcMac :: binary(), DstMac :: binary(), Packet :: binary()) ->
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user