[cooja] plugins/analyzers/IPHCPacketAnalyzer: Hack for basic Hop-by-hop extension header handling

This commit is contained in:
Enrico Joerns 2014-06-19 04:28:37 +02:00
parent 3b60d96f39
commit 5ee8c7e178

View file

@ -12,8 +12,10 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
public final static int SICSLOWPAN_DISPATCH_IPV6 = 0x41; /* 01000001 = 65 */ public final static int SICSLOWPAN_DISPATCH_IPV6 = 0x41; /* 01000001 = 65 */
public final static int SICSLOWPAN_DISPATCH_HC1 = 0x42; /* 01000010 = 66 */ public final static int SICSLOWPAN_DISPATCH_HC1 = 0x42; /* 01000010 = 66 */
public final static int SICSLOWPAN_DISPATCH_IPHC = 0x60; /* 011xxxxx = ... */ public final static int SICSLOWPAN_DISPATCH_IPHC = 0x60; /* 011xxxxx = ... */
public final static int SICSLOWPAN_DISPATCH_FRAG1 = 0xc0; /* 1100= 0xxx */
public final static int SICSLOWPAN_DISPATCH_FRAGN = 0xe0; /* 1110= 0xxx */ public final static int EXT_HDR_HOP_BY_HOP = 0;
public final static int EXT_HDR_ROUTING = 43;
public final static int EXT_HDR_FRAGMENT = 44;
/* /*
* Values of fields within the IPHC encoding first byte * Values of fields within the IPHC encoding first byte
@ -404,6 +406,23 @@ public class IPHCPacketAnalyzer extends PacketAnalyzer {
break; break;
} }
} }
} else {
// Skip extension header
// XXX TODO: Handle others, too?
if (proto == EXT_HDR_HOP_BY_HOP) {
proto = packet.get(hc06_ptr) & 0xFF;
// header length is length specified in field, rounded up to 64 bit
int hdr_len = ((packet.get(hc06_ptr + 1) / 8) + 1) * 8;
hc06_ptr += hdr_len;
// UDP hadling
if (proto == PROTO_UDP) {
srcPort = packet.getInt(hc06_ptr, 2) & 0xFFFF;
destPort = packet.getInt(hc06_ptr + 2, 2) & 0xFFFF;
hc06_ptr += 4;
}
}
} }
// /* IP length field. */ // /* IP length field. */