Written by Andrew Tridgell <tridge@osdl.org>
*/
-[
- uuid("0-1-2-3-4"),
- version(0.0),
- pointer_default(unique),
- pointer_default_top(unique)
-]
+import "nbt.idl";
+
interface wrepl
{
const int WINS_REPLICATION_PORT = 42;
typedef [flag(NDR_LITTLE_ENDIAN)] struct {
uint32 num_ips;
wrepl_ip ips[num_ips];
- ipv4address unknown;
} wrepl_address_list;
typedef [nodiscriminant] union {
- [case(0)] wrepl_ip address;
+ [case(0)] ipv4address ip;
[case(2)] wrepl_address_list addresses;
} wrepl_addresses;
+ typedef [enum8bit] enum {
+ WREPL_TYPE_UNIQUE = 0x0,
+ WREPL_TYPE_GROUP = 0x1,
+ WREPL_TYPE_SGROUP = 0x2,
+ WREPL_TYPE_MHOMED = 0x3
+ } wrepl_name_type;
+
+ typedef [enum8bit] enum {
+ WREPL_STATE_ACTIVE = 0x0,
+ WREPL_STATE_RELEASED = 0x1,
+ WREPL_STATE_TOMBSTONE = 0x2,
+ WREPL_STATE_RESERVED = 0x3
+ } wrepl_name_state;
+
+ typedef [enum8bit] enum {
+ WREPL_NODE_B = 0x0,
+ WREPL_NODE_P = 0x1,
+ WREPL_NODE_M = 0x2,
+ WREPL_NODE_H = 0x3
+ } wrepl_name_node;
+
+ typedef [bitmap32bit] bitmap {
+ WREPL_FLAGS_RECORD_TYPE = 0x00000003,
+ WREPL_FLAGS_RECORD_STATE = 0x0000000C,
+ WREPL_FLAGS_REGISTERED_LOCAL = 0x00000010,
+ WREPL_FLAGS_NODE_TYPE = 0x00000060,
+ WREPL_FLAGS_IS_STATIC = 0x00000080
+ } wrepl_flags;
+
+ typedef [v1_enum] enum {
+ WREPL_GROUP_FLAG_NO_GROUP = 0x00000000,
+ WREPL_GROUP_FLAG_IS_GROUP = 0x00000001
+ } wrepl_group_flag;
+
+#define WREPL_IS_GROUP(flags) (\
+ ((((flags) & WREPL_FLAGS_RECORD_TYPE) == WREPL_TYPE_GROUP)|| \
+ (((flags) & WREPL_FLAGS_RECORD_TYPE) == WREPL_TYPE_SGROUP))\
+ ? WREPL_GROUP_FLAG_IS_GROUP : WREPL_GROUP_FLAG_NO_GROUP)
+
typedef struct {
- uint32 name_len;
- uint8 name[name_len];
- uint32 flags;
- [flag(NDR_LITTLE_ENDIAN)] uint32 group_flag;
+ wrepl_nbt_name name;
+ wrepl_flags flags;
+ [flag(NDR_LITTLE_ENDIAN),value(WREPL_IS_GROUP(flags))] wrepl_group_flag is_group;
udlongr id;
[switch_is(flags & 2)] wrepl_addresses addresses;
+ ipv4address unknown;
} wrepl_wins_name;
typedef struct {
WREPL_REPL_SEND_REQUEST = 2,
WREPL_REPL_SEND_REPLY = 3,
WREPL_REPL_UPDATE = 4,
- WREPL_REPL_5 = 5,
+ WREPL_REPL_UPDATE2 = 5,
WREPL_REPL_INFORM = 8,
- WREPL_REPL_9 = 9
+ WREPL_REPL_INFORM2 = 9
} wrepl_replication_cmd;
typedef [nodiscriminant] union {
[case(WREPL_REPL_SEND_REQUEST)] wrepl_wins_owner owner;
[case(WREPL_REPL_SEND_REPLY)] wrepl_send_reply reply;
[case(WREPL_REPL_UPDATE)] wrepl_table table;
- [case(WREPL_REPL_5)] wrepl_table table;
+ [case(WREPL_REPL_UPDATE2)] wrepl_table table;
[case(WREPL_REPL_INFORM)] wrepl_table table;
- [case(WREPL_REPL_9)] wrepl_table table;
+ [case(WREPL_REPL_INFORM2)] wrepl_table table;
} wrepl_replication_info;
typedef struct {
} wrepl_packet;
typedef [flag(NDR_BIG_ENDIAN|NDR_PAHEX),public] struct {
- [value(ndr_size_wrepl_packet(&packet, ndr->flags))] uint32 size;
+ [value(ndr_size_wrepl_packet(&packet, ndr->iconv_convenience, ndr->flags))] uint32 size;
wrepl_packet packet;
} wrepl_wrap;