-
Notifications
You must be signed in to change notification settings - Fork 273
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature #727 - Linux SLL version 2 updates
PR #728 cleanup and completion of SLL v2 implementation
- Loading branch information
Showing
15 changed files
with
154 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,10 @@ | ||
/*- | ||
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 | ||
* The Regents of the University of California. All rights reserved. | ||
* The Regents of the University of California. All rights reserved. | ||
* | ||
* This code is derived from the Stanford/CMU enet packet filter, | ||
* (net/enet.c) distributed as part of 4.3BSD, and code contributed | ||
* to Berkeley by Steven McCanne and Van Jacobson both of Lawrence | ||
* to Berkeley by Steven McCanne and Van Jacobson both of Lawrence | ||
* Berkeley Laboratory. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
|
@@ -42,30 +42,30 @@ | |
* For captures on Linux cooked sockets, we construct a fake header | ||
* that includes: | ||
* | ||
* a 2-byte "packet type" which is one of: | ||
* a 2-byte "packet type" which is one of: | ||
* | ||
* LINUX_SLL_HOST packet was sent to us | ||
* LINUX_SLL_BROADCAST packet was broadcast | ||
* LINUX_SLL_MULTICAST packet was multicast | ||
* LINUX_SLL_OTHERHOST packet was sent to somebody else | ||
* LINUX_SLL_OUTGOING packet was sent *by* us; | ||
* LINUX_SLL_HOST packet was sent to us | ||
* LINUX_SLL_BROADCAST packet was broadcast | ||
* LINUX_SLL_MULTICAST packet was multicast | ||
* LINUX_SLL_OTHERHOST packet was sent to somebody else | ||
* LINUX_SLL_OUTGOING packet was sent *by* us; | ||
* | ||
* a 2-byte Ethernet protocol field; | ||
* a 2-byte Ethernet protocol field; | ||
* | ||
* a 2-byte link-layer type; | ||
* a 2-byte link-layer type; | ||
* | ||
* a 2-byte link-layer address length; | ||
* a 2-byte link-layer address length; | ||
* | ||
* an 8-byte source link-layer address, whose actual length is | ||
* specified by the previous value. | ||
* an 8-byte source link-layer address, whose actual length is | ||
* specified by the previous value. | ||
* | ||
* All fields except for the link-layer address are in network byte order. | ||
* | ||
* DO NOT change the layout of this structure, or change any of the | ||
* LINUX_SLL_ values below. If you must change the link-layer header | ||
* for a "cooked" Linux capture, introduce a new DLT_ type (ask | ||
* "[email protected]" for one, so that you don't give it a | ||
* value that collides with a value already being used), and use the | ||
* "tcpdump-workers@lists.tcpdump.org" for one, so that you don't give it | ||
* a value that collides with a value already being used), and use the | ||
* new header in captures of that type, so that programs that can | ||
* handle DLT_LINUX_SLL captures will continue to handle them correctly | ||
* without any change, and so that capture files with different headers | ||
|
@@ -77,54 +77,76 @@ | |
#ifndef _SLL_H_ | ||
#define _SLL_H_ | ||
|
||
#include <pcap/pcap-inttypes.h> | ||
|
||
/* | ||
* A DLT_LINUX_SLL fake link-layer header. | ||
*/ | ||
#define SLL_HDR_LEN 16 /* total header length */ | ||
#define SLL_ADDRLEN 8 /* length of address field */ | ||
#define SLL_HDR_LEN 16 /* total header length */ | ||
#define SLL_ADDRLEN 8 /* length of address field */ | ||
|
||
struct sll_header { | ||
u_int16_t sll_pkttype; /* packet type */ | ||
u_int16_t sll_hatype; /* link-layer address type */ | ||
u_int16_t sll_halen; /* link-layer address length */ | ||
u_int16_t sll_pkttype; /* packet type */ | ||
u_int16_t sll_hatype; /* link-layer address type */ | ||
u_int16_t sll_halen; /* link-layer address length */ | ||
u_int8_t sll_addr[SLL_ADDRLEN]; /* link-layer address */ | ||
u_int16_t sll_protocol; /* protocol */ | ||
u_int16_t sll_protocol; /* protocol */ | ||
}; | ||
|
||
/* | ||
* A DLT_LINUX_SLL2 fake link-layer header. | ||
*/ | ||
#define SLL2_HDR_LEN 20 /* total header length */ | ||
|
||
struct sll2_header { | ||
u_int16_t sll2_protocol; /* protocol */ | ||
u_int16_t sll2_reserved_mbz; /* reserved - must be zero */ | ||
u_int32_t sll2_if_index; /* 1-based interface index */ | ||
u_int16_t sll2_hatype; /* link-layer address type */ | ||
u_int8_t sll2_pkttype; /* packet type */ | ||
u_int8_t sll2_halen; /* link-layer address length */ | ||
u_int8_t sll2_addr[SLL_ADDRLEN]; /* link-layer address */ | ||
}; | ||
|
||
/* | ||
* The LINUX_SLL_ values for "sll_pkttype"; these correspond to the | ||
* PACKET_ values on Linux, but are defined here so that they're | ||
* available even on systems other than Linux, and so that they | ||
* don't change even if the PACKET_ values change. | ||
* The LINUX_SLL_ values for "sll_pkttype" and LINUX_SLL2_ values for | ||
* "sll2_pkttype"; these correspond to the PACKET_ values on Linux, | ||
* which are defined by a header under include/uapi in the current | ||
* kernel source, and are thus not going to change on Linux. We | ||
* define them here so that they're available even on systems other | ||
* than Linux. | ||
*/ | ||
#define LINUX_SLL_HOST 0 | ||
#define LINUX_SLL_BROADCAST 1 | ||
#define LINUX_SLL_MULTICAST 2 | ||
#define LINUX_SLL_OTHERHOST 3 | ||
#define LINUX_SLL_OUTGOING 4 | ||
#define LINUX_SLL_HOST 0 | ||
#define LINUX_SLL_BROADCAST 1 | ||
#define LINUX_SLL_MULTICAST 2 | ||
#define LINUX_SLL_OTHERHOST 3 | ||
#define LINUX_SLL_OUTGOING 4 | ||
|
||
/* | ||
* The LINUX_SLL_ values for "sll_protocol"; these correspond to the | ||
* ETH_P_ values on Linux, but are defined here so that they're | ||
* available even on systems other than Linux. We assume, for now, | ||
* that the ETH_P_ values won't change in Linux; if they do, then: | ||
* The LINUX_SLL_ values for "sll_protocol" and LINUX_SLL2_ values for | ||
* "sll2_protocol"; these correspond to the ETH_P_ values on Linux, but | ||
* are defined here so that they're available even on systems other than | ||
* Linux. We assume, for now, that the ETH_P_ values won't change in | ||
* Linux; if they do, then: | ||
* | ||
* if we don't translate them in "pcap-linux.c", capture files | ||
* won't necessarily be readable if captured on a system that | ||
* defines ETH_P_ values that don't match these values; | ||
* if we don't translate them in "pcap-linux.c", capture files | ||
* won't necessarily be readable if captured on a system that | ||
* defines ETH_P_ values that don't match these values; | ||
* | ||
* if we do translate them in "pcap-linux.c", that makes life | ||
* unpleasant for the BPF code generator, as the values you test | ||
* for in the kernel aren't the values that you test for when | ||
* reading a capture file, so the fixup code run on BPF programs | ||
* handed to the kernel ends up having to do more work. | ||
* if we do translate them in "pcap-linux.c", that makes life | ||
* unpleasant for the BPF code generator, as the values you test | ||
* for in the kernel aren't the values that you test for when | ||
* reading a capture file, so the fixup code run on BPF programs | ||
* handed to the kernel ends up having to do more work. | ||
* | ||
* Add other values here as necessary, for handling packet types that | ||
* might show up on non-Ethernet, non-802.x networks. (Not all the ones | ||
* in the Linux "if_ether.h" will, I suspect, actually show up in | ||
* captures.) | ||
*/ | ||
#define LINUX_SLL_P_802_3 0x0001 /* Novell 802.3 frames without 802.2 LLC header */ | ||
#define LINUX_SLL_P_802_2 0x0004 /* 802.2 frames (not D/I/X Ethernet) */ | ||
#define LINUX_SLL_P_802_3 0x0001 /* Novell 802.3 frames without 802.2 LLC header */ | ||
#define LINUX_SLL_P_802_2 0x0004 /* 802.2 frames (not D/I/X Ethernet) */ | ||
#define LINUX_SLL_P_CAN 0x000C /* CAN frames, with SocketCAN pseudo-headers */ | ||
#define LINUX_SLL_P_CANFD 0x000D /* CAN FD frames, with SocketCAN pseudo-headers */ | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.