7. Elementi di procedura di v3MP
Questa sezione descrive la procedura che il modello di elaborazione messaggi SNMPv3 segue quando genera e elabora messaggi SNMP. Il modello di elaborazione messaggi SNMPv3 interagisce con il sottosistema di sicurezza durante la generazione e l'elaborazione dei messaggi.
7.1. Preparazione di un messaggio SNMP in uscita
Questa sezione descrive la procedura che il modello di elaborazione messaggi SNMPv3 segue quando prepara un messaggio SNMP in uscita.
Questa procedura viene chiamata dal dispatcher utilizzando l'interfaccia di servizio astratta prepareOutgoingMessage.
Procedura:
-
Il modello di elaborazione messaggi utilizza il Local Configuration Datastore (LCD) per determinare la dimensione massima del messaggio supportata dal motore SNMP locale. Questo è rappresentato da snmpEngineMaxMessageSize come definito in [RFC3411]. Il modello di elaborazione messaggi determina anche lo snmpEngineID del motore SNMP locale. Questo è rappresentato da snmpEngineID come definito in [RFC3411].
-
Se la lunghezza di contextEngineID è zero o non è uguale allo snmpEngineID del motore SNMP locale:
a) Se il valore di pduType è un tipo di PDU di classe confermata (Get, GetNext, GetBulk, Set o Inform):
- v3MP crea un msgID. Il msgID viene utilizzato per coordinare richiesta e risposta.
b) Se il valore di pduType è un tipo di PDU di classe non confermata (Trap, Report, Response):
- v3MP crea un msgID. Il msgID non viene utilizzato per coordinare richiesta e risposta, ma viene utilizzato internamente da v3MP.
-
v3MP crea msgMaxSize. msgMaxSize è il valore minimo di:
- la dimensione massima del messaggio supportata dal motore SNMP locale (snmpEngineMaxMessageSize), e
- la dimensione massima del messaggio che può essere supportata dal dominio di trasporto e dall'indirizzo di trasporto utilizzati per inviare il messaggio.
-
v3MP crea msgFlags. msgFlags viene creato in base a securityLevel:
- Se securityLevel specifica noAuthNoPriv, msgFlags bit auth = 0 e bit priv = 0.
- Se securityLevel specifica authNoPriv, msgFlags bit auth = 1 e bit priv = 0.
- Se securityLevel specifica authPriv, msgFlags bit auth = 1 e bit priv = 1.
-
Se pduType è un tipo di PDU di classe confermata, il bit reportable di msgFlags viene impostato su 1. Altrimenti, il bit reportable di msgFlags viene impostato su 0.
-
v3MP crea un scopedPDU utilizzando i valori di contextEngineID, contextName e PDU.
-
v3MP crea il campo msgSecurityParameters del messaggio in uscita. Questo viene fatto chiamando il modello di sicurezza identificato dal parametro securityModel utilizzando l'interfaccia di servizio astratta generateRequestMsg o generateResponseMsg, a seconda dei casi.
a) Durante la preparazione di una richiesta o notifica, v3MP chiama il modello di sicurezza utilizzando l'interfaccia di servizio astratta generateRequestMsg:
statusInformation = generateRequestMsg(
IN messageProcessingModel -- in questo caso SNMPv3
IN globalData -- msgID, msgMaxSize, msgFlags, msgSecurityModel
IN maxMessageSize -- dimensione massima messaggio determinata sopra
IN securityModel -- modello di sicurezza utilizzato
IN securityEngineID -- motore SNMP autorevole
IN securityName -- principale
IN securityLevel -- livello di sicurezza richiesto
IN scopedPDU -- messaggio da proteggere
OUT securityParameters -- riempito dal modello di sicurezza
OUT wholeMsg -- messaggio completamente generato
OUT wholeMsgLength -- lunghezza del messaggio generato
)
b) Durante la preparazione di una risposta, v3MP chiama il modello di sicurezza utilizzando l'interfaccia di servizio astratta generateResponseMsg:
statusInformation = generateResponseMsg(
IN messageProcessingModel -- in questo caso SNMPv3
IN globalData -- msgID, msgMaxSize, msgFlags, msgSecurityModel
IN maxMessageSize -- dimensione massima messaggio determinata sopra
IN securityModel -- modello di sicurezza utilizzato
IN securityEngineID -- motore SNMP autorevole
IN securityName -- principale
IN securityLevel -- livello di sicurezza
IN scopedPDU -- messaggio da proteggere
IN securityStateReference -- riferimento a informazioni di stato di sicurezza
OUT securityParameters -- riempito dal modello di sicurezza
OUT wholeMsg -- messaggio completamente generato
OUT wholeMsgLength -- lunghezza del messaggio generato
)
-
Se statusInformation indica un errore, v3MP restituisce statusInformation al dispatcher. L'elaborazione del messaggio viene interrotta.
-
Se statusInformation indica successo, v3MP restituisce outgoingMessage e outgoingMessageLength al dispatcher.
7.2. Preparazione degli elementi dati da un messaggio SNMP ricevuto
Questa sezione descrive la procedura che il modello di elaborazione messaggi SNMPv3 segue quando prepara elementi dati da un messaggio SNMP ricevuto.
Questa procedura viene chiamata dal dispatcher utilizzando l'interfaccia di servizio astratta prepareDataElements.
Procedura:
-
v3MP analizza il messaggio ricevuto per estrarre i seguenti campi:
- msgVersion
- msgID
- msgMaxSize
- msgFlags
- msgSecurityModel
- msgSecurityParameters
- scopedPduData
-
Se msgVersion non è 3, v3MP restituisce un errore al dispatcher. L'elaborazione del messaggio viene interrotta.
-
Se scopedPduData non può essere analizzato, il contatore snmpInASNParseErrs [RFC3418] viene incrementato. v3MP restituisce un errore al dispatcher. L'elaborazione del messaggio viene interrotta.
-
msgFlags viene analizzato per estrarre i bit auth, priv e reportable.
-
Se il bit auth è 0 e il bit priv è 1, questo è un errore. Il contatore snmpInvalidMsgs [RFC3418] viene incrementato. v3MP restituisce un errore al dispatcher. L'elaborazione del messaggio viene interrotta.
-
Determinare securityLevel da msgFlags:
- Se bit auth = 0 e bit priv = 0, allora securityLevel = noAuthNoPriv
- Se bit auth = 1 e bit priv = 0, allora securityLevel = authNoPriv
- Se bit auth = 1 e bit priv = 1, allora securityLevel = authPriv
-
v3MP chiama il modello di sicurezza identificato da msgSecurityModel utilizzando l'interfaccia di servizio astratta processIncomingMsg:
statusInformation = processIncomingMsg(
IN messageProcessingModel -- in questo caso SNMPv3
IN maxMessageSize -- dimensione massima messaggio determinata dal mittente
IN securityParameters -- parametri di sicurezza dal messaggio ricevuto
IN securityModel -- modello di sicurezza utilizzato
IN securityLevel -- livello di sicurezza
IN wholeMsg -- messaggio intero
IN wholeMsgLength -- lunghezza del messaggio intero
OUT securityEngineID -- motore SNMP autorevole
OUT securityName -- identificazione del principale
OUT scopedPDU -- messaggio (in chiaro)
OUT maxSizeResponseScopedPDU -- dimensione massima della PDU risposta
OUT securityStateReference -- riferimento a informazioni di stato di sicurezza
)
-
Se statusInformation indica un errore:
a) Se il bit reportable è 1 e pduType è una PDU di classe confermata, v3MP costruisce una PDU di report utilizzando usmStatsUnknownEngineIDs, usmStatsNotInTimeWindows, usmStatsUnknownUserNames, usmStatsWrongDigests, usmStatsDecryptionErrors o un altro contatore di errore appropriato e chiama il dispatcher utilizzando l'interfaccia di servizio returnResponsePdu.
b) v3MP restituisce un errore al dispatcher. L'elaborazione del messaggio viene interrotta.
-
Se statusInformation indica successo:
a) Analizzare scopedPDU per estrarre:
- contextEngineID
- contextName
- data (PDU)
b) Se scopedPDU non può essere analizzato, il contatore snmpInASNParseErrs viene incrementato. v3MP restituisce un errore al dispatcher. L'elaborazione del messaggio viene interrotta.
-
Analizzare la PDU per determinare pduType e altre informazioni specifiche della PDU:
a) Se la PDU non può essere analizzata, il contatore snmpInASNParseErrs viene incrementato. v3MP restituisce un errore al dispatcher. L'elaborazione del messaggio viene interrotta.
- v3MP restituisce i seguenti elementi dati al dispatcher:
- messageProcessingModel (3 per SNMPv3)
- securityModel
- securityName
- securityLevel
- contextEngineID
- contextName
- pduVersion
- PDU
- pduType
- sendPduHandle (se applicabile, estratto da request-id nella PDU)
- maxSizeResponseScopedPDU
- statusInformation (successo)
- stateReference (securityStateReference dal modello di sicurezza)
- L'elaborazione è completata.