diff options
author | Guy Harris <guy@alum.mit.edu> | 2010-01-04 12:06:40 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2010-01-04 12:06:40 -0800 |
commit | add31c2e28feab1bf0aec0fc0ba494a7efc5fd4e (patch) | |
tree | 8babd2341ccedb683f288b5a69e0a33ebf824e35 | |
parent | ded813e2788df55587e4720104663efc9cd839a0 (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.c | 28 | ||||
-rw-r--r-- | pcap.c | 2 | ||||
-rw-r--r-- | pcap/bpf.h | 8 | ||||
-rw-r--r-- | savefile.c | 12 |
4 files changed, 46 insertions, 4 deletions
@@ -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: @@ -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 }; @@ -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 @@ -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 } }; |