= Il package network = Nel package {{{ntk.network}}} ci sono (nel modulo interfaces) le classi base {{{BaseNIC}}} e {{{BaseRoute}}}, che sono usate come classi base per le classi {{{NIC}}} e {{{Route}}} specifiche della piattaforma usata. Al momento è supportata la piattaforma linux. Queste classi forniscono metodi per la gestione della routing table vera e propria del kernel e di altri aspetti di rete legati al kernel. Nel package ntk.network, inoltre, è presente il [[../ModuloInet|modulo inet]]. ==== Specializzazione di una singola piattaforma ==== Quando si accede al package {{{ntk.network}}}, automaticamente (nel modulo {{{__init__.py}}}): . viene riconosciuta la piattaforma, . viene importato in {{{ntk.network.backend}}} il modulo ntk/network//adapt.py, . viene fatto un alias {{{ntk.network.NIC}}} e {{{ntk.network.Route}}} verso le relative classi (altrimenti {{{ntk.network.backend.Route}}}...) . viene definita la [[../ClasseNICManager|classe NICManager]]. In conclusione, basta lo statement '''{{{from ntk.network import NICManager, Route}}}''' per avere accesso a: . una istanza della classe {{{NIC}}} per ogni scheda di rete da gestire con Netsukuku; . una riferimento alla classe {{{Route}}} con i metodi statici adatti alla propria piattaforma. ==== Metodi ==== Nelle classi {{{BaseNIC}}} e {{{BaseRoute}}} sono previsti una serie di metodi e attributi standard, che se non vengono implementati nelle classi {{{NIC}}} e {{{Route}}} specifiche della piattaforma dinamicamente caricate, lanciano l'eccezione {{{NotImplementedError}}}. I metodi delle classi NIC sono: * '''up''' per "tirare su" l'interfaccia * '''down''' per "tirare giu" l'interfaccia * '''show''' per visualizzare informazioni sullo stato dell'interfaccia * '''address''' è una property che legge/imposta l'indirizzo dell'interfaccia * '''is_active''' è una readonly property che dice se l'interfaccia è attiva * '''multicast''' è una property che legge/imposta l'abilitazione al multicast * '''filtering''' '''''TODO:''' A cosa serve? Inoltre se gestisce il "reverse path filtering" perché chiamarla solo filtering?'' I metodi delle classi Route sono statici. Essi sono: * '''add(ip, cidr, dev=None, gateway=None)''' per aggiungere una route * '''change(properties)''' per modificare le proprietà di una route * '''delete(ip, cidr, dev=None, gateway=None)''' per rimuovere una route * '''flush()''' Flushes all routes * '''flush_cache()''' Flushes cache * '''ip_forward(enable)''' per abilitare/disabilitare l'ip forwarding Nelle implementazioni linux, queste classi usano il comando {{{ip}}} (con le opzioni link, route, ...) e alcuni files di sistema come {{{/proc/sys/net/ipv4/ip_forward}}}, {{{/proc/sys/net/ipv4/conf/eth0/rp_filter}}}, ...