DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Viaggio non assicurato alla scoperta dei droidi che stavate cercando Roberto Viti DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Who am I Roberto Viti UE e WSN L3 Networking [email protected] @robbetto83 +roberto.viti 2 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 • w Internet palace S-GW P-GW MME PCRF rete operatore 3 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Personalizzazione Devices Giovedì 18 dicembre 14 Perché conoscere ciò che accade sul device? • Evoluzioni future – GW per reti di sensori – LTE D2D – Media center 4 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Perché conoscere ciò che accade sul device (2) Problematiche attuali Scenario • Siete agganciati alla rete HSDPA e state facendo una telefonata Skype mentre rientrate a casa. • Perché la chiamata cade dopo che siete rientrati? Risposta • Il telefono ha sentito la Wi-Fi di casa vostra ed ha effettuato una associazione con l’Access Point abbattendo quella 3G. Su una connessione di livello 7 (e.g., over TCP) se un endpoint cambia indirizzo IP, la sessione cade e con essa la telefonata. 5 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Mobilità: il problema • Il problema della mobilità nasce da un errore nello stack TCP/IP ! • Il padaradigma di information hiding non è rispettato: • TCP endpoint: definito tramite gli indirizzi IP src/dst + info L4. • UDP endpoint: come sopra. • Ind. alfanumerico: non aiuta perché traslato su indirizzi L3 (IP). • Se il nodo cambia indirizzo IP, la sessione cade. Tutte le soluzioni ‘MobileIP’ tentano di risolvere questo problema senza stravolgere il TCP/IP. La soluzione 0 sarebbe: usare un indirizzo L4 e spostare nel routing il binding ind. L3 / L4. 6 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Personalizzazione Devices Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Caso studio android Definizione • È un sistema operativo per dispositivi mobili: – middleware per le comunicazioni (Frameworks) – applicazioni base (Phone, SMS, Camera . . . ) – “1 billion 30 days active users” • Principali caratteristiche: – open source (Apache Licence) – kernel Linux – e su Java aR Laboratorio di Reti di Telecomunicazioni • Si può modificare? 7 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Come procedere? • Capire come funziona android • Implementare cio che non c’è • Modicare il comportamento del SO ovvero • Scaricarsi il codice • capirlo [non banale] • adattarlo ai nostri scopi 8 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Android Open Source Platform • È una distribuzione linux • Gira su una versione modificata di un kernel android Lollipop : AOSP = Utopic Unicorn : Ubuntu • Non è GPL ma ASL S Samsung S5 Google Apps android Google Luncher Google Play Services Android Open Source Platform “Linux” Kernel Google Nexus 5 S apps Google Apps android services Touch Wiz Google Play Services Android Open Source Platform Samsung’s tweaks “Linux” Kernel S’s tweaks Samsung Galaxy S 5 9 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Il licensing di android va oltre Android robot Rilasciato sotto creative common (attribution), può essere modificato liberamente Android logo La scritta di bootup di AOSP – non può essere usato Android custom typeface Il font del logo: non si può usare Uso del nome Non puoi chiamare un device/app “android ***” o “*** android” ma “per android” o “android compatibile” Android è un droide? 10 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 These aren’t the droid that you are looking for… actually android can’t be a droid at all if Mickey Mouse does not want to 11 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Overview • Architettura android – Livelli – Kernel – Runtime environment • Struttura di AOSP – Setup – Build • Reverse engineering – Come è gestita connettività Wi-Fi – Mumip in breve • Esempio di sviluppo – Toolchain e ambienti – Piccolo esempio 12 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 ARCHITETTURA DI ANDROID 13 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Architettura android APPLICATION Home Dialer SMS/MMS IM Browser Camera Alarm Calculator Contacts Voice Dial Email Calendar Media Player Albums Clock ... APPLICATION FRAMEWORK Activity Manager Window Manager Content Provider View System Notiifcation Manager Package Manager Telephony Manager Resource Manager Location Manager ... LIBRARIES ANDROID RUNTIME Surface Manager Media Framework SQLite SGL libc Core Libraries OpenGL | ES FreeType WebKit SSL …. ART/Dalvik VM HW ABSTRACTION LAYER Graphics Audio Camera Bluetooth GPS Radio (RIL) WiFi ... LINUX KERNEL Display Driver Camera Driver Bluetooth Driver Shared Memory Driver Binder (IPC) Driver USB Driver Keypad Driver WiFi Driver Audio Drivers Power Manager 14 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Kernel Linux • Vanilla più alcune modifiche – – – – – Wakelock Low Memory Killer Binder Anonymous Shared Memory (ashmem) Alarm • More info Linux Weekly News www.lwn.net LINUX KERNEL Display Driver Camera Driver Bluetooth Driver Shared Memory Driver Binder (IPC) Driver USB Driver Keypad Driver WiFi Driver Audio Drivers Power Manager 15 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Wakelocks • Funzionamento Standard • Funzionamento sistema embedded 16 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Wakelocks • Funzionamento narcolettico di android – Prima: kernel in sleep su richiesta dell’utente, – Ora: appena possibile • Per azioni lunghe: – chiedi uno wakelock (come un mutex sulla batteria) • In vanilla da 3.5 17 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Low memory killer • Come scelgo le vittime in caso di errori Out of Memory (OOM?) – Cerco di decidere prima di OOM – Il kernel non guarda in faccia a nessuno per salvarsi – Ne esiste un secondo più umano • Priorità di massima – Kernel + libs > android core > app • Uccide tutto ciò che non è core android – Lo vedete in azione durante i freeze 18 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Binder • Fornisce remote method invocation all’ambiente java • passa gli argomenti tra gli oggetti • Inventata in ambiente windows PROCESS A PROCESS B App A Context Binder Service Get service service get foo(object) Marshall proxy object relay to IPC threads call return http://elinux.org/Android_Binder 19 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Hadrware Abstraction Layer The linux way • Driver in kernel space The Android way • Interfaccia comune • Servizio dedicato – Compilati – Caricati a runtime (modprobe) – In application framework • Accesso utente in /dev • Tre tipi • Posizionamento – Livello kernel – Demoni dedicati – Altro a scelta – Caratteri – Rete (…) – Blocchi (hdd…) HW ABSTRACTION LAYER Graphics Audio Camera Bluetooth GPS Radio (RIL) WiFi ... 20 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Hardware Abstraction Layer Apps android.* JNI Java C System Server servizio HW specifico Fornitore: AOSP Licenza: ASL demone HW lib HW .so User-Space Fornitore: Costruttore o AOSP Licenza: Costruttore o ASL Kernel driver o sottosistema Fornitore: Costruttore o Android Licenza: GPL 21 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Son tutti freedom col codice degli altri • • • • Costruttori vogliono NDA Linux != GNU/Linux Senza HAL di android gli altri progetti non potrebbero esistere Libertà sufficiente Colour palette The Sailfish primary colour is sea blue and it is used with tinted tones. Additional colours can be used to vivify the design, but should not be used in the logo. Primary colour: Pantone 314 C C100 M0 Y9 K30 R0 G122 B163 android Sailfish 2013 Designer’s Guide Tint: 100 Tint: 75 Tint: 85 Tint: 60 Tint: 70 Tint: 45 Tint: 55 Tint: 30 Tint: 40 Tint: 15 Tint: 25 Sailfish OS Additional colours: Pantone 314 C C100 M0 Y9 K30 R0 G122 B163 Pantone 3035 C C100 M30 Y19 K78 R0 G65 B83 Pantone 7525 C C13 M56 Y61 K32 R155 G110 B81 Pantone 877 C C0 M0 Y K40 R117 G117 B176 Page 7 dedicated libraries Android HAL open source projects Linux Kernel 22 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Android RunTime / Dalvik VM • Le applicazioni android sono principalmente scritte in Java • Serve una Virtual Machine(VM) per poterle eseguire .java -> .class -> run (LENTO) • Dalvik è una VM pensata per ambienti con: – Poca memoria – Istruzioni agili – Just In Time (2010): .java -> .class -> .dex & .odex -> run (un po’ più veloce) ANDROID RUNTIME Core Libraries ART/Dalvik VM 23 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Android RunTime / Dalvik VM Da Lollipop invece abbiamo ART: • È retrocompatibile (parte da .dex) • Compila durante l’installazione Resources & Native Code Sources zip Dex File – Ahead of Time (AOT) • Miglior Garbage Collector • Miglior gestione dei thread APK install Resources & Native Code Dex File dexopt dex2oat quickened dex dex & native code ODex File Dalvik DALVIK Native ELF File ART Native Libraries Libraries Libraries ART 24 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Android RunTime / Dalvik VM • Dalvik VM Internals - Google I/O 2008 https://sites.google.com/site/io/dalvik-vm-internals • A JIT Compiler for Android's Dalvik VM - Google I/O 2010 https://www.youtube.com/watch?v=Ls0tM-c4Vfo • The ART runtime - Google I/O 2014 https://www.youtube.com/watch?v=EBlTzQsUoOw 25 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 AOSP: SETUP ENVIRONMENT 26 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Android Open Source Project • • • • • • MacOs/Linux (vero o emulato) Almeno 40 Gb per un set di codice/build Tanta RAM Abbastanza CPU Pazienza http://source.android.com/source/building.html 27 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Preparazione Host – 1) ottenere java 7 • Testato su una Ubuntu 12.04 • Da JB basta openjdk invece che oracle $ sudo apt-get update $ sudo apt-get install openjdk-7-jdk 28 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Preparazione Host – 2) Installare pacchetti mancanti $ sudo apt-get install git gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ libgl1-mesa-dev g++-multilib mingw32 tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linuxgnu/libGL.so 29 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Preparazione Host – 3) Configurare USB • USB e UDEV: $ lsusb […] Bus 002 Device 006: ID 18d1:4ee2 Google Inc. /etc/udev/rules.d/51-android.rules […] # adb protocol on Hammerhead (Nexus 5) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>" 30 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Preparazione Host – 4) Repo e download Download Repo $ $ $ $ mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo Inizializzazione client Repo $ mkdir WORKING_DIRECTORY $ cd WORKING_DIRECTORY $ repo init -u https://android.googlesource.com/platform/manifest $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.1_r1 $ repo sync Versioni: http://source.android.com/source/build-numbers.html 31 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Preparazione Host – 5) Build Time! • Build! $ source build/envsetup.sh $ lunch aosp_arm-eng $ make –jN $ emulator & N.B. make può eseguire più task N in parallelo: solitamente si usa un numero di task N compreso tra 1 and 2 volte il numero di thread hardware k sul computer usato per il build • x CPUs, y cores per CPU, z threads per core => k=xyz • k≤N≤2K 32 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Tempi • Gingerbread – dual-core Centrino 2 -> un oretta – Core i7 -> 20 minuti • Jelly Bean – dual-core Centrino 2 -> non lo fate – Core i7 -> 40 minuti 33 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Congratulazioni! • Avete finalmente compilato ed eseguito un emulatore • BUTTATELO! – LENTI, PESANTI, MANGIABATTERIA • Per lavorare con la rete conviene un device vero Emulatore Galaxy Nexus Nexus 4 Nexus 5 arm maguro mako Hammerhead aosp_arm-eng full_maguro-eng full_mako-eng aosp_hammerhead-eng 34 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 FYI… Nome device Nome in codice Tipo Emulatore goldfish Pesce rosso G1 trout Trota Nexus One mahimahi Pesce capone Nexus S herring aringa Xoom stingray razza Galaxy Nexus GSM maguro Galaxy Nexus CDMA toro Nexus 7 Wifi grouper cernia Nexus 7 3G tilapia Specie di sogliola Nexus 4 mako Squalo Mako Nexus 10 manta Manta Nexus 5 hammerhead Pesce martello Nexus 6 shamu orca macrofamilgia tuna 35 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 E ora? 36 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 REVERSE ENGINEERING DEI SERVIZI 37 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Come ingoiare una balena… «Fully understanding the internals of Android’s system services is like trying to swallow a whale» Karim Yaghmour, Embedded Android, O’Reilly Un progetto piccolo: • 29’388 file Java (+8024 di test) In Lollipop Con file semplici: • ConnectivityService.java -> 4275 linee • SystemServer.java -> 1195 linee Documentazione impeccabile /** * @hide */ 38 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Piccolo aiuto: usare eclipse C’è un classpath di default cd /path/to/android/root cp development/ide/eclipse/.classpath . chmod u+w .classpath Importare android • • • • File > New > Java Project Scegliete un nome, "android" va benissimo. Selezionate "Create project from existing source", Usate come path il vostro “/path/to/android/root” e cliccate su Finish. 39 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Da dove si parte? Da una domanda: «Il mio smartphone con android 4.2.1 non si collega alla mia rete di casa con IPv6 only: perché?» 40 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Ricerca del punto di ingresso • App – Settings: [<android>/packages/apps/Settings] • Servizi – connectivity: [android.net.IConnectivityManager] – wifi: [android.net.wifi.IWifiManager] – wifip2p: [android.net.wifi.p2p.IWifiP2pManager] • Target: android 4.2.1 • adb shell -> service list – 2.3: 47 – 4.2: 67 – 5.0: 96 (wifiscanner: [android.net.wifi.IWifiScanner]) 41 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Cosa stiamo cercando Cerchiamo • App • Libreria/e di collegamento Apps android.* – android.net.wifi.* • Ma quali? • • Servizio di sistema sottosistema di riferimento JNI Java C System Server servizio HW specifico Fornitore: AOSP Licenza: ASL demone HW lib HW .so User-Space Fornitore: Costruttore o AOSP Licenza: Costruttore o ASL Kernel driver o sottosistema Fornitore: Costruttore o Android Licenza: GPL 42 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Partiamo dalla app 43 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 • Ctrl+click su WifiManager 44 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 WifiManager trovato 45 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Lo stesso dei JavaDoc 46 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Prendiamo un metodo a caso… 47 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Missed screenshot… :) • mService è un IWifiService – ricordate l’output di “adb shell -> service list”? • android.net.wifi.IWifiManager «AIDL (Android Interface Definition Language) is similar to other IDLs you might have worked with. It allows you to define the programming interface that both the client and service agree upon in order to communicate with each other using interprocess communication (IPC).» http://developer.android.com/guide/components/aidl.html • Il meccanismo standard per demoni multithread in android SomethingManager ISomethingManager.aidl SomethingService . 48 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Open Implementation Ctrl+<over> -> 49 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Look, a service! 50 aR DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 So far… Settings Apps android.net.wifi.WifiManager android.* System Server JNI Java WifiService C servizio HW specifico ? HW lib loader ? lib HW .so ? driver o sottosistema User-Space Fornitore: AOSP Licenza: ASL Fornitore: Costruttore o AOSP Licenza: ASL o a scelta Kernel Fornitore: Costruttore o Android Licenza: GPL 51 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Chi è SystemServer? • Chi istanzia WifiService? – Trovate il costruttore -> “Open Call Hierarchy” • SystemServer è un thread che lancia tutti i servizi del sistema • Ne tiene una lista in un ServiceManager, grazie al quale li registra sul context • Dentro a SystemServer c’è il main di android 52 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Prendiamo un metodo più interessante… 53 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 WifiStateMachine «Track the state of Wifi conectivity. All event handling is done here and lal changes in connectivity state are initiade here.» Estende una implementazione di una macchina a stati molto interessante [com.android.internal.util.statemachine] • È una delle poche classi correttamente documentate • Leggetela che è interessante! • Basta cercarla su google 54 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Funzionamento… 55 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 56 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Obtaining IP… 57 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Macchina a stati DHCP: stato “Stopped” 58 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Esecuzione della richiesta DHCP 59 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Esaminioamo il risultato 60 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 61 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 • WifiNative è la nostra interfaccia verso i servizi “nativi” • IPv6 è disabilitato al boot della macchina a stati • Nessuno lo riavvia • Se tante volte ci fosse un dhcpv6 a rispondere ci si assicura di non prendere in considerazione la sua risposta 62 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 E lollipop? ObtainingIpState 63 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Riepilogando Settings Apps android.net.wifi.WifiManager android.* System Server JNI Java WifiService C User-Space servizio HW specifico WifiNative HW lib loader android_net_wifi_Wifi.cpp wifi.c wpa_ctrl.c lib HW .so /dev/socket/wpa_wlan0 driver o sottosistema Kernel Fornitore: AOSP Licenza: ASL Fornitore: Costruttore o AOSP Licenza: ASL o a scelta Fornitore: Costruttore o Android Licenza: GPL 64 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 Class Diagram com.android.settin... WifiSettings WifiManager <<use>> ConnectivityService -mActiveDefaultNetwork has list <<Interface>> NetworkStateTracker <<Interface>> IWifiManager +handleConnectionFailure(NetworkInfo info) : void +handleDisconnect(NetworkInfo info) : void +handleConnect(NetworkInfo) : void +enforcePreference() WifiService WifiStateTracker < < inst ant iat e> > < < inst ant iat e> > NetworkManagementService thether via (router wifi) WifiConfigStore load stored configuration WifiStateMachine WifiWatchdogStateMachine WifiNative 65 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Riprendiamo l’esempio Scenario • Siete agganciati alla rete HSDPA e state facendo una telefonata Skype mentre rientrate a casa. • Perché la chiamata cade dopo che siete rientrati? Risposta • Il telefono ha sentito la Wi-Fi di casa vostra ed ha effettuato una associazione con l’Access Point abbattendo quella 3G. Su una connessione di livello 7 (e.g., over TCP) se un endpoint cambia indirizzo IP, la sessione cade e con essa la telefonata. 66 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 mumip Standard Application android settings Application Framework mumip service dedicated libraries Android HAL open source projects mumip native Linux Kernel 67 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 NetStateTracker <<component>> DeviceManager <<component>> µmip Remote Interface Application Interface policy MIPv6 Module switchToggle <<component>> stock Connectivity Service <<component>> DecisionMaker <<component>> kernel <<component>> tunneled ifaces manager Instance <<use>> <<use>> probedStatistics < < c o m p o n e n t > > phisical interfaces <<component>> perDevice Controller <<component>> multistack <<component>> probe nativeInterface 68 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 <<component>> µmip MIPv6 Module <<component>> µm i p C o n t r o l l e r namedSocket <<component>> kernel µmipService µmipNativeConnector switchToggle µmip StateMachine <<component>> tunneled ifaces <<component>> µm i p N a t i v e <<use>> <<component>> phisical interfaces 69 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Networking on handheld devices AOSP, chi era costui? Laboratorio di Reti di Telecomunicazioni Giovedì 18 dicembre 14 mumip Manager Connectivity Service <<Interface>> IMumipManager <<access>> µmipService MumipService Handler µmip StateMachine MumipNative JavaLocalSocket LocalSocket Communication Gateway ControlCenter ifaceMIPcontroller <<access>> <<access>> MumipNative Receiver send messages MumipNative Sender kernel MIPStateMachine <<bind>> Receiver EntryHandler virtual interface send messages Sender android application framework OutgoHandler "linux" userspace 70 DINFO DIPARTIMENTO DI INGEGNERIA DELL’INFORMAZIONE aR Laboratorio di Reti di Telecomunicazioni Networking on handheld devices AOSP, chi era costui? Giovedì 18 dicembre 14 Build • <android-root>/build/target/product • core.mk • PRODUCT_PACKAGES <- LOCAL_MODULE 71