/* Copyright 1998 Acorn Computers Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
*  Lan Manager client
*
*  NBNS.H -- Private Definitions for NetBIOS-over-IP
*
*  Versions
*  29-01-96 INH Original
*
*/

/* RFC-1002 definitions ---------------------------- */

#define NBNS_PORT 137         /* UDP */

/* Flags to CreateNBNSheader */
#define HAS_QUERY	(1<<16)
#define HAS_ANSWER	(1<<17)
#define HAS_AUTHORITY	(1<<18)
#define HAS_ADDITIONAL	(1<<19)

/* Opcode field definitions */

#define OPC_OPCODE_MASK (15<<11)  /* Opcode bits */
#define OPC_STATUS_MASK  15

#define OPC_REQUEST	0
#define OPC_REPLY	(1<<15)

#define OPC_FIND	(0<<11)
#define OPC_REGISTER	(5<<11)
#define OPC_RELEASE	(6<<11)
#define OPC_WACK	(7<<11)
#define OPC_REFRESH	(8<<11)


#define OPC_AUTHORITY	(1<<10)
#define OPC_TRUNCATED	(1<<9)
#define OPC_REC_DESIRED	(1<<8)
#define OPC_REC_AVAIL	(1<<7)
#define OPC_BROADCAST	(1<<4)

/* Status values */
#define ST_OK		0
#define ST_FMT_ERR	1
#define ST_SRV_ERR	2
#define ST_NAM_ERR	3
#define ST_IMP_ERR	4
#define ST_RFS_ERR	5
#define ST_ACT_ERR	6
#define ST_CFT_ERR	7

/* Commonly used combinations */

#define NAME_REG_REQUEST	(OPC_REQUEST|OPC_REGISTER|OPC_REC_DESIRED  \
                                  |OPC_BROADCAST|HAS_QUERY|HAS_ADDITIONAL)

#define NAME_OVERWRITE_REQUEST	(OPC_REQUEST|OPC_REGISTER|OPC_BROADCAST    \
				  |HAS_QUERY|HAS_ADDITIONAL)

#define NAME_REG_REPLY		(OPC_REPLY  |OPC_REGISTER|OPC_AUTHORITY    \
                                  |OPC_REC_DESIRED|OPC_REC_AVAIL|HAS_ANSWER)

#define NAME_END_CHALLENGE	(OPC_REPLY  |OPC_REGISTER|OPC_AUTHORITY    \
				  |OPC_REC_DESIRED|HAS_ANSWER)

#define NAME_REFRESH_REQUEST	(OPC_REQUEST|OPC_REFRESH|OPC_BROADCAST     \
                                  |HAS_QUERY|HAS_ADDITIONAL)

#define NAME_RLSE_REQUEST	(OPC_REQUEST|OPC_RELEASE|OPC_BROADCAST     \
				  |HAS_QUERY|HAS_ADDITIONAL)

#define NAME_RLSE_REPLY		(OPC_REPLY  |OPC_RELEASE|OPC_AUTHORITY     \
				  |HAS_ANSWER)

#define NAME_FIND_REQUEST	(OPC_REQUEST|OPC_FIND|OPC_REC_DESIRED      \
                                  |HAS_QUERY)
#define NAME_STATUS_REQUEST	(OPC_REQUEST|OPC_FIND|HAS_QUERY)

#define NAME_FIND_REPLY		(OPC_REPLY  |OPC_FIND|OPC_AUTHORITY      \
				  |OPC_REC_DESIRED|HAS_ANSWER)

#define NAME_FIND_REDIRECT	(OPC_REPLY  |OPC_FIND|OPC_REC_DESIRED    \
				  |HAS_AUTHORITY|HAS_ADDITIONAL)

#define NAME_WAIT		(OPC_REPLY |OPC_WACK|OPC_AUTHORITY|HAS_ANSWER)

/* Misc flags ---- */

#define INET_IPADDR_TAG		0x00010001
#define INET_NAMESRV_TAG	0x00020001
#define INET_NULL_TAG		0x000A0001
#define INET_NAME_TAG		0x00200001
#define INET_STATUS_TAG		0x00210001


#define NBFLG_UNIQUE	0
#define NBFLG_GROUP	0x8000
#define NBFLG_BNODE	0
#define NBFLG_PNODE	0x2000
#define NBFLG_MNODE	0x4000

/* Extra flags for status queries */
#define NBFLG_RELEASE	0x1000
#define NBFLG_CONFLICT	0x800
#define NBFLG_ACTIVE	0x400
#define NBFLG_PERMANENT	0x200


/* Session services ------------ */

#define NBIP_SESSION_PORT 139 /* TCP */

#define NBIP_SESS_DATA      0x00
#define NBIP_SESS_REQUEST   0x81
#define NBIP_SESS_OK        0x82
#define NBIP_SESS_REJECT    0x83
#define NBIP_SESS_RETARGET  0x84
#define NBIP_SESS_KEEPALIVE 0x85