Liuyongqiang(A)
2014-10-17 06:08:22 UTC
From: liuyongqiang <***@huawei.com>
Signed-off-by: liuyongqiang <***@huawei.com>
---
Makefile.in | 2 ++
ethertype.h | 3 +++
pbb.h | 44 ++++++++++++++++++++++++++++++++++++
print-chdlc.c | 3 +++
print-ether.c | 11 ++++++++-
print-gre.c | 3 +++
print-pbb.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 137 insertions(+), 1 deletion(-)
create mode 100644 pbb.h
create mode 100644 print-pbb.c
diff --git a/Makefile.in b/Makefile.in
index 5879b93..fc61e7c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -209,6 +209,7 @@ LIBNETDISSECT_SRC=\
print-wb.c \
print-zephyr.c \
print-zeromq.c \
+ print-pbb.c \
signature.c \
util.c
@@ -269,6 +270,7 @@ HDR = \
smb.h \
tcp.h \
tcpdump-stdinc.h \
+ pbb.h \
udp.h
TAGHDR = \
diff --git a/ethertype.h b/ethertype.h
index 8039917..b10847e 100644
--- a/ethertype.h
+++ b/ethertype.h
@@ -136,6 +136,9 @@
#ifndef ETHERTYPE_MPLS
#define ETHERTYPE_MPLS 0x8847
#endif
+#ifndef ETHERTYPE_PBB
+#define ETHERTYPE_PBB 0x88e7
+#endif
#ifndef ETHERTYPE_MPLS_MULTI
#define ETHERTYPE_MPLS_MULTI 0x8848
#endif
diff --git a/pbb.h b/pbb.h
new file mode 100644
index 0000000..9db7db6
--- /dev/null
+++ b/pbb.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2001 WIDE Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#define PBB_ISID_MASK 0x00ffffff
+#define PBB_ISID_SHIFT 0
+#define PBB_RES_MASK 0x7000000
+#define PBB_RES_SHIFT 24
+#define PBB_UCA_MASK 0x8000000
+#define PBB_UCA_SHIFT 27
+#define PBB_DEL_MASK 0x10000000
+#define PBB_DEL_SHIFT 28
+#define PBB_PCP_MASK 0xe0000000
+#define PBB_PCP_SHIFT 29
+
+#define PBB_ISID(x) (((x) & PBB_ISID_MASK) >> PBB_ISID_SHIFT)
+#define PBB_RES(x) (((x) & PBB_RES_MASK) >> PBB_RES_SHIFT)
+#define PBB_UCA(x) (((x) & PBB_UCA_MASK) >> PBB_UCA_SHIFT)
+#define PBB_DEL(x) (((x) & PBB_DEL_MASK) >> PBB_DEL_SHIFT)
+#define PBB_PCP(x) (((x)& PBB_PCP_MASK) >> PBB_PCP_SHIFT)
diff --git a/print-chdlc.c b/print-chdlc.c
index 8230c87..c32f8f5 100644
--- a/print-chdlc.c
+++ b/print-chdlc.c
@@ -90,6 +90,9 @@ chdlc_print(netdissect_options *ndo, register const u_char *p, u_int length) {
case ETHERTYPE_MPLS_MULTI:
mpls_print(ndo, p, length);
break;
+ case ETHERTYPE_PBB:
+ pbb_print(ndo, p, length);
+ break;
case ETHERTYPE_ISO:
/* is the fudge byte set ? lets verify by spotting ISO headers */
if (*(p+1) == 0x81 ||
diff --git a/print-ether.c b/print-ether.c
index 49e7803..4f17c13 100644
--- a/print-ether.c
+++ b/print-ether.c
@@ -83,6 +83,7 @@ const struct tok ethertype_values[] = {
{ ETHERTYPE_GEONET, "GeoNet"},
{ ETHERTYPE_CALM_FAST, "CALM FAST"},
{ ETHERTYPE_AOE, "AoE" },
+ { ETHERTYPE_PBB, "802.1ah-Mac-in-Mac" },
{ 0, NULL}
};
@@ -95,7 +96,7 @@ ether_hdr_print(netdissect_options *ndo,
ep = (const struct ether_header *)bp;
- ND_PRINT((ndo, "%s > %s",
+ ND_PRINT((ndo, " %s > %s",
etheraddr_string(ndo, ESRC(ep)),
etheraddr_string(ndo, EDST(ep))));
@@ -232,6 +233,10 @@ recurse:
if (!ndo->ndo_suppress_default_print)
ND_DEFAULTPRINT(p, caplen);
+ } else {
+ if (ether_type == ETHERTYPE_PBB){
+ ether_hdr_print(ndo, (u_char *)ep, orig_length);
+ }
}
}
}
@@ -406,6 +411,10 @@ ethertype_print(netdissect_options *ndo,
mpls_print(ndo, p, length);
return (1);
+ case ETHERTYPE_PBB:
+ pbb_print(ndo, p, length);
+ return(1);
+
case ETHERTYPE_TIPC:
tipc_print(ndo, p, length, caplen);
return (1);
diff --git a/print-gre.c b/print-gre.c
index 4d7705f..ab750ce 100644
--- a/print-gre.c
+++ b/print-gre.c
@@ -206,6 +206,9 @@ gre_print_0(netdissect_options *ndo, const u_char *bp, u_int length)
case ETHERTYPE_MPLS:
mpls_print(ndo, bp, len);
break;
+ case ETHERTYPE_PBB:
+ pbb_print(ndo, bp, len);
+ break;
case ETHERTYPE_IPX:
ipx_print(ndo, bp, len);
break;
diff --git a/print-pbb.c b/print-pbb.c
new file mode 100644
index 0000000..df4e430
--- /dev/null
+++ b/print-pbb.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2001 WIDE Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#define NETDISSECT_REWORKED
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include "interface.h"
+#include "extract.h" /* must come after interface.h */
+#include "pbb.h"
+
+/*
+ * RFC3032: PBB stack encoding
+ */
+void
+pbb_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const u_char *p;
+ uint32_t pbb_entry;
+ uint16_t pbb_stack_depth = 0;
+
+ p = bp;
+ ND_PRINT((ndo, "PBB,"));
+ ND_TCHECK2(*p, sizeof(pbb_entry));
+ pbb_entry = EXTRACT_32BITS(p);
+ ND_PRINT((ndo, "I-SID %u", PBB_ISID(pbb_entry)));
+ ND_PRINT((ndo, ", RES %u", PBB_RES(pbb_entry)));
+ ND_PRINT((ndo, ", UCA %u", PBB_UCA(pbb_entry)));
+ ND_PRINT((ndo, ", DEL %u", PBB_DEL(pbb_entry)));
+ ND_PRINT((ndo, ", PCP %u ", PBB_PCP(pbb_entry)));
+
+ return;
+
+trunc:
+ ND_PRINT((ndo, "[|PBB]"));
+}
+
+
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */
Signed-off-by: liuyongqiang <***@huawei.com>
---
Makefile.in | 2 ++
ethertype.h | 3 +++
pbb.h | 44 ++++++++++++++++++++++++++++++++++++
print-chdlc.c | 3 +++
print-ether.c | 11 ++++++++-
print-gre.c | 3 +++
print-pbb.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 137 insertions(+), 1 deletion(-)
create mode 100644 pbb.h
create mode 100644 print-pbb.c
diff --git a/Makefile.in b/Makefile.in
index 5879b93..fc61e7c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -209,6 +209,7 @@ LIBNETDISSECT_SRC=\
print-wb.c \
print-zephyr.c \
print-zeromq.c \
+ print-pbb.c \
signature.c \
util.c
@@ -269,6 +270,7 @@ HDR = \
smb.h \
tcp.h \
tcpdump-stdinc.h \
+ pbb.h \
udp.h
TAGHDR = \
diff --git a/ethertype.h b/ethertype.h
index 8039917..b10847e 100644
--- a/ethertype.h
+++ b/ethertype.h
@@ -136,6 +136,9 @@
#ifndef ETHERTYPE_MPLS
#define ETHERTYPE_MPLS 0x8847
#endif
+#ifndef ETHERTYPE_PBB
+#define ETHERTYPE_PBB 0x88e7
+#endif
#ifndef ETHERTYPE_MPLS_MULTI
#define ETHERTYPE_MPLS_MULTI 0x8848
#endif
diff --git a/pbb.h b/pbb.h
new file mode 100644
index 0000000..9db7db6
--- /dev/null
+++ b/pbb.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2001 WIDE Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#define PBB_ISID_MASK 0x00ffffff
+#define PBB_ISID_SHIFT 0
+#define PBB_RES_MASK 0x7000000
+#define PBB_RES_SHIFT 24
+#define PBB_UCA_MASK 0x8000000
+#define PBB_UCA_SHIFT 27
+#define PBB_DEL_MASK 0x10000000
+#define PBB_DEL_SHIFT 28
+#define PBB_PCP_MASK 0xe0000000
+#define PBB_PCP_SHIFT 29
+
+#define PBB_ISID(x) (((x) & PBB_ISID_MASK) >> PBB_ISID_SHIFT)
+#define PBB_RES(x) (((x) & PBB_RES_MASK) >> PBB_RES_SHIFT)
+#define PBB_UCA(x) (((x) & PBB_UCA_MASK) >> PBB_UCA_SHIFT)
+#define PBB_DEL(x) (((x) & PBB_DEL_MASK) >> PBB_DEL_SHIFT)
+#define PBB_PCP(x) (((x)& PBB_PCP_MASK) >> PBB_PCP_SHIFT)
diff --git a/print-chdlc.c b/print-chdlc.c
index 8230c87..c32f8f5 100644
--- a/print-chdlc.c
+++ b/print-chdlc.c
@@ -90,6 +90,9 @@ chdlc_print(netdissect_options *ndo, register const u_char *p, u_int length) {
case ETHERTYPE_MPLS_MULTI:
mpls_print(ndo, p, length);
break;
+ case ETHERTYPE_PBB:
+ pbb_print(ndo, p, length);
+ break;
case ETHERTYPE_ISO:
/* is the fudge byte set ? lets verify by spotting ISO headers */
if (*(p+1) == 0x81 ||
diff --git a/print-ether.c b/print-ether.c
index 49e7803..4f17c13 100644
--- a/print-ether.c
+++ b/print-ether.c
@@ -83,6 +83,7 @@ const struct tok ethertype_values[] = {
{ ETHERTYPE_GEONET, "GeoNet"},
{ ETHERTYPE_CALM_FAST, "CALM FAST"},
{ ETHERTYPE_AOE, "AoE" },
+ { ETHERTYPE_PBB, "802.1ah-Mac-in-Mac" },
{ 0, NULL}
};
@@ -95,7 +96,7 @@ ether_hdr_print(netdissect_options *ndo,
ep = (const struct ether_header *)bp;
- ND_PRINT((ndo, "%s > %s",
+ ND_PRINT((ndo, " %s > %s",
etheraddr_string(ndo, ESRC(ep)),
etheraddr_string(ndo, EDST(ep))));
@@ -232,6 +233,10 @@ recurse:
if (!ndo->ndo_suppress_default_print)
ND_DEFAULTPRINT(p, caplen);
+ } else {
+ if (ether_type == ETHERTYPE_PBB){
+ ether_hdr_print(ndo, (u_char *)ep, orig_length);
+ }
}
}
}
@@ -406,6 +411,10 @@ ethertype_print(netdissect_options *ndo,
mpls_print(ndo, p, length);
return (1);
+ case ETHERTYPE_PBB:
+ pbb_print(ndo, p, length);
+ return(1);
+
case ETHERTYPE_TIPC:
tipc_print(ndo, p, length, caplen);
return (1);
diff --git a/print-gre.c b/print-gre.c
index 4d7705f..ab750ce 100644
--- a/print-gre.c
+++ b/print-gre.c
@@ -206,6 +206,9 @@ gre_print_0(netdissect_options *ndo, const u_char *bp, u_int length)
case ETHERTYPE_MPLS:
mpls_print(ndo, bp, len);
break;
+ case ETHERTYPE_PBB:
+ pbb_print(ndo, bp, len);
+ break;
case ETHERTYPE_IPX:
ipx_print(ndo, bp, len);
break;
diff --git a/print-pbb.c b/print-pbb.c
new file mode 100644
index 0000000..df4e430
--- /dev/null
+++ b/print-pbb.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2001 WIDE Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#define NETDISSECT_REWORKED
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include "interface.h"
+#include "extract.h" /* must come after interface.h */
+#include "pbb.h"
+
+/*
+ * RFC3032: PBB stack encoding
+ */
+void
+pbb_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const u_char *p;
+ uint32_t pbb_entry;
+ uint16_t pbb_stack_depth = 0;
+
+ p = bp;
+ ND_PRINT((ndo, "PBB,"));
+ ND_TCHECK2(*p, sizeof(pbb_entry));
+ pbb_entry = EXTRACT_32BITS(p);
+ ND_PRINT((ndo, "I-SID %u", PBB_ISID(pbb_entry)));
+ ND_PRINT((ndo, ", RES %u", PBB_RES(pbb_entry)));
+ ND_PRINT((ndo, ", UCA %u", PBB_UCA(pbb_entry)));
+ ND_PRINT((ndo, ", DEL %u", PBB_DEL(pbb_entry)));
+ ND_PRINT((ndo, ", PCP %u ", PBB_PCP(pbb_entry)));
+
+ return;
+
+trunc:
+ ND_PRINT((ndo, "[|PBB]"));
+}
+
+
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */
--
1.9.4.msysgit.1
1.9.4.msysgit.1