update tx normal tcp to new binary format
TODO1: update all into a similar one TODO2: change cpu parser from 2 to any cores
This commit is contained in:
parent
80ae61306d
commit
12a7bc8c72
|
|
@ -82,7 +82,11 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.1/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/mediarouter-v7/22.2.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.0.1/jars" />
|
||||
|
|
@ -109,11 +113,23 @@
|
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services-wearable/7.8.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services/7.8.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
|
|
|
|||
|
|
@ -30,8 +30,11 @@ import java.util.Date;
|
|||
|
||||
public class MainActivity extends Activity {
|
||||
// unchanged stuff
|
||||
protected static final String sshlinklab = "ssh linklab@hotcrp.cs.ucsb.edu -i /data/.ssh/id_rsa -o StrictHostKeyChecking=no";
|
||||
protected static final String sshlinklablocal = "ssh linklab@128.111.68.220 -i /data/.ssh/id_rsa -o StrictHostKeyChecking=no";
|
||||
protected static final String remoteIP = "128.111.68.220";
|
||||
protected static final String sshlinklab = "ssh linklab@hotcrp.cs.ucsb.edu"
|
||||
+ " -i /data/.ssh/id_rsa -o StrictHostKeyChecking=no";
|
||||
protected static final String sshlinklablocal = "ssh linklab@" + remoteIP
|
||||
+ " -i /data/.ssh/id_rsa -o StrictHostKeyChecking=no";
|
||||
protected static final String udpserver_pathport = "~/mobileRDMABeach/UDPServer 32000 ";
|
||||
protected static final String binaryFolderPath = "/data/local/tmp/";
|
||||
protected static final String binary_tcpdump = "tcpdump";
|
||||
|
|
@ -62,24 +65,25 @@ public class MainActivity extends Activity {
|
|||
protected static double reportedFinishTime = 0.0;
|
||||
protected static int repeatCounts = 3;
|
||||
protected static int bytes2send = 10*oneMB; // default 10MB
|
||||
protected static int currentBandwidth = 20000000; // bytes per sec, default unlimited (not for loopback)
|
||||
protected static int currentBandwidth = -1; // bps, default is -1, indicating unlimited
|
||||
protected static TextView txt_results;
|
||||
protected static Handler myHandler;
|
||||
protected static String RXportNum = "4445";
|
||||
protected static String myInetIP = "";
|
||||
protected static String RXportNum = "4444";
|
||||
protected static String outFolderPath;
|
||||
protected static String btn_click_time;
|
||||
protected static String tcpdumpInterface = "wlan0";
|
||||
protected static String binary_TX_Normal = "normal";
|
||||
protected static String binary_TX_NormalUDP = "normal_udp";
|
||||
protected static String binary_TX_Sendfile = "sendfile";
|
||||
protected static String binary_TX_Splice = "splice";
|
||||
protected static String binary_TX_RawNormal = "bypassl3";
|
||||
protected static String binary_TX_Normal;
|
||||
protected static String binary_TX_NormalUDP;
|
||||
protected static String binary_TX_Sendfile;
|
||||
protected static String binary_TX_Splice;
|
||||
protected static String binary_TX_RawNormal;
|
||||
protected static final String binary_TX_RawSplice = "";
|
||||
protected static String binary_RX_Normal = "normal_recv";
|
||||
protected static String binary_RX_NormalUDP = "normal_udp_recv";
|
||||
protected static String binary_RX_Normal;
|
||||
protected static String binary_RX_NormalUDP;
|
||||
protected static final String binary_RX_Sendfile = "";
|
||||
protected static String binary_RX_Splice = "splice_recv";
|
||||
protected static String binary_RX_RawNormal = "bypassl3_recv";
|
||||
protected static String binary_RX_Splice;
|
||||
protected static String binary_RX_RawNormal;
|
||||
protected static boolean isUsingWifi = true;
|
||||
protected static boolean isRunning_TX_Normal = false;
|
||||
protected static boolean isRunning_TX_NormalUDP = false;
|
||||
|
|
@ -99,7 +103,8 @@ public class MainActivity extends Activity {
|
|||
*/
|
||||
protected boolean isServiceRunning(Class<?> serviceClass) {
|
||||
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
|
||||
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
|
||||
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(
|
||||
Integer.MAX_VALUE)) {
|
||||
if (serviceClass.getName().equals(service.service.getClassName())) {
|
||||
return true;
|
||||
}
|
||||
|
|
@ -119,45 +124,61 @@ public class MainActivity extends Activity {
|
|||
}
|
||||
}
|
||||
|
||||
private void killAllBinaries() {
|
||||
try {
|
||||
Runtime.getRuntime().exec("su -c killall -9 " + binary_TX_Normal).waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 " + binary_TX_NormalUDP).waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 " + binary_TX_Sendfile).waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 " + binary_TX_Splice).waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 " + binary_TX_RawNormal).waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 " + binary_RX_Normal).waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 " + binary_RX_NormalUDP).waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 " + binary_RX_Splice).waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 " + binary_RX_RawNormal).waitFor();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkBinaryFilesExist() {
|
||||
String missingFiles = "";
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_tcpdump))
|
||||
missingFiles += binary_tcpdump;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_TX_Normal))
|
||||
missingFiles += " " + binary_TX_Normal;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_TX_Normal + "_lo"))
|
||||
missingFiles += " " + binary_TX_Normal + "_lo";
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_TX_NormalUDP))
|
||||
missingFiles += " " + binary_TX_NormalUDP;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_TX_NormalUDP + "_lo"))
|
||||
missingFiles += " " + binary_TX_NormalUDP + "_lo";
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_TX_Sendfile))
|
||||
missingFiles += " " + binary_TX_Sendfile;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_TX_Sendfile + "_lo"))
|
||||
missingFiles += " " + binary_TX_Sendfile + "_lo";
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_TX_Splice))
|
||||
missingFiles += " " + binary_TX_Splice;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_TX_RawNormal))
|
||||
missingFiles += " " + binary_TX_RawNormal;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_TX_RawNormal + "_lo"))
|
||||
missingFiles += " " + binary_TX_RawNormal + "_lo";
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_RX_Normal))
|
||||
missingFiles += " " + binary_RX_Normal;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_RX_Normal + "_lo"))
|
||||
missingFiles += " " + binary_RX_Normal + "_lo";
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_RX_NormalUDP))
|
||||
missingFiles += " " + binary_RX_NormalUDP;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_RX_NormalUDP + "_lo"))
|
||||
missingFiles += " " + binary_RX_NormalUDP + "_lo";
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_RX_Splice))
|
||||
missingFiles += " " + binary_RX_Splice;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_RX_Splice + "_lo"))
|
||||
missingFiles += " " + binary_RX_Splice + "_lo";
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_RX_RawNormal))
|
||||
missingFiles += " " + binary_RX_RawNormal;
|
||||
if (!Utilities.fileExist(binaryFolderPath + binary_RX_RawNormal + "_lo"))
|
||||
missingFiles += " " + binary_RX_RawNormal + "_lo";
|
||||
|
||||
if (!Utilities.fileExist(binaryFolderPath + "bigfile")) {
|
||||
try {
|
||||
Runtime.getRuntime().exec(
|
||||
"dd if=/dev/zero of="
|
||||
+ binaryFolderPath + "bigfile"
|
||||
+ " count=1 bs=1 seek=$((2 * 1024 * 1024 * 1024 - 1))").waitFor();
|
||||
Runtime.getRuntime().exec(
|
||||
"chmod 755 " + binaryFolderPath + "bigfile");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Toast.makeText(this, "Created a 2Gbits big file", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
if (!missingFiles.equals("")) {
|
||||
final String mFiles = missingFiles;
|
||||
myHandler.post(new Runnable() {
|
||||
|
|
@ -183,6 +204,7 @@ public class MainActivity extends Activity {
|
|||
protected void startRecording(boolean myflag) {
|
||||
final boolean flagRecv = myflag;
|
||||
final ArrayList<Integer> selectedItems = new ArrayList<>();
|
||||
|
||||
AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this);
|
||||
adb.setMultiChoiceItems(existedItems, null, new DialogInterface.OnMultiChoiceClickListener() {
|
||||
@Override
|
||||
|
|
@ -198,12 +220,14 @@ public class MainActivity extends Activity {
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
adb.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
|
||||
// Process su = null;
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
if (selectedItems.size() < 1) {
|
||||
Toast.makeText(MainActivity.this, "Nothing is selected", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(MainActivity.this, "Nothing is selected", Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
return;
|
||||
}
|
||||
final ArrayList<Integer> selectedItemsThrpt = new ArrayList<>();
|
||||
|
|
@ -222,18 +246,21 @@ public class MainActivity extends Activity {
|
|||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
if (selectedItemsThrpt.size() < 1) {
|
||||
Toast.makeText(MainActivity.this, "Nothing is selected", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(
|
||||
MainActivity.this, "Nothing is selected", Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
return;
|
||||
}
|
||||
if (isVerbose) {
|
||||
Log.d(TAG, "selected variations " + selectedItemsThrpt);
|
||||
}
|
||||
Utilities.estimateTime(repeatCounts, selectedItems.size(), bytes2send, selectedItemsThrpt);
|
||||
Utilities.estimateTime(
|
||||
repeatCounts, selectedItems.size(), bytes2send, selectedItemsThrpt);
|
||||
|
||||
// power management
|
||||
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
|
||||
final PowerManager.WakeLock wakelock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
|
||||
"MyWakelockTag");
|
||||
final PowerManager.WakeLock wakelock = powerManager.newWakeLock(
|
||||
PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
|
|
@ -241,14 +268,16 @@ public class MainActivity extends Activity {
|
|||
String[] commd = new String[3];
|
||||
commd[0] = "su";
|
||||
commd[1] = "&&";
|
||||
// wakelock.acquire();
|
||||
wakelock.acquire();
|
||||
// change screen brightness to 0
|
||||
// Settings.System.putInt(MainActivity.this.getContentResolver(),
|
||||
// Settings.System.SCREEN_BRIGHTNESS, 0);
|
||||
// final WindowManager.LayoutParams lp = getWindow().getAttributes();
|
||||
// lp.screenBrightness = 0.0f;// 100 / 100.0f;
|
||||
final WindowManager.LayoutParams lp = getWindow().getAttributes();
|
||||
lp.screenBrightness = 0.0f;// 100 / 100.0f;
|
||||
try {
|
||||
Runtime.getRuntime().exec("su -c echo 0 > /sys/class/lcd/panel/lcd_power").waitFor();
|
||||
Runtime.getRuntime().exec(
|
||||
"su -c echo 0 > /sys/class/lcd/panel/lcd_power")
|
||||
.waitFor();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
|
|
@ -263,41 +292,28 @@ public class MainActivity extends Activity {
|
|||
});
|
||||
// prepare
|
||||
try {
|
||||
Runtime.getRuntime().exec("su -c killall -9 normal").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 normal_lo").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 normal_udp").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 normal_udp_lo").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 sendfile").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 sendfile_lo").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 splice").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 splice_lo").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 bypassl3").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 bypassl3_lo").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 normal_recv").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 normal_recv_lo").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 normal_udp_recv").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 normal_udp_recv_lo").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 splice_recv").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 splice_recv_lo").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 bypassl3_recv").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 bypassl3_recv_lo").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 tcpdump").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 TCPReceiver_mobile").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 TCPSender_mobile").waitFor();
|
||||
Runtime.getRuntime().exec("su -c killall -9 UDPServer_mobile").waitFor();
|
||||
if (isLocal) {
|
||||
if (flagRecv)
|
||||
Runtime.getRuntime().exec("su && /data/local/tmp/Run_for_Download.sh").waitFor();
|
||||
else
|
||||
Runtime.getRuntime().exec("su && /data/local/tmp/Run_for_Upload.sh").waitFor();
|
||||
} else {
|
||||
myHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MainActivity.txt_results.append("In case you forget, remember to run " + ((flagRecv) ? "Run_for_Download.sh" : "Run_for_Upload.sh") + "\n");
|
||||
}
|
||||
});
|
||||
}
|
||||
killAllBinaries();
|
||||
Runtime.getRuntime().exec(
|
||||
"su -c killall -9 " + binary_tcpdump).waitFor();
|
||||
Runtime.getRuntime().exec(
|
||||
"su -c killall -9 TCPReceiver_mobile").waitFor();
|
||||
Runtime.getRuntime().exec(
|
||||
"su -c killall -9 TCPSender_mobile").waitFor();
|
||||
Runtime.getRuntime().exec(
|
||||
"su -c killall -9 UDPServer_mobile").waitFor();
|
||||
// if (isLocal) {
|
||||
// if (flagRecv)
|
||||
// Runtime.getRuntime().exec("su && /data/local/tmp/Run_for_Download.sh").waitFor();
|
||||
// else
|
||||
// Runtime.getRuntime().exec("su && /data/local/tmp/Run_for_Upload.sh").waitFor();
|
||||
// } else {
|
||||
// myHandler.post(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// MainActivity.txt_results.append("In case you forget, remember to run " + ((flagRecv) ? "Run_for_Download.sh" : "Run_for_Upload.sh") + "\n");
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
|
|
@ -307,7 +323,7 @@ public class MainActivity extends Activity {
|
|||
for (int k = 0; k < selectedItemsThrpt.size(); ++k) {
|
||||
int myI = selectedItemsThrpt.get(k);
|
||||
currentBandwidth = Utilities.findCorrespondingThrpt(myI);
|
||||
RXportNum = Integer.toString(4445 - myI + 24);
|
||||
// RXportNum = Integer.toString(4445 - myI + 24);
|
||||
if (isVerbose) {
|
||||
Log.d(TAG, "bandwidth is set to " + currentBandwidth
|
||||
+ "\nRXportNum is set to " + RXportNum);
|
||||
|
|
@ -319,7 +335,8 @@ public class MainActivity extends Activity {
|
|||
Runtime.getRuntime().exec(commd).waitFor();
|
||||
commd[2] = "mkdir -p";
|
||||
for (int i = 0; i < selectedItems.size(); ++i) {
|
||||
commd[2] += " " + outFolderPath + "/" + existedItems[selectedItems.get(i)];
|
||||
commd[2] += " " + outFolderPath + "/"
|
||||
+ existedItems[selectedItems.get(i)];
|
||||
}
|
||||
Runtime.getRuntime().exec(commd).waitFor();
|
||||
Thread.sleep(1000);
|
||||
|
|
@ -460,19 +477,25 @@ public class MainActivity extends Activity {
|
|||
}
|
||||
// parse and zip it
|
||||
for (int i = 0; i < selectedItems.size(); ++i) {
|
||||
if (Utilities.parseCPUforFolder((String) existedItems[selectedItems.get(i)])) {
|
||||
String tarName = ((flagRecv) ? "download_" : "upload_")
|
||||
if (Utilities.parseCPUforFolder(
|
||||
(String) existedItems[selectedItems.get(i)])) {
|
||||
String tarName = (
|
||||
(flagRecv) ? "download_" : "upload_")
|
||||
+ existedItems[selectedItems.get(i)] + "_"
|
||||
+ (bytes2send / 1024) + "KB_" + repeatCounts + "repeats_thrpt_"
|
||||
+ (bytes2send / 1024) + "KB_"
|
||||
+ repeatCounts + "repeats_thrpt_"
|
||||
+ (currentBandwidth / 1000000.0) + "MBps_"
|
||||
+ new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
|
||||
+ new SimpleDateFormat("yyyyMMdd_HHmmss")
|
||||
.format(new Date())
|
||||
+ ".tar.gz";
|
||||
commd[2] = "cd " + outFolderPath + "/"
|
||||
+ existedItems[selectedItems.get(i)]
|
||||
+ " && busybox tar -czf ../" + tarName + " *";
|
||||
+ " && busybox tar -czf ../"
|
||||
+ tarName + " *";
|
||||
Runtime.getRuntime().exec(commd).waitFor();
|
||||
} else {
|
||||
final CharSequence failedFolderName = existedItems[selectedItems.get(i)];
|
||||
final CharSequence failedFolderName =
|
||||
existedItems[selectedItems.get(i)];
|
||||
myHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
|
@ -489,23 +512,26 @@ public class MainActivity extends Activity {
|
|||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
// wakelock.release();
|
||||
// change screen brightness back
|
||||
wakelock.release();
|
||||
// Settings.System.putInt(MainActivity.this.getContentResolver(),
|
||||
// Settings.System.SCREEN_BRIGHTNESS, 200);
|
||||
// lp.screenBrightness = 50;// 50 / 100.0f;
|
||||
lp.screenBrightness = 50;// 50 / 100.0f;
|
||||
try {
|
||||
Runtime.getRuntime().exec("su -c echo 1 > /sys/class/lcd/panel/lcd_power").waitFor();
|
||||
Runtime.getRuntime().exec(
|
||||
"su -c echo 1 > /sys/class/lcd/panel/lcd_power")
|
||||
.waitFor();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
// msg indicating all done
|
||||
myHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
txt_results.append("All Done\n");
|
||||
// getWindow().setAttributes(lp);
|
||||
getWindow().setAttributes(lp);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -527,13 +553,26 @@ public class MainActivity extends Activity {
|
|||
// must have root privilege in order to run
|
||||
try {
|
||||
Runtime.getRuntime().exec("su");
|
||||
Toast.makeText(MainActivity.this, "Remember to silent SuperUser", Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
} catch (Throwable e) {
|
||||
Toast.makeText(this, R.string.warn_root, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
// must have storage permission
|
||||
Utilities.verifyStoragePermissions(this);
|
||||
// handler that updates the ui at main thread
|
||||
// it's used in sslogger thus will be modded in receiver activity also
|
||||
// do not modify this
|
||||
myHandler = new Handler();
|
||||
// sslogger intent
|
||||
intentSSLogger = new Intent(this, SSLogger.class);
|
||||
// grab WiFi service and check if wifi is enabled
|
||||
wm = (WifiManager) this.getSystemService(WIFI_SERVICE);
|
||||
isUsingWifi = (wm.isWifiEnabled()) ? true : false;
|
||||
if (isUsingWifi) {
|
||||
myInetIP = Utilities.getInetIP(true);
|
||||
}
|
||||
// predefined selections
|
||||
existedItems = new CharSequence[] {
|
||||
"Socket_Normal", "Socket_NormalUDP", "Socket_Sendfile",
|
||||
"Socket_Splice", "RawSocket_Normal"
|
||||
|
|
@ -548,22 +587,24 @@ public class MainActivity extends Activity {
|
|||
"95MB", "100MB", // 41-42
|
||||
"11MB", "13MB" // 43-44
|
||||
};
|
||||
intentSSLogger = new Intent(this, SSLogger.class);
|
||||
wm = (WifiManager) this.getSystemService(WIFI_SERVICE);
|
||||
// assignments
|
||||
binary_TX_Normal = "normal";
|
||||
binary_TX_NormalUDP = "normal_udp";
|
||||
binary_TX_Sendfile = "sendfile";
|
||||
binary_TX_RawNormal = "bypassl3";
|
||||
binary_TX_Splice = "splice";
|
||||
binary_RX_Normal = "normal_recv";
|
||||
binary_RX_NormalUDP = "normal_udp_recv";
|
||||
binary_RX_Splice = "splice_recv";
|
||||
binary_RX_RawNormal = "bypassl3_recv";
|
||||
// binary executables to run
|
||||
binary_TX_Normal = "client_send_normaltcp";
|
||||
binary_TX_NormalUDP = "client_send_normaludp";
|
||||
binary_TX_Sendfile = "client_send_normaltcp_sendfile";
|
||||
binary_TX_RawNormal = "client_send_bypassl3";
|
||||
binary_TX_Splice = "client_send_normaltcp_splice";
|
||||
binary_RX_Normal = "client_recv_normaltcp";
|
||||
binary_RX_NormalUDP = "client_recv_normaludp";
|
||||
binary_RX_Splice = "client_recv_normaltcp_splice";
|
||||
binary_RX_RawNormal = "client_recv_bypassl3";
|
||||
// get number of cores
|
||||
coreNum = Utilities.getNumCores();
|
||||
// output folder for SSLogger
|
||||
outFolderPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/SSLogger";
|
||||
isUsingWifi = (wm.isWifiEnabled())?true:false;
|
||||
// find view elements
|
||||
if (!Utilities.dirExist(outFolderPath, true)) {
|
||||
Toast.makeText(this, "Cannot create folder!!!", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
// elements in the page
|
||||
txt_results = (TextView) findViewById(R.id.txt_results);
|
||||
btn_startTransmit = (Button) findViewById(R.id.btn_startTransmit);
|
||||
btn_startReceive = (Button) findViewById(R.id.btn_startReceive);
|
||||
|
|
@ -574,8 +615,11 @@ public class MainActivity extends Activity {
|
|||
btn_setLogFreq = (Button) findViewById(R.id.btn_setLogFreq);
|
||||
btn_clearStatus = (Button) findViewById(R.id.btn_clearStatus);
|
||||
if (coreNum > 2) {
|
||||
txt_results.append("Only support 2 cores now! Contact Yanzi to add "+coreNum+" cores support!\n");
|
||||
txt_results.append(
|
||||
"Only support 2 cores now! Contact Yanzi to add "
|
||||
+ coreNum + " cores support!\n");
|
||||
}
|
||||
// TODO: remember to add more than 2 core support
|
||||
txt_results.append(isUsingWifi?getString(R.string.stat_wifion):getString(R.string.stat_wifioff));
|
||||
// click listener
|
||||
btn_startTransmit.setOnClickListener(new View.OnClickListener() {
|
||||
|
|
@ -701,7 +745,8 @@ public class MainActivity extends Activity {
|
|||
} else {
|
||||
tcpdumpInterface = ((String) mTmp[which]).replace("Current: ", "");
|
||||
isUsingTCPDump = true;
|
||||
Toast.makeText(MainActivity.this, "TCPDump interface is changed to " + tcpdumpInterface, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(MainActivity.this, "TCPDump interface is changed to "
|
||||
+ tcpdumpInterface, Toast.LENGTH_SHORT).show();
|
||||
if (isVerbose) {
|
||||
Log.d(TAG, "TCPDump interface is set to " + tcpdumpInterface);
|
||||
}
|
||||
|
|
@ -714,8 +759,13 @@ public class MainActivity extends Activity {
|
|||
btn_setOthers.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
CharSequence[] items = {"Verbose Mode", "Only Run Locally", "CPULog (Per Proc)", "CPULog (WiFi Driver)", "CPULog (This App)", "CPULog (TCPDump)", "Force on CPU0"};
|
||||
boolean[] checkedItems = {isVerbose, isLocal, isLoggingPerProcPID, (wifiDriverPID!=-1), isLoggingAppSelf, isLoggingTCPDump, isForcingCPU0};
|
||||
CharSequence[] items = {
|
||||
"Verbose Mode", "Only Run Locally", "CPULog (Per Proc)",
|
||||
"CPULog (WiFi Driver)", "CPULog (This App)", "CPULog (TCPDump)",
|
||||
"Force on CPU0"};
|
||||
boolean[] checkedItems = {
|
||||
isVerbose, isLocal, isLoggingPerProcPID, (wifiDriverPID!=-1),
|
||||
isLoggingAppSelf, isLoggingTCPDump, isForcingCPU0};
|
||||
AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this);
|
||||
adb.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
|
||||
@Override
|
||||
|
|
@ -723,48 +773,71 @@ public class MainActivity extends Activity {
|
|||
switch (which) {
|
||||
case 0:
|
||||
isVerbose = isChecked;
|
||||
Toast.makeText(MainActivity.this, "Set to be " + (isVerbose ? "verbose" : "NOT verbose"), Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(MainActivity.this, "Set to be " +
|
||||
(isVerbose ? "verbose" : "NOT verbose"),
|
||||
Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
case 1:
|
||||
isLocal = isChecked;
|
||||
binary_TX_Normal = isLocal ? "normal_lo" : "normal";
|
||||
binary_TX_NormalUDP = isLocal ? "normal_udp_lo" : "normal_udp";
|
||||
binary_TX_Sendfile = isLocal ? "sendfile_lo" : "sendfile";
|
||||
binary_TX_Splice = isLocal ? "splice_lo" : "splice";
|
||||
binary_TX_RawNormal = isLocal ? "bypassl3_lo" : "bypassl3";
|
||||
binary_RX_Normal = isLocal ? "normal_recv_lo" : "normal_recv";
|
||||
binary_RX_NormalUDP = isLocal ? "normal_udp_recv_lo" : "normal_udp_recv";
|
||||
binary_RX_Splice = isLocal ? "splice_recv_lo" : "splice_recv";
|
||||
binary_RX_RawNormal = isLocal ? "bypassl3_recv_lo" : "bypassl3_recv";
|
||||
// binary_TX_Normal = isLocal ? "normal_lo" : "normal";
|
||||
// binary_TX_NormalUDP = isLocal ? "normal_udp_lo" : "normal_udp";
|
||||
// binary_TX_Sendfile = isLocal ? "sendfile_lo" : "sendfile";
|
||||
// binary_TX_Splice = isLocal ? "splice_lo" : "splice";
|
||||
// binary_TX_RawNormal = isLocal ? "bypassl3_lo" : "bypassl3";
|
||||
// binary_RX_Normal = isLocal ? "normal_recv_lo" : "normal_recv";
|
||||
// binary_RX_NormalUDP =
|
||||
// isLocal ? "normal_udp_recv_lo" : "normal_udp_recv";
|
||||
// binary_RX_Splice = isLocal ? "splice_recv_lo" : "splice_recv";
|
||||
// binary_RX_RawNormal =
|
||||
// isLocal ? "bypassl3_recv_lo" : "bypassl3_recv";
|
||||
if (isLocal) {
|
||||
isUsingTCPDump = false;
|
||||
Toast.makeText(MainActivity.this, "Remember to set IP to 192.168.1.15\n" +
|
||||
"Will start TCPSdr/Rcvr locally\ntcpdump disabled", Toast.LENGTH_LONG).show();
|
||||
Toast.makeText(MainActivity.this,
|
||||
"Remember to set IP to 192.168.1.15\n"
|
||||
+ "Will start locally\n"
|
||||
+ "tcpdump disabled", Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
isUsingTCPDump = true;
|
||||
tcpdumpInterface = "wlan0";
|
||||
Toast.makeText(MainActivity.this, "Back to original\ntcpdump enabled to wlan0", Toast.LENGTH_LONG).show();
|
||||
Toast.makeText(MainActivity.this,
|
||||
"Back to original\ntcpdump enabled to wlan0",
|
||||
Toast.LENGTH_LONG).show();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
isLoggingPerProcPID = isChecked;
|
||||
Toast.makeText(MainActivity.this, isLoggingPerProcPID?"Will log per process cpu":"Will NOT log per process cpu", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(MainActivity.this,
|
||||
isLoggingPerProcPID ?
|
||||
"Will log cpu/process" : "cpu/process disabled",
|
||||
Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
case 3:
|
||||
wifiDriverPID = isChecked?Utilities.getMyPID("dhd_dpc", true):-1;
|
||||
Toast.makeText(MainActivity.this, (wifiDriverPID!=-1)?"Will log wifi driver cpu":"Will NOT log wifi driver cpu", Toast.LENGTH_SHORT).show();
|
||||
wifiDriverPID = isChecked ?
|
||||
Utilities.getMyPID("dhd_dpc", true) : -1;
|
||||
Toast.makeText(MainActivity.this,
|
||||
(wifiDriverPID != -1) ?
|
||||
"Will log wifi driver cpu" : "wifi driver cpu disabled",
|
||||
Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
case 4:
|
||||
isLoggingAppSelf = isChecked;
|
||||
Toast.makeText(MainActivity.this, isLoggingAppSelf?"Will log app itself cpu":"Will NOT log app itself cpu", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(MainActivity.this,
|
||||
isLoggingAppSelf ?
|
||||
"Will log app cpu" : "Will NOT log app cpu",
|
||||
Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
case 5:
|
||||
isLoggingTCPDump = isChecked;
|
||||
Toast.makeText(MainActivity.this, isLoggingTCPDump?"Will log tcpdump cpu":"Will NOT log tcpdump cpu", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(MainActivity.this,
|
||||
isLoggingTCPDump ?
|
||||
"Will log tcpdump cpu" : "Will NOT log tcpdump cpu",
|
||||
Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
case 6:
|
||||
isForcingCPU0 = isChecked;
|
||||
Toast.makeText(MainActivity.this, (isForcingCPU0?"Force running on cpu 0":"Will run on any cpu"), Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(MainActivity.this,
|
||||
(isForcingCPU0 ? "Force on cpu 0" : "Will run on any cpu"),
|
||||
Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -820,7 +893,8 @@ public class MainActivity extends Activity {
|
|||
myHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MainActivity.txt_results.append("time_wait_for is set to " + time_wait_for + "ms\n");
|
||||
MainActivity.txt_results.append(
|
||||
"time_wait_for is set to " + time_wait_for + "ms\n");
|
||||
}
|
||||
});
|
||||
Log.d(TAG, "time_wait_for is set to " + time_wait_for + "ms");
|
||||
|
|
|
|||
|
|
@ -89,8 +89,10 @@ public class SSLogger extends Service {
|
|||
ssStuff = (mTime + " wifi " + wifiRSS + "\n").getBytes();
|
||||
try {
|
||||
if (isRunning) {
|
||||
if (wifiRSS != 0)
|
||||
if (wifiRSS != 0) {
|
||||
// Log.d(TAG, "Wrote stuff: " + ssStuff);
|
||||
os_ss.write(ssStuff);
|
||||
}
|
||||
os_cpu.write(cpuStuff);
|
||||
if (MainActivity.wifiDriverPID != -1)
|
||||
os_cpuWiFiDriverPID.write(cpuWiFiDriverPIDStuff);
|
||||
|
|
@ -164,9 +166,11 @@ public class SSLogger extends Service {
|
|||
}
|
||||
// create folder
|
||||
File mDir = new File(MainActivity.outFolderPath);
|
||||
mDir.mkdir();
|
||||
if (wifiRSS != 0)
|
||||
// mDir.mkdir();
|
||||
if (wifiRSS != 0) {
|
||||
// Log.d(TAG, "wifi rss is not 0");
|
||||
ssFileName = MainActivity.btn_click_time.concat(".ss");
|
||||
}
|
||||
cpuFileName = MainActivity.btn_click_time.concat(".cpuRaw");
|
||||
if (MainActivity.wifiDriverPID != -1)
|
||||
cpuWiFiDriverPIDFileName = MainActivity.btn_click_time.concat(".cpuPID");
|
||||
|
|
@ -177,8 +181,11 @@ public class SSLogger extends Service {
|
|||
if (MainActivity.isLoggingAppSelf)
|
||||
cpuAppSelfFileName = MainActivity.btn_click_time.concat(".cpuAppSelf");
|
||||
try {
|
||||
if (wifiRSS != 0)
|
||||
os_ss = new FileOutputStream(new File(mDir, ssFileName));
|
||||
if (wifiRSS != 0) {
|
||||
// Log.d(TAG, "create os_ss handler");
|
||||
File tmp = new File(mDir, ssFileName);
|
||||
os_ss = new FileOutputStream(tmp);
|
||||
}
|
||||
os_cpu = new FileOutputStream(new File(mDir, cpuFileName));
|
||||
if (MainActivity.wifiDriverPID != -1)
|
||||
os_cpuWiFiDriverPID = new FileOutputStream(new File(mDir, cpuWiFiDriverPIDFileName));
|
||||
|
|
|
|||
|
|
@ -2,13 +2,20 @@ package edu.ucsb.cs.sandlab.offloadingdemo;
|
|||
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
/**
|
||||
* Created by yanzi on 9/18/15.
|
||||
* Updated on 01/25/17
|
||||
*/
|
||||
public class Thread_TX_CNormal implements Runnable {
|
||||
private double sentBytes = 0.0;
|
||||
private double duration = 0.0;
|
||||
private double throughput = 0.0;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (MainActivity.isRunning_TX_Normal)
|
||||
|
|
@ -18,51 +25,105 @@ public class Thread_TX_CNormal implements Runnable {
|
|||
MainActivity.isRunning_TX_Normal = true;
|
||||
Process proc;
|
||||
String[] commd = new String[3];
|
||||
|
||||
// get the right command
|
||||
commd[0] = "su";
|
||||
commd[1] = "-c";
|
||||
// ./client_send_normaltcp <bytes2send/file2send> <ip> <port>
|
||||
// <[optional] bandwidth (bps)> <[optional] sendsize (bytes)>
|
||||
commd[2] = (MainActivity.isForcingCPU0?"taskset 1 ":"")
|
||||
+ MainActivity.binaryFolderPath + MainActivity.binary_TX_Normal + " "
|
||||
+ MainActivity.bytes2send + " " + String.valueOf(MainActivity.currentBandwidth);
|
||||
+ MainActivity.bytes2send + " "
|
||||
+ (MainActivity.isLocal ? MainActivity.myInetIP : MainActivity.remoteIP) + " "
|
||||
+ MainActivity.RXportNum + " "
|
||||
+ ((MainActivity.currentBandwidth < 0) ? "" : String.valueOf(
|
||||
MainActivity.currentBandwidth));
|
||||
|
||||
try {
|
||||
// run process
|
||||
proc = Runtime.getRuntime().exec(commd);
|
||||
|
||||
// if config to log per process
|
||||
while (MainActivity.isLoggingPerProcPID && MainActivity.perProcPID == -1) {
|
||||
// Log.d("Thread_TX_CNormal", "per proc: " + MainActivity.perProcPID);
|
||||
MainActivity.perProcPID = Utilities.getMyPID(MainActivity.binary_TX_Normal, false);
|
||||
}
|
||||
proc.waitFor();
|
||||
InputStream stdout = proc.getInputStream();
|
||||
byte[] buffer = new byte[20];
|
||||
int read;
|
||||
StringBuilder out = new StringBuilder();
|
||||
while(true){
|
||||
read = stdout.read(buffer);
|
||||
if(read<0){
|
||||
MainActivity.myHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MainActivity.txt_results.append("Failed in TX_Normal\n");
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
out.append(new String(buffer, 0, read));
|
||||
if(read<20){
|
||||
break;
|
||||
}
|
||||
}
|
||||
final String mOut = out.toString().trim();
|
||||
if (mOut != "")
|
||||
MainActivity.reportedFinishTime = Double.parseDouble(mOut);
|
||||
else
|
||||
MainActivity.reportedFinishTime = 0.0;
|
||||
if (MainActivity.isVerbose) {
|
||||
|
||||
// read error
|
||||
BufferedReader error_buf = new BufferedReader(new InputStreamReader(
|
||||
proc.getErrorStream()));
|
||||
final String error = error_buf.readLine(); // only one line error
|
||||
|
||||
// read std out
|
||||
BufferedReader stdout_buf = new BufferedReader(new InputStreamReader(
|
||||
proc.getInputStream()));
|
||||
String stdout;
|
||||
|
||||
// get sent bytes
|
||||
stdout = stdout_buf.readLine();
|
||||
if (stdout == null) {
|
||||
// error happens
|
||||
MainActivity.myHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MainActivity.txt_results.append("Time: " + mOut + "ms\n");
|
||||
MainActivity.txt_results.append("Err in TX_Normal: " + error + "\n");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// sent bytes
|
||||
sentBytes = Utilities.parseBinOutput(stdout);
|
||||
|
||||
// duration
|
||||
stdout = stdout_buf.readLine();
|
||||
duration = Utilities.parseBinOutput(stdout);
|
||||
MainActivity.reportedFinishTime = duration;
|
||||
if (MainActivity.isVerbose) {
|
||||
MainActivity.myHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MainActivity.txt_results.append("Time: " + duration + "ms\n");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// throughput
|
||||
stdout = stdout_buf.readLine();
|
||||
throughput = Utilities.parseBinOutput(stdout);
|
||||
}
|
||||
|
||||
// InputStream stdout = proc.getInputStream();
|
||||
// byte[] buffer = new byte[20];
|
||||
// int read;
|
||||
// StringBuilder out = new StringBuilder();
|
||||
// while(true){
|
||||
// read = stdout.read(buffer);
|
||||
// if(read<0){
|
||||
// MainActivity.myHandler.post(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// MainActivity.txt_results.append("Err in TX_Normal: " + error + "\n");
|
||||
// }
|
||||
// });
|
||||
// break;
|
||||
// }
|
||||
// out.append(new String(buffer, 0, read));
|
||||
// if(read<20){
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// final String mOut = out.toString().trim();
|
||||
// if (!mOut.equals(""))
|
||||
// MainActivity.reportedFinishTime = Double.parseDouble(mOut);
|
||||
// else
|
||||
// MainActivity.reportedFinishTime = 0.0;
|
||||
// if (MainActivity.isVerbose) {
|
||||
// MainActivity.myHandler.post(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// MainActivity.txt_results.append("Time: " + mOut + "ms\n");
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InterruptedException e) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
package edu.ucsb.cs.sandlab.offloadingdemo;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Environment;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
|
|
@ -10,15 +14,49 @@ import java.io.FileReader;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.InetAddress;
|
||||
import java.net.NetworkInterface;
|
||||
import java.net.UnknownHostException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by yanzi on 10/1/15.
|
||||
*/
|
||||
public class Utilities {
|
||||
private static final String TAG = "Utilities";
|
||||
// Storage Permissions
|
||||
private static final int REQUEST_EXTERNAL_STORAGE = 1;
|
||||
private static String[] PERMISSIONS_STORAGE = {
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks if the app has permission to write to device storage
|
||||
*
|
||||
* If the app does not has permission then the user will be prompted to grant permissions
|
||||
*
|
||||
* @param activity
|
||||
*/
|
||||
public static void verifyStoragePermissions(Activity activity) {
|
||||
// Check if we have write permission
|
||||
int permission = ActivityCompat.checkSelfPermission(
|
||||
activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
|
||||
if (permission != PackageManager.PERMISSION_GRANTED) {
|
||||
// We don't have permission so prompt the user
|
||||
ActivityCompat.requestPermissions(
|
||||
activity,
|
||||
PERMISSIONS_STORAGE,
|
||||
REQUEST_EXTERNAL_STORAGE
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* check if we can write on external storage
|
||||
|
|
@ -32,6 +70,51 @@ public class Utilities {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the ip address
|
||||
* @return str
|
||||
*/
|
||||
protected static String getInetIP(boolean useIPv4) {
|
||||
try {
|
||||
List<NetworkInterface> interfaces = Collections.list(
|
||||
NetworkInterface.getNetworkInterfaces());
|
||||
for (NetworkInterface intf : interfaces) {
|
||||
List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
|
||||
for (InetAddress addr : addrs) {
|
||||
if (!addr.isLoopbackAddress()) {
|
||||
String sAddr = addr.getHostAddress();
|
||||
//boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
|
||||
boolean isIPv4 = sAddr.indexOf(':')<0;
|
||||
|
||||
if (useIPv4) {
|
||||
if (isIPv4)
|
||||
return sAddr;
|
||||
} else {
|
||||
if (!isIPv4) {
|
||||
int delim = sAddr.indexOf('%'); // drop ip6 zone suffix
|
||||
return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) { } // for now eat exceptions
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* parse binary file output
|
||||
* @param output
|
||||
* @return double
|
||||
*/
|
||||
protected static double parseBinOutput(String output) {
|
||||
String[] toks = output.trim().split(":");
|
||||
if (toks.length == 2) {
|
||||
return Double.parseDouble(toks[1]);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the number of cores of device
|
||||
* @return int > 0
|
||||
|
|
@ -84,15 +167,18 @@ public class Utilities {
|
|||
protected static int getMyPID(String inName, boolean flag) {
|
||||
String commd;
|
||||
if (flag)
|
||||
commd = "su -c busybox ps | grep " + inName + " | grep -v grep | head -1 | awk '{print $1}'";
|
||||
commd = "su -c busybox ps | grep "
|
||||
+ inName + " | grep -v grep | head -1 | awk '{print $1}'";
|
||||
else
|
||||
commd = "su -c busybox ps | grep " + inName + " | grep -v grep | head -1 | awk '{print $3}'";
|
||||
commd = "su -c busybox ps | grep "
|
||||
+ inName + " | grep -v grep | head -1 | awk '{print $3}'";
|
||||
try {
|
||||
Process proc = Runtime.getRuntime().exec(commd);
|
||||
proc.waitFor();
|
||||
String line;
|
||||
StringBuilder out = new StringBuilder();
|
||||
BufferedReader is = new BufferedReader(new InputStreamReader(proc.getInputStream()));
|
||||
BufferedReader is = new BufferedReader(
|
||||
new InputStreamReader(proc.getInputStream()));
|
||||
while ((line = is.readLine()) != null) {
|
||||
out.append(line).append("\n");
|
||||
}
|
||||
|
|
@ -120,6 +206,27 @@ public class Utilities {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* check if a directory exists
|
||||
* @param myDirectory
|
||||
* @param createIfNot: try to create the folder if directory does not exist
|
||||
* @return true/false
|
||||
*/
|
||||
protected static boolean dirExist(String myDirectory, boolean createIfNot) {
|
||||
File file = new File(myDirectory);
|
||||
if (file.exists() && file.isDirectory())
|
||||
return true;
|
||||
if (createIfNot) {
|
||||
try{
|
||||
file.mkdirs();
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* parse CPU for a folder
|
||||
* @param folderName
|
||||
|
|
@ -127,8 +234,9 @@ public class Utilities {
|
|||
*/
|
||||
protected static boolean parseCPUforFolder(String folderName) {
|
||||
try {
|
||||
Process proc = Runtime.getRuntime().exec("su && cd " + MainActivity.outFolderPath + "/" + folderName
|
||||
+ " && ls *.cpuRaw");
|
||||
Process proc = Runtime.getRuntime().exec(
|
||||
"su && cd " + MainActivity.outFolderPath + "/"
|
||||
+ folderName + " && ls *.cpuRaw");
|
||||
proc.waitFor();
|
||||
InputStream stdout = proc.getInputStream();
|
||||
byte[] buffer = new byte[20];
|
||||
|
|
@ -150,9 +258,14 @@ public class Utilities {
|
|||
for (int i = 0; i < cpuFiles.length; ++i) {
|
||||
try {
|
||||
BufferedReader br = new BufferedReader(
|
||||
new FileReader(MainActivity.outFolderPath + "/" + folderName + "/" + cpuFiles[i]));
|
||||
new FileReader(
|
||||
MainActivity.outFolderPath + "/"
|
||||
+ folderName + "/" + cpuFiles[i]));
|
||||
FileOutputStream os_cpu = new FileOutputStream(
|
||||
new File(MainActivity.outFolderPath + "/" + folderName, cpuFiles[i].replace("cpuRaw", "cpu")));
|
||||
new File(
|
||||
MainActivity.outFolderPath + "/"
|
||||
+ folderName,
|
||||
cpuFiles[i].replace("cpuRaw", "cpu")));
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] toks = line.split("\\s+");
|
||||
|
|
@ -221,24 +334,24 @@ public class Utilities {
|
|||
|
||||
protected static int findCorrespondingThrpt(int myI) {
|
||||
if (myI == 0) {
|
||||
return 50000;
|
||||
return 8 * 50000;
|
||||
} else if (myI == 1) {
|
||||
return 100000;
|
||||
return 8 * 100000;
|
||||
} else if (myI < 6) {
|
||||
return 250000 * (myI - 1);
|
||||
return 8 * 250000 * (myI - 1);
|
||||
} else if (myI < 24) {
|
||||
return 1500000 + 500000 * (myI - 6);
|
||||
return 8 * (1500000 + 500000 * (myI - 6));
|
||||
} else if (myI > 24 && myI < 43) {
|
||||
return 15000000 + 5000000 * (myI - 25);
|
||||
return 8 * (15000000 + 5000000 * (myI - 25));
|
||||
} else if (myI == 43) {
|
||||
return 11000000;
|
||||
return 8 * 11000000;
|
||||
} else if (myI == 44){
|
||||
return 13000000;
|
||||
return 8 * 13000000;
|
||||
} else { // default unlimited
|
||||
if (MainActivity.isLocal)
|
||||
return 100000000;
|
||||
return 8 * 100000000; // for loopback, the unlimited shouldn't be really unlimited..
|
||||
else
|
||||
return 20000000;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,70 +40,75 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<HorizontalScrollView
|
||||
android:id="@+id/container_config"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1">
|
||||
<!--<HorizontalScrollView-->
|
||||
<!--android:id="@+id/container_config"-->
|
||||
<!--android:layout_width="match_parent"-->
|
||||
<!--android:layout_height="0dp"-->
|
||||
<!--android:layout_weight="0.8">-->
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="0.8"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="5dp"
|
||||
android:text="@string/txt_configs"
|
||||
android:textStyle="bold"
|
||||
android:layout_gravity="center"
|
||||
android:textSize="16dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_setByte2send"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/btn_setbytes"
|
||||
android:textSize="16dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_setRepeatTimes"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/btn_setrepeat"
|
||||
android:textSize="16dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_setTCPDumpInterface"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/btn_setuptcpdump"
|
||||
android:textSize="16dp"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="0.8"
|
||||
android:orientation="horizontal">
|
||||
<Button
|
||||
android:id="@+id/btn_setLogFreq"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:text="Set\nLog Freq"
|
||||
android:textSize="16dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_setOthers"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/btn_setothers"
|
||||
android:textSize="16dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_clearStatus"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/btn_clear"
|
||||
android:textSize="16dp"/>
|
||||
</LinearLayout>
|
||||
|
||||
</HorizontalScrollView>
|
||||
<!--</HorizontalScrollView>-->
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
<resources>
|
||||
<string name="app_name">Offloading Demo</string>
|
||||
<string name="txt_configs">Configs →</string>
|
||||
<string name="btn_setbytes">Set\nBytes</string>
|
||||
<string name="btn_setrepeat">Set\nRepeats</string>
|
||||
<string name="btn_setuptcpdump">Setup\nTCPDump</string>
|
||||
|
|
|
|||
|
|
@ -66,14 +66,6 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
|
|
@ -82,6 +74,14 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/22.0.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.0/jars" />
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
CC = arm-linux-androideabi-gcc
|
||||
CFLAGS = -pie -fPIE
|
||||
TARGET = bypassl3_recv_lo
|
||||
|
||||
OBJS = $(patsubst %.c, %.o, $(wildcard *.c))
|
||||
HEADERS = $(wildcard *.h)
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
%.o: %.c $(HEADERS)
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
.PRECIOUS: $(TARGET) $(OBJS)
|
||||
|
||||
$(TARGET): $(OBJS)
|
||||
$(CC) $(OBJS) -Wall $(CFLAGS) -o $@
|
||||
cp $(TARGET) /media/Lucifer/yanzi/projects/offloading/RDMAMobileDemo/app/src/main/assets/
|
||||
clean:
|
||||
-rm -f *.o
|
||||
-rm -f $(TARGET)
|
||||
Binary file not shown.
|
|
@ -1,125 +0,0 @@
|
|||
/*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <arpa/inet.h>
|
||||
#include <linux/if_packet.h>
|
||||
#include <linux/ip.h>
|
||||
#include <linux/udp.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
#include <netinet/ether.h>
|
||||
#include <sys/sendfile.h>
|
||||
#include <errno.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#define ETH_P_IP 0x0800 /* Internet Protocol packet */
|
||||
#define ETH_ALEN 6 /* from <net/ethernet.h> */
|
||||
#define ETH_P_ALL 0x0003
|
||||
|
||||
#define ETHER_TYPE 0x0800 /* Customize */
|
||||
|
||||
#define MY_DEST_MAC0 0xba
|
||||
#define MY_DEST_MAC1 0xf6
|
||||
#define MY_DEST_MAC2 0xb1
|
||||
#define MY_DEST_MAC3 0x71
|
||||
#define MY_DEST_MAC4 0x09
|
||||
#define MY_DEST_MAC5 0x64
|
||||
|
||||
#define DEFAULT_IF "wlan0"
|
||||
#define BUF_SIZ 8192
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct iovec iov;
|
||||
int sockfd, socktrigger;
|
||||
int sockopt;
|
||||
struct ifreq ifopts; /* set promiscuous mode */
|
||||
struct ifreq if_ip; /* get ip addr */
|
||||
ssize_t numbytes;
|
||||
int tx_len = 0;
|
||||
char sendbuf[BUF_SIZ];
|
||||
struct ether_header *eh = (struct ether_header *) sendbuf;
|
||||
struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header));
|
||||
struct sockaddr_ll socket_address;
|
||||
struct sockaddr_in servaddr;
|
||||
char ifName[IFNAMSIZ];
|
||||
int i, j, ret, sendsize=1500, packet_num, offset = 0, port = 32000;
|
||||
int fd; /* file descriptor for file to send */
|
||||
struct timeval t_start,t_end;
|
||||
|
||||
/* Get interface name */
|
||||
strcpy(ifName, DEFAULT_IF);
|
||||
|
||||
if (argc > 1)
|
||||
packet_num = atoi(argv[1])/sendsize;
|
||||
else
|
||||
packet_num = 166666;
|
||||
|
||||
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
bzero(&servaddr,sizeof(servaddr));
|
||||
servaddr.sin_family = AF_INET;
|
||||
servaddr.sin_addr.s_addr=inet_addr("192.168.1.15");
|
||||
servaddr.sin_port=htons(port);
|
||||
sendto(sockfd, "0\n",strlen("0\n"),0, (struct sockaddr *)&servaddr, sizeof(servaddr));
|
||||
|
||||
|
||||
if ((sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) == -1) {
|
||||
perror("listener: socket");
|
||||
return -1;
|
||||
}
|
||||
|
||||
strncpy(ifopts.ifr_name, ifName, IFNAMSIZ-1);
|
||||
ioctl(sockfd, SIOCGIFFLAGS, &ifopts);
|
||||
ifopts.ifr_flags |= IFF_PROMISC;
|
||||
ioctl(sockfd, SIOCSIFFLAGS, &ifopts);
|
||||
|
||||
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof sockopt) == -1) {
|
||||
perror("setsockopt");
|
||||
close(sockfd);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, ifName, IFNAMSIZ-1) == -1) {
|
||||
perror("SO_BINDTODEVICE");
|
||||
close(sockfd);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
fd = open("/data/local/tmp/bigfile_w", O_WRONLY | O_CREAT | O_TRUNC);
|
||||
if (fd == -1) {
|
||||
fprintf(stderr, "unable to open the file.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Recv packet */
|
||||
gettimeofday(&t_start, NULL);
|
||||
for (i = 0; i < packet_num;)
|
||||
{
|
||||
|
||||
numbytes = recvfrom(sockfd, sendbuf, sendsize, 0, NULL, NULL);
|
||||
//printf("listener: got packet %lu bytes\n", numbytes);
|
||||
|
||||
if (sendbuf[50] == '0')
|
||||
{
|
||||
write(fd, sendbuf, sendsize);
|
||||
i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
usleep(100);
|
||||
}
|
||||
}
|
||||
gettimeofday(&t_end, NULL);
|
||||
printf("%lf\n", (t_end.tv_sec-t_start.tv_sec)*1000.0+(t_end.tv_usec-t_start.tv_usec)/1000.0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
|
|
@ -1,24 +0,0 @@
|
|||
cd client_send_normaltcp_sendfile && adb push client_send_normaltcp_sendfile /data/local/tmp/
|
||||
cd ../
|
||||
cd client_send_normaltcp_splice && adb push client_send_normaltcp_splice /data/local/tmp/
|
||||
cd ../
|
||||
cd client_send_bypassl3 && adb push client_send_bypassl3 /data/local/tmp/
|
||||
cd ../
|
||||
cd client_send_normaludp && adb push client_send_normaludp /data/local/tmp/
|
||||
cd ../
|
||||
cd client_send_normaltcp && adb push client_send_normaltcp /data/local/tmp/
|
||||
cd ../
|
||||
cd client_readfile_only && adb push client_readfile_only /data/local/tmp/
|
||||
cd ../
|
||||
cd client_recv_normaltcp_splice && adb push client_recv_normaltcp_splice /data/local/tmp/
|
||||
cd ../
|
||||
cd client_recv_bypassl3 && adb push client_recv_bypassl3 /data/local/tmp/
|
||||
cd ../
|
||||
cd client_recv_normaltcp && adb push client_recv_normaltcp /data/local/tmp/
|
||||
cd ../
|
||||
cd client_recv_normaludp && adb push client_recv_normaludp /data/local/tmp/
|
||||
cd ../
|
||||
cd server_recv_normaltcp && adb push server_m_recv_normaltcp /data/local/tmp/
|
||||
cd ../
|
||||
cd server_recv_normaludp && adb push server_m_recv_normaludp /data/local/tmp/
|
||||
cd ../
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
echo "* Pushing offloading binaries"
|
||||
adb push ../offloading_binaries/client_send_normaltcp_sendfile/client_send_normaltcp_sendfile /data/local/tmp/
|
||||
adb push ../offloading_binaries/client_send_normaltcp_splice/client_send_normaltcp_splice /data/local/tmp/
|
||||
adb push ../offloading_binaries/client_send_bypassl3/client_send_bypassl3 /data/local/tmp/
|
||||
adb push ../offloading_binaries/client_send_normaludp/client_send_normaludp /data/local/tmp/
|
||||
adb push ../offloading_binaries/client_send_normaltcp/client_send_normaltcp /data/local/tmp/
|
||||
adb push ../offloading_binaries/client_readfile_only/client_readfile_only /data/local/tmp/
|
||||
adb push ../offloading_binaries/client_recv_normaltcp_splice/client_recv_normaltcp_splice /data/local/tmp/
|
||||
adb push ../offloading_binaries/client_recv_bypassl3/client_recv_bypassl3 /data/local/tmp/
|
||||
adb push ../offloading_binaries/client_recv_normaltcp/client_recv_normaltcp /data/local/tmp/
|
||||
adb push ../offloading_binaries/client_recv_normaludp/client_recv_normaludp /data/local/tmp/
|
||||
adb push ../offloading_binaries/server_recv_normaltcp/server_m_recv_normaltcp /data/local/tmp/
|
||||
adb push ../offloading_binaries/server_recv_normaludp/server_m_recv_normaludp /data/local/tmp/
|
||||
echo "* Pushing tcpdump 4.8.1"
|
||||
adb push tcpdump /data/local/tmp/
|
||||
echo "* Change permission"
|
||||
adb shell chmod 755 /data/local/tmp/*
|
||||
echo "* Done."
|
||||
Binary file not shown.
Loading…
Reference in New Issue