130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _UAPI__LINUX_BRIDGE_EBT_802_3_H
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _UAPI__LINUX_BRIDGE_EBT_802_3_H
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
5e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#include <linux/if_ether.h>
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define EBT_802_3_SAP 0x01
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define EBT_802_3_TYPE 0x02
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define EBT_802_3_MATCH "802_3"
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * If frame has DSAP/SSAP value 0xaa you must check the SNAP type
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * to discover what kind of packet we're carrying.
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define CHECK_TYPE 0xaa
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Control field may be one or two bytes.  If the first byte has
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the value 0x03 then the entire length is one byte, otherwise it is two.
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * One byte controls are used in Unnumbered Information frames.
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Two byte controls are used in Numbered Information frames.
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IS_UI 0x03
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define EBT_802_3_MASK (EBT_802_3_SAP | EBT_802_3_TYPE | EBT_802_3)
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* ui has one byte ctrl, ni has two */
2930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct hdr_ui {
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 dsap;
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 ssap;
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 ctrl;
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 orig[3];
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16 type;
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct hdr_ni {
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 dsap;
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 ssap;
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16 ctrl;
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  orig[3];
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16 type;
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ebt_802_3_hdr {
46e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u8  daddr[ETH_ALEN];
47e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u8  saddr[ETH_ALEN];
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16 len;
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct hdr_ui ui;
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct hdr_ni ni;
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} llc;
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ebt_802_3_info {
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  sap;
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16 type;
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  bitmask;
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  invflags;
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _UAPI__LINUX_BRIDGE_EBT_802_3_H */
64