summaryrefslogtreecommitdiff
path: root/print-mpls.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2010-03-19 11:47:19 -0700
committerGuy Harris <guy@alum.mit.edu>2010-03-19 11:47:19 -0700
commit1b2e1a81e20d5e7bb6c81aefc7572b83aa24cee4 (patch)
tree944b690121b823fe200cacf29f7f521bdecc9f83 /print-mpls.c
parent272333b0ed149132aa39b4a53a6a1105fcff6976 (diff)
downloadtcpdump-1b2e1a81e20d5e7bb6c81aefc7572b83aa24cee4.tar.gz
The draft in question has nothing to do with MPLS; clarify that.
Presumably the idea is that the technique is generally applicable as long as the traffic being carried is either IPv4, IPv6, OSI CLNP, ES-IS, or IS-IS. Also, by the time we get there, we know we've reached the bottom of the MPLS stack (the do loop either fails by running past the end of the packet and going to trunc, or by terminating because we find a label entry with the BOS bit set); there's no need to check for that.
Diffstat (limited to 'print-mpls.c')
-rw-r--r--print-mpls.c119
1 files changed, 65 insertions, 54 deletions
diff --git a/print-mpls.c b/print-mpls.c
index fe15a86e..13ad0fdd 100644
--- a/print-mpls.c
+++ b/print-mpls.c
@@ -109,62 +109,73 @@ mpls_print(const u_char *bp, u_int length)
default:
/*
* Generally there's no indication of protocol in MPLS label
- * encoding, however draft-hsmit-isis-aal5mux-00.txt describes
- * a technique that looks at the first payload byte if the BOS (bottom of stack)
- * bit is set and tries to determine the network layer protocol
- * 0x45-0x4f is IPv4
- * 0x60-0x6f is IPv6
- * 0x81-0x83 is OSI (CLNP,ES-IS,IS-IS)
- * this technique is sometimes known as NULL encapsulation
- * and decoding is particularly useful for control-plane traffic [BGP]
- * which cisco by default sends MPLS encapsulated
+ * encoding.
+ *
+ * However, draft-hsmit-isis-aal5mux-00.txt describes a
+ * technique for encapsulating IS-IS and IP traffic on the
+ * same ATM virtual circuit; you look at the first payload
+ * byte to determine the network layer protocol, based on
+ * the fact that
+ *
+ * 1) the first byte of an IP header is 0x45-0x4f
+ * for IPv4 and 0x60-0x6f for IPv6;
+ *
+ * 2) the first byte of an OSI CLNP packet is 0x81,
+ * the first byte of an OSI ES-IS packet is 0x82,
+ * and the first byte of an OSI IS-IS packet is
+ * 0x83;
+ *
+ * so the network layer protocol can be inferred from the
+ * first byte of the packet, if the protocol is one of the
+ * ones listed above.
+ *
+ * Cisco sends control-plane traffic MPLS-encapsulated in
+ * this fashion.
*/
- if (MPLS_STACK(label_entry)) { /* only do this if the stack bit is set */
- switch(*p) {
-
- case 0x45:
- case 0x46:
- case 0x47:
- case 0x48:
- case 0x49:
- case 0x4a:
- case 0x4b:
- case 0x4c:
- case 0x4d:
- case 0x4e:
- case 0x4f:
- pt = PT_IPV4;
- break;
+ switch(*p) {
+
+ case 0x45:
+ case 0x46:
+ case 0x47:
+ case 0x48:
+ case 0x49:
+ case 0x4a:
+ case 0x4b:
+ case 0x4c:
+ case 0x4d:
+ case 0x4e:
+ case 0x4f:
+ pt = PT_IPV4;
+ break;
- case 0x60:
- case 0x61:
- case 0x62:
- case 0x63:
- case 0x64:
- case 0x65:
- case 0x66:
- case 0x67:
- case 0x68:
- case 0x69:
- case 0x6a:
- case 0x6b:
- case 0x6c:
- case 0x6d:
- case 0x6e:
- case 0x6f:
- pt = PT_IPV6;
- break;
-
- case 0x81:
- case 0x82:
- case 0x83:
- pt = PT_OSI;
- break;
-
- default:
- /* ok bail out - we did not figure out what it is*/
- break;
- }
+ case 0x60:
+ case 0x61:
+ case 0x62:
+ case 0x63:
+ case 0x64:
+ case 0x65:
+ case 0x66:
+ case 0x67:
+ case 0x68:
+ case 0x69:
+ case 0x6a:
+ case 0x6b:
+ case 0x6c:
+ case 0x6d:
+ case 0x6e:
+ case 0x6f:
+ pt = PT_IPV6;
+ break;
+
+ case 0x81:
+ case 0x82:
+ case 0x83:
+ pt = PT_OSI;
+ break;
+
+ default:
+ /* ok bail out - we did not figure out what it is*/
+ break;
}
}