[Avanti]  [Indietro]  [Su]  

14.3.5 La struttura degli indirizzi AppleTalk

I socket di tipo PF_APPLETALK sono usati dalla libreria netatalk per implementare la comunicazione secondo il protocollo AppleTalk, uno dei primi protocolli di rete usato nel mondo dei personal computer, usato dalla Apple per connettere fra loro computer e stampanti. Il kernel supporta solo due strati del protocollo, DDP e AARP, e di norma è opportuno usare le funzioni della libreria netatalk, tratteremo qui questo argomento principalmente per mostrare l'uso di un protocollo alternativo.

I socket AppleTalk permettono di usare il protocollo DDP, che è un protocollo a pacchetto, di tipo SOCK_DGRAM; l'argomento protocol di socket deve essere nullo. È altresì possibile usare i socket raw specificando un tipo SOCK_RAW, nel qual caso l'unico valore valido per protocol è ATPROTO_DDP.

Gli indirizzi AppleTalk devono essere specificati tramite una struttura sockaddr_atalk, la cui definizione è riportata in fig. 14.5; la struttura viene dichiarata includendo il file netatalk/at.h.


1: struct sockaddr_atalk { 
2:     sa_family_t     sat_family; /* address family */ 
3:     uint8_t         sat_port;   /* port */ 
4:     struct at_addr  sat_addr;   /* net/node */ 
5: }; 
6: struct at_addr { 
7:     uint16_t        s_net; 
8:     uint8_t         s_node; 
9: }; 
Figura 14.5: La struttura degli indirizzi dei socket AppleTalk sockaddr_atalk.

Il campo sat_family deve essere sempre AF_APPLETALK, mentre il campo sat_port specifica la porta che identifica i vari servizi. Valori inferiori a 129 sono usati per le porte riservate, e possono essere usati solo da processi con i privilegi di amministratore o con la capability CAP_NET_BIND_SERVICE. L'indirizzo remoto è specificato nella struttura sat_addr, e deve essere in network order (vedi sez. 14.4.1); esso è composto da un parte di rete data dal campo s_net, che può assumere il valore AT_ANYNET, che indica una rete generica e vale anche per indicare la rete su cui si è, il singolo nodo è indicato da s_node, e può prendere il valore generico AT_ANYNODE che indica anche il nodo corrente, ed il valore ATADDR_BCAST che indica tutti i nodi della rete.


[Avanti]  [Indietro]  [Su]  
© 2000-2003 Simone Piccardi
Pubblicazione web curata da Mirko Maischberger