WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
eth_ip_common_rom.h
浏览该文件的文档.
1/*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2020-2022. All rights reserved.
3 * Description: oam log printing interface
4 */
5
6#ifndef __ETH_IP_COMMON_ROM_H__
7#define __ETH_IP_COMMON_ROM_H__
8
9#include "td_type.h"
10#include "osal_types.h"
11
12#ifdef __cplusplus
13#if __cplusplus
14extern "C" {
15#endif
16#endif
17
18#define OAL_IPV4_PERMANET_GROUP_ADDR 0x000000E0
19
20#ifndef ETHER_ADDR_LEN
21#define ETHER_ADDR_LEN 6 /* length of an Ethernet address */
22#endif
23#define ETH_SENDER_IP_ADDR_LEN 4 /* length of an Ethernet send ip address */
24#define ETH_TARGET_IP_ADDR_LEN 4 /* length of an Ethernet target ip address */
25
32
33/*
34 * Structure of the IP frame
35 */
37/* LITTLE_ENDIAN */
38#if defined(_PRE_LITTLE_CPU_ENDIAN) && defined(_PRE_CPU_ENDIAN) && (_PRE_LITTLE_CPU_ENDIAN == _PRE_CPU_ENDIAN)
39 osal_u8 ihl : 4,
40 version_ihl : 4;
41#else
43 ihl : 4;
44#endif
54 /* The options start here. */
55};
57
58/* WIN32和linux共用结构体 */
59typedef struct {
60 osal_u16 ar_hrd; /* format of hardware address */
61 osal_u16 ar_pro; /* format of protocol address */
62
63 osal_u8 ar_hln; /* length of hardware address */
64 osal_u8 ar_pln; /* length of protocol address */
65 osal_u16 ar_op; /* ARP opcode (command) */
66
67 osal_u8 ar_sha[ETHER_ADDR_LEN]; /* sender hardware address */
68 osal_u8 ar_sip[ETH_SENDER_IP_ADDR_LEN]; /* sender IP address */
69 osal_u8 ar_tha[ETHER_ADDR_LEN]; /* target hardware address */
70 osal_u8 ar_tip[ETH_TARGET_IP_ADDR_LEN]; /* target IP address */
72
73typedef struct {
76 osal_u8 addr[6]; /* hardware address6字节 */
78
79typedef struct {
80 osal_u8 op; /* packet opcode type */
81 osal_u8 htype; /* hardware addr type */
82 osal_u8 hlen; /* hardware addr length */
83 osal_u8 hops; /* gateway hops */
84 osal_u32 xid; /* transaction ID */
85 osal_u16 secs; /* seconds since boot began */
86 osal_u16 flags; /* flags */
87 osal_u32 ciaddr; /* client IP address */
88 osal_u32 yiaddr; /* 'your' IP address */
89 osal_u32 siaddr; /* server IP address */
90 osal_u32 giaddr; /* gateway IP address */
91 osal_u8 chaddr[16]; /* client hardware address16字节 */
92 osal_u8 sname[64]; /* server host name字符串长度64 */
93 osal_u8 file[128]; /* boot file name字符串长度128 */
94 osal_u8 options[4]; /* variable-length options field 4字节 */
96
108
115
116typedef struct {
117 union {
118 osal_u8 u6_addr8[16]; /* 数组大小为16 */
119 osal_u16 u6_addr16[8]; /* 数组大小为8 */
120 osal_u32 u6_addr32[4]; /* 数组大小为4 */
121 } in6_u;
122#define S6_ADDR in6_u.u6_addr8
123#define S6_ADDR16 in6_u.u6_addr16
124#define S6_ADDR32 in6_u.u6_addr32
126
127typedef struct {
128 osal_u8 version : 4, priority : 4;
129 osal_u8 flow_lbl[3]; /* 数组大小为3 */
131
134
138
139/* IPv6伪首部,用于校验和计算(伪首部中下一首部字段的值必须为58) */
147
148typedef struct {
149 osal_u32 reserved : 5, override : 1, solicited : 1, router : 1, reserved2 : 24;
151
152typedef struct {
156 union {
157 osal_u32 un_data32[1]; /* 1个uint32位 */
158 osal_u16 un_data16[2]; /* 2个short32位 */
159 osal_u8 un_data8[4]; /* 4字节32位 */
161 } icmp6_dataun;
163
164/* 多了4字节,记得减去4 */
165typedef struct {
168 osal_u8 opt[1];
169 osal_u8 rsv[3]; /* 保留3字节对齐 */
171
172/* 表示wiphy 结构中对应的参数是否被修改 */
181/*****************************************************************************
182 函 数 名 : ether_is_multicast
183 功能描述 : 判断一个地址是否为组播地址
184*****************************************************************************/
185static INLINE__ td_u8 ether_is_multicast(const osal_u8 *addr)
186{
187 return ((*addr) & 0x01);
188}
189
190/*****************************************************************************
191 函 数 名 : ether_is_broadcast
192 功能描述 : 判断一个地址是否为广播地址
193*****************************************************************************/
194static INLINE__ td_u8 ether_is_broadcast(const osal_u8 *addr)
195{
196 return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && /* 地址第0:1:2位 */
197 (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff)); /* 地址第3:4:5位 */
198}
199
200/*****************************************************************************
201 函 数 名 : ether_is_ipv4_multicast
202 功能描述 : 判断一个地址是否为IPv4组播地址
203*****************************************************************************/
204static INLINE__ td_u8 ether_is_ipv4_multicast(const osal_u8 *addr)
205{
206 return ((addr[0] == 0x01) && (addr[1] == 0x00) && (addr[2] == 0x5e)); /* 地址第0:1:2位 */
207}
208
209/*****************************************************************************
210 函 数 名 : oal_ipv4_is_permanent_group
211 功能描述 : 判断一个IPv4地址是否为永久组地址:224.0.0.0~224.0.0.255
212*****************************************************************************/
213static INLINE__ td_u8 oal_ipv4_is_permanent_group(osal_u32 addr)
214{
215 return (((addr & 0x00FFFFFF) ^ OAL_IPV4_PERMANET_GROUP_ADDR) == 0);
216}
217
218/*****************************************************************************
219 函 数 名 : oal_ipv6_is_multicast
220 功能描述 : 判断一个地址是否为IPv6组播地址:FFXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX
221*****************************************************************************/
222static INLINE__ td_u8 oal_ipv6_is_multicast(const osal_u8 *addr)
223{
224 return ((osal_u8)(addr[0]) == 0xff);
225}
226
227/*****************************************************************************
228 函 数 名 : oal_ipv6_is_unspecified_addr
229 功能描述 : 判断一个地址是否为IPv6未指定地址
230 IPv6未指定地址: ::/128 ,该地址仅用于接口还没有被分配IPv6地址时
231 与其它节点通讯作为源地址,例如在重复地址检测DAD中会出现.
232*****************************************************************************/
233static INLINE__ td_u8 oal_ipv6_is_unspecified_addr(const osal_u8 *addr)
234{
235 return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00) && /* 0:1:2:3 地址索引值 */
236 (addr[4] == 0x00) && (addr[5] == 0x00) && (addr[6] == 0x00) && (addr[7] == 0x00) && /* 4,5,6,7 地址索引值 */
237 (addr[8] == 0x00) && (addr[9] == 0x00) && (addr[10] == 0x00) && (addr[11] == 0x00) && /* 8,9,10,11 地址索引值 */
238 (addr[12] == 0x00) && (addr[13] == 0x00) && (addr[14] == 0x00) && (addr[15] == 0x00)); /* 12,13,14,15 地址索引 */
239}
240
241/*****************************************************************************
242 函 数 名 : oal_ipv6_is_link_local_addr
243 功能描述 : 判断一个地址是否为IPv6链路本地地址.最高10位值为1111111010.
244 例如:FE80:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX
245*****************************************************************************/
246static INLINE__ td_u8 oal_ipv6_is_link_local_addr(const osal_u8 *addr)
247{
248 return ((addr[0] == 0xFE) && ((addr[1] >> 6) == 2)); /* 6:地址右偏移6位 2:表示数值2 */
249}
250
251/*****************************************************************************
252 函 数 名 : oal_csum_ipv6_magic
253 功能描述 : 计算ICMPv6校验和
254 输入参数 : osal_u32 len
255 osal_u8 *buffer
256 输出参数 : 无
257 返 回 值 : static INLINE__ osal_u16
258
259 修改历史 :
260 1.日 期 : 2015年6月18日
261 修改内容 : 新生成函数
262
263*****************************************************************************/
264static INLINE__ osal_u16 oal_csum_ipv6_magic(osal_u32 len, osal_u8 *buffer)
265{
266 osal_u32 cksum = 0;
267 osal_u16 *p = (osal_u16 *)buffer;
268 osal_u32 i;
269
270 for (i = 0; i < ((len >> 1) + (len & 0x1)); i++) {
271 cksum += p[i];
272 }
273
274 cksum = (cksum >> 16) + (cksum & 0xffff); /* 16:右偏移16位 */
275 cksum = (cksum >> 16) + (cksum & 0xffff); /* 16:右偏移16位 */
276
277 return (osal_u16)(~cksum);
278}
279
280static INLINE__ osal_u8 oal_is_broadcast_ether_addr(const osal_u8 *addr)
281{
282 return (addr[0] & addr[1] & addr[2] & addr[3] & addr[4] & addr[5]) == 0xff; /* 0,1,2,3,4,5 地址索引值 */
283}
284
285
286#ifdef __cplusplus
287#if __cplusplus
288}
289#endif
290#endif
291
292#endif /* end of eth_ip_common.h */
#define ETH_TARGET_IP_ADDR_LEN
Definition eth_ip_common_rom.h:24
enum wiphy_params_flags oal_wiphy_params_flags
Definition eth_ip_common_rom.h:180
wiphy_params_flags
Definition eth_ip_common_rom.h:173
@ WIPHY_PARAM_COVERAGE_CLASS
Definition eth_ip_common_rom.h:178
@ WIPHY_PARAM_FRAG_THRESHOLD
Definition eth_ip_common_rom.h:176
@ WIPHY_PARAM_RETRY_LONG
Definition eth_ip_common_rom.h:175
@ WIPHY_PARAM_RETRY_SHORT
Definition eth_ip_common_rom.h:174
@ WIPHY_PARAM_RTS_THRESHOLD
Definition eth_ip_common_rom.h:177
#define ETHER_ADDR_LEN
Definition eth_ip_common_rom.h:21
#define OAL_IPV4_PERMANET_GROUP_ADDR
Definition eth_ip_common_rom.h:18
#define ETH_SENDER_IP_ADDR_LEN
Definition eth_ip_common_rom.h:23
osal_u8 rsv[3]
Definition oal_net.h:2
osal_u16 reserved
Definition oal_net.h:4
#define INLINE__
Definition osal_list.h:25
unsigned char osal_u8
Definition osal_types.h:11
unsigned int osal_u32
Definition osal_types.h:13
unsigned short osal_u16
Definition osal_types.h:12
Definition eth_ip_common_rom.h:148
osal_u32 override
Definition eth_ip_common_rom.h:149
Definition eth_ip_common_rom.h:79
osal_u8 hops
Definition eth_ip_common_rom.h:83
osal_u8 htype
Definition eth_ip_common_rom.h:81
osal_u16 secs
Definition eth_ip_common_rom.h:85
osal_u32 siaddr
Definition eth_ip_common_rom.h:89
osal_u32 yiaddr
Definition eth_ip_common_rom.h:88
osal_u16 flags
Definition eth_ip_common_rom.h:86
osal_u8 op
Definition eth_ip_common_rom.h:80
osal_u32 xid
Definition eth_ip_common_rom.h:84
osal_u8 hlen
Definition eth_ip_common_rom.h:82
osal_u32 giaddr
Definition eth_ip_common_rom.h:90
osal_u32 ciaddr
Definition eth_ip_common_rom.h:87
Definition eth_ip_common_rom.h:59
osal_u16 ar_op
Definition eth_ip_common_rom.h:65
osal_u8 ar_hln
Definition eth_ip_common_rom.h:63
osal_u16 ar_pro
Definition eth_ip_common_rom.h:61
osal_u8 ar_pln
Definition eth_ip_common_rom.h:64
osal_u16 ar_hrd
Definition eth_ip_common_rom.h:60
Definition eth_ip_common_rom.h:73
osal_u8 type
Definition eth_ip_common_rom.h:74
osal_u8 len
Definition eth_ip_common_rom.h:75
Definition eth_ip_common_rom.h:26
osal_u8 ether_dhost[6]
Definition eth_ip_common_rom.h:27
osal_u8 ether_shost[6]
Definition eth_ip_common_rom.h:28
osal_u16 ether_type
Definition eth_ip_common_rom.h:29
Definition eth_ip_common_rom.h:152
osal_u16 icmp6_cksum
Definition eth_ip_common_rom.h:155
osal_u8 icmp6_type
Definition eth_ip_common_rom.h:153
icmpv6_nd_advt u_nd_advt
Definition eth_ip_common_rom.h:160
osal_u8 icmp6_code
Definition eth_ip_common_rom.h:154
Definition eth_ip_common_rom.h:116
Definition eth_ip_common_rom.h:36
osal_u32 saddr
Definition eth_ip_common_rom.h:52
osal_u16 frag_off
Definition eth_ip_common_rom.h:48
osal_u32 daddr
Definition eth_ip_common_rom.h:53
osal_u16 check
Definition eth_ip_common_rom.h:51
osal_u8 ttl
Definition eth_ip_common_rom.h:49
osal_u8 protocol
Definition eth_ip_common_rom.h:50
osal_u8 ihl
Definition eth_ip_common_rom.h:43
osal_u16 tot_len
Definition eth_ip_common_rom.h:46
osal_u16 id
Definition eth_ip_common_rom.h:47
osal_u8 tos
Definition eth_ip_common_rom.h:45
osal_u8 version_ihl
Definition eth_ip_common_rom.h:42
Definition eth_ip_common_rom.h:140
osal_u32 nexthdr
Definition eth_ip_common_rom.h:145
osal_u32 payload_len
Definition eth_ip_common_rom.h:144
oal_in6_addr saddr
Definition eth_ip_common_rom.h:141
oal_in6_addr daddr
Definition eth_ip_common_rom.h:142
Definition eth_ip_common_rom.h:127
oal_in6_addr daddr
Definition eth_ip_common_rom.h:136
osal_u8 nexthdr
Definition eth_ip_common_rom.h:132
osal_u8 priority
Definition eth_ip_common_rom.h:128
osal_u16 payload_len
Definition eth_ip_common_rom.h:130
osal_u8 hop_limit
Definition eth_ip_common_rom.h:133
oal_in6_addr saddr
Definition eth_ip_common_rom.h:135
Definition eth_ip_common_rom.h:165
oal_icmp6hdr_stru icmph
Definition eth_ip_common_rom.h:166
oal_in6_addr target
Definition eth_ip_common_rom.h:167
Definition eth_ip_common_rom.h:97
osal_u16 urgent
Definition eth_ip_common_rom.h:106
osal_u16 check
Definition eth_ip_common_rom.h:105
osal_u16 window
Definition eth_ip_common_rom.h:104
osal_u8 offset
Definition eth_ip_common_rom.h:102
osal_u8 flags
Definition eth_ip_common_rom.h:103
osal_u16 dport
Definition eth_ip_common_rom.h:99
osal_u32 acknum
Definition eth_ip_common_rom.h:101
osal_u16 sport
Definition eth_ip_common_rom.h:98
osal_u32 seqnum
Definition eth_ip_common_rom.h:100
Definition eth_ip_common_rom.h:109
osal_u16 source
Definition eth_ip_common_rom.h:110
osal_u16 dest
Definition eth_ip_common_rom.h:111
osal_u16 len
Definition eth_ip_common_rom.h:112
osal_u16 check
Definition eth_ip_common_rom.h:113
unsigned char td_u8
Definition td_type.h:36