📄 nameserv.h
字号:
#ifndef _NAMESERV_H_#define _NAMESERV_H_/* Unix SMB/CIFS implementation. NBT netbios header - version 2 Copyright (C) Andrew Tridgell 1994-1998 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#define INFO_VERSION "INFO/version"#define INFO_COUNT "INFO/num_entries"#define INFO_ID_HIGH "INFO/id_high"#define INFO_ID_LOW "INFO/id_low"#define ENTRY_PREFIX "ENTRY/"#define PERMANENT_TTL 0/* NTAS uses 2, NT uses 1, WfWg uses 0 */#define MAINTAIN_LIST 2#define ELECTION_VERSION 1#define MAX_DGRAM_SIZE (576) /* tcp/ip datagram limit is 576 bytes */#define MIN_DGRAM_SIZE 12/********************************************************* Types of reply packet.**********************************************************/enum netbios_reply_type_code { NMB_QUERY, NMB_STATUS, NMB_REG, NMB_REG_REFRESH, NMB_REL, NMB_WAIT_ACK, NMB_MULTIHOMED_REG, WINS_REG, WINS_QUERY };/* From rfc1002, 4.2.1.2 *//* Question types. */#define QUESTION_TYPE_NB_QUERY 0x20#define QUESTION_TYPE_NB_STATUS 0x21/* Question class */#define QUESTION_CLASS_IN 0x1/* Opcode definitions */#define NMB_NAME_QUERY_OPCODE 0x0#define NMB_NAME_REG_OPCODE 0x05 /* see rfc1002.txt 4.2.2,3,5,6,7,8 */#define NMB_NAME_RELEASE_OPCODE 0x06 /* see rfc1002.txt 4.2.9,10,11 */#define NMB_WACK_OPCODE 0x07 /* see rfc1002.txt 4.2.16 *//* Ambiguity in rfc1002 about which of these is correct. *//* WinNT uses 8 by default but can be made to use 9. */#define NMB_NAME_REFRESH_OPCODE_8 0x08 /* see rfc1002.txt 4.2.4 */#define NMB_NAME_REFRESH_OPCODE_9 0x09 /* see rfc1002.txt 4.2.4 */#define NMB_NAME_MULTIHOMED_REG_OPCODE 0x0F /* Invented by Microsoft. *//* XXXX what about all the other types?? 0x1, 0x2, 0x3, 0x4, 0x8? *//* Resource record types. rfc1002 4.2.1.3 */#define RR_TYPE_A 0x1#define RR_TYPE_NS 0x2#define RR_TYPE_NULL 0xA#define RR_TYPE_NB 0x20#define RR_TYPE_NBSTAT 0x21/* Resource record class. */#define RR_CLASS_IN 0x1/* NetBIOS flags */#define NB_GROUP 0x80#define NB_PERM 0x02#define NB_ACTIVE 0x04#define NB_CONFL 0x08#define NB_DEREG 0x10#define NB_BFLAG 0x00 /* Broadcast node type. */#define NB_PFLAG 0x20 /* Point-to-point node type. */#define NB_MFLAG 0x40 /* Mixed bcast & p-p node type. */#define NB_HFLAG 0x60 /* Microsoft 'hybrid' node type. */#define NB_NODETYPEMASK 0x60/* Mask applied to outgoing NetBIOS flags. */#define NB_FLGMSK 0xE0/* The wins flags. Looks like the nbflags ! */#define WINS_UNIQUE 0x00 /* Unique record */#define WINS_NGROUP 0x01 /* Normal Group eg: 1B */#define WINS_SGROUP 0x02 /* Special Group eg: 1C */#define WINS_MHOMED 0x03 /* MultiHomed */#define WINS_ACTIVE 0x00 /* active record */#define WINS_RELEASED 0x04 /* released record */#define WINS_TOMBSTONED 0x08 /* tombstoned record */#define WINS_DELETED 0x0C /* deleted record */#define WINS_STATE_MASK 0x0C#define WINS_LOCAL 0x00 /* local record */#define WINS_REMOTE 0x10 /* remote record */#define WINS_BNODE 0x00 /* Broadcast node */#define WINS_PNODE 0x20 /* PtP node */#define WINS_MNODE 0x40 /* Mixed node */#define WINS_HNODE 0x60 /* Hybrid node */#define WINS_NONSTATIC 0x00 /* dynamic record */#define WINS_STATIC 0x80 /* static record */#define WINS_STATE_ACTIVE(p) (((p)->data.wins_flags & WINS_STATE_MASK) == WINS_ACTIVE)/* NetBIOS flag identifier. */#define NAME_GROUP(p) ((p)->data.nb_flags & NB_GROUP)#define NAME_BFLAG(p) (((p)->data.nb_flags & NB_NODETYPEMASK) == NB_BFLAG)#define NAME_PFLAG(p) (((p)->data.nb_flags & NB_NODETYPEMASK) == NB_PFLAG)#define NAME_MFLAG(p) (((p)->data.nb_flags & NB_NODETYPEMASK) == NB_MFLAG)#define NAME_HFLAG(p) (((p)->data.nb_flags & NB_NODETYPEMASK) == NB_HFLAG)/* Samba name state for a name in a namelist. */#define NAME_IS_ACTIVE(p) ((p)->data.nb_flags & NB_ACTIVE)#define NAME_IN_CONFLICT(p) ((p)->data.nb_flags & NB_CONFL)#define NAME_IS_DEREGISTERING(p) ((p)->data.nb_flags & NB_DEREG)/* Error codes for NetBIOS requests. */#define FMT_ERR 0x1 /* Packet format error. */#define SRV_ERR 0x2 /* Internal server error. */#define NAM_ERR 0x3 /* Name does not exist. */#define IMP_ERR 0x4 /* Request not implemented. */#define RFS_ERR 0x5 /* Request refused. */#define ACT_ERR 0x6 /* Active error - name owned by another host. */#define CFT_ERR 0x7 /* Name in conflict error. */#define REFRESH_TIME (15*60)#define NAME_POLL_REFRESH_TIME (5*60)#define NAME_POLL_INTERVAL 15/* Workgroup state identifiers. */#define AM_POTENTIAL_MASTER_BROWSER(work) ((work)->mst_state == MST_POTENTIAL)#define AM_LOCAL_MASTER_BROWSER(work) ((work)->mst_state == MST_BROWSER)#define AM_DOMAIN_MASTER_BROWSER(work) ((work)->dom_state == DOMAIN_MST)#define AM_DOMAIN_MEMBER(work) ((work)->log_state == LOGON_SRV)/* Microsoft browser NetBIOS name. */#define MSBROWSE "\001\002__MSBROWSE__\002"/* Mail slots. */#define BROWSE_MAILSLOT "\\MAILSLOT\\BROWSE"#define NET_LOGON_MAILSLOT "\\MAILSLOT\\NET\\NETLOGON"#define NT_LOGON_MAILSLOT "\\MAILSLOT\\NET\\NTLOGON"#define LANMAN_MAILSLOT "\\MAILSLOT\\LANMAN"/* Samba definitions for find_name_on_subnet(). */#define FIND_ANY_NAME 0#define FIND_SELF_NAME 1/* * The different name types that can be in namelists. * * SELF_NAME should only be on the broadcast and unicast subnets. * LMHOSTS_NAME should only be in the remote_broadcast_subnet. * REGISTER_NAME, DNS_NAME, DNSFAIL_NAME should only be in the wins_server_subnet. * WINS_PROXY_NAME should only be on the broadcast subnets. * PERMANENT_NAME can be on all subnets except remote_broadcast_subnet. * */enum name_source {LMHOSTS_NAME, REGISTER_NAME, SELF_NAME, DNS_NAME, DNSFAIL_NAME, PERMANENT_NAME, WINS_PROXY_NAME};enum node_type {B_NODE=0, P_NODE=1, M_NODE=2, NBDD_NODE=3};enum packet_type {NMB_PACKET, DGRAM_PACKET};enum master_state { MST_NONE, MST_POTENTIAL, MST_BACKUP, MST_MSB, MST_BROWSER, MST_UNBECOMING_MASTER};enum domain_state { DOMAIN_NONE, DOMAIN_WAIT, DOMAIN_MST};enum logon_state { LOGON_NONE, LOGON_WAIT, LOGON_SRV};struct subnet_record;struct nmb_data { uint16 nb_flags; /* Netbios flags. */ int num_ips; /* Number of ip entries. */ struct in_addr *ip; /* The ip list for this name. */ enum name_source source; /* Where the name came from. */ time_t death_time; /* The time the record must be removed (do not remove if 0). */ time_t refresh_time; /* The time the record should be refreshed. */ SMB_BIG_UINT id; /* unique id */ struct in_addr wins_ip; /* the adress of the wins server this record comes from */ int wins_flags; /* similar to the netbios flags but different ! */};/* This structure represents an entry in a local netbios name list. */struct name_record { ubi_trNode node[1]; struct subnet_record *subnet; struct nmb_name name; /* The netbios name. */ struct nmb_data data; /* The netbios data. */};/* Browser cache for synchronising browse lists. */struct browse_cache_record { ubi_dlNode node[1]; unstring lmb_name; unstring work_group; struct in_addr ip; time_t sync_time; time_t death_time; /* The time the record must be removed. */};/* This is used to hold the list of servers in my domain, and is contained within lists of domains. */struct server_record { struct server_record *next; struct server_record *prev; struct subnet_record *subnet; struct server_info_struct serv; time_t death_time; };/* A workgroup structure. It contains a list of servers. */struct work_record { struct work_record *next; struct work_record *prev; struct subnet_record *subnet; struct server_record *serverlist; /* Stage of development from non-local-master up to local-master browser. */ enum master_state mst_state; /* Stage of development from non-domain-master to domain-master browser. */ enum domain_state dom_state; /* Stage of development from non-logon-server to logon server. */ enum logon_state log_state; /* Work group info. */ unstring work_group; int token; /* Used when communicating with backup browsers. */ unstring local_master_browser_name; /* Current local master browser. */ /* Announce info. */ time_t lastannounce_time; int announce_interval; BOOL needannounce; /* Timeout time for this workgroup. 0 means permanent. */ time_t death_time; /* Election info */ BOOL RunningElection; BOOL needelection; int ElectionCount; uint32 ElectionCriterion; /* Domain master browser info. Used for efficient syncs. */ struct nmb_name dmb_name; struct in_addr dmb_addr;};/* typedefs needed to define copy & free functions for userdata. */struct userdata_struct;typedef struct userdata_struct * (*userdata_copy_fn)(struct userdata_struct *);typedef void (*userdata_free_fn)(struct userdata_struct *);/* Structure to define any userdata passed around. */struct userdata_struct { userdata_copy_fn copy_fn; userdata_free_fn free_fn; unsigned int userdata_len; char data[16]; /* 16 is to ensure alignment/padding on all systems */};struct response_record;struct packet_struct;struct res_rec;/* typedef to define the function called when this response packet comes in. */typedef void (*response_function)(struct subnet_record *, struct response_record *, struct packet_struct *);/* typedef to define the function called when this response record times out. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -