如何确定以太网帧是否是IPv4数据包?

时间:2015-11-15 18:35:10

标签: network-programming ethernet dpdk

我在DPDK应用程序中使用pcap_pmd,它不会自动设置packet_type字段。如何从接口收到数据包后确定正确的数据包类型?

修改: 以太网头结构:

/**
 * Ethernet header: Contains the destination address, source address
 * and frame type.
 */
struct ether_hdr {
    struct ether_addr d_addr; /**< Destination address. */
    struct ether_addr s_addr; /**< Source address. */
    uint16_t ether_type;      /**< Frame type. */
} __attribute__((__packed__));

没有提供搜索L3协议标识符的位置的线索。

1 个答案:

答案 0 :(得分:1)

深入挖掘rte_ether.h标题给出了答案:ether_hdr::ether_type是所需的下一个协议ID,它可以具有以下值之一:

/* Ethernet frame types */
#define ETHER_TYPE_IPv4 0x0800 /**< IPv4 Protocol. */
#define ETHER_TYPE_IPv6 0x86DD /**< IPv6 Protocol. */
#define ETHER_TYPE_ARP  0x0806 /**< Arp Protocol. */
#define ETHER_TYPE_RARP 0x8035 /**< Reverse Arp Protocol. */
#define ETHER_TYPE_VLAN 0x8100 /**< IEEE 802.1Q VLAN tagging. */
#define ETHER_TYPE_1588 0x88F7 /**< IEEE 802.1AS 1588 Precise Time Protocol. */
#define ETHER_TYPE_SLOW 0x8809 /**< Slow protocols (LACP and Marker). */
#define ETHER_TYPE_TEB  0x6558 /**< Transparent Ethernet Bridging. */