aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2010-01-04 12:06:40 -0800
committerGuy Harris <guy@alum.mit.edu>2010-01-04 12:06:40 -0800
commitadd31c2e28feab1bf0aec0fc0ba494a7efc5fd4e (patch)
tree8babd2341ccedb683f288b5a69e0a33ebf824e35
parentded813e2788df55587e4720104663efc9cd839a0 (diff)
Add DLT_IPV4 and DLT_IPV6.
DLT_IPV4 and DLT_IPV6 are like DLT_RAW, except that you know the version of IP. Also, get rid of some duplicate stuff for DLT_IPNET in savefile.c.
-rw-r--r--gencode.c28
-rw-r--r--pcap.c2
-rw-r--r--pcap/bpf.h8
-rw-r--r--savefile.c12
4 files changed, 46 insertions, 4 deletions
diff --git a/gencode.c b/gencode.c
index 7c0702e..629ef5c 100644
--- a/gencode.c
+++ b/gencode.c
@@ -1155,6 +1155,8 @@ init_linktype(p)
return;
case DLT_RAW:
+ case DLT_IPV4:
+ case DLT_IPV6:
off_linktype = -1;
off_macpl = 0;
off_nl = 0;
@@ -3176,6 +3178,32 @@ gen_linktype(proto)
/*NOTREACHED*/
break;
+ case DLT_IPV4:
+ /*
+ * Raw IPv4, so no type field.
+ */
+ if (proto == ETHERTYPE_IP)
+ return gen_true(); /* always true */
+
+ /* Checking for something other than IPv4; always false */
+ return gen_false();
+ /*NOTREACHED*/
+ break;
+
+ case DLT_IPV6:
+ /*
+ * Raw IPv6, so no type field.
+ */
+#ifdef INET6
+ if (proto == ETHERTYPE_IPV6)
+ return gen_true(); /* always true */
+#endif
+
+ /* Checking for something other than IPv6; always false */
+ return gen_false();
+ /*NOTREACHED*/
+ break;
+
case DLT_PPP:
case DLT_PPP_PPPD:
case DLT_PPP_SERIAL:
diff --git a/pcap.c b/pcap.c
index e81cc01..b0cf5f0 100644
--- a/pcap.c
+++ b/pcap.c
@@ -663,6 +663,8 @@ static struct dlt_choice dlt_choices[] = {
DLT_CHOICE(DLT_FC_2_WITH_FRAME_DELIMS, "Fibre Channel FC-2 with frame delimiters"),
DLT_CHOICE(DLT_IPNET, "Solaris ipnet"),
DLT_CHOICE(DLT_CAN_SOCKETCAN, "CAN-bus with SocketCAN headers"),
+ DLT_CHOICE(DLT_IPV4, "Raw IPv4"),
+ DLT_CHOICE(DLT_IPV6, "Raw IPv6"),
DLT_CHOICE_SENTINEL
};
diff --git a/pcap/bpf.h b/pcap/bpf.h
index 9df1011..706ed23 100644
--- a/pcap/bpf.h
+++ b/pcap/bpf.h
@@ -954,12 +954,18 @@ struct bpf_version {
#define DLT_CAN_SOCKETCAN 227
/*
+ * Raw IPv4/IPv6; different from DLT_RAW in that the DLT_ value specifies
+ * whether it's v4 or v6. Requested by Darren Reed <Darren.Reed@Sun.COM>.
+ */
+#define DLT_IPV4 228
+#define DLT_IPV6 229
+
+/*
* IPNET
*/
#define IPNET_OUTBOUND 1
#define IPNET_INBOUND 2
-
/*
* DLT and savefile link type values are split into a class and
* a member of that class. A class value of 0 indicates a regular
diff --git a/savefile.c b/savefile.c
index 1a2f2be..9704625 100644
--- a/savefile.c
+++ b/savefile.c
@@ -793,7 +793,12 @@ static const char rcsid[] _U_ =
*/
#define LINKTYPE_CAN_SOCKETCAN 227
-#define LINKTYPE_IPNET 226
+/*
+ * Raw IPv4/IPv6; different from DLT_RAW in that the DLT_ value specifies
+ * whether it's v4 or v6. Requested by Darren Reed <Darren.Reed@Sun.COM>.
+ */
+#define LINKTYPE_IPV4 228
+#define LINKTYPE_IPV6 229
static struct linktype_map {
@@ -1137,8 +1142,9 @@ static struct linktype_map {
/* CAN frames with SocketCAN headers */
{ DLT_CAN_SOCKETCAN, LINKTYPE_CAN_SOCKETCAN },
- /* Solaris IPNET */
- { DLT_IPNET, LINKTYPE_IPNET },
+ /* Raw IPv4/IPv6 */
+ { DLT_IPV4, LINKTYPE_IPV4 },
+ { DLT_IPV6, LINKTYPE_IPV6 },
{ -1, -1 }
};