/** * Sends a trap using SNMP V1 trap format. * <BR>The trap is sent to the specified <CODE>SnmpPeer</CODE> destination. * The community string used is the one located in the * <CODE>SnmpPeer</CODE> parameters * (<CODE>SnmpParameters.getRdCommunity() </CODE>). * * @param peer The <CODE>SnmpPeer</CODE> destination of the trap. * @param agentAddr The agent address to be used for the trap. * @param enterpOid The enterprise OID to be used for the trap. * @param generic The generic number of the trap. * @param specific The specific number of the trap. * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null. * @param time The time stamp (overwrite the current time). * * @exception IOException An I/O error occurred while sending the trap. * @exception SnmpStatusException If the trap exceeds the limit * defined by <CODE>bufferSize</CODE>. * * @since 1.5 */ @Override public void snmpV1Trap(SnmpPeer peer, SnmpIpAddress agentAddr, SnmpOid enterpOid, int generic, int specific, SnmpVarBindList varBindList, SnmpTimeticks time) throws IOException, SnmpStatusException { SnmpParameters p = (SnmpParameters) peer.getParams(); snmpV1Trap(peer.getDestAddr(), peer.getDestPort(), agentAddr, p.getRdCommunity(), enterpOid, generic, specific, varBindList, time); }
private synchronized void sendTrap(SnmpOid trap, SnmpVarBindList list) { final Iterator<NotificationTarget> iterator = notificationTargets.iterator(); final SnmpAdaptorServer adaptor = (SnmpAdaptorServer) getSnmpAdaptor(); if (adaptor == null) { log.error("sendTrap", "Cannot send trap: adaptor is null."); return; } if (!adaptor.isActive()) { log.config("sendTrap", "Adaptor is not active: trap not sent."); return; } while(iterator.hasNext()) { NotificationTarget target = null; try { target = iterator.next(); SnmpPeer peer = new SnmpPeer(target.getAddress(), target.getPort()); SnmpParameters p = new SnmpParameters(); p.setRdCommunity(target.getCommunity()); peer.setParams(p); log.debug("handleNotification", "Sending trap to " + target.getAddress() + ":" + target.getPort()); adaptor.snmpV2Trap(peer, trap, list, null); }catch(Exception e) { log.error("sendTrap", "Exception occurred while sending trap to [" + target + "]. Exception : " + e); log.debug("sendTrap",e); } } }
private synchronized void sendTrap(SnmpOid trap, SnmpVarBindList list) { final Iterator iterator = notificationTargets.iterator(); final SnmpAdaptorServer adaptor = (SnmpAdaptorServer) getSnmpAdaptor(); if (adaptor == null) { log.error("sendTrap", "Cannot send trap: adaptor is null."); return; } if (!adaptor.isActive()) { log.config("sendTrap", "Adaptor is not active: trap not sent."); return; } while(iterator.hasNext()) { NotificationTarget target = null; try { target = (NotificationTarget) iterator.next(); SnmpPeer peer = new SnmpPeer(target.getAddress(), target.getPort()); SnmpParameters p = new SnmpParameters(); p.setRdCommunity(target.getCommunity()); peer.setParams(p); log.debug("handleNotification", "Sending trap to " + target.getAddress() + ":" + target.getPort()); adaptor.snmpV2Trap(peer, trap, list, null); }catch(Exception e) { log.error("sendTrap", "Exception occured while sending trap to [" + target + "]. Exception : " + e); log.debug("sendTrap",e); } } }
/** * Sends a trap using SNMP V1 trap format. * <BR>The trap is sent to each destination defined in the ACL file * (if available). * If no ACL file or no destinations are available, the trap is sent * to the local host. * * @param generic The generic number of the trap. * @param specific The specific number of the trap. * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null. * * @exception IOException An I/O error occurred while sending the trap. * @exception SnmpStatusException If the trap exceeds the limit defined * by <CODE>bufferSize</CODE>. */ @Override public void snmpV1Trap(int generic, int specific, SnmpVarBindList varBindList) throws IOException, SnmpStatusException { if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag, "snmpV1Trap", "generic=" + generic + ", specific=" + specific); } // First, make an SNMP V1 trap pdu // SnmpPduTrap pdu = new SnmpPduTrap() ; pdu.address = null ; pdu.port = trapPort ; pdu.type = pduV1TrapPdu ; pdu.version = snmpVersionOne ; pdu.community = null ; pdu.enterprise = enterpriseOid ; pdu.genericTrap = generic ; pdu.specificTrap = specific ; pdu.timeStamp = getSysUpTime(); if (varBindList != null) { pdu.varBindList = new SnmpVarBind[varBindList.size()] ; varBindList.copyInto(pdu.varBindList); } else pdu.varBindList = null ; // If the local host cannot be determined, we put 0.0.0.0 in agentAddr try { if (address != null) pdu.agentAddr = handleMultipleIpVersion(address.getAddress()); else pdu.agentAddr = handleMultipleIpVersion(InetAddress.getLocalHost().getAddress()); } catch (UnknownHostException e) { byte[] zeroedAddr = new byte[4]; pdu.agentAddr = handleMultipleIpVersion(zeroedAddr) ; } // Next, send the pdu to all destinations defined in ACL // sendTrapPdu(pdu) ; }
/** * Sends a trap using SNMP V1 trap format. * <BR>The trap is sent to the specified <CODE>InetAddress</CODE> * destination using the specified community string (and the ACL file * is not used). * * @param addr The <CODE>InetAddress</CODE> destination of the trap. * @param cs The community string to be used for the trap. * @param generic The generic number of the trap. * @param specific The specific number of the trap. * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null. * * @exception IOException An I/O error occurred while sending the trap. * @exception SnmpStatusException If the trap exceeds the limit defined * by <CODE>bufferSize</CODE>. */ @Override public void snmpV1Trap(InetAddress addr, String cs, int generic, int specific, SnmpVarBindList varBindList) throws IOException, SnmpStatusException { if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag, "snmpV1Trap", "generic=" + generic + ", specific=" + specific); } // First, make an SNMP V1 trap pdu // SnmpPduTrap pdu = new SnmpPduTrap() ; pdu.address = null ; pdu.port = trapPort ; pdu.type = pduV1TrapPdu ; pdu.version = snmpVersionOne ; if(cs != null) pdu.community = cs.getBytes(); else pdu.community = null ; pdu.enterprise = enterpriseOid ; pdu.genericTrap = generic ; pdu.specificTrap = specific ; pdu.timeStamp = getSysUpTime(); if (varBindList != null) { pdu.varBindList = new SnmpVarBind[varBindList.size()] ; varBindList.copyInto(pdu.varBindList); } else pdu.varBindList = null ; // If the local host cannot be determined, we put 0.0.0.0 in agentAddr try { if (address != null) pdu.agentAddr = handleMultipleIpVersion(address.getAddress()); else pdu.agentAddr = handleMultipleIpVersion(InetAddress.getLocalHost().getAddress()); } catch (UnknownHostException e) { byte[] zeroedAddr = new byte[4]; pdu.agentAddr = handleMultipleIpVersion(zeroedAddr) ; } // Next, send the pdu to the specified destination // if(addr != null) sendTrapPdu(addr, pdu) ; else sendTrapPdu(pdu); }
/** * Sends a trap using SNMP V1 trap format. * <BR>The trap is sent to the specified <CODE>InetAddress</CODE> * destination using the specified parameters (and the ACL file is not * used). * Note that if the specified <CODE>InetAddress</CODE> destination is null, * then the ACL file mechanism is used. * * @param addr The <CODE>InetAddress</CODE> destination of the trap. * @param agentAddr The agent address to be used for the trap. * @param cs The community string to be used for the trap. * @param enterpOid The enterprise OID to be used for the trap. * @param generic The generic number of the trap. * @param specific The specific number of the trap. * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null. * @param time The time stamp (overwrite the current time). * * @exception IOException An I/O error occurred while sending the trap. * @exception SnmpStatusException If the trap exceeds the limit defined * by <CODE>bufferSize</CODE>. * * @since 1.5 */ public void snmpV1Trap(InetAddress addr, SnmpIpAddress agentAddr, String cs, SnmpOid enterpOid, int generic, int specific, SnmpVarBindList varBindList, SnmpTimeticks time) throws IOException, SnmpStatusException { snmpV1Trap(addr, trapPort, agentAddr, cs, enterpOid, generic, specific, varBindList, time); }
private void snmpV1Trap(InetAddress addr, int port, SnmpIpAddress agentAddr, String cs, SnmpOid enterpOid, int generic, int specific, SnmpVarBindList varBindList, SnmpTimeticks time) throws IOException, SnmpStatusException { if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag, "snmpV1Trap", "generic=" + generic + ", specific=" + specific); } // First, make an SNMP V1 trap pdu // SnmpPduTrap pdu = new SnmpPduTrap() ; pdu.address = null ; pdu.port = port ; pdu.type = pduV1TrapPdu ; pdu.version = snmpVersionOne ; //Diff start if(cs != null) pdu.community = cs.getBytes(); else pdu.community = null ; //Diff end // Diff start if(enterpOid != null) pdu.enterprise = enterpOid; else pdu.enterprise = enterpriseOid ; //Diff end pdu.genericTrap = generic ; pdu.specificTrap = specific ; //Diff start if(time != null) pdu.timeStamp = time.longValue(); else pdu.timeStamp = getSysUpTime(); //Diff end if (varBindList != null) { pdu.varBindList = new SnmpVarBind[varBindList.size()] ; varBindList.copyInto(pdu.varBindList); } else pdu.varBindList = null ; if (agentAddr == null) { // If the local host cannot be determined, // we put 0.0.0.0 in agentAddr try { final InetAddress inetAddr = (address!=null)?address:InetAddress.getLocalHost(); agentAddr = handleMultipleIpVersion(inetAddr.getAddress()); } catch (UnknownHostException e) { byte[] zeroedAddr = new byte[4]; agentAddr = handleMultipleIpVersion(zeroedAddr); } } pdu.agentAddr = agentAddr; // Next, send the pdu to the specified destination // // Diff start if(addr != null) sendTrapPdu(addr, pdu) ; else sendTrapPdu(pdu); //End diff }
/** * Sends a trap using SNMP V2 trap format. * <BR>The trap is sent to the specified <CODE>SnmpPeer</CODE> destination. * <BR>The community string used is the one located in the * <CODE>SnmpPeer</CODE> parameters * (<CODE>SnmpParameters.getRdCommunity() </CODE>). * <BR>The variable list included in the outgoing trap is composed of * the following items: * <UL> * <LI><CODE>sysUpTime.0</CODE> with the value specified by * <CODE>time</CODE></LI> * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by * <CODE>trapOid</CODE></LI> * <LI><CODE>all the (oid,values)</CODE> from the specified * <CODE>varBindList</CODE></LI> * </UL> * * @param peer The <CODE>SnmpPeer</CODE> destination of the trap. * @param trapOid The OID identifying the trap. * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null. * @param time The time stamp (overwrite the current time). * * @exception IOException An I/O error occurred while sending the trap. * @exception SnmpStatusException If the trap exceeds the limit * defined by <CODE>bufferSize</CODE>. * * @since 1.5 */ @Override public void snmpV2Trap(SnmpPeer peer, SnmpOid trapOid, SnmpVarBindList varBindList, SnmpTimeticks time) throws IOException, SnmpStatusException { SnmpParameters p = (SnmpParameters) peer.getParams(); snmpV2Trap(peer.getDestAddr(), peer.getDestPort(), p.getRdCommunity(), trapOid, varBindList, time); }
/** * Sends an inform using SNMP V2 inform request format. * <BR>The inform is sent to the specified <CODE>InetAddress</CODE> * destination * using the specified community string. * <BR>The variable list included in the outgoing inform is composed * of the following items: * <UL> * <LI><CODE>sysUpTime.0</CODE> with its current value</LI> * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by * <CODE>trapOid</CODE></LI> * <LI><CODE>all the (oid,values)</CODE> from the specified * <CODE>varBindList</CODE></LI> * </UL> * To send an inform request, the SNMP adaptor server must be active. * * @param addr The <CODE>InetAddress</CODE> destination for this inform * request. * @param cs The community string to be used for the inform request. * @param cb The callback that is invoked when a request is complete. * @param trapOid The OID identifying the trap. * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null. * * @return The inform request object. * * @exception IllegalStateException This method has been invoked * while the SNMP adaptor server was not active. * @exception IOException An I/O error occurred while sending the * inform request. * @exception SnmpStatusException If the inform request exceeds the * limit defined by <CODE>bufferSize</CODE>. */ @Override public SnmpInformRequest snmpInformRequest(InetAddress addr, String cs, SnmpInformHandler cb, SnmpOid trapOid, SnmpVarBindList varBindList) throws IllegalStateException, IOException, SnmpStatusException { return snmpInformRequest(addr, getInformPort(), cs, cb, trapOid, varBindList); }
/** * Sends an inform using SNMP V2 inform request format. * <BR>The inform is sent to the specified <CODE>SnmpPeer</CODE> * destination. * <BR>The community string used is the one located in the * <CODE>SnmpPeer</CODE> parameters * (<CODE>SnmpParameters.getInformCommunity() </CODE>). * <BR>The variable list included in the outgoing inform is composed * of the following items: * <UL> * <LI><CODE>sysUpTime.0</CODE> with its current value</LI> * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by * <CODE>trapOid</CODE></LI> * <LI><CODE>all the (oid,values)</CODE> from the specified * <CODE>varBindList</CODE></LI> * </UL> * To send an inform request, the SNMP adaptor server must be active. * * @param peer The <CODE>SnmpPeer</CODE> destination for this inform * request. * @param cb The callback that is invoked when a request is complete. * @param trapOid The OID identifying the trap. * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null. * * @return The inform request object. * * @exception IllegalStateException This method has been invoked while * the SNMP adaptor server was not active. * @exception IOException An I/O error occurred while sending the * inform request. * @exception SnmpStatusException If the inform request exceeds the * limit defined by <CODE>bufferSize</CODE>. * * @since 1.5 */ @Override public SnmpInformRequest snmpInformRequest(SnmpPeer peer, SnmpInformHandler cb, SnmpOid trapOid, SnmpVarBindList varBindList) throws IllegalStateException, IOException, SnmpStatusException { SnmpParameters p = (SnmpParameters) peer.getParams(); return snmpInformRequest(peer.getDestAddr(), peer.getDestPort(), p.getInformCommunity(), cb, trapOid, varBindList); }
/** * Here we make a response pdu from a request pdu. * We return null if there is no pdu to reply. */ private SnmpPduPacket makeResponsePdu(SnmpPduPacket reqPdu, Object userData) { SnmpAdaptorServer snmpServer = (SnmpAdaptorServer)adaptorServer ; SnmpPduPacket respPdu = null ; snmpServer.updateRequestCounters(reqPdu.type) ; if (reqPdu.varBindList != null) snmpServer.updateVarCounters(reqPdu.type, reqPdu.varBindList.length) ; if (checkPduType(reqPdu)) { respPdu = checkAcl(reqPdu) ; if (respPdu == null) { // reqPdu is accepted by ACLs if (mibs.size() < 1) { if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag, "makeResponsePdu", "Request " + reqPdu.requestId + " received but no MIB registered."); } return makeNoMibErrorPdu((SnmpPduRequest)reqPdu, userData); } switch(reqPdu.type) { case SnmpPduPacket.pduGetRequestPdu: case SnmpPduPacket.pduGetNextRequestPdu: case SnmpPduPacket.pduSetRequestPdu: respPdu = makeGetSetResponsePdu((SnmpPduRequest)reqPdu, userData) ; break ; case SnmpPduPacket.pduGetBulkRequestPdu: respPdu = makeGetBulkResponsePdu((SnmpPduBulk)reqPdu, userData) ; break ; } } else { // reqPdu is rejected by ACLs // respPdu contains the error response to be sent. // We send this response only if authResEnabled is true. if (!snmpServer.getAuthRespEnabled()) { // No response should be sent respPdu = null ; } if (snmpServer.getAuthTrapEnabled()) { // A trap must be sent try { snmpServer.snmpV1Trap(SnmpPduTrap. trapAuthenticationFailure, 0, new SnmpVarBindList()) ; } catch(Exception x) { if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) { SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag, "makeResponsePdu", "Failure when sending authentication trap", x); } } } } } return respPdu ; }
public SnmpInformRequest makeAsyncRequest(InetAddress addr, String cs, SnmpInformHandler cb, SnmpVarBindList fullVbl, int informPort) { throw new RuntimeException("Not implemented."); // TODO Auto-generated method stub }