Skip to content

Commit

Permalink
Merge pull request #11 from thdot/typos
Browse files Browse the repository at this point in the history
Fix some minor typos in Readme and code
  • Loading branch information
hajoha authored Jun 3, 2024
2 parents 02171fc + eedebe4 commit b702a43
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 29 deletions.
40 changes: 20 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,34 @@ The main objective of OMNT is the collection of measurement data on the mobile n
On top of those passive measurements on the radio environment and network parameters, OMNT can also run a iPerf3 server / client for bandwidth, latency and jitter evaluation as well as
round-trip-time and jitter evaluation via ICMP (Ping). Measurement data can be stored locally and / or send to an InfluxDB 2.x server.
Measurement results can be visualized e.g. via provided Graphana Dashboards or be further processed e.g. with python.
Besides its measurement capabilities OMNT provides a deep insight in the state of the phone e.g. software versions, connectivity states, SIM card content and much more.
Besides its measurement capabilities, OMNT provides a deep insight in the state of the phone e.g. software versions, connectivity states, SIM card content and much more.
Network related Carrier Settings can be configured (if the app is granted the corresponding privileges).
Also OMNT provides access to different "secret" settings in Android phones.
Also, OMNT provides access to different "secret" settings in Android phones.

The current state of the app can be described as "research software", it fits our needs but does not aim to be complete or bug free.
Use the app at your own risk. If you find it useful for your research please cite the app in publications.
Use the app at your own risk. If you find it useful for your research, please cite the app in publications.

## Why use this app

* As apps like OMNT can can access a lot of private information it is important for users to be able to make sure that those data is not
* As apps like OMNT can can access a lot of private information. It is important for users to be able to make sure that those data is not
send somewhere else.
* The app builds on top of official APIs so it should be stable across devices and android version.
* The app builds on top of official APIs, so it should be stable across devices and android version.
* The app does not need root privileges and can run on unmodified phones.
* The app is developed with researches in mind an provides multiple options to export the data in a way that it can be further analyzed.
* The app is developed with researches in mind and provides multiple options to export the data in a way that it can be further analyzed.
* No advertisements or other annoying anti-features

## Motivation

Our motivation to start the development of OMNT was to the need to modify carrier settings on Android UEs to integrated them
with our testbeds. Later on we where in need to provide measurements on our testbed deployments for which we had no satisfying tooling
Our motivation to start the development of OMNT was the need to modify carrier settings on Android UEs to integrated them
with our testbeds. Later on, we needed to provide measurements on our testbed deployments for which we had no satisfying tooling
at that point in time.
Since at least a year we used OMNT to collect measurement for research projects and extended the app with different functions we needed in the projects.
Since at least a year, we used OMNT to collect measurement for research projects and extended the app with different functions we needed in the projects.

## Permissions

Android provides a strict permission system to access APIs e.g. for information that make a phone identifiable or its location known to an app.
Also there are APIs meant for carrier to set network specific settings to ensure compatibility with the network.
Depending an the phone vendor and the android version the required permission differ as well as if the user is able to allow an app to gain
Also, there are APIs meant for carrier to set network specific settings to ensure compatibility with the network.
Depending on the phone vendor and the android version, the required permission differ as well as if the user is able to allow an app to gain
specific privileges.

The following permissions are requested:
Expand All @@ -44,10 +44,10 @@ The following permissions are requested:
* Foreground Service: Logging
* Carrier Permission: Use Carrier APIs

If the app can't gain Carrier Privileges some values can't be accessed and some feature are disabled. See below.
If the app can't gain Carrier Privileges, some values can't be accessed and some features are disabled. See below.

### Carrier Permissions
Carrier specific settings can only be accessed by apps running with so called carrier privileges. This was added in android 6 and is mostly relevant
Carrier specific settings can only be accessed by apps running with so-called carrier privileges. This was added in android 6 and is mostly relevant
for 4G and 5G networks. (https://source.android.com/devices/tech/config/carrier)

Carrier or researcher who are able (admin key to the SIM card is required) to program their own sim cards can store a fingerprint of an signing certificate in an access rule applet (ARA-M) on the SIM card.
Expand All @@ -58,7 +58,7 @@ Some SIM cards like the cards from [Sysmocom](http://shop.sysmocom.de/products/s
To install the applet to a SIM card [GlobalPlatformPro by Martin Paljak](https://github.com/martinpaljak/GlobalPlatformPro) can be used.
Pre-compiled versions of ARA-M and GP can be found in the [CoIMS_Wiki repository by Supreeth Herle](https://github.com/herlesupreeth/CoIMS_Wiki).

To provision the fingerprint to the applet either (pySim)[https://github.com/osmocom/pysim] or GP can be used.
To provision the fingerprint to the applet, either (pySim)[https://github.com/osmocom/pysim] or GP can be used.

With pySim it can be done by entering the following commands into pySim-shell:

Expand All @@ -69,7 +69,7 @@ or if you have a csv file with ICCID and admin pin:
python3 pySim-shell.py -p0 --csv card_data.csv
```

Provision the fingerprint. Note that instead of an fingerprint also an valid android App ID can be used.
Provision the fingerprint. Note that instead of a fingerprint also a valid android App ID can be used.
If you have a SIM Card with the ARA-M applet from sysmocom you can skip the 'verify_adm' part as the applet is not write protected.
```shell
verify_adm
Expand All @@ -82,7 +82,7 @@ aram_store_ref_ar_do --aid ffffffffffff --device-app-id E849B63A7B96E571F788FC58
### Signing the app
This can be done with android studio.
To generated i signed apk:
To generated a signed apk:
```
Go to 'build' -> 'Generate signed Bundle/APK'
You will be ask to generate a new key or import an existing one.
Expand All @@ -96,22 +96,22 @@ Select the 'app', select the 'Signing config' tab.
create a new signing config referencing you key file
```
You can also manual re-sign the downloaded .apk file with apksigner https://developer.android.com/tools/apksigner .
You can also manually re-sign the downloaded .apk file using apksigner https://developer.android.com/tools/apksigner .
```shell
apksigner sign --ks my.keystore OpenMobileNetworkToolkit.apk
```
where my.keystore is your java keystore.
## SPDX-SBOM
The SPDX formated Software Bill Of Material is a machine readable list of all software components used in the app.
To generated a new file run
The SPDX formatted Software Bill Of Material is a machine readable list of all software components used in the app.
To generate a new file run
```shell
./gradlew app:spdxSbomForRelease
```
## iPerf3
iPerf3 has been compiled with a [jni](https://developer.android.com/training/articles/perf-jni) interface to enable OMNT to call it using the specified parameters.
To see how to integrate iPerf3 into your app look at [iPerf3 Repo](https://github.com/omnt/iperf)
To see how to integrate iPerf3 into your app, look at [iPerf3 Repo](https://github.com/omnt/iperf)
![iPerf3](screenshots/iperf3.png)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ public List<Point> getNetworkInterfaceInformationPoints() {
// ### Cell Information ###

/**
* Callback to receive current cell infomation
* Callback to receive current cell information
* @param list is the list of currently visible cells.
*/
@SuppressLint("ObsoleteSdkInt")
Expand Down Expand Up @@ -768,7 +768,7 @@ public Map<String, String> getTagsMap() {
try {
tags_map = Splitter.on(',').withKeyValueSeparator('=').split(tags);
} catch (IllegalArgumentException e) {
Log.d(TAG, "cant parse tags, ignoring");
Log.d(TAG, "can't parse tags, ignoring");
}
}
DeviceInformation di = getDeviceInformation();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public class NetworkCallback {
/**
* WIP: Implements different types of network related callbacks and provides access to network related APIs
* in a more safe manner.
* @param context Contect to be used by the NetworkCallback
* @param context Context to be used by the NetworkCallback
*/
public NetworkCallback(Context context) {
this.context = context;
Expand Down Expand Up @@ -771,7 +771,7 @@ public void onUnavailable() {
* WIP: Callback requester with parameters
* @param capability id
* @param transport_type id
* @return Boolen id capability is supported
* @return Boolean id capability is supported
*/
@SuppressLint("ObsoleteSdkInt")
public boolean customNetworkCallback(int capability, int transport_type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ public static String getAccessNetworkType(int acceesNetworkID) {
accessNetworkType = "NGRAN";
break;
case AccessNetworkConstants.AccessNetworkType.UNKNOWN:
accessNetworkType = "Unknow";
accessNetworkType = "Unknown";
break;
case AccessNetworkConstants.AccessNetworkType.UTRAN:
accessNetworkType = "UTRAN";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,7 @@ private CardView get_network_card_view() {
tl.addView(rowBuilder("Enterprise IDs", "N/A"));
}
}
// The follwing functions do not return useful information jet
// The following functions do not return useful information jet
//tl.addView(rowBuilder("TM Slice", String.valueOf(nc.getConfigurationTM())));
//tl.addView(rowBuilder("Slice Info", String.valueOf(nc.getNetworkSlicingInfo())));
//tl.addView(rowBuilder("Slice Config", String.valueOf(nc.getNetworkSlicingConfig())));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ public boolean writePoint(Point point) throws IOException {
/**
* Write string records to the queue
* @param points String list of records
* @return not yet usefull
* @return not yet useful
* @throws IOException
*/
public boolean writeRecords(List<String> points) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ public Map<String, String> getTagsMap() {
try {
tags_map = Splitter.on(',').withKeyValueSeparator('=').split(tags);
} catch (IllegalArgumentException e) {
Log.d(TAG, "cant parse tags, ignoring");
Log.d(TAG, "can't parse tags, ignoring");
}
}
Map<String, String> tags_map_modifiable = new HashMap<>(tags_map);
Expand Down Expand Up @@ -180,7 +180,7 @@ public Result doWork() {
point.addTag("oneOff", String.valueOf(oneOff));
point.addTag("connectingToHost", iperf3AsJson.start.connectingTo.host);
point.addTag("connectingToPort", String.valueOf(iperf3AsJson.start.connectingTo.port));
point.addTag("bandwith", bandwidth);
point.addTag("bandwidth", bandwidth);
point.addTag("duration", duration);
point.addTag("bytesToTransmit", bytes);
point.addTag("streams", String.valueOf(interval.streams.size()));
Expand Down

0 comments on commit b702a43

Please sign in to comment.