Gestione della mobilità verticale
su base applicazione:
progetto e realizzazione
per la piattaforma Android
Alessio Bianchi
Relatore:
Co-relatori:
Prof. Francesco Lo Presti
Prof. Stefano Salsano, Ing. Marco Bonola
La mobilità verticale
UMTS
• Nodo mobile che si
sposta tra reti di
accesso eterogenee
(basate su IP)
• Virtualmente nessuna
interruzione delle
comunicazioni
in corso
• Handover verticale
802.11
Mobilità su base applicazione
• Decisioni di handover differenziate per ciascuna
applicazione
• Scenario tipico:
– Notebook connesso via WLAN e 3G
– Videoconferenza + download aggiornamenti SO
– In caso di disconnessione della WLAN
• handover della videoconferenza su rete 3G
• interruzione download aggiornamenti
I problemi della mobilità su IP
NAT1
Internet
R1
LAN1
NAT2
IF1
R2
IF2
LAN2
Mobile
Host (MH)
Correspondent
Host (CH)
La soluzione UPMT (1)
Universal Per-application Mobility management
using Tunnels
Nessuna modifica alle applicazioni
Nessuna modifica alle infrastrutture di rete
Nessuna modifica ai Correspondent Host
NAT Traversal
Gestione della mobilità per-applicazione
La soluzione UPMT (2)
Anchor Node
(AN)
NAT1
LAN1
R1
Internet
IF1
NAT2
IF2
R2
Mobile
Host (MH)
LAN2
Correspondent
Host (CH)
Incapsulamento e instradamento
• Incapsulamento UDP/IP:
IP
UDP
Tunnel header
IP src: real iface address
IP dst: AN address
IP
UDP or TCP
Application payload
Original header
IP src: virtual iface address
IP dst: CH address
• Instradamento pacchetti nei tunnel tramite PAFT:
Per-Application Forwarding Table
– application flow  tunnel id
Application flow:
<protocol, src IP, dst IP, src port, dst port>
Obiettivi del lavoro di tesi
• Implementare la gestione delle applicazioni
in UPMT
– Rilevare i flow di un’applicazione e instradarne i
pacchetti sul tunnel corretto
– Permettere l’handover su base applicazione e
per singolo flow
– Supportare la definizione di politiche di
handover su base applicazione
• Porting dei componenti realizzati su Android
Interface
Architettura del Mobile Host
UCE GUI
upmtappmon
local
socket
UPMT
module
Signaling
Agent
UCE -
Application
Monitor
Function call
UPMT Control
Entity
JNI
external
module
DBUS
Network
Manager
NETLINK socket
upmtconf
User-space
Modulo
xt_UPMT
Exception
filter
NETLINK socket
Modulo
upmt
PAFT
Kernel
Il modulo xt_UPMT (1)
• Rileva l’apertura di flussi di rete da parte delle
applicazioni
– Estensione di Netfilter e iptables con un target apposito:
iptables -A OUTPUT -o upmt0 -m conntrack --ctstate NEW -j
UPMT
– Aggiunge voci nella PAFT per instradare correttamente i
pacchetti dei flussi di rete
• Applica politiche di gestione della mobilità per
applicazione
– Uso di specifici tunnel per un’applicazione
– Applicazioni non gestite tramite UPMT
• Impedisce al traffico locale, multicast e broadcast
di essere inviato sui tunnel
Il modulo xt_UPMT (2)
xt_UPMT mantiene le liste:
apps:
Nome applicazione
Tunnel ID
Tunnel da usare per una data applicazione
Inizializzata all’avvio della Control Entity con i tunnel specificati dalle
politiche di ciascuna applicazione
Le applicazioni non presenti in questa lista usano un tunnel di
default
no_upmt:
Nome applicazione
Applicazioni che non devono essere gestite tramite UPMT
Inizializzata all’avvio della Control Entity secondo le politiche utente
Associazione tra flow e applicazioni
Netfilter, e quindi il target UPMT, non può risalire
Problema: al processo che ha generato un pacchetto
Patch al kernel: aggiunta del campo tgid al
Soluzione:
socket buffer contenente il PID (tgid) del processo
In Linux desktop, tipicamente vale l’assunzione:
nome applicazione == nome file eseguibile su disco
pid
struct
task_struct
*
struct
mm_struct*
struct
file*
mm:
exe_file:
f_path:
dentry
struct dentry*
d_name:
firefox-bin
Gestione nuovi flow
flow per app
upmtappmon
Application
Monitor
new flow
politiche
UCE UPMT Control
Entity
upmtconf
User-space
Kernel
Modulo
xt_UPMT
apps
Modulo
upmt
PAFT
Handover
flow per
app
upmtappmon
Application
Monitor
UCE UPMT Control
Entity
upmtconf
User-space
Kernel
Modulo
xt_UPMT
apps
Modulo
upmt
PAFT
politiche
Eccezioni per applicazione e per traffico locale
Applicazioni
da non gestire
Traffico
broadcast /
multicast
Traffico sulla
rete locale
• Scrittura di un hook Netfilter per
intercettare tutti i pacchetti in uscita
• Rerouting effettuato dall’hook per inoltrare i
pacchetti verso l’interfaccia di uscita corretta
Per ogni interfaccia fisica:
rotta per l’instradamento diretto
sulla sottorete corrispondente
Porting su piattaforma Android
•
•
•
•
Kernel Linux (con qualche modifica)
Applicazioni scritte in Java, eseguite dalla Dalvik VM
Numerosi dispositivi e modelli  Grande diffusione
Open-source: GPLv2 per il kernel, Apache per la
piattaforma
Problemi affrontati nel porting (1)
• Architettura ARM  cross-compilazione
• bionic come libreria C (invece di glibc)
– leggera, licenza Apache, no compatibilità binaria con glibc
• No iproute2
• iptables compilato staticamente, non estendibile
con target personalizzati
• A livello kernel
– No tabelle di routing multiple
– No packet mangling
Problemi affrontati nel porting (2)
Applicazioni scritte in Java 
 il nome file eseguibile è quello della Dalvik VM!
• I processi Android hanno il package name
dell’applicazione nella cmdline (descrittore di memoria)
• Lettura del primo argomento della cmdline 
package name  nome applicazione
Una sola interfaccia di rete attiva e connessa alla volta
• Interfaccia 3G attiva solo se l’interfaccia wifi è spenta o
non associata
• Modifica del codice sorgente di Android per evitarlo 
ROM custom!
Porting di UPMT su Android
Componenti realizzati:
compatibili con Android by design
Kernel custom:
• Patch per il TGID nel socket buffer
• Supporto a tabelle di routing multiple
• Packet mangling in Netfilter
ROM custom:
• Patch per più interfacce connesse
contemporaneamente
• iptables con target UPMT
• iproute2
to kang (verb): to take and make better
Wifi e 3G connessi
contemporaneamente!
Kernel custom UPMT
ROM custom
Performance a livello di sistema
Utilizzazione CPU [%]
Utilizzo CPU sull’Anchor Node
Utilizzo CPU sul Mobile Host
Pacchetti generati [pacchetti/s]
Performance a livello di utente (1)
Performance a livello di utente (2)
Sviluppi futuri
• Porting su Android della Control Entity e, in
particolare, della GUI
• Miglioramenti sul Decision Maker:
– Basato su misure di performance delle interfacce
– Location-based mobility (per-ESSID, per-APN…)
• Ottimizzazioni
– Caching della corrispondenza TGID / nome app
:wq
Grazie per l’attenzione
Alessio Bianchi
Scarica

Gestione della mobilità verticale su base applicazione: progetto e