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