Hi Joakim,

Thank you for pointing that out. Strictly speaking,
the bug is in the NotificationOriginatorImpl which
does not set the contextEngineID. Nevertheless,
I have updated SNMP4J to use the local engine ID
for NOTIFICATION and INFORM PDUs as contextEngineID
when no contextEngineID is set in the ScopedPDU.

Best regards,
Frank

Joakim Althini wrote:
Hi,

There seems to be a problem when sending informs; the authoritative engine
id is used in the outgoing scopedPDU's

contextEngineID which should identify the source of the data. This should be
used in securityEngineID because
the receiver of an Inform is authoritative, but now both securityEngineID
and contextEngineID contains the authoritative

engine's id which does not seem to be correct.

I have tested sending informs using NetSNMP; then the sending agent's engine
id is used in contextEngineID.

The RFC's are not really crystal clear about this, but I found an IETF
discussion that clarifies it a bit:

http://www.ietf.org/mail-archive/web/isms/current/msg01652.html

I localized where the contextEngineId was set, it's on line 618 in MPv3.java

Best regards

/Joakim Althini, Symsoft

  public int prepareOutgoingMessage(Address transportAddress,

                                    int maxMessageSize,

                                    int messageProcessingModel,

                                    int securityModel,

                                    byte[] securityName,

                                    int securityLevel,

                                    PDU pdu,

                                    boolean expectResponse,

                                    PduHandle sendPduHandle,

                                    Address destTransportAddress,

                                    BEROutputStream outgoingMessage) throws

      IOException {

    if (!(pdu instanceof ScopedPDU)) {

      throw new IllegalArgumentException(

          "MPv3 only accepts ScopedPDU instances as pdu parameter");

    }

    ScopedPDU scopedPDU = (ScopedPDU) pdu;

    // lookup engine ID

    byte[] secEngineID = null;

    OctetString securityEngineID =

        (OctetString) engineIDs.get(transportAddress);

    if (securityEngineID != null) {

      secEngineID = securityEngineID.getValue();

      if (scopedPDU.getContextEngineID().length() == 0) {

        if (logger.isDebugEnabled()) {

          logger.debug("Context engine ID of scoped PDU is empty! Setting it
to authoritative engine ID: "+

                       securityEngineID.toHexString());

        }

        scopedPDU.setContextEngineID(new OctetString(secEngineID)); <--
Should use localEngineID instead!

      }

    }

_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j

--
AGENT++
http://www.agentpp.com
http://www.mibexplorer.com
http://www.mibdesigner.com
_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j

Reply via email to