aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/bcm/IPv6ProtocolHdr.h
blob: 96b36a579af202b9d8419bcb99e6c9fe22b3d195 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#ifndef _IPV6_PROTOCOL_DEFINES_
#define _IPV6_PROTOCOL_DEFINES_

#define IPV6HDR_TYPE_HOPBYHOP 0x0
#define IPV6HDR_TYPE_ROUTING 0x2B
#define IPV6HDR_TYPE_FRAGMENTATION 0x2C
#define IPV6HDR_TYPE_DESTOPTS 0x3c
#define IPV6HDR_TYPE_AUTHENTICATION 0x33
#define IPV6HDR_TYPE_ENCRYPTEDSECURITYPAYLOAD 0x34
#define MASK_IPV6_CS_SPEC 0x2

#define TCP_HEADER_TYPE	0x6
#define UDP_HEADER_TYPE	0x11
#define IPV6_ICMP_HDR_TYPE 0x2
#define IPV6_FLOWLABEL_BITOFFSET 9

#define IPV6_MAX_CHAINEDHDR_BUFFBYTES 0x64
/*
 * Size of Dest Options field of Destinations Options Header
 * in bytes.
 */
#define IPV6_DESTOPTS_HDR_OPTIONSIZE 0x8

struct bcm_ipv6_hdr {
	unsigned char  ucVersionPrio;
	unsigned char  aucFlowLabel[3];
	unsigned short usPayloadLength;
	unsigned char  ucNextHeader;
	unsigned char  ucHopLimit;
	unsigned long  ulSrcIpAddress[4];
	unsigned long  ulDestIpAddress[4];
};

struct bcm_ipv6_routing_hdr {
	unsigned char ucNextHeader;
	unsigned char ucRoutingType;
	unsigned char ucNumAddresses;
	unsigned char ucNextAddress;
	unsigned long ulReserved;
};

struct bcm_ipv6_fragment_hdr {
	unsigned char  ucNextHeader;
	unsigned char  ucReserved;
	unsigned short usFragmentOffset;
	unsigned long  ulIdentification;
};

struct bcm_ipv6_dest_options_hdr {
	unsigned char ucNextHeader;
	unsigned char ucHdrExtLen;
	unsigned char ucDestOptions[6];
};

struct bcm_ipv6_options_hdr {
	unsigned char ucNextHeader;
	unsigned char ucMisc[3];
	unsigned long ulJumboPayloadLen;
};

struct bcm_ipv6_authentication_hdr {
	unsigned char  ucNextHeader;
	unsigned char  ucLength;
	unsigned short usReserved;
	unsigned long  ulSecurityParametersIndex;
};

enum bcm_ipaddr_context {
	eSrcIpAddress,
	eDestIpAddress
};

/* Function Prototypes */

unsigned short IpVersion6(struct bcm_mini_adapter *Adapter, /* < Pointer to the driver control structure */
					void *pcIpHeader, /* <Pointer to the IP Hdr of the packet */
					struct bcm_classifier_rule *pstClassifierRule);

void DumpIpv6Address(unsigned long *puIpv6Address);

extern bool MatchSrcPort(struct bcm_classifier_rule *pstClassifierRule, unsigned short ushSrcPort);
extern bool MatchDestPort(struct bcm_classifier_rule *pstClassifierRule, unsigned short ushSrcPort);
extern bool MatchProtocol(struct bcm_classifier_rule *pstClassifierRule, unsigned char ucProtocol);

#endif