Aller au contenu principal

7. Éléments de procédure de v3MP

Cette section décrit la procédure que suit le modèle de traitement de message SNMPv3 lorsqu'il génère et traite des messages SNMP. Le modèle de traitement de message SNMPv3 interagit avec le sous-système de sécurité lors de la génération et du traitement des messages.

7.1. Préparation d'un message SNMP sortant

Cette section décrit la procédure que suit le modèle de traitement de message SNMPv3 lorsqu'il prépare un message SNMP sortant.

Cette procédure est appelée par le répartiteur en utilisant l'interface de service abstraite prepareOutgoingMessage.

Procédure :

  1. Le modèle de traitement de message utilise le Local Configuration Datastore (LCD) pour déterminer la taille maximale de message supportée par le moteur SNMP local. Ceci est représenté par snmpEngineMaxMessageSize tel que défini dans [RFC3411]. Le modèle de traitement de message détermine également le snmpEngineID du moteur SNMP local. Ceci est représenté par snmpEngineID tel que défini dans [RFC3411].

  2. Si la longueur du contextEngineID est zéro ou n'est pas égale au snmpEngineID du moteur SNMP local :

    a) Si la valeur de pduType est un type de PDU de classe confirmée (Get, GetNext, GetBulk, Set ou Inform) :

    • v3MP crée un msgID. Le msgID est utilisé pour coordonner la requête et la réponse.

    b) Si la valeur de pduType est un type de PDU de classe non confirmée (Trap, Report, Response) :

    • v3MP crée un msgID. Le msgID n'est pas utilisé pour coordonner la requête et la réponse, mais est utilisé en interne par v3MP.
  3. v3MP crée msgMaxSize. msgMaxSize est la valeur minimale de :

    • la taille maximale de message supportée par le moteur SNMP local (snmpEngineMaxMessageSize), et
    • la taille maximale de message qui peut être supportée par le domaine de transport et l'adresse de transport utilisés pour envoyer le message.
  4. v3MP crée msgFlags. msgFlags sont créés en fonction de securityLevel :

    • Si securityLevel spécifie noAuthNoPriv, msgFlags bit auth = 0 et bit priv = 0.
    • Si securityLevel spécifie authNoPriv, msgFlags bit auth = 1 et bit priv = 0.
    • Si securityLevel spécifie authPriv, msgFlags bit auth = 1 et bit priv = 1.
  5. Si pduType est un type de PDU de classe confirmée, le bit reportable de msgFlags est défini sur 1. Sinon, le bit reportable de msgFlags est défini sur 0.

  6. v3MP crée un scopedPDU en utilisant les valeurs de contextEngineID, contextName et PDU.

  7. v3MP crée le champ msgSecurityParameters du message sortant. Cela se fait en appelant le modèle de sécurité identifié par le paramètre securityModel en utilisant l'interface de service abstraite generateRequestMsg ou generateResponseMsg, selon le cas.

    a) Lors de la préparation d'une requête ou d'une notification, v3MP appelle le modèle de sécurité en utilisant l'interface de service abstraite generateRequestMsg :

statusInformation = generateRequestMsg(
IN messageProcessingModel -- dans ce cas SNMPv3
IN globalData -- msgID, msgMaxSize, msgFlags, msgSecurityModel
IN maxMessageSize -- taille maximale de message déterminée ci-dessus
IN securityModel -- modèle de sécurité utilisé
IN securityEngineID -- moteur SNMP faisant autorité
IN securityName -- principal
IN securityLevel -- niveau de sécurité demandé
IN scopedPDU -- message à protéger
OUT securityParameters -- rempli par le modèle de sécurité
OUT wholeMsg -- message complètement généré
OUT wholeMsgLength -- longueur du message généré
)

b) Lors de la préparation d'une réponse, v3MP appelle le modèle de sécurité en utilisant l'interface de service abstraite generateResponseMsg :

statusInformation = generateResponseMsg(
IN messageProcessingModel -- dans ce cas SNMPv3
IN globalData -- msgID, msgMaxSize, msgFlags, msgSecurityModel
IN maxMessageSize -- taille maximale de message déterminée ci-dessus
IN securityModel -- modèle de sécurité utilisé
IN securityEngineID -- moteur SNMP faisant autorité
IN securityName -- principal
IN securityLevel -- niveau de sécurité
IN scopedPDU -- message à protéger
IN securityStateReference -- référence aux informations d'état de sécurité
OUT securityParameters -- rempli par le modèle de sécurité
OUT wholeMsg -- message complètement généré
OUT wholeMsgLength -- longueur du message généré
)
  1. Si statusInformation indique une erreur, v3MP renvoie statusInformation au répartiteur. Le traitement du message est arrêté.

  2. Si statusInformation indique un succès, v3MP renvoie outgoingMessage et outgoingMessageLength au répartiteur.

7.2. Préparation des éléments de données à partir d'un message SNMP reçu

Cette section décrit la procédure que suit le modèle de traitement de message SNMPv3 lorsqu'il prépare des éléments de données à partir d'un message SNMP reçu.

Cette procédure est appelée par le répartiteur en utilisant l'interface de service abstraite prepareDataElements.

Procédure :

  1. v3MP analyse le message reçu pour extraire les champs suivants :

    • msgVersion
    • msgID
    • msgMaxSize
    • msgFlags
    • msgSecurityModel
    • msgSecurityParameters
    • scopedPduData
  2. Si msgVersion n'est pas 3, v3MP renvoie une erreur au répartiteur. Le traitement du message est arrêté.

  3. Si scopedPduData ne peut pas être analysé, le compteur snmpInASNParseErrs [RFC3418] est incrémenté. v3MP renvoie une erreur au répartiteur. Le traitement du message est arrêté.

  4. msgFlags sont analysés pour extraire les bits auth, priv et reportable.

  5. Si le bit auth est 0 et le bit priv est 1, c'est une erreur. Le compteur snmpInvalidMsgs [RFC3418] est incrémenté. v3MP renvoie une erreur au répartiteur. Le traitement du message est arrêté.

  6. Déterminez securityLevel à partir de msgFlags :

    • Si bit auth = 0 et bit priv = 0, alors securityLevel = noAuthNoPriv
    • Si bit auth = 1 et bit priv = 0, alors securityLevel = authNoPriv
    • Si bit auth = 1 et bit priv = 1, alors securityLevel = authPriv
  7. v3MP appelle le modèle de sécurité identifié par msgSecurityModel en utilisant l'interface de service abstraite processIncomingMsg :

statusInformation = processIncomingMsg(
IN messageProcessingModel -- dans ce cas SNMPv3
IN maxMessageSize -- taille maximale de message déterminée par l'émetteur
IN securityParameters -- paramètres de sécurité du message reçu
IN securityModel -- modèle de sécurité utilisé
IN securityLevel -- niveau de sécurité
IN wholeMsg -- message entier
IN wholeMsgLength -- longueur du message entier
OUT securityEngineID -- moteur SNMP faisant autorité
OUT securityName -- identification du principal
OUT scopedPDU -- message (en clair)
OUT maxSizeResponseScopedPDU -- taille maximale de la PDU de réponse
OUT securityStateReference -- référence aux informations d'état de sécurité
)
  1. Si statusInformation indique une erreur :

    a) Si le bit reportable est 1 et pduType est une PDU de classe confirmée, v3MP construit une PDU de rapport en utilisant usmStatsUnknownEngineIDs, usmStatsNotInTimeWindows, usmStatsUnknownUserNames, usmStatsWrongDigests, usmStatsDecryptionErrors ou un autre compteur d'erreur approprié et appelle le répartiteur en utilisant l'interface de service returnResponsePdu.

    b) v3MP renvoie une erreur au répartiteur. Le traitement du message est arrêté.

  2. Si statusInformation indique un succès :

    a) Analysez scopedPDU pour extraire :

    • contextEngineID
    • contextName
    • data (PDU)

    b) Si scopedPDU ne peut pas être analysé, le compteur snmpInASNParseErrs est incrémenté. v3MP renvoie une erreur au répartiteur. Le traitement du message est arrêté.

  3. Analysez la PDU pour déterminer pduType et d'autres informations spécifiques à la PDU :

a) Si la PDU ne peut pas être analysée, le compteur snmpInASNParseErrs est incrémenté. v3MP renvoie une erreur au répartiteur. Le traitement du message est arrêté.

  1. v3MP renvoie les éléments de données suivants au répartiteur :
  • messageProcessingModel (3 pour SNMPv3)
  • securityModel
  • securityName
  • securityLevel
  • contextEngineID
  • contextName
  • pduVersion
  • PDU
  • pduType
  • sendPduHandle (le cas échéant, extrait de request-id dans la PDU)
  • maxSizeResponseScopedPDU
  • statusInformation (succès)
  • stateReference (securityStateReference du modèle de sécurité)
  1. Le traitement est terminé.