1/************************************************************/
2/*  Version 1.5     by Yuhsin_Lee 2005/3/24 15:02           */
3/************************************************************/
4
5/* Defintion of Communcation Protocol of ASUS's network devices */
6/* $Id: iboxcom.h,v 1.1.1.1 2008/10/15 03:31:22 james26_jang Exp $								*/
7
8#ifndef __IBOX_COMMON__
9#define __IBOX_COMMON__
10
11#pragma pack(1)
12
13/****************************************/
14/*              FOR LINUX               */
15/****************************************/
16#ifndef  WIN32
17#define ULONG   unsigned long
18#define DWORD   unsigned long
19#define BYTE    char
20#define PBYTE   char *
21#define WORD    unsigned short
22#define INT     int
23#endif //#ifndef  WIN32
24
25#define SVRPORT 9999
26#define OTSPORT 9998
27#define OTS_IPADD "192.168.1.1"
28#define WLHDD_SUPPORT 1
29//Define Error Code
30
31/************ Use Internally in Program************/
32#define	ERR_SUCCESS				0
33
34/************ Use Internally in Program************/
35
36#define	ERR_BASE				100
37
38
39//Use For Network Communication Protocol
40
41//Packet Type Section
42#define NET_SERVICE_ID_BASE	        (10)
43#define NET_SERVICE_ID_LPT_EMU	    (NET_SERVICE_ID_BASE + 1)
44#define NET_SERVICE_ID_IBOX_INFO	(NET_SERVICE_ID_BASE + 2)
45
46
47//Packet Type Section
48#define NET_PACKET_TYPE_BASE	    (20)
49#define NET_PACKET_TYPE_CMD	        (NET_PACKET_TYPE_BASE + 1)
50#define NET_PACKET_TYPE_RES	        (NET_PACKET_TYPE_BASE + 2)
51
52//Command ID Section
53//#define NET_CMD_ID_BASE		30
54//#define NET_CMD_ID_GETINFO	NET_CMD_ID_BASE + 1
55
56enum  NET_CMD_ID
57{                               // Decimal      Hexadecimal
58	NET_CMD_ID_BASE = 30,       //  30              0x1E
59	NET_CMD_ID_GETINFO,         //  31              0x1F
60	NET_CMD_ID_GETINFO_EX,      //  32              0x20
61	NET_CMD_ID_GETINFO_SITES,   //  33              0x21
62	NET_CMD_ID_SETINFO,         //  34              0x22
63	NET_CMD_ID_SETSYSTEM,       //  35              0x23
64	NET_CMD_ID_GETINFO_PROF,    //  36              0x24
65	NET_CMD_ID_SETINFO_PROF,    //  37              0x25
66    	NET_CMD_ID_CHECK_PASS,      //  38              0x26
67#ifdef BTN_SETUP
68	NET_CMD_ID_SETKEY_EX,	    //  39		0x27
69	NET_CMD_ID_QUICKGW_EX,	    //  40 		0x28
70	NET_CMD_ID_EZPROBE,	    //  41		0x29
71#endif
72	NET_CMD_ID_MANU_BASE=50,    //  50		0x32
73	NET_CMD_ID_MANU_CMD,	    //  51		0x33
74	NET_CMD_ID_MAXIMUM
75};
76
77enum  NET_RES_OP
78{
79	NET_RES_OK = 0x0000,
80	NET_RES_ERR_PASSWORD = 0x0100,
81	NET_RES_ERR_FIELD_UNDEF = 0x0200
82};
83
84//Packet Header Structure
85typedef struct iboxPKT
86{
87	BYTE		ServiceID;
88	BYTE		PacketType;
89	WORD		OpCode;
90	DWORD 		Info; // Or Transaction ID
91} IBOX_COMM_PKT_HDR;
92
93typedef struct iboxPKTRes
94{
95	BYTE		ServiceID;
96	BYTE		PacketType;
97	WORD		OpCode;
98	DWORD 		Info; // Or Transaction ID
99} IBOX_COMM_PKT_RES;
100
101typedef struct iboxPKTEx
102{
103	BYTE		ServiceID;
104	BYTE		PacketType;
105	WORD		OpCode;
106	DWORD 		Info; // Or Transaction ID
107	BYTE		MacAddress[6];
108	BYTE		Password[32];   //NULL terminated string, string length:1~31, cannot be NULL string
109} IBOX_COMM_PKT_HDR_EX;
110
111typedef struct iboxPKTExRes
112{
113	BYTE		ServiceID;
114	BYTE		PacketType;
115	WORD		OpCode;
116	DWORD 		Info; // Or Transaction ID
117	BYTE		MacAddress[6];
118} IBOX_COMM_PKT_RES_EX;
119
120//structure in IBOX_COMM_PKT_HDR.Info
121//--------------------------------------------
122//|Product Info| Not used						|
123//--------------------------------------------
124//   1 bytes       3 bytes
125
126//Define the constants used in IBOX_COMM_PKT_HDR.Info
127#define INFO_WL500 0x00010000
128#define INFO_WL510 0x00020000
129#define INFO_PDU_LENGTH	512
130
131#define WAVESERVER			// eric++
132
133//Extended Fields Definition
134typedef struct PktGetInfo
135{
136  	BYTE PrinterInfo[128];
137	BYTE SSID[32];
138  	BYTE NetMask[32];
139  	BYTE ProductID[32];
140  	BYTE FirmwareVersion[16];
141  	BYTE OperationMode;
142  	BYTE MacAddress[6];
143  	BYTE Regulation;
144} PKT_GET_INFO;
145
146#ifdef WAVESERVER			// eric++
147#define WS_INFO_FILENAME		"/tmp/waveserver.info"
148
149// appended to the PKT_GET_INFO;
150// at offset 0x100 (sizeof (IBOX_COMM_PKT_RES) + sizeof (PKT_GET_INFO))
151typedef struct ws_info_t	{
152	BYTE Name[4];		// 'W' + 'S' + Major version number + Minor version number
153	WORD Channel;
154	WORD SampleRate;
155	union   {
156		unsigned char SampleSize;
157		struct {
158			unsigned char s8:1,     /* bit0, Sample Size  8-bits */
159			s16:1,		  	/* bit1, Sample Size 16-bits */
160			s24:1,		  	/* bit2, Sample Size 24-bits */
161			s32:1,		  	/* bit3, Sample Size 32-bits */
162			rsvd:3,		 	/* bit4~6, Reserved */
163			cflag:1;		/* bit7, Connection Flag */
164		} b;
165	} u;
166	BYTE Compress;
167	BYTE Reserved[6];
168} WS_INFO_T;
169#endif
170
171typedef struct PktGetInfoEx1
172{
173	BYTE FieldCount;
174  	WORD FieldID;
175} PKT_GET_INFO_EX1;
176
177typedef struct Profiles
178{
179	BYTE mode;
180  	BYTE chan;
181   	BYTE ssid[32];
182  	BYTE rate;
183  	BYTE wep;
184  	BYTE wepkeylen;  /* 0: 40 bit, 1: 128 bit */
185   	BYTE wepkey1[16];  /* only up to 13 bits used */
186  	BYTE wepkey2[16] ;  /* only up to 13 bits used */
187  	BYTE wepkey3[16] ;  /* only up to 13 bits used */
188  	BYTE wepkey4[16];  /* only up to 13 bits used */
189  	BYTE wepkeyactive;
190  	BYTE sharedkeyauth;
191   	BYTE brgmacclone;
192  	BYTE preamble;
193	BYTE Reserve[55];
194} PROFILES;
195
196typedef struct PktGetInfoProf
197{
198	BYTE StartIndex;
199  	BYTE Count;
200  	union
201  	{
202  	   PROFILES Profiles[2];
203  	   struct
204  	   {
205  	   	BYTE ButtonType;
206  		BYTE ButtonMode;
207  		BYTE ProfileCount;
208  	   } ProfileControl;
209  	} p;
210} PKT_GET_INFO_PROFILE;
211
212typedef struct PktGetInfoSta
213{
214	BYTE mode;
215  	BYTE chan;
216   	BYTE ssid[32];
217  	BYTE rate;
218  	BYTE wep;
219  	BYTE wepkeylen;  /* 0: 40 bit, 1: 128 bit */
220   	BYTE wepkey1[16];  /* only up to 13 bits used */
221  	BYTE wepkey2[16] ;  /* only up to 13 bits used */
222  	BYTE wepkey3[16] ;  /* only up to 13 bits used */
223  	BYTE wepkey4[16];  /* only up to 13 bits used */
224  	BYTE wepkeyactive;
225  	BYTE sharedkeyauth;
226   	BYTE brgmacclone;
227  	BYTE preamble;
228	BYTE buttonMode;
229  	BYTE buttonType;
230  	BYTE profileCount;
231  	BYTE connectionStatus;
232  	DWORD IPAddr;
233  	DWORD Mask;
234  	DWORD Gateway;
235  	BYTE Dhcp;
236  	BYTE Reserve[38]; //51-13=38
237} PKT_GET_INFO_STA;	// total 173
238
239/*
240=======================================================
241definition in these 2 data structure (EA mode)
242typedef struct Profiles
243typedef struct PktGetInfoSta
244
245                wep     wepkeylen   sharedkeyauth
246open-none       0       0           0
247open-wep64      1       0           0
248open-wep128     1       1           0
249shared-wep64    1       0           1
250shared-wep128   1       1           1
251wpa-tkip        0       1           not used
252
253//enum STA_VIRTUAL_WEP_KEYLEN_TYPE
254=======================================================
255*/
256
257typedef struct InfoSite
258{
259	BYTE SSID[32];
260	BYTE Channel;
261	BYTE Type;
262	BYTE Wep; //enum  SITE_ENCRYPTION
263	BYTE Status;
264	BYTE BSSID[6];
265	BYTE RSSI;
266	BYTE Flag;
267	BYTE Reserve[16];
268} SITES;
269
270typedef struct PktGetInfoSite
271{
272	BYTE Count;
273	BYTE Index;
274  	SITES Sites[8];
275} PKT_GET_INFO_SITES;
276
277typedef struct PktGetInfoAP
278{
279	BYTE SSID[32];
280  	BYTE Channel;
281  	BYTE Auth;
282  	BYTE Encrypt;
283  	BYTE Key[64];
284  	BYTE DefaultKey;
285  	DWORD IPAddr;
286  	DWORD Mask;
287  	DWORD Gateway;
288  	BYTE Dhcp;
289  	BYTE WdsMode;
290  	BYTE WdsMAC[6*6];
291  	BYTE WdsNo;
292  	BYTE Reserve[9];
293} PKT_GET_INFO_AP;	// total 224 bytes
294
295typedef struct iboxPKTCmd
296{
297	WORD		len;
298	BYTE		cmd[420];
299} PKT_SYSCMD;		// total 422 bytes
300
301typedef struct iboxPKTCmdRes
302{
303	WORD		len;
304	BYTE		res[420];
305} PKT_SYSCMD_RES;	// total 422 bytes
306
307#ifdef BTN_SETUP
308// what is included in PKT_SET_INFO_GW_QUICK, OR these 3 flags
309#define QFCAP_WIRELESS 		0x01
310#define QFCAP_ISP		0x02
311#define QFCAP_GET		0x40
312#define QFCAP_FINISH		0x80
313#define MAX_DHKEY_LEN		192
314
315enum ACK_TYPE
316{
317	QUICK_ACK=0x00,
318	QUICK_NACK
319};
320
321enum ISP_TYPE
322{
323	ISP_TYPE_DHCPCLIENT=0x00,
324	ISP_TYPE_PPPOE,
325	ISP_TYPE_PPTP,
326	ISP_TYPE_STATICIP,
327	ISP_TYPE_BIGPOND
328};
329
330typedef struct PktEZProbeInfo
331{
332	BYTE isNotDefault;	    // 0/1, is in default state ?
333	BYTE isSetByOts;    // 0/1, is in EZSetup default state ?
334	BYTE isWAN;         // 0/1, is WAN connected ?
335	BYTE isDHCP;        // Not used now
336	BYTE isPPPOE;	    // Not used now
337	BYTE Auth;	    // Authentication Method
338	BYTE Wds;	    // WDS Mode, in WDS_MODE
339	BYTE Acl;	    // ACL Mode, in ACL_MODE
340  	BYTE ProductID[32]; // Not used now
341  	BYTE FirmwareVersion[16]; // Not used now
342} PKT_EZPROBE_INFO;
343
344typedef struct PktSetInfoGWQuickKey
345{
346	BYTE Auth;
347	BYTE Encrypt;
348	BYTE KeyLen;	//default: 0
349	BYTE Key[MAX_DHKEY_LEN];
350} PKT_SET_INFO_GW_QUICK_KEY;
351
352typedef struct TempWirelessStruct {
353	BYTE TempSSID[32];
354	BYTE TempKey[32];      // AES Key, 256 bits = 32 bytes
355	BYTE SuggestSSID[32];  // If SSID = NULL String, use this one
356	BYTE SuggestKey[64];   // If Key = NULL String, use this one
357} TEMP_WIRELESS_STRUCT;
358
359typedef struct TempWireless
360{
361  	union
362  	{
363  	   BYTE SharedKey[MAX_DHKEY_LEN*2];
364	   TEMP_WIRELESS_STRUCT WirelessStruct;
365	} u;
366} TEMP_WIRELESS;
367
368typedef struct GWQuickWireless
369{
370	BYTE SSID[32];
371	BYTE Auth;		// as enum in AP_AUTHENTICATION
372  	BYTE Encrypt;	// as enum is AP_ENCRYPTION
373  	BYTE Key[64];
374	BYTE DefaultKey;
375} GW_QUICK_WIRELESS;
376
377typedef struct GWQuickISP
378{
379  	BYTE ISPType;		// as enum in ISP_TYPE
380  	BYTE UserName[64];  // NOTE: max length: 64! 0~63: null-terminated, 64: NOT null-terminated
381  	BYTE Password[64];  // NOTE: max length: 64! 0~63: null-terminated, 64: NOT null-terminated
382  	BYTE MAC[12];		// MAC in xxxxxxxxxxxx
383	BYTE HostName[32];	// Name                 // NOTE: max length: 32! 0~31: null-terminated, 32: NOT null-terminated
384	BYTE BPServer[32];	// IP address or Name   // NOTE: max length: 32! 0~31: null-terminated, 32: NOT null-terminated
385  	DWORD IPAddr;
386  	DWORD Mask;
387  	DWORD Gateway;
388	DWORD DNSServer1;
389	DWORD DNSServer2;
390	BYTE TimeZone[16];	// as string in Linux setting
391} GW_QUICK_ISP;
392
393typedef struct PktSetInfoGWQuick
394{
395	BYTE QuickFlag;
396	GW_QUICK_WIRELESS WSetting;
397	GW_QUICK_ISP ISPSetting;
398} PKT_SET_INFO_GW_QUICK;
399
400#endif
401// Definition for field ID and type
402enum  ACL_MODE
403{
404	ACL_MODE_DISABLE=0x00,
405	ACL_MODE_ACCEPT,
406	ACL_MODE_REJECT
407};
408
409enum  WDS_MODE
410{
411	WDS_MODE_AP_ONLY=0x00,
412	WDS_MODE_HYBRID,
413	WDS_MODE_WDS_ONLY
414};
415
416enum  OPERATION_MODE
417{
418	OPERATION_MODE_WB=0x00,
419	OPERATION_MODE_AP,
420	OPERATION_MODE_GATEWAY,
421	OPERATION_MODE_ROUTER,
422	OPERATION_MODE_PAIRING
423};
424
425enum AP_AUTHENTICATION
426{
427	AUTHENTICATION_SHARED=0x00,
428	AUTHENTICATION_OPEN,
429   	AUTHENTICATION_WPA_PSK=3, 	//add by Axin
430   	AUTHENTICATION_WPA=4, 		//add by Chen-I
431   	AUTHENTICATION_8021X=5 		//add by Chen-I
432};
433
434enum  AP_ENCRYPTION
435{
436	ENCRYPTION_DISABLE=0x00,
437	ENCRYPTION_WEP64,
438	ENCRYPTION_WEP128,
439   	ENCRYPTION_TKIP, 	//add by Axin
440	ENCRYPTION_AES
441};
442
443enum DEFAULT_KEY_INDEX
444{
445    DEFAULT_KEY_1=0x1,
446    DEFAULT_KEY_2,
447    DEFAULT_KEY_3,
448    DEFAULT_KEY_4
449};
450
451enum  SITE_ENCRYPTION
452{
453	SITE_ENCRYPTION_DISABLE=0x00,
454	SITE_ENCRYPTION_WEP,
455    SITE_ENCRYPTION_TKIP
456};
457
458enum  STA_STATION_MODE
459{
460	STATION_MODE_INFRA=0x00,
461	STATION_MODE_ADHOC
462#ifdef WLHDD_SUPPORT
463	,
464	STATION_MODE_AP
465#endif
466};
467
468enum STA_AUTHENTICATION
469{
470	STA_AUTHENTICATION_OPEN=0x00,
471	STA_AUTHENTICATION_SHARED
472};
473
474enum  STA_ENCRYPTION
475{
476	STA_ENCRYPTION_DISABLE=0x00,
477	STA_ENCRYPTION_ENABLE
478};
479
480enum  STA_ENCRYPTION_TYPE
481{
482	STA_ENCRYPTION_TYPE_WEP64=0x00,
483	STA_ENCRYPTION_TYPE_WEP128
484};
485
486enum STA_VIRTUAL_WEP_KEYLEN_TYPE
487{
488	STA_VIRTUAL_WEP_KEYLEN_NONE=0x00,
489	STA_VIRTUAL_WEP_KEYLEN_TKIP
490};
491
492enum  STA_CONNECTION_STATUS
493{
494	STATUS_DISCONNECT=0x00,
495	STATUS_CONNECT
496};
497
498enum DHCP_MODE
499{
500	DHCP_DISABLED = 0x00,
501	DHCP_ENABLED
502};
503
504enum  STA_BUTTON_MODE
505{
506	BUTTON_MODE_DISABLE=0x00,
507	BUTTON_MODE_ENABLE
508};
509
510enum  STA_BUTTON_TYPE
511{
512	BUTTON_TYPE_MAX_POWER=0x00,
513	BUTTON_TYPE_MAX_POWER_PROFILE,
514	BUTTON_TYPE_MAX_POWER_ALL,
515	BUTTON_TYPE_PROFILE,
516	BUTTON_TYPE_PROFILE_ONE
517};
518
519enum  STA_PROFILE_INDEX
520{
521	PROFILE_INDEX_START=0x00,
522	PROFILE_INDEX_ERASE
523};
524
525
526enum FIELD_DEFINTION
527{
528	FIELD_GENERAL = 0x0001,
529	FIELD_GENERAL_CONTROL, 		// 1
530	FIELD_GENERAL_OPERATION_MODE, 	// 1
531	FIELD_GENERAL_CURRENT_STA, 	// 160
532	FIELD_GENERAL_CURRENT_AP, 	// 160
533	FIELD_STA = 0x1000,
534	FIELD_STA_SSID,			// 32
535	FIELD_STA_MODE,			// 1
536	FIELD_STA_CHANNEL,		// 1
537	FIELD_STA_AUTH,			// 1
538	FIELD_STA_ENCRYPT,		// 1
539	FIELD_STA_TXRATE,		// 1
540	FIELD_STA_KEY1,			// 32
541	FIELD_STA_KEY2,			// 32
542	FIELD_STA_KEY3,			// 32
543	FIELD_STA_KEY4,			// 32
544	FIELD_STA_DEFAULTKEY,		// 1
545	FIELD_STA_PASSPHRASE,		// 64
546	FIELD_STA_SCANMODE,		// 1
547	FIELD_STA_SCANTYPE,		// 1
548	FIELD_STA_PROFILE,		// 1
549	FIELD_STA_CONNECTION_STATUS = 0x1050, // 1
550	FIELD_WIRELESS = 0x2000,
551	FIELD_WIRELESS_SSID,		// 32
552	FIELD_WIRELESS_CHANNEL,		// 1
553	FIELD_WIRELESS_AUTH,		// 1
554	FIELD_WIRELESS_ENCRYPT,		// 1
555	FIELD_WIRELESS_TXRATE,		// 1
556	FIELD_WIRELESS_KEY1,		// 1
557	FIELD_WIRELESS_KEY2,		// 1
558	FIELD_WIRELESS_KEY3,		// 1
559	FIELD_WIRELESS_KEY4,		// 1
560	FIELD_WIRELESS_DEFAULTKEY,	// 1
561	FIELD_WIRELESS_PASSPHRASE,	// 64
562	FIELD_WIRELESS_BLOCKSSID,	// 1
563	FIELD_WIRELESS_BASICRATE,	// 2
564	FIELD_WIRELESS_PREAMBLE,	// 1
565	FIELD_LAN = 0x2100,
566	FIELD_LAN_CONNECTION_TYPE,	// 1
567	FIELD_LAN_IPADDRESS,		// 32
568	FIELD_LAN_NETMASK,		// 32
569	FIELD_LAN_GATEWAY,		// 32
570	FIELD_WAN = 0x2200,
571	FIELD_WAN_CONNECTION_TYPE	// 1
572#ifdef BTN_SETUP
573	, FIELD_GW_QUICK = 0x2300,
574	FIELD_GW_QUICK_SETUP		// 1
575#endif
576};
577
578#pragma pack()
579#endif //#ifndef __IBOX_COMMON__
580
581
582
583