geteduroam/ionic-app

HS20 support

Closed this issue · 5 comments

The eap-config files generated by CAT and geteduroam contain the following:

<CredentialApplicability>
	<IEEE80211>
		<SSID>eduroam</SSID>
		<MinRSNProto>CCMP</MinRSNProto>
	</IEEE80211>
</CredentialApplicability>
<CredentialApplicability>
	<IEEE80211>
		<ConsortiumOID>001bc50460</ConsortiumOID>
	</IEEE80211>
</CredentialApplicability>

This indicates that the network should be configured on SSID eduroam, but also HS20 ConsortiumOID 001bc50460.

On platforms where this is supported, the app should configure both SSID and HS20. HS20 is sometimes also called Passpoint.

Clarifications after a question from @agomezmoron on Slack:

The domain is optional in HS20, but iOS and Android require it to be set. Set it to the value of the ID attribute in EAPIdentityProvider. So <EAPIdentityProvider ID="edu.nl" namespace="urn:RFC4282:realm" lang="nb" version="1"> gives domain edu.nl.

The display name is a harder problem, and I don't have a good solution. Use DisplayName in ProviderInfo for now, I'll ask around if we should add a tag for this.

Hi @jornane, to ensure we are in the same page:

  • FQDN: correct, use EAPIdentityProvider
  • providerFriendlyName: correct, use DisplayName - I noticed that profiles may lack a profile name, so please add some default value, maybe geteduroam configured HS20
  • roamingconsortiumIDs: This is actually the most important thing to configure. The value is always a HEX string, so maybe you can convert it to a long? The standard value of 001bc50460 should become 465896544 for big endian, try with this Java code: return Long.decode("0x001bc50460")

Adding also the message from Slack: The existence of a IEEE80211 with ConsortiumOID indicates that HS20 support is available

Thanks @jornane for the info :)

The support for AndroidQ is not yet available:

The documentation says for Passpoint: https://developer.android.com/reference/android/net/wifi/WifiNetworkSuggestion.Builder#setPasspointConfig(android.net.wifi.hotspot2.PasspointConfiguration) (that it's in the API Level 30, Android Q is 29 or higher).
On the other side, if we go to the source code that Google has published in the master branch...https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/wifi/java/android/net/wifi/WifiNetworkSuggestion.java that class doesn't have yet that method (but the class to configure Passpoint exists https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java)

So, by now, it's not feasible (Android has released the api level 29, not the 30 yet) https://developer.android.com/studio/releases/platforms

We will leave "//TODO" block to cover that in the future (as soon as the API 30 is released and we will be able to see the source code and how it's handled to create a proper object for Passpoint).