20. Comportamento dell'agente di relay
20. Comportamento dell'agente di relay
L'agente di relay PUÒ essere configurato per usare un elenco di indirizzi di destinazione, che PUÒ includere indirizzi unicast, l'indirizzo multicast All_DHCP_Servers, o altri indirizzi selezionati dall'amministratore di rete. Se l'agente di relay non è stato esplicitamente configurato, DEVE usare l'indirizzo multicast All_DHCP_Servers come predefinito.
Se l'agente di relay inoltra messaggi all'indirizzo multicast All_DHCP_Servers o ad altri indirizzi multicast, imposta il campo Hop Limit a 32.
20.1. Inoltro di un messaggio client o di un messaggio Relay-forward
Un agente di relay inoltra sia messaggi dai client che messaggi Relay-forward da altri agenti di relay. Quando un agente di relay riceve un messaggio valido da inoltrare, costruisce un nuovo messaggio Relay-forward. L'agente di relay copia l'indirizzo sorgente dall'intestazione del datagramma IP in cui il messaggio è stato ricevuto nel campo peer-address del messaggio Relay-forward. L'agente di relay copia il messaggio DHCP ricevuto (escluso qualsiasi intestazione IP o UDP) in un'opzione Relay Message nel nuovo messaggio. L'agente di relay aggiunge al messaggio Relay-forward qualsiasi altra opzione che è configurato per includere.
20.1.1. Inoltro di un messaggio da un client
Se l'agente di relay ha ricevuto il messaggio da inoltrare da un client, l'agente di relay inserisce nel campo link-address un indirizzo globale o con ambito di sito con un prefisso assegnato al link su cui il client dovrebbe essere assegnato a un indirizzo. Questo indirizzo sarà usato dal server per determinare il link da cui al client deve essere assegnato un indirizzo e altre informazioni di configurazione. L'hop-count nel messaggio Relay-forward è impostato a 0.
Se l'agente di relay non può usare l'indirizzo nel campo link-address per identificare l'interfaccia attraverso cui la risposta al client sarà inoltrata, l'agente di relay DEVE includere un'opzione Interface-id (si veda la sezione 22.18) nel messaggio Relay-forward. Il server includerà l'opzione Interface-id nel suo messaggio Relay-reply. L'agente di relay compila il campo link-address come descritto nel paragrafo precedente indipendentemente dal fatto che l'agente di relay includa o meno un'opzione Interface-id nel messaggio Relay-forward.
20.1.2. Inoltro di un messaggio da un agente di relay
Se il messaggio ricevuto dall'agente di relay è un messaggio Relay-forward e l'hop-count nel messaggio è maggiore o uguale a HOP_COUNT_LIMIT, l'agente di relay scarta il messaggio ricevuto.
L'agente di relay copia l'indirizzo sorgente dal datagramma IP in cui il messaggio è stato ricevuto dal client nel campo peer-address nel messaggio Relay-forward e imposta il campo hop-count al valore del campo hop-count nel messaggio ricevuto incrementato di 1.
Se l'indirizzo sorgente dall'intestazione del datagramma IP del messaggio ricevuto è un indirizzo globale o site-local (e il dispositivo su cui è in esecuzione l'agente di relay appartiene a un solo sito), l'agente di relay imposta il campo link-address a 0; altrimenti l'agente di relay imposta il campo link-address a un indirizzo globale o site-local assegnato all'interfaccia su cui il messaggio è stato ricevuto, o include un'opzione Interface-ID per identificare l'interfaccia su cui il messaggio è stato ricevuto.
20.2. Inoltro di un messaggio Relay-reply
L'agente di relay elabora qualsiasi opzione inclusa nel messaggio Relay-reply oltre all'opzione Relay Message, e quindi scarta tali opzioni.
L'agente di relay estrae il messaggio dall'opzione Relay Message e lo inoltra all'indirizzo contenuto nel campo peer-address del messaggio Relay-reply.
Se il messaggio Relay-reply include un'opzione Interface-id, l'agente di relay inoltra il messaggio dal server al client sul link identificato dall'opzione Interface-id. Altrimenti, se il campo link-address non è impostato a zero, l'agente di relay inoltra il messaggio sul link identificato dal campo link-address.
20.3. Costruzione di messaggi Relay-reply
Un server usa un messaggio Relay-reply per restituire una risposta a un client se il messaggio originale dal client è stato inoltrato al server in un messaggio Relay-forward, o per inviare un messaggio Reconfigure a un client se il server non ha un indirizzo che può usare per inviare il messaggio direttamente al client.
Una risposta al client DEVE essere inoltrata attraverso gli stessi agenti di relay del messaggio originale del client. Il server fa ciò accadere creando un messaggio Relay-reply che include un'opzione Relay Message contenente il messaggio per il successivo agente di relay nel percorso di ritorno al client. Il messaggio Relay-reply contenuto include un'altra opzione Relay Message da inviare al successivo agente di relay, e così via. Il server deve registrare i contenuti dei campi peer-address nei messaggi ricevuti così può costruire il messaggio Relay-reply appropriato che trasporta la risposta dal server.
Per esempio, se il client C ha inviato un messaggio che è stato inoltrato dall'agente di relay A all'agente di relay B e poi al server, il server invierebbe il seguente messaggio Relay-Reply all'agente di relay B:
msg-type: RELAY-REPLY
hop-count: 1
link-address: 0
peer-address: A
Relay Message option, contenente:
msg-type: RELAY-REPLY
hop-count: 0
link-address: indirizzo dal link a cui C è collegato
peer-address: C
Relay Message option: <risposta dal server>
Quando invia un messaggio Reconfigure a un client attraverso un agente di relay, il server crea un messaggio Relay-reply che include un'opzione Relay Message contenente il messaggio Reconfigure per il successivo agente di relay nel percorso di ritorno al client. Il server imposta il campo peer-address nell'intestazione del messaggio Relay-reply all'indirizzo del client, e imposta il campo link-address come richiesto dall'agente di relay per inoltrare il messaggio Reconfigure al client. Il server ottiene gli indirizzi del client e dell'agente di relay attraverso l'interazione precedente con il client o attraverso qualche meccanismo esterno.