blob: df07c2124acf021789cba890d83d76c2be722078 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001/************************************************************************
2*¹¦ÄܽéÉÜ£º×ÔÑÐʵÏÖµÄioctl½Ó¿Ú²ÎÊý¶¨Òå
3*¸ºÔðÈË£º
4*±¸·ÝÈË£º
5*ÐÞ¸ÄÈÕ£º
6*ÐÞ¸ÄÄÚÈÝ£º
7*°æ±¾ºÅ£º
8************************************************************************/
9
10#ifndef _ZXIC_IOCTL_H_
11#define _ZXIC_IOCTL_H_
12
13#include <sys/types.h>
14#include <sys/stat.h>
15#include <fcntl.h>
16#include <sys/ioctl.h>
17
18
19#ifdef _MBB_OS_UCLINUX
20#include <stdint.h>
21#endif
22
23
24#define NIOCTL_MAGIC 'x'
25#define NIOCTL_MAX_NR 32 //IOCTL¿ÉÓÃÃüÁîµÄ×î´ó¸öÊý
26
27
28#define NIOCTL_READ _IO(NIOCTL_MAGIC,0)
29
30/*»ñÈ¡¶þ²ãÁÚ¾ÓÁбíÖÐmacµØÖ·ºÍ³ö¿Údevname*/
31
32#define NIOCGPCINFO _IOWR(NIOCTL_MAGIC,1,ioctl_data)
33
34/*»ñÈ¡ÍøÂçÉ豸tx¡¢rx¡¢dropµÈͳ¼Æ£¬ÍøÂçÉ豸״̬ÐÅÏ¢*/
35
36#define NIOCGSTATS _IOWR(NIOCTL_MAGIC,2,ioctl_data)
37
38/*ÉèÖÃÄں˲ÎÊýͨÓÃÃüÁÀýÈçfastnat/fastbr/leak/brmoniterµÈ¿ª¹Ø»ò¼¶±ð*/
39
40#define NIOCSKPARAM _IOWR(NIOCTL_MAGIC,3,ioctl_data)
41
42/*»ñÈ¡skbÉêÇë³É¹¦/ʧ°Ü¸öÊýͳ¼Æ*/
43
44#define NIOCGSKBCNT _IOR(NIOCTL_MAGIC,4,ioctl_data)
45
46/*»ñÈ¡fastnat ×î´óÁ´½ÓÊý*/
47
48#define NIOCGFASTMAXLINKS _IOR(NIOCTL_MAGIC,7,ioctl_data)//È·¶¨ºóÐøÊÇ·ñ»¹ÒªÊ¹ÓÃ
49
50
51/*»ñÈ¡×Ô´ò¿ªÍ³¼Æ¿ª¹ØÖ®ºó£¬skb µÄµ±Ç°¸öÊý¡¢Ë²¼ä·åÖµµÈͳ¼ÆÐÅÏ¢¡¢skb¿½±´´ÎÊý¡¢skbÍ·À©Õ¹´ÎÊý
52skbÔÚÈíÖжÏÊÍ·Å´ÎÊý*/
53
54#define NIOCGSKBNUM _IOWR(NIOCTL_MAGIC,13,ioctl_data)
55
56/*ÉèÖÃÄÚºËskb dumpÆ¥ÅäÐÅÏ¢£¬ÀýÈçÆ¥ÅäÌØ¶¨macµØÖ·¡¢IPµØÖ·*/
57
58#define NIOCGSKBDUMP _IOR(NIOCTL_MAGIC,14,ioctl_data)
59
60/*ÉèÖÃÄÚºËtcpdump ¿ª¹Ø*/
61
62#define NIOCSTCPDUMP _IOR(NIOCTL_MAGIC,15,ioctl_data)
63
64/**/
65
66#define NIOCPDP _IOR(NIOCTL_MAGIC,17,ioctl_data)
67
68/**/
69
70#define NIOCFLUSHFLAG _IOR(NIOCTL_MAGIC,18,ioctl_data)
71#define NIOCGKPARAM _IOR(NIOCTL_MAGIC,19,ioctl_data)
72
73
74
75#define NIOCGSLAB _IOR(NIOCTL_MAGIC,21,ioctl_data)
76
77/*add by jiangjing,»ñÈ¡init_netÖÐËùÓÐÍøÂçÉ豸µÄÃû³ÆºÍ״̬ÐÅÏ¢*/
78#define NIOCGDEVLIST _IOR(NIOCTL_MAGIC, 22, ioctl_data)
79
80/*add by zhangpeimin£¬»ñÈ¡SKB FASTµ±Ç°Í³¼ÆÐÅÏ¢*/
81#define NIOCGSKBFAST _IOR(NIOCTL_MAGIC, 24, ioctl_data)
82
83#define NIOCGMAXMSG _IOR(NIOCTL_MAGIC, 25, ioctl_data)
84
85#define NIOCGPTYPE _IOR(NIOCTL_MAGIC, 26, ioctl_data)
86
87#define NIOCGPSINFO _IOR(NIOCTL_MAGIC, 27, ioctl_data)
88
89#define NIOCGHASH _IOR(NIOCTL_MAGIC, 28, ioctl_data)
90
91/*»ñÈ¡µ±Ç°TCP¶ª°üͳ¼ÆÐÅÏ¢*/
92#define NIOCGPKTLOST _IOR(NIOCTL_MAGIC, 29, ioctl_data)
93
94/*»ñÈ¡±¾µØTCPÌ×½Ó×Öͳ¼ÆÐÅÏ¢*/
95#define NIOCGTCPSOCKSTATS _IOR(NIOCTL_MAGIC, 30, ioctl_data)
96
97#define NIOCTL_MAX_MSGLEN 128 //×Ö·û´®ÀàÐͲÎÊýÖµµÄ×î´ó³¤¶È
98#define NIOCTL_MAX_NAMELEN 20 //²ÎÊýÃû³ÆµÄ×î´ó³¤¶È
99/*
100 ͨÓÃioctlµÄ²ÎÊýÀàÐÍ£¬µ±²ÎÊýֵΪ×Ö·û´®Ê±£¬Ê¹ÓÃbuf±äÁ¿ÓëÄں˽»»¥£»
101 µ±²ÎÊýֵΪÕûÐÍʱ£¬Ê¹ÓÃvalue±äÁ¿ÓëÄں˽»»¥
102
103*/
104typedef struct {
105 unsigned int size; //×Ö·û´®ÀàÐͲÎÊýµÄ³¤¶È£¬¶ÔÓÚÕûÐͲÎÊý£¬¸ÃÖµ½¨Ò鸳ֵΪ0
106 char name[NIOCTL_MAX_NAMELEN]; //²ÎÊýÃû³Æ£¬ÀýÈçfastnat¡¢fastbr¡¢leak
107 unsigned char buf[NIOCTL_MAX_MSGLEN]; //×Ö·û´®ÀàÐͲÎÊýÖµ£¬ÀýÈçon/off
108 void *data; //×Ô¶¨Òå½á¹¹Ìå
109 int value; //ÕûÐͲÎÊýÖµ£¬ÀýÈç0/1/2/3
110
111} __attribute__((packed)) ioctl_data;
112
113
114
115enum dev_opt_state {
116 DEV_UNOPT = 0, //ÈôÓû§Î´×öÈκβÙ×÷£¬³õʼֵΪ0
117 DEV_NOPRESENT, //¶ÔÓ¦!netif_device_presentÒì³££¬±íÃ÷Çý¶¯µ×²ãÉÐδ׼±¸ºÃ
118 DEV_OPENED, //dev is opened
119 DEV_OPEN_FAIL, //open fail
120 DEV_CLOSED, //dev is closed
121};
122
123
124//ÍøÂçÌí¼Ó£¬Í³¼ÆÍøÂç²ãÃæÊÕ·¢°üÇé¿ö
125struct net_dev_skbinfo {
126 unsigned long rx_packets; //Çý¶¯·¢ËÍÀ´µÄÊý¾Ý°ü¸öÊý£¬ÔÚnetif_rxÍ·ÀÛ¼Ó
127 unsigned long tx_packets; //·¢Ë͸øÇý¶¯µÄÊý¾Ý°ü¸öÊý£¬ÔÚdev_queue_xmitÍ·ÀÛ¼Ó
128 unsigned long rx_bytes; //×Ö½ÚÊý
129 unsigned long tx_bytes; //×Ö½ÚÊý
130 unsigned long rx_dropped; //netif_rxÄÚ²¿Á÷³ÌÖÐËùÓÐÒì³£ÊÍ·ÅskbµÄÀÛ¼Ó£¬Èç´ïµ½netdev_max_backlogÈë¶ÓÁÐÉÏÏÞ¶ø¶ª°ü
131 unsigned long tx_dropped; //dev_queue_xmitÄÚ²¿Á÷³ÌÖÐËùÓÐÒì³£ÊÍ·ÅskbµÄÀÛ¼Ó£¬Èç(txq->xmit_lock_owner == cpu)Ôì³ÉµÄ¶ª°ü
132};
133
134/* ¸Ã½á¹¹ÌåÖеÄËùÓÐÐÅÏ¢½ÔÓÉÇý¶¯¸³Öµ£¬ÍøÂç×é²»»á¸³Öµ */
135//Õâ¸ö½á¹¹Ì屨ÐëºÍ <linux/netdevice.h>ÖеÄnet_device_stats±£³ÖÒ»ÖÂ
136struct net_dev_stats {
137 unsigned long rx_packets;
138 unsigned long tx_packets;
139 unsigned long rx_bytes;
140 unsigned long tx_bytes;
141 unsigned long rx_errors; //Ðè¼à¿Ø
142 unsigned long tx_errors; //Ðè¼à¿Ø
143 unsigned long rx_dropped; //Ðè¼à¿Ø
144 unsigned long tx_dropped; //Ðè¼à¿Ø
145 unsigned long multicast;
146 unsigned long collisions;
147 unsigned long rx_length_errors; //Ðè¼à¿Ø
148 unsigned long rx_over_errors; //Ðè¼à¿Ø
149 unsigned long rx_crc_errors; //Ðè¼à¿Ø
150 unsigned long rx_frame_errors; //Ðè¼à¿Ø
151 unsigned long rx_fifo_errors; //Ðè¼à¿Ø
152 unsigned long rx_missed_errors; //Ðè¼à¿Ø
153 unsigned long tx_aborted_errors; //Ðè¼à¿Ø
154 unsigned long tx_carrier_errors; //Ðè¼à¿Ø
155 unsigned long tx_fifo_errors; //Ðè¼à¿Ø
156 unsigned long tx_heartbeat_errors; //Ðè¼à¿Ø
157 unsigned long tx_window_errors; //Ðè¼à¿Ø
158 unsigned long rx_compressed;
159 unsigned long tx_compressed;
160};
161enum netdev_queue_state {
162 __QUEUE_STATE_DRV_XOFF,
163 __QUEUE_STATE_STACK_XOFF,
164 __QUEUE_STATE_FROZEN,
165};
166
167struct dev_ioctl_info {
168 char dev_name[20];
169 struct net_dev_skbinfo stats_dbg; //ÍøÂçÌí¼ÓµÄ£¬Í³¼ÆÍøÂç²ãÃæÊÕ·¢°üÇé¿ö
170 struct net_dev_stats skb_status; //Êý¾ÝÊÕ·¢Í³¼ÆÖµ£¬¸Ãֵȫ²¿ÓÉÇý¶¯¸³ÖµµÄ£¬ÍøÂç²»¸³Öµ
171 unsigned int flags; //IFF_UPµÈ
172 unsigned char operstate; //ĿǰûɶÓÃ
173 unsigned long state; //µ×²ãÇý¶¯×´Ì¬£¬__LINK_STATE_NOCARRIER
174 int net_flag; //Óû§ifconfigµÄ½á¹û״̬£¬ÈçDEV_OPEN_FAIL
175 unsigned long que_state; //¶ÓÁÐ״̬£¬¶ÔÓ¦ dev->_tx[0].state£¬Èç__QUEUE_STATE_DRV_XOFF
176 unsigned int num_tx_queues; //TX¶ÓÁÐÊýÁ¿£¬¶àÊýÇý¶¯Ê¹ÓÃΨһ¶ÓÁУ¬ÔòֵΪ1
177};
178
179//ÓëÄÚºËskb_using_msg ½á¹¹ÌåÒ»ÖÂ
180struct skb_ioctl_info {
181 unsigned long skb_all;
182 unsigned long skb_tocp;
183 unsigned long skb_fromcp;
184 unsigned long skb_data_num;
185 unsigned long skb_data_size;
186 unsigned long skb_stop;
187 unsigned long skb_lock;
188
189 unsigned long skb_panic;
190 unsigned long skb_fail;
191};
192
193struct skb_fast_ioctl_info {
194 int skb_num4; //½ÓÊÕµ½µÄV4Êý¾Ý°ü
195 int skb_num6; //½ÓÊÕµ½µÄV6Êý¾Ý°ü
196 int skb_big_num; //len³¤¶È³¬¹ý1000µÄÊý¾Ý°ü£¬º¬V4ºÍV6
197 int skb_small_num; //len³¤¶ÈСÓÚ100µÄÊý¾Ý°ü£¬º¬V4ºÍV6
198 int skb_bytes4; //½ÓÊÕµ½µÄV4Êý¾Ý°ü×Ö½ÚÊý
199 int skb_bytes6; //½ÓÊÕµ½µÄV6Êý¾Ý°ü×Ö½ÚÊý
200 int skb_unknown; //½ÓÊÕµ½µÄδ֪ЭÒéÊý¾Ý°ü£¬°üÀ¨ARPµÈ·ÇV4ºÍV6µÄ±¨ÎÄ
201 int skb_tcpnum; //½ÓÊÕµ½µÄtcpÊý¾Ý°ü£¬º¬V4ºÍV6£¬µ«²»º¬fastbrµÄ±¨ÎÄ
202 int skb_udpnum; //½ÓÊÕµ½µÄudpÊý¾Ý°ü£¬º¬V4ºÍV6£¬µ«²»º¬fastbrµÄ±¨ÎÄ
203 int broadcast_num4; //½ÓÊÕµ½µÄV4¹ã²¥°ü
204 int broadcast_num6; //½ÓÊÕµ½µÄV6¹ã²¥°ü
205 int multicast_num4; //½ÓÊÕµ½µÄV4×é²¥±¨
206 int multicast_num6; //½ÓÊÕµ½µÄV6×é²¥±¨
207 int fastnat_num; //fastnat³É¹¦µÄ±¨ÎÄ
208 int fast6_num; //fast6³É¹¦µÄ±¨ÎÄ
209 int fastbr_num; //fastbr³É¹¦µÄ±¨ÎÄ
210 int fastnat_level; //²Î¿´FAST_NET_DEVICE
211 int fastbr_level; //²¼¶ûÀàÐÍ
212 //ÏÂÃæ¼¸¸öֵΪÀÛ¼ÓÖµ£¬ÐÔÄÜÏà¹Ø
213 int irqfree_num; //ͨ¹ýÈíÖжÏÊͷŵÄskb£¬ÐÔÄÜÏà¹Ø
214 int skbcopy_num; //Êý¾Ý¿½±´µÄskb£¬ÐÔÄÜÏà¹Ø
215 int cache_copy; //net_cacheÔ´Îļþ½øÐп½±´µÄÀÛ»ý¼ÆÊý£¬ÐÔÄÜÏà¹Ø
216 int skbflood_num; //·ººéµÄskb£¬ÐÔÄÜÏà¹Ø
217 int errfree_num; //devÔ´ÎļþÖдíÎóÊͷŵÄskb¼ÆÊý£¬°üÀ¨SKB_QUEUE_STOPºÍSKB_QUEUE_LOCKÁ½¸ö¼ÆÊýÖµ
218 int frag_num; //½ÓÊÕµ½µÄ·ÖƬ±¨ÎÄ£¬ÐÔÄÜÏà¹Ø
219 int mtu_num; //fastÖÐÊý¾Ý³¤¶È´óÓÚ³ö¿Údev MTUʱ£¬fastʧ°Ü¸öÊýͳ¼Æ
220 int fast_loop; //ͶµÝ¸øÇý¶¯£¬ÓÖ´ÓÇý¶¯ÊÕµ½µÄÒì³£»Ø»·¸öÊýͳ¼Æ
221 int skb_alloc_fail ; //ÉêÇëskbʧ°ÜµÄ¸öÊýÀÛ¼ÓÖµ
222 int xmit_lock_num; //xmit_lock_owner±»Ëø×¡Ôì³ÉµÄ¶ª°üµÄÀÛ¼Ó¼ÆÊý£¬Çý¶¯Ôì³ÉµÄ
223 int xmit_stop_num; //!netif_xmit_stopped(txq)Ôì³ÉµÄ¶ª°üµÄÀÛ¼Ó¼ÆÊý£¬Çý¶¯Ôì³ÉµÄ
224 int br_mac_change_num; //ÍøÇÅmacµØÖ·±»¸Ä±ä´ÎÊý
225 int fast_tcpdump_num; //fast×¥°üÊý
226 int fast_switch; //fast×Ó¹¦ÄÜλͼ¿ª¹Ø
227 int fast_local4_rcv_num; //±¾µØfast_local4³É¹¦½ÓÊÕ±¨ÎÄ
228 int fast_local6_rcv_num; //±¾µØfast_local6³É¹¦½ÓÊÕ±¨ÎÄ
229 int fast_local4_output_num; //±¾µØfast_local4³É¹¦·¢Ëͱ¨ÎÄ
230 int fast_local6_output_num; //±¾µØfast_local6³É¹¦·¢Ëͱ¨ÎÄ
231};
232
233#define SLAB_NUM 21
234enum slabinfo_file {
235 SKB_SLAB = 0,
236 BRFDB_SLAB,
237 DST_SLAB,
238 FIB_TRIE_SLAB,
239 FLOW_SLAB,
240 INETPEER_SLAB,
241 INET_HASHTABLES_SLAB,
242 INET_TIMEWAIT_SOCK_SLAB,
243 MYSOCKET_SLAB,
244 NF_CONNTRACK_CORE_SLAB,
245 NF_CONNTRACK_EXCEPT_SLAB,
246 REQUEST_SOCK_SLAB,
247 SOCK_SLAB,
248 SOCKET_SLAB,
249 XFRM6_TUNNEL_SLAB,
250 XT_HASHLIMIT_SLAB,
251 SOCK_ALLOC_PAGES,
252 IP6_OUTPUT_ALLOC_PAGES,
253 IP_OUTPUT_ALLOC_PAGES,
254 SKB_ALLOC_PAGES,
255};
256
257struct slab_info {
258 int num[SLAB_NUM][2];
259};
260
261#define HASH_ARRAY_COUNT 512
262struct hash_info {
263 int max_hash_size;
264 int current_hash_num;
265 int hash[HASH_ARRAY_COUNT][2];
266 int current_array_size;
267};
268
269struct neigh_info {
270 unsigned int ip_len; //IPµØÖ·³¤¶È£¬Çø·ÖV4ºÍV6
271 unsigned char ip_addr[IPV4ADDLEN_MAX];
272 unsigned char mac_addr[MAX_MACADDR_LEN];
273};
274
275#define MAX_NEIGH_NUM 20
276struct dev_neigh_info {
277 unsigned int num;
278 struct neigh_info neigh_nod[MAX_NEIGH_NUM];
279};
280
281enum dev_layer {
282 L3_DEV = 0, //²ã3É豸
283 BR_DEV, //ÍøÇŵÄL3ÌØÊâÉ豸
284 L2_DEV, //L2²ãÉ豸
285};
286
287enum {
288 LOCAL_L3DEV = 0,
289 LOCAL_BR_PORT,
290 NEIGH_AND_DSTDEV,
291 DEV_STATISTIC,
292};
293
294enum IFMAC_ERR {
295 ZERO_ADDRERR = 1,
296 MULTICAST_ADDRERR,
297 BROADCAST_ADDRERR,
298};
299
300/*add by jiangjing*/
301struct dev_and_neigh {
302 char name[20];
303 unsigned char dev_layer; //ָʾ¸Ã±¾µØÍø¿ÚµÄЭÒé²ã£¬²Î¼ûºêÖµL3_DEV
304 /*MACµØÖ·,IPv4µØÖ·*/
305 unsigned char mac_addr[20]; //±¾µØÍø¿ÚµØÖ·
306 unsigned int ipv4_addr; //±¾µØÍø¿ÚIPµØÖ·
307 struct dev_neigh_info dev_neigh; //¸Ã±¾µØÍø¿ÚЯ´øµÄÔ¶³ÌÁÚ¾ÓµØÖ·ÐÅÏ¢Êý×é
308 int mac_errtype;
309};
310#define MAX_DEV_NUM 30
311/*Íø¿ÚÏà¹ØµÄÐÅÏ¢*/
312struct devlist_ioctl_info {
313 unsigned int num; //±¾µØÓÐÐ§Íø¿ÚµÄ¸öÊý
314 struct dev_and_neigh info[MAX_DEV_NUM]; //±¾µØÓÐÐ§Íø¿ÚµÄ¾ßÌåÐÅÏ¢²ÎÊý
315};
316
317/****×ÊԴʹÓü°ÉÏÏÞÐÅÏ¢£¬ËùÓбê×¼ÄÚºËÓÐÉÏÏÞÇé¿öµÄ£¬½ÔÐè¼ì²â£¬ÒÔ·ÀÖ¹Òì³£·¢Éú****/
318struct net_max_check_msg {
319 /*nf_conntrack*/
320 unsigned long nf_conntrack_max; //nf_conntrack_max = 4832
321 unsigned long nf_conntrack_now; //net->ct.count
322 /*enqueue*/
323 int netdev_max_backlog; //netdev_max_backlog=1000
324 int input_queue_len; //²Î¿´enqueue_to_backlog½Ó¿ÚʵÏÖ
325 int rx_dropped; //ÒòΪÈë¶ÓÁÐÒÑÂúÔì³ÉµÄÈë¶ÓÁжª°üµÄÀÛ¼ÓÖµ
326 /*ÐÔÄÜÏà¹Ø*/
327 int fastnat_link_max; //nf_conntrack_max
328 int fastnat_link_now; //working_list.count
329 int fast6_link_max; //nf_conntrack_max
330 int fast6_link_now; //working_list6.count
331 /*ÍøÂçÄÚºËÔËÐÐʱµÄͳ¼ÆÖµ£¬ÖØµã¹Ø×¢½á¹¹ÌåµÄÉêÇëµã*/
332 unsigned long br_mac_change; //ÍøÇÅmacµØÖ·±»¸Ä±ä´ÎÊý
333 unsigned long neigh_alloc; //neighbourÉêÇë´ÎÊý
334 unsigned long neigh_free; //neighbourÊͷŵãÀÛ¼ÓÖµ
335 unsigned long br_neigh_vary; //ÇŵãµÄ³ö¿ÚdevµÄmacµØÖ·±»¶à¸öpc¹²Ïí
336 unsigned long conn_alloc; //connÉêÇë´ÎÊýÀÛ¼ÓÖµ
337 unsigned long conn_free; //connÊͷŵãÀÛ¼ÓÖµ
338 unsigned long brfdb_alloc; //ÇŵãÉêÇë´ÎÊýÀÛ¼ÓÖµ
339 unsigned long dst_alloc; //dst_entryÉêÇëÀÛ¼ÓÖµ
340 unsigned long dst_free; //dst_entryÊͷŵãÀÛ¼ÓÖµ
341 unsigned long hh_update; //hh¶þ²ãmacÍ·¸üÐÂÀÛ¼ÓÖµ
342 unsigned long rt_cache_invalid; //Çå¿Õ·ÓÉcacheµÄÀÛ¼ÓÖµ
343 unsigned long rt_hash_add; //ÐÂÔört_hash_table½ÚµãµÄÀÛ¼ÓÖµ
344 unsigned long rt_hash_del; //ɾ³ýrt_hash_table½ÚµãµÄÀÛ¼ÓÖµ
345 unsigned long ssmac_change_indev; //ͬһԴMACµØÖ·Èë¿Údev¸Ä±äµÄ´ÎÊý
346};
347
348struct ptype_info {
349 unsigned long ptype_all[5];
350 unsigned long ptype_base[15];
351};
352
353
354struct pkt_lost_stats {
355 unsigned int send_drops;
356 unsigned int send_drop_bytes;
357 unsigned int recv_drops;
358 unsigned int recv_drop_bytes;
359 unsigned int total_packets;
360 unsigned int total_bytes;
361};
362
363struct pkt_lost_info {
364 struct pkt_lost_stats stats[2]; /*0:origin·½Ïò£¬1:reply·½Ïò*/
365};
366
367
368struct tcp_sock_stat {
369 unsigned long tcp_recv_num;
370 unsigned long tcp_send_num;
371 unsigned long tcp_retrans_num;
372 unsigned long tcp_recv_drops;
373 unsigned long tcp_send_drops;
374 unsigned long tcp_rst_send;
375 unsigned long tcp_rst_recv;
376};
377
378
379//½Ó¿ÚÉùÃ÷
380extern int netioctl_handle(int cmd, void *val);
381
382#endif //end _ZXIC_IOCTL_H_
383