Dear all, I'd like to enhance the JICMP library in a manner that you can also set the packet size.
This is very important on MPLS network where the mtu size is fixed and can be tested using ping. Just taken a look at the code and it seems that actually we have a 56 byte fixed size packet. Here is the relevant code in ICMPEchoPacket /** * Unique named padding that is placed in front of the incremental padding. */ private static final byte NAMED_PAD[] = { (byte) 'O', (byte) 'p', (byte) 'e', (byte) 'n', (byte) 'N', (byte) 'M', (byte) 'S', (byte) '!' }; /** * Timestamp when packet was sent */ private long m_sent; /** * Timestamp of when packet was received. */ private long m_recv; /** * The thread id of the sender. Effective key for the packet. */ private long m_tid; // thread id /** * Padding used to make the packet conform to the defacto unix ping program * (56 bytes). */ private byte[] m_pad; /** * The ping rtt (microseconds) */ private long m_rtt; /** * This is the amount of padding required to make the ICMP echo request 56 * bytes in length. This is just following the available code for ping ;) */ private static final int PAD_SIZE = 16; And when you construct the packet.... /** * Creates a new discovery ping packet that can be sent to a remote protocol * stack. The ICMP type is set to an Echo Request. The next sequence in the * ICMPHeader base class is set and the sent time is set to the current * time. * * @param tid * The thread id for the packet. * * @see java.lang.System#currentTimeMillis */ public ICMPEchoPacket(long tid) { super(ICMPHeader.TYPE_ECHO_REQUEST, (byte) 0); setNextSequenceId(); m_rtt = 0; m_sent = 0; m_recv = 0; m_tid = tid; m_pad = new byte[PAD_SIZE]; for (int x = 0; x < NAMED_PAD.length && x < PAD_SIZE; x++) m_pad[x] = NAMED_PAD[x]; for (int x = NAMED_PAD.length; x < PAD_SIZE; x++) m_pad[x] = (byte) x; } Now if we add a new constructor we can also set the pad_size so that we can set the packet size: public ICMPEchoPacket(long tid, int pad_size) { super(ICMPHeader.TYPE_ECHO_REQUEST, (byte) 0); setNextSequenceId(); m_rtt = 0; m_sent = 0; m_recv = 0; m_tid = tid; m_pad = new byte[pad_size]; for (int x = 0; x < NAMED_PAD.length && x < pad_size; x++) m_pad[x] = NAMED_PAD[x]; for (int x = NAMED_PAD.length; x < pad_size; x++) m_pad[x] = (byte) x; } We can have packet of any size. We can just add t MAX_PAD_SIZE to prevent creating arbitrary size ICMP row packets. Any suggestion? Antonio ------------------------------------------------------------------------------ Learn Windows Azure Live! Tuesday, Dec 13, 2011 Microsoft is holding a special Learn Windows Azure training event for developers. It will provide a great way to learn Windows Azure and what it provides. You can attend the event by watching it streamed LIVE online. Learn more at http://p.sf.net/sfu/ms-windowsazure _______________________________________________ Please read the OpenNMS Mailing List FAQ: http://www.opennms.org/index.php/Mailing_List_FAQ opennms-devel mailing list To *unsubscribe* or change your subscription options, see the bottom of this page: https://lists.sourceforge.net/lists/listinfo/opennms-devel