[cooja] plugins/analyzers: Indention and whitespace cleanups

This commit is contained in:
Enrico Joerns 2014-07-11 02:07:21 +02:00
parent 01bd045570
commit 3e9a780721
7 changed files with 1001 additions and 988 deletions

View File

@ -27,7 +27,6 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
*/ */
package org.contikios.cooja.plugins; package org.contikios.cooja.plugins;
import java.awt.BorderLayout; import java.awt.BorderLayout;
@ -111,6 +110,7 @@ import org.contikios.cooja.util.StringUtils;
@ClassDescription("Radio messages") @ClassDescription("Radio messages")
@PluginType(PluginType.SIM_PLUGIN) @PluginType(PluginType.SIM_PLUGIN)
public class RadioLogger extends VisPlugin { public class RadioLogger extends VisPlugin {
private static Logger logger = Logger.getLogger(RadioLogger.class); private static Logger logger = Logger.getLogger(RadioLogger.class);
private static final long serialVersionUID = -6927091711697081353L; private static final long serialVersionUID = -6927091711697081353L;
@ -290,14 +290,13 @@ public class RadioLogger extends VisPlugin {
/* TODO This entry may represent several hidden connections */ /* TODO This entry may represent several hidden connections */
RadioConnectionLog conn = connections.get(modelRowIndex); RadioConnectionLog conn = connections.get(modelRowIndex);
if (modelColumnIndex == COLUMN_TIME) { if (modelColumnIndex == COLUMN_TIME) {
return return "<html>"
"<html>" + + "Start time (us): " + conn.startTime
"Start time (us): " + conn.startTime + + "<br>"
"<br>" + + "End time (us): " + conn.endTime
"End time (us): " + conn.endTime + + "<br><br>"
"<br><br>" + + "Duration (us): " + (conn.endTime - conn.startTime)
"Duration (us): " + (conn.endTime - conn.startTime) + + "</html>";
"</html>";
} else if (modelColumnIndex == COLUMN_FROM) { } else if (modelColumnIndex == COLUMN_FROM) {
return conn.connection.getSource().getMote().toString(); return conn.connection.getSource().getMote().toString();
} else if (modelColumnIndex == COLUMN_TO) { } else if (modelColumnIndex == COLUMN_TO) {
@ -346,8 +345,8 @@ public class RadioLogger extends VisPlugin {
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) { if (e.getKeyCode() == KeyEvent.VK_SPACE) {
showInAllAction.actionPerformed(null); showInAllAction.actionPerformed(null);
} else if (e.getKeyCode() == KeyEvent.VK_F && } else if (e.getKeyCode() == KeyEvent.VK_F
(e.getModifiers() & KeyEvent.CTRL_MASK) != 0) { && (e.getModifiers() & KeyEvent.CTRL_MASK) != 0) {
searchField.setVisible(true); searchField.setVisible(true);
searchField.requestFocus(); searchField.requestFocus();
searchField.selectAll(); searchField.selectAll();
@ -407,7 +406,6 @@ public class RadioLogger extends VisPlugin {
fileMenu.add(new JMenuItem(saveAction)); fileMenu.add(new JMenuItem(saveAction));
JPopupMenu popupMenu = new JPopupMenu(); JPopupMenu popupMenu = new JPopupMenu();
JMenu focusMenu = new JMenu("Show in"); JMenu focusMenu = new JMenu("Show in");
@ -418,7 +416,6 @@ public class RadioLogger extends VisPlugin {
popupMenu.add(focusMenu); popupMenu.add(focusMenu);
//a group of radio button menu items //a group of radio button menu items
ButtonGroup group = new ButtonGroup(); ButtonGroup group = new ButtonGroup();
JRadioButtonMenuItem rbMenuItem = new JRadioButtonMenuItem( JRadioButtonMenuItem rbMenuItem = new JRadioButtonMenuItem(
createAnalyzerAction("No Analyzer", "none", null, true)); createAnalyzerAction("No Analyzer", "none", null, true));
@ -436,15 +433,15 @@ public class RadioLogger extends VisPlugin {
analyzerMenu.add(rbMenuItem); analyzerMenu.add(rbMenuItem);
/* Load additional analyzers specified by projects (cooja.config) */ /* Load additional analyzers specified by projects (cooja.config) */
String[] projectAnalyzerSuites = String[] projectAnalyzerSuites
gui.getProjectConfig().getStringArrayValue(RadioLogger.class, "ANALYZERS"); = gui.getProjectConfig().getStringArrayValue(RadioLogger.class, "ANALYZERS");
if (projectAnalyzerSuites != null) { if (projectAnalyzerSuites != null) {
for (String suiteName: projectAnalyzerSuites) { for (String suiteName: projectAnalyzerSuites) {
if (suiteName == null || suiteName.trim().isEmpty()) { if (suiteName == null || suiteName.trim().isEmpty()) {
continue; continue;
} }
Class<? extends RadioLoggerAnalyzerSuite> suiteClass = Class<? extends RadioLoggerAnalyzerSuite> suiteClass
gui.tryLoadClass(RadioLogger.this, RadioLoggerAnalyzerSuite.class, suiteName); = gui.tryLoadClass(RadioLogger.this, RadioLoggerAnalyzerSuite.class, suiteName);
try { try {
RadioLoggerAnalyzerSuite suite = suiteClass.newInstance(); RadioLoggerAnalyzerSuite suite = suiteClass.newInstance();
ArrayList<PacketAnalyzer> suiteAnalyzers = suite.getAnalyzers(); ArrayList<PacketAnalyzer> suiteAnalyzers = suite.getAnalyzers();
@ -625,10 +622,10 @@ public class RadioLogger extends VisPlugin {
if (!showDuplicates && row > 0) { if (!showDuplicates && row > 0) {
RadioConnectionLog previous = connections.get(row - 1); RadioConnectionLog previous = connections.get(row - 1);
byte[] previousData = previous.packet.getPacketData(); byte[] previousData = previous.packet.getPacketData();
if (!showDuplicates && if (!showDuplicates
Arrays.equals(previousData, currentData) && && Arrays.equals(previousData, currentData)
previous.connection.getSource() == current.connection.getSource() && && previous.connection.getSource() == current.connection.getSource()
Arrays.equals(previous.connection.getAllDestinations(), current.connection.getAllDestinations())) { && Arrays.equals(previous.connection.getAllDestinations(), current.connection.getAllDestinations())) {
if (connections.get(row - 1).hiddenBy == null) { if (connections.get(row - 1).hiddenBy == null) {
connections.get(row - 1).hides++; connections.get(row - 1).hides++;
connections.get(row).hiddenBy = connections.get(row - 1); connections.get(row).hiddenBy = connections.get(row - 1);
@ -739,27 +736,27 @@ public class RadioLogger extends VisPlugin {
if (packet instanceof ConvertedRadioPacket && packet.getPacketData().length > 0) { if (packet instanceof ConvertedRadioPacket && packet.getPacketData().length > 0) {
byte[] original = ((ConvertedRadioPacket) packet).getOriginalPacketData(); byte[] original = ((ConvertedRadioPacket) packet).getOriginalPacketData();
byte[] converted = ((ConvertedRadioPacket) packet).getPacketData(); byte[] converted = ((ConvertedRadioPacket) packet).getPacketData();
conn.tooltip = "<html><font face=\"Monospaced\">" + conn.tooltip = "<html><font face=\"Monospaced\">"
"<b>Packet data (" + original.length + " bytes)</b><br>" + + "<b>Packet data (" + original.length + " bytes)</b><br>"
"<pre>" + StringUtils.hexDump(original) + "</pre>" + + "<pre>" + StringUtils.hexDump(original) + "</pre>"
"</font><font face=\"Monospaced\">" + + "</font><font face=\"Monospaced\">"
"<b>Cross-level packet data (" + converted.length + " bytes)</b><br>" + + "<b>Cross-level packet data (" + converted.length + " bytes)</b><br>"
"<pre>" + StringUtils.hexDump(converted) + "</pre>" + + "<pre>" + StringUtils.hexDump(converted) + "</pre>"
"</font></html>"; + "</font></html>";
} else if (packet instanceof ConvertedRadioPacket) { } else if (packet instanceof ConvertedRadioPacket) {
byte[] original = ((ConvertedRadioPacket) packet).getOriginalPacketData(); byte[] original = ((ConvertedRadioPacket) packet).getOriginalPacketData();
conn.tooltip = "<html><font face=\"Monospaced\">" + conn.tooltip = "<html><font face=\"Monospaced\">"
"<b>Packet data (" + original.length + " bytes)</b><br>" + + "<b>Packet data (" + original.length + " bytes)</b><br>"
"<pre>" + StringUtils.hexDump(original) + "</pre>" + + "<pre>" + StringUtils.hexDump(original) + "</pre>"
"</font><font face=\"Monospaced\">" + + "</font><font face=\"Monospaced\">"
"<b>No cross-level conversion available</b><br>" + + "<b>No cross-level conversion available</b><br>"
"</font></html>"; + "</font></html>";
} else { } else {
byte[] data = packet.getPacketData(); byte[] data = packet.getPacketData();
conn.tooltip = "<html><font face=\"Monospaced\">" + conn.tooltip = "<html><font face=\"Monospaced\">"
"<b>Packet data (" + data.length + " bytes)</b><br>" + + "<b>Packet data (" + data.length + " bytes)</b><br>"
"<pre>" + StringUtils.hexDump(data) + "</pre>" + + "<pre>" + StringUtils.hexDump(data) + "</pre>"
"</font></html>"; + "</font></html>";
} }
} }
@ -853,6 +850,7 @@ public class RadioLogger extends VisPlugin {
} }
private class RadioConnectionLog { private class RadioConnectionLog {
long startTime; long startTime;
long endTime; long endTime;
RadioConnection connection; RadioConnection connection;
@ -868,11 +866,10 @@ public class RadioLogger extends VisPlugin {
if (data == null) { if (data == null) {
RadioLogger.this.prepareDataString(this); RadioLogger.this.prepareDataString(this);
} }
return return Long.toString(startTime / Simulation.MILLISECOND) + "\t"
Long.toString(startTime / Simulation.MILLISECOND) + "\t" + + connection.getSource().getMote().getID() + "\t"
connection.getSource().getMote().getID() + "\t" + + getDestString(this) + "\t"
getDestString(this) + "\t" + + data;
data;
} }
} }
@ -1016,6 +1013,7 @@ public class RadioLogger extends VisPlugin {
private Action timeLineAction = new AbstractAction("Timeline") { private Action timeLineAction = new AbstractAction("Timeline") {
private static final long serialVersionUID = -4035633464748224192L; private static final long serialVersionUID = -4035633464748224192L;
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
int selectedRow = dataTable.getSelectedRow(); int selectedRow = dataTable.getSelectedRow();
if (selectedRow < 0) return; if (selectedRow < 0) return;
@ -1039,6 +1037,7 @@ public class RadioLogger extends VisPlugin {
private Action logListenerAction = new AbstractAction("Mote output") { private Action logListenerAction = new AbstractAction("Mote output") {
private static final long serialVersionUID = 1985006491187878651L; private static final long serialVersionUID = 1985006491187878651L;
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
int selectedRow = dataTable.getSelectedRow(); int selectedRow = dataTable.getSelectedRow();
if (selectedRow < 0) return; if (selectedRow < 0) return;
@ -1062,9 +1061,11 @@ public class RadioLogger extends VisPlugin {
private Action showInAllAction = new AbstractAction("Timeline and mote output") { private Action showInAllAction = new AbstractAction("Timeline and mote output") {
private static final long serialVersionUID = -3888292108886138128L; private static final long serialVersionUID = -3888292108886138128L;
{ {
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true)); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true));
} }
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
timeLineAction.actionPerformed(null); timeLineAction.actionPerformed(null);
logListenerAction.actionPerformed(null); logListenerAction.actionPerformed(null);
@ -1088,9 +1089,9 @@ public class RadioLogger extends VisPlugin {
String alias = (String) JOptionPane.showInputDialog( String alias = (String) JOptionPane.showInputDialog(
Cooja.getTopParentContainer(), Cooja.getTopParentContainer(),
"Enter alias for all packets with identical payload.\n" + "Enter alias for all packets with identical payload.\n"
"An empty string removes the current alias.\n\n" + + "An empty string removes the current alias.\n\n"
connections.get(selectedRow).data + "\n", + connections.get(selectedRow).data + "\n",
"Create packet payload alias", "Create packet payload alias",
JOptionPane.QUESTION_MESSAGE, JOptionPane.QUESTION_MESSAGE,
null, null,
@ -1147,10 +1148,10 @@ public class RadioLogger extends VisPlugin {
sb.append(c.toString() + "\n"); sb.append(c.toString() + "\n");
} }
return sb.toString(); return sb.toString();
}; }
public void saveConnectionsToFile(String fileName) { public void saveConnectionsToFile(String fileName) {
StringUtils.saveToFile(new File(fileName), getConnectionsString()); StringUtils.saveToFile(new File(fileName), getConnectionsString());
}; }
} }

View File

@ -38,7 +38,6 @@ public class ICMPv6Analyzer extends PacketAnalyzer {
"NEIGHBOR_SOLICITATION", "NEIGHBOR_ADVERTISEMENT", "REDIRECT", "NEIGHBOR_SOLICITATION", "NEIGHBOR_ADVERTISEMENT", "REDIRECT",
"ROUTER RENUMBER", "NODE INFORMATION QUERY", "NODE INFORMATION RESPONSE"}; "ROUTER RENUMBER", "NODE INFORMATION QUERY", "NODE INFORMATION RESPONSE"};
public int analyzePacket(Packet packet, StringBuffer brief, public int analyzePacket(Packet packet, StringBuffer brief,
StringBuffer verbose) { StringBuffer verbose) {
int type = packet.get(0) & 0xff; int type = packet.get(0) & 0xff;
@ -69,8 +68,11 @@ public class ICMPv6Analyzer extends PacketAnalyzer {
int mop = (packet.get(8) >> 3) & 0x07; int mop = (packet.get(8) >> 3) & 0x07;
int dtsn = packet.get(9); int dtsn = packet.get(9);
verbose.append(" InstanceID: " + instanceID + " Version: " + version + verbose.append(" InstanceID: " + instanceID
" Rank:" + rank + " MOP: " + mop + " DTSN: " + dtsn); + " Version: " + version
+ " Rank:" + rank
+ " MOP: " + mop
+ " DTSN: " + dtsn);
packet.consumeBytesStart(8); packet.consumeBytesStart(8);
break; break;

View File

@ -19,23 +19,22 @@ public class IEEE802154Analyzer extends PacketAnalyzer {
public static final int CMDFRAME = 0x03; public static final int CMDFRAME = 0x03;
// private static final byte[] BROADCAST_ADDR = {(byte)0xff, (byte)0xff}; // private static final byte[] BROADCAST_ADDR = {(byte)0xff, (byte)0xff};
private static final String[] typeS = {"-", "D", "A"}; private static final String[] typeS = {"-", "D", "A"};
private static final String[] typeVerbose = {"BEACON", "DATA", "ACK"}; private static final String[] typeVerbose = {"BEACON", "DATA", "ACK"};
private PcapExporter pcapExporter; private PcapExporter pcapExporter;
// private int defaultAddressMode = LONG_ADDRESS; // private int defaultAddressMode = LONG_ADDRESS;
// private byte seqNo = 0; // private byte seqNo = 0;
// private int myPanID = 0xabcd; // private int myPanID = 0xabcd;
public IEEE802154Analyzer(boolean pcap) { public IEEE802154Analyzer(boolean pcap) {
if (pcap) try { if (pcap) {
try {
pcapExporter = new PcapExporter(); pcapExporter = new PcapExporter();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
}
public void setPcapFile(File pcapFile) { public void setPcapFile(File pcapFile) {
if (pcapExporter != null) { if (pcapExporter != null) {
@ -59,6 +58,7 @@ public class IEEE802154Analyzer extends PacketAnalyzer {
/* create a 802.15.4 packet of the bytes and "dispatch" to the /* create a 802.15.4 packet of the bytes and "dispatch" to the
* next handler * next handler
*/ */
public int analyzePacket(Packet packet, StringBuffer brief, StringBuffer verbose) { public int analyzePacket(Packet packet, StringBuffer brief, StringBuffer verbose) {
if (pcapExporter != null) { if (pcapExporter != null) {
@ -126,7 +126,6 @@ public class IEEE802154Analyzer extends PacketAnalyzer {
} }
// int payloadLen = packet.data.length - pos; // int payloadLen = packet.data.length - pos;
brief.append("15.4 "); brief.append("15.4 ");
brief.append(type < typeS.length ? typeS[type] : "?").append(' '); brief.append(type < typeS.length ? typeS[type] : "?").append(' ');
@ -172,10 +171,10 @@ public class IEEE802154Analyzer extends PacketAnalyzer {
if (type == SHORT_ADDRESS) { if (type == SHORT_ADDRESS) {
sb.append(StringUtils.toHex(addr)); sb.append(StringUtils.toHex(addr));
} else if (type == LONG_ADDRESS) { } else if (type == LONG_ADDRESS) {
sb.append(StringUtils.toHex(addr[0]) + StringUtils.toHex(addr[1]) + ":" + sb.append(StringUtils.toHex(addr[0]) + StringUtils.toHex(addr[1]) + ":"
StringUtils.toHex(addr[2]) + StringUtils.toHex(addr[3]) + ":" + + StringUtils.toHex(addr[2]) + StringUtils.toHex(addr[3]) + ":"
StringUtils.toHex(addr[4]) + StringUtils.toHex(addr[5]) + ":" + + StringUtils.toHex(addr[4]) + StringUtils.toHex(addr[5]) + ":"
StringUtils.toHex(addr[6]) + StringUtils.toHex(addr[7])); + StringUtils.toHex(addr[6]) + StringUtils.toHex(addr[7]));
} }
} }
} }

View File

@ -51,9 +51,8 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
public final static int PROTO_TCP = 6; public final static int PROTO_TCP = 6;
public final static int PROTO_ICMP = 58; public final static int PROTO_ICMP = 58;
public final static byte[] UNSPECIFIED_ADDRESS
public final static byte[] UNSPECIFIED_ADDRESS = = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
private static byte[][] addrContexts = new byte[][]{ private static byte[][] addrContexts = new byte[][]{
{(byte) 0xaa, (byte) 0xaa, 0, 0, 0, 0, 0, 0} {(byte) 0xaa, (byte) 0xaa, 0, 0, 0, 0, 0, 0}
@ -89,7 +88,6 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
brief.append("IPHC"); brief.append("IPHC");
/* need to decompress while analyzing - add that later... */ /* need to decompress while analyzing - add that later... */
verbose.append("<b>IPHC HC-06</b><br>"); verbose.append("<b>IPHC HC-06</b><br>");
verbose.append("tf = " + tf + " nhc = " + nhc + " hlim = " + hlim verbose.append("tf = " + tf + " nhc = " + nhc + " hlim = " + hlim
+ " cid = " + cid + " sac = " + sac + " sam = " + sam + " cid = " + cid + " sac = " + sac + " sam = " + sam
@ -115,7 +113,6 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
int srcPort = 0; int srcPort = 0;
int destPort = 0; int destPort = 0;
try { try {
/* Traffic class and flow label */ /* Traffic class and flow label */
if ((packet.get(0) & SICSLOWPAN_IPHC_FL_C) == 0) { if ((packet.get(0) & SICSLOWPAN_IPHC_FL_C) == 0) {
@ -185,6 +182,7 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
break; break;
case SICSLOWPAN_IPHC_SAM_01: /* 64 bits */ case SICSLOWPAN_IPHC_SAM_01: /* 64 bits */
/* copy prefix from context */ /* copy prefix from context */
System.arraycopy(context, 0, srcAddress, 0, 8); System.arraycopy(context, 0, srcAddress, 0, 8);
/* copy IID from packet */ /* copy IID from packet */
packet.copy(hc06_ptr, srcAddress, 8, 8); packet.copy(hc06_ptr, srcAddress, 8, 8);
@ -192,6 +190,7 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
break; break;
case SICSLOWPAN_IPHC_SAM_10: /* 16 bits */ case SICSLOWPAN_IPHC_SAM_10: /* 16 bits */
/* unicast address */ /* unicast address */
System.arraycopy(context, 0, srcAddress, 0, 8); System.arraycopy(context, 0, srcAddress, 0, 8);
/* copy 6 NULL bytes then 2 last bytes of IID */ /* copy 6 NULL bytes then 2 last bytes of IID */
packet.copy(hc06_ptr, srcAddress, 14, 2); packet.copy(hc06_ptr, srcAddress, 14, 2);
@ -199,6 +198,7 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
break; break;
case SICSLOWPAN_IPHC_SAM_11: /* 0-bits */ case SICSLOWPAN_IPHC_SAM_11: /* 0-bits */
/* copy prefix from context */ /* copy prefix from context */
System.arraycopy(context, 0, srcAddress, 0, 8); System.arraycopy(context, 0, srcAddress, 0, 8);
/* infer IID from L2 address */ /* infer IID from L2 address */
System.arraycopy(packet.llsender, 0, srcAddress, System.arraycopy(packet.llsender, 0, srcAddress,
@ -211,10 +211,12 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
switch (packet.get(1) & SICSLOWPAN_IPHC_SAM_11) { switch (packet.get(1) & SICSLOWPAN_IPHC_SAM_11) {
case SICSLOWPAN_IPHC_SAM_00: /* 128 bits */ case SICSLOWPAN_IPHC_SAM_00: /* 128 bits */
/* copy whole address from packet */ /* copy whole address from packet */
packet.copy(hc06_ptr, srcAddress, 0, 16); packet.copy(hc06_ptr, srcAddress, 0, 16);
hc06_ptr += 16; hc06_ptr += 16;
break; break;
case SICSLOWPAN_IPHC_SAM_01: /* 64 bits */ case SICSLOWPAN_IPHC_SAM_01: /* 64 bits */
srcAddress[0] = (byte) 0xfe; srcAddress[0] = (byte) 0xfe;
srcAddress[1] = (byte) 0x80; srcAddress[1] = (byte) 0x80;
/* copy IID from packet */ /* copy IID from packet */
@ -222,6 +224,7 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
hc06_ptr += 8; hc06_ptr += 8;
break; break;
case SICSLOWPAN_IPHC_SAM_10: /* 16 bits */ case SICSLOWPAN_IPHC_SAM_10: /* 16 bits */
srcAddress[0] = (byte) 0xfe; srcAddress[0] = (byte) 0xfe;
srcAddress[1] = (byte) 0x80; srcAddress[1] = (byte) 0x80;
packet.copy(hc06_ptr, srcAddress, 14, 2); packet.copy(hc06_ptr, srcAddress, 14, 2);
@ -229,6 +232,7 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
break; break;
case SICSLOWPAN_IPHC_SAM_11: /* 0 bits */ case SICSLOWPAN_IPHC_SAM_11: /* 0 bits */
/* setup link-local address */ /* setup link-local address */
srcAddress[0] = (byte) 0xfe; srcAddress[0] = (byte) 0xfe;
srcAddress[1] = (byte) 0x80; srcAddress[1] = (byte) 0x80;
/* infer IID from L2 address */ /* infer IID from L2 address */
@ -250,22 +254,26 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
switch (packet.get(1) & SICSLOWPAN_IPHC_DAM_11) { switch (packet.get(1) & SICSLOWPAN_IPHC_DAM_11) {
case SICSLOWPAN_IPHC_DAM_00: /* 128 bits */ case SICSLOWPAN_IPHC_DAM_00: /* 128 bits */
/* copy whole address from packet */ /* copy whole address from packet */
packet.copy(hc06_ptr, destAddress, 0, 16); packet.copy(hc06_ptr, destAddress, 0, 16);
hc06_ptr += 16; hc06_ptr += 16;
break; break;
case SICSLOWPAN_IPHC_DAM_01: /* 48 bits FFXX::00XX:XXXX:XXXX */ case SICSLOWPAN_IPHC_DAM_01: /* 48 bits FFXX::00XX:XXXX:XXXX */
destAddress[0] = (byte) 0xff; destAddress[0] = (byte) 0xff;
destAddress[1] = packet.get(hc06_ptr); destAddress[1] = packet.get(hc06_ptr);
packet.copy(hc06_ptr + 1, destAddress, 11, 5); packet.copy(hc06_ptr + 1, destAddress, 11, 5);
hc06_ptr += 6; hc06_ptr += 6;
break; break;
case SICSLOWPAN_IPHC_DAM_10: /* 32 bits FFXX::00XX:XXXX */ case SICSLOWPAN_IPHC_DAM_10: /* 32 bits FFXX::00XX:XXXX */
destAddress[0] = (byte) 0xff; destAddress[0] = (byte) 0xff;
destAddress[1] = packet.get(hc06_ptr); destAddress[1] = packet.get(hc06_ptr);
packet.copy(hc06_ptr + 1, destAddress, 13, 3); packet.copy(hc06_ptr + 1, destAddress, 13, 3);
hc06_ptr += 4; hc06_ptr += 4;
break; break;
case SICSLOWPAN_IPHC_DAM_11: /* 8 bits FF02::00XX */ case SICSLOWPAN_IPHC_DAM_11: /* 8 bits FF02::00XX */
destAddress[0] = (byte) 0xff; destAddress[0] = (byte) 0xff;
destAddress[1] = (byte) 0x02; destAddress[1] = (byte) 0x02;
destAddress[15] = packet.get(hc06_ptr); destAddress[15] = packet.get(hc06_ptr);
@ -281,6 +289,7 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
switch (packet.get(1) & SICSLOWPAN_IPHC_DAM_11) { switch (packet.get(1) & SICSLOWPAN_IPHC_DAM_11) {
case SICSLOWPAN_IPHC_DAM_01: /* 64 bits */ case SICSLOWPAN_IPHC_DAM_01: /* 64 bits */
System.arraycopy(context, 0, destAddress, 0, 8); System.arraycopy(context, 0, destAddress, 0, 8);
/* copy IID from packet */ /* copy IID from packet */
packet.copy(hc06_ptr, destAddress, 8, 8); packet.copy(hc06_ptr, destAddress, 8, 8);
@ -288,6 +297,7 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
break; break;
case SICSLOWPAN_IPHC_DAM_10: /* 16 bits */ case SICSLOWPAN_IPHC_DAM_10: /* 16 bits */
/* unicast address */ /* unicast address */
System.arraycopy(context, 0, destAddress, 0, 8); System.arraycopy(context, 0, destAddress, 0, 8);
/* copy IID from packet */ /* copy IID from packet */
packet.copy(hc06_ptr, destAddress, 14, 2); packet.copy(hc06_ptr, destAddress, 14, 2);
@ -295,6 +305,7 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
break; break;
case SICSLOWPAN_IPHC_DAM_11: /* 0 bits */ case SICSLOWPAN_IPHC_DAM_11: /* 0 bits */
/* unicast address */ /* unicast address */
System.arraycopy(context, 0, destAddress, 0, 8); System.arraycopy(context, 0, destAddress, 0, 8);
/* infer IID from L2 address */ /* infer IID from L2 address */
System.arraycopy(packet.llreceiver, 0, destAddress, System.arraycopy(packet.llreceiver, 0, destAddress,
@ -305,22 +316,26 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
/* not context based => link local M = 0, DAC = 0 - same as SAC */ /* not context based => link local M = 0, DAC = 0 - same as SAC */
switch (packet.get(1) & SICSLOWPAN_IPHC_DAM_11) { switch (packet.get(1) & SICSLOWPAN_IPHC_DAM_11) {
case SICSLOWPAN_IPHC_DAM_00: /* 128 bits */ case SICSLOWPAN_IPHC_DAM_00: /* 128 bits */
packet.copy(hc06_ptr, destAddress, 0, 16); packet.copy(hc06_ptr, destAddress, 0, 16);
hc06_ptr += 16; hc06_ptr += 16;
break; break;
case SICSLOWPAN_IPHC_DAM_01: /* 64 bits */ case SICSLOWPAN_IPHC_DAM_01: /* 64 bits */
destAddress[0] = (byte) 0xfe; destAddress[0] = (byte) 0xfe;
destAddress[1] = (byte) 0x80; destAddress[1] = (byte) 0x80;
packet.copy(hc06_ptr, destAddress, 8, 8); packet.copy(hc06_ptr, destAddress, 8, 8);
hc06_ptr += 8; hc06_ptr += 8;
break; break;
case SICSLOWPAN_IPHC_DAM_10: /* 16 bits */ case SICSLOWPAN_IPHC_DAM_10: /* 16 bits */
destAddress[0] = (byte) 0xfe; destAddress[0] = (byte) 0xfe;
destAddress[1] = (byte) 0x80; destAddress[1] = (byte) 0x80;
packet.copy(hc06_ptr, destAddress, 14, 2); packet.copy(hc06_ptr, destAddress, 14, 2);
hc06_ptr += 2; hc06_ptr += 2;
break; break;
case SICSLOWPAN_IPHC_DAM_11: /* 0 bits */ case SICSLOWPAN_IPHC_DAM_11: /* 0 bits */
destAddress[0] = (byte) 0xfe; destAddress[0] = (byte) 0xfe;
destAddress[1] = (byte) 0x80; destAddress[1] = (byte) 0x80;
System.arraycopy(packet.llreceiver, 0, destAddress, System.arraycopy(packet.llreceiver, 0, destAddress,
@ -363,7 +378,6 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
} }
} }
// /* IP length field. */ // /* IP length field. */
// if(ip_len == 0) { // if(ip_len == 0) {
// /* This is not a fragmented packet */ // /* This is not a fragmented packet */
@ -374,14 +388,12 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
// SICSLOWPAN_IP_BUF->len[0] = (ip_len - UIP_IPH_LEN) >> 8; // SICSLOWPAN_IP_BUF->len[0] = (ip_len - UIP_IPH_LEN) >> 8;
// SICSLOWPAN_IP_BUF->len[1] = (ip_len - UIP_IPH_LEN) & 0x00FF; // SICSLOWPAN_IP_BUF->len[1] = (ip_len - UIP_IPH_LEN) & 0x00FF;
// } // }
// /* length field in UDP header */ // /* length field in UDP header */
// if(SICSLOWPAN_IP_BUF->proto == UIP_PROTO_UDP) { // if(SICSLOWPAN_IP_BUF->proto == UIP_PROTO_UDP) {
// memcpy(&SICSLOWPAN_UDP_BUF->udplen, ipBuf + len[0], 2); // memcpy(&SICSLOWPAN_UDP_BUF->udplen, ipBuf + len[0], 2);
// } // }
/*--------------------------------------------- */ /*--------------------------------------------- */
} catch (Exception e) { } catch (Exception e) {
// some kind of unexpected error... // some kind of unexpected error...
error = " error during IPHC parsing: " + e.getMessage(); error = " error during IPHC parsing: " + e.getMessage();
@ -391,11 +403,15 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
String protoStr = "" + proto; String protoStr = "" + proto;
if (proto == PROTO_ICMP) { if (proto == PROTO_ICMP) {
protoStr = "ICMPv6"; protoStr = "ICMPv6";
} else if (proto == PROTO_UDP) protoStr = "UDP"; } else if (proto == PROTO_UDP) {
else if (proto == PROTO_TCP) protoStr = "TCP"; protoStr = "UDP";
} else if (proto == PROTO_TCP) {
protoStr = "TCP";
}
verbose.append("<br><b>IPv6 ").append(protoStr).append("</b> TC = " + trafficClass + verbose.append("<br><b>IPv6 ").append(protoStr)
" FL: " + flowLabel + "<br>"); .append("</b> TC = " + trafficClass
+ " FL: " + flowLabel + "<br>");
verbose.append("From "); verbose.append("From ");
printAddress(verbose, srcAddress); printAddress(verbose, srcAddress);
verbose.append(" to "); verbose.append(" to ");
@ -403,8 +419,8 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
if (error != null) verbose.append(" " + error); if (error != null) verbose.append(" " + error);
packet.lastDispatch = (byte) (proto & 0xff); packet.lastDispatch = (byte) (proto & 0xff);
if (proto == PROTO_UDP || proto == PROTO_ICMP || if (proto == PROTO_UDP || proto == PROTO_ICMP
proto == PROTO_TCP) { || proto == PROTO_TCP) {
packet.level = APPLICATION_LEVEL; packet.level = APPLICATION_LEVEL;
return ANALYSIS_OK_CONTINUE; return ANALYSIS_OK_CONTINUE;
} else { } else {
@ -415,13 +431,11 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
public static void printAddress(StringBuffer out, byte[] address) { public static void printAddress(StringBuffer out, byte[] address) {
for (int i = 0; i < 16; i += 2) { for (int i = 0; i < 16; i += 2) {
out.append(StringUtils.toHex((byte) (address[i] & 0xff)) + out.append(StringUtils.toHex((byte) (address[i] & 0xff))
StringUtils.toHex((byte) (address[i + 1] & 0xff))); + StringUtils.toHex((byte) (address[i + 1] & 0xff)));
if (i < 14) { if (i < 14) {
out.append(":"); out.append(":");
} }
} }
} }
} }

View File

@ -4,14 +4,12 @@ import org.contikios.cooja.util.StringUtils;
public class IPv6PacketAnalyzer extends PacketAnalyzer { public class IPv6PacketAnalyzer extends PacketAnalyzer {
public final static int PROTO_UDP = 17; public final static int PROTO_UDP = 17;
public final static int PROTO_TCP = 6; public final static int PROTO_TCP = 6;
public final static int PROTO_ICMP = 58; public final static int PROTO_ICMP = 58;
public final static byte[] UNSPECIFIED_ADDRESS
public final static byte[] UNSPECIFIED_ADDRESS = = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
private static final int IPV6_DISPATCH = 0x41; private static final int IPV6_DISPATCH = 0x41;
@ -25,11 +23,9 @@ public class IPv6PacketAnalyzer extends PacketAnalyzer {
/* if packet has less than 40 bytes it is not interesting ... */ /* if packet has less than 40 bytes it is not interesting ... */
if (packet.size() < 40) return ANALYSIS_FAILED; if (packet.size() < 40) return ANALYSIS_FAILED;
brief.append("IPv6"); brief.append("IPv6");
/* need to decompress while analyzing - add that later... */ /* need to decompress while analyzing - add that later... */
verbose.append("<b>IPv6</b><br>"); verbose.append("<b>IPv6</b><br>");
int pos = 1; int pos = 1;
@ -49,14 +45,18 @@ public class IPv6PacketAnalyzer extends PacketAnalyzer {
String protoStr = "" + proto; String protoStr = "" + proto;
if (proto == PROTO_ICMP) { if (proto == PROTO_ICMP) {
protoStr = "ICMPv6"; protoStr = "ICMPv6";
} else if (proto == PROTO_UDP) protoStr = "UDP"; } else if (proto == PROTO_UDP) {
else if (proto == PROTO_TCP) protoStr = "TCP"; protoStr = "UDP";
} else if (proto == PROTO_TCP) {
protoStr = "TCP";
}
/* consume dispatch + IP header */ /* consume dispatch + IP header */
packet.pos += 41; packet.pos += 41;
verbose.append("<br><b>IPv6 ").append(protoStr).append("</b> TC = " + trafficClass + verbose.append("<br><b>IPv6 ").append(protoStr)
" FL: " + flowLabel + "<br>"); .append("</b> TC = " + trafficClass
+ " FL: " + flowLabel + "<br>");
verbose.append("From "); verbose.append("From ");
printAddress(verbose, srcAddress); printAddress(verbose, srcAddress);
verbose.append(" to "); verbose.append(" to ");
@ -69,13 +69,12 @@ public class IPv6PacketAnalyzer extends PacketAnalyzer {
public static void printAddress(StringBuffer out, byte[] address) { public static void printAddress(StringBuffer out, byte[] address) {
for (int i = 0; i < 16; i += 2) { for (int i = 0; i < 16; i += 2) {
out.append(StringUtils.toHex((byte) (address[i] & 0xff)) + out.append(StringUtils.toHex((byte) (address[i] & 0xff))
StringUtils.toHex((byte) (address[i + 1] & 0xff))); + StringUtils.toHex((byte) (address[i + 1] & 0xff)));
if (i < 14) { if (i < 14) {
out.append(":"); out.append(":");
} }
} }
} }
} }

View File

@ -12,6 +12,7 @@ public abstract class PacketAnalyzer {
public static final int APPLICATION_LEVEL = 3; public static final int APPLICATION_LEVEL = 3;
public static class Packet { public static class Packet {
byte[] data; byte[] data;
int pos; int pos;
int level; int level;
@ -30,7 +31,6 @@ public abstract class PacketAnalyzer {
this.size = data.length; this.size = data.length;
} }
public void consumeBytesStart(int bytes) { public void consumeBytesStart(int bytes) {
pos += bytes; pos += bytes;
} }
@ -39,7 +39,6 @@ public abstract class PacketAnalyzer {
size -= bytes; size -= bytes;
} }
public boolean hasMoreData() { public boolean hasMoreData() {
return size > pos; return size > pos;
} }
@ -61,7 +60,6 @@ public abstract class PacketAnalyzer {
return value; return value;
} }
public byte[] getPayload() { public byte[] getPayload() {
byte[] pload = new byte[size - pos]; byte[] pload = new byte[size - pos];
System.arraycopy(data, pos, pload, 0, pload.length); System.arraycopy(data, pos, pload, 0, pload.length);

View File

@ -31,9 +31,11 @@ public class PcapExporter {
out.writeInt(0); out.writeInt(0);
out.writeInt(4096); out.writeInt(4096);
out.writeInt(195); /* 195 for LINKTYPE_IEEE802_15_4 */ out.writeInt(195); /* 195 for LINKTYPE_IEEE802_15_4 */
out.flush(); out.flush();
System.out.println("Opened pcap file " + pcapFile); System.out.println("Opened pcap file " + pcapFile);
} }
public void closePcap() throws IOException { public void closePcap() throws IOException {
out.close(); out.close();
out = null; out = null;
@ -58,6 +60,4 @@ public class PcapExporter {
} }
} }
} }