clufn has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/40255?usp=email )


Change subject: Add required conversions for IPv6 support
......................................................................

Add required conversions for IPv6 support

Change-Id: I2426e0dcee3ca92075b845f6b21a175a3d047c08
---
M src/conv.erl
1 file changed, 45 insertions(+), 17 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg 
refs/changes/55/40255/1

diff --git a/src/conv.erl b/src/conv.erl
index d45c41d..0be6877 100644
--- a/src/conv.erl
+++ b/src/conv.erl
@@ -39,10 +39,14 @@
 -include_lib("conv.hrl").

 -export([ip_to_bin/1, bin_to_ip/1]).
+-export([remove_prefix/1]).
+-export([add_prefix/1]).
+-export([get_6_from_bin/1]).
 -export([cause_gtp2gsup/1]).
 -export([dia_rc_success/1, dia_rc_to_gsup_cause/1]).
 -export([gtp2_paa_to_epdg_eua/1, epdg_eua_to_gsup_pdp_address/1]).
 -export([nai_to_imsi/1]).
+-export([get_v4v6/2]).

 % ergw_aaa/src/ergw_aaa_3gpp_dict.erl
 % under GPLv2+
@@ -62,6 +66,23 @@
     bin_to_ip({_, _, _, _, _, _, _, _} = IP) ->
         IP.

+remove_prefix(<<A:8, Rest/binary>>) when is_binary(Rest) ->
+       Rest.
+
+add_prefix(<<A:8, B:8, C:8, D:8, E:8, F:8, G:8, H:8, I:8, J:8, K:8, L:8, M:8, 
N:8, O:8, P:8>>) ->
+        <<8, A:8, B:8, C:8, D:8, E:8, F:8, G:8, H:8, I:8, J:8, K:8, L:8, M:8, 
N:8, O:8, P:8>>.
+
+get_6_from_bin(<<A:8, B:8, C:8, D:8, E:8, F:8, G:8, H:8, I:8, J:8, K:8, L:8, 
M:8, N:8, O:8, P:8>>) ->
+        {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P}.
+
+get_v4v6(<<A:8, B:8, C:8, D:8, E:8, F:8, G:8, H:8, I:8, J:8, K:8, L:8, M:8, 
N:8, O:8, P:8>> , <<Q:8, R:8, S:8, T:8>>) ->
+        <<8, A:8, B:8, C:8, D:8, E:8, F:8, G:8, H:8, I:8, J:8, K:8, L:8, M:8, 
N:8, O:8, P:8, Q:8, R:8, S:8, T:8>>.
+
+get_4_from_v4v6(<<A:136, Rest/binary>>) when is_binary(Rest) ->
+       Rest.
+get_6_from_v4v6(<<A:8, B:8, C:8, D:8, E:8, F:8, G:8, H:8, I:8, J:8, K:8, L:8, 
M:8, N:8, O:8, P:8, Q:8, Rest/binary>>)  ->
+       <<B:8, C:8, D:8, E:8, F:8, G:8, H:8, I:8, J:8, K:8, L:8, M:8, N:8, O:8, 
P:8, Q:8>>.
+
 -spec cause_gtp2gsup(integer()) -> integer().

 cause_gtp2gsup(?GTP2_CAUSE_REQUEST_ACCEPTED) -> 0;
@@ -79,18 +100,18 @@

 -define(DIA_VENDOR_3GPP, 10415).
 % transient (only in Experimental-Result-Code)
--define(DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE,      4181).
--define(DIAMETER_ERROR_CAMEL_SUBSCRIPTION_PRESENT,     4182).
+-define(DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE,       4181).
+-define(DIAMETER_ERROR_CAMEL_SUBSCRIPTION_PRESENT,      4182).
 % permanent (only in Experimental-Result-Code)
--define(DIAMETER_ERROR_USER_UNKNOWN,                   5001).
--define(DIAMETER_AUTHORIZATION_REJECTED,               5003).
--define(DIAMETER_ERROR_ROAMING_NOT_ALLOWED,            5004).
--define(DIAMETER_MISSING_AVP,                          5005).
--define(DIAMETER_UNABLE_TO_COMPLY,                     5012).
--define(DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION,       5420).
--define(DIAMETER_ERROR_RAT_NOT_ALLOWED,                        5421).
--define(DIAMETER_ERROR_EQUIPMENT_UNKNOWN,              5422).
--define(DIAMETER_ERROR_UNKOWN_SERVING_NODE,            5423).
+-define(DIAMETER_ERROR_USER_UNKNOWN,                    5001).
+-define(DIAMETER_AUTHORIZATION_REJECTED,                5003).
+-define(DIAMETER_ERROR_ROAMING_NOT_ALLOWED,             5004).
+-define(DIAMETER_MISSING_AVP,                           5005).
+-define(DIAMETER_UNABLE_TO_COMPLY,                      5012).
+-define(DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION,        5420).
+-define(DIAMETER_ERROR_RAT_NOT_ALLOWED,                 5421).
+-define(DIAMETER_ERROR_EQUIPMENT_UNKNOWN,               5422).
+-define(DIAMETER_ERROR_UNKOWN_SERVING_NODE,             5423).

 dia_rc_success(#epdg_dia_rc{result_code = 2001}) -> ok;
 dia_rc_success(#epdg_dia_rc{result_code = 2002}) -> ok;
@@ -112,19 +133,26 @@
                   ipv4 = Addr};
 gtp2_paa_to_epdg_eua(#v2_pdn_address_allocation{type = ipv6, address = Addr}) 
->
         #epdg_eua{type_nr = ?GTP_PDP_ADDR_TYPE_NR_IPv6,
-                  ipv6 = Addr}.
-%TODO: IPv4v6
+                  ipv6 = remove_prefix(Addr)};
+gtp2_paa_to_epdg_eua(#v2_pdn_address_allocation{type = ipv4v6, address = 
Addr}) ->
+        #epdg_eua{type_nr = ?GTP_PDP_ADDR_TYPE_NR_IPv4v6,
+                  ipv4 = get_4_from_v4v6(Addr),
+                  ipv6 = get_6_from_v4v6(Addr)}.

 epdg_eua_to_gsup_pdp_address(#epdg_eua{type_nr = ?GTP_PDP_ADDR_TYPE_NR_IPv4, 
ipv4 = Addr}) ->
         #{pdp_type_org => 1,
-         pdp_type_nr => ?GTP_PDP_ADDR_TYPE_NR_IPv4,
-         address => #{ ipv4 => Addr}};
+          pdp_type_nr => ?GTP_PDP_ADDR_TYPE_NR_IPv4,
+          address => #{ ipv4 => Addr}};

 epdg_eua_to_gsup_pdp_address(#epdg_eua{type_nr = ?GTP_PDP_ADDR_TYPE_NR_IPv6, 
ipv6 = Addr}) ->
 #{pdp_type_org => 1,
         pdp_type_nr => ?GTP_PDP_ADDR_TYPE_NR_IPv6,
-        address => #{ ipv6 => Addr}}.
-%TODO: IPv4v6
+        address => #{ ipv6 => Addr}};
+
+epdg_eua_to_gsup_pdp_address(#epdg_eua{type_nr = ?GTP_PDP_ADDR_TYPE_NR_IPv4v6, 
ipv4 = Addr4, ipv6 = Addr6}) ->
+#{pdp_type_org => 1,
+        pdp_type_nr => ?GTP_PDP_ADDR_TYPE_NR_IPv4v6,
+        address => #{ ipv4 => Addr, ipv6 => Addr6}}.

 % 3GPP TS 23.003 clause 19
 % Input: "<IMSI>@nai.epc.mnc<MNC>.mcc<MCC>.3gppnetwork.org"

--
To view, visit https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/40255?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: erlang/osmo-epdg
Gerrit-Branch: master
Gerrit-Change-Id: I2426e0dcee3ca92075b845f6b21a175a3d047c08
Gerrit-Change-Number: 40255
Gerrit-PatchSet: 1
Gerrit-Owner: clufn <callumfarrbenn...@yahoo.com>

Reply via email to