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
Scarica

Networking on handheld devices AOSP, chi era costui?