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()) ->
|
-spec forward_by_ets(NetworkId :: integer(), Sock :: any(), SrcMac :: binary(), DstMac :: binary(), Packet :: binary()) ->
|
||||||
{ok, ForwardBytes :: integer()} | {error, Reason :: any()}.
|
{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) ->
|
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{} ->
|
#endpoint{} ->
|
||||||
case sdlan_util:is_broadcast_mac(DstMac) orelse sdlan_util:is_multicast_mac(DstMac) of
|
case sdlan_util:is_broadcast_mac(DstMac) orelse sdlan_util:is_multicast_mac(DstMac) of
|
||||||
true ->
|
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",
|
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)]),
|
[NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]),
|
||||||
{error, src_not_found}
|
{error, src_not_found}
|
||||||
|
end;
|
||||||
|
error ->
|
||||||
|
{error, table_not_found}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%% 更新ip地址对应的nat关系
|
%% 更新ip地址对应的nat关系
|
||||||
@ -434,7 +439,16 @@ limiting_check(ThrottleKey) ->
|
|||||||
|
|
||||||
-spec endpoint_table_name(NetworkId :: integer()) -> atom().
|
-spec endpoint_table_name(NetworkId :: integer()) -> atom().
|
||||||
endpoint_table_name(NetworkId) when is_integer(NetworkId) ->
|
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().
|
-spec throttle_key(NetworkId :: integer()) -> atom().
|
||||||
throttle_key(NetworkId) when is_integer(NetworkId) ->
|
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) ->
|
delete_endpoint(Table, Mac) when is_binary(Mac) ->
|
||||||
ets:delete(Table, Mac).
|
ets:delete(Table, Mac).
|
||||||
|
|
||||||
-spec lookup_endpoint(NetworkIdOrTable :: integer() | ets:tid(), Mac :: binary()) -> #endpoint{} | undefined.
|
-spec lookup_endpoint(ets:tid(), Mac :: binary()) -> #endpoint{} | undefined.
|
||||||
lookup_endpoint(NetworkId, Mac) when is_integer(NetworkId), is_binary(Mac) ->
|
|
||||||
lookup_endpoint(endpoint_table_name(NetworkId), Mac);
|
|
||||||
lookup_endpoint(Table, Mac) when is_binary(Mac) ->
|
lookup_endpoint(Table, Mac) when is_binary(Mac) ->
|
||||||
try ets:lookup(Table, Mac) of
|
try ets:lookup(Table, Mac) of
|
||||||
[{Mac, Endpoint = #endpoint{}}] ->
|
[{Mac, Endpoint = #endpoint{}}] ->
|
||||||
@ -495,7 +507,9 @@ remove_channel_endpoints(ChannelPid, Table) when is_pid(ChannelPid) ->
|
|||||||
{ok, integer()} | {error, any()}.
|
{ok, integer()} | {error, any()}.
|
||||||
forward_unicast_by_ets(NetworkId, Sock, SrcMac, DstMac, Packet) ->
|
forward_unicast_by_ets(NetworkId, Sock, SrcMac, DstMac, Packet) ->
|
||||||
PacketBytes = byte_size(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}}} ->
|
#endpoint{hole = #hole{peer = Peer = {NatIp, NatPort}}} ->
|
||||||
case limiting_check(throttle_key(NetworkId)) of
|
case limiting_check(throttle_key(NetworkId)) of
|
||||||
pass ->
|
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",
|
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)]),
|
[NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]),
|
||||||
{error, dst_not_found}
|
{error, dst_not_found}
|
||||||
|
end;
|
||||||
|
error ->
|
||||||
|
{error, table_not_found}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec forward_broadcast_by_ets(NetworkId :: integer(), Sock :: any(), SrcMac :: binary(), DstMac :: binary(), Packet :: binary()) ->
|
-spec forward_broadcast_by_ets(NetworkId :: integer(), Sock :: any(), SrcMac :: binary(), DstMac :: binary(), Packet :: binary()) ->
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user