s4-repl: add a debug to make it easier to monitor replication
[Samba/aatanasov.git] / source4 / librpc / idl / winsrepl.idl
blob0ec05e891cbb6880e836fec30f3fcabf9c1a0833
1 #include "idl_types.h"
3 /*
4 IDL structures for WINS replication protocol (port 42)
6 Note that WINS replication is not traditionally encoded using
7 IDL/NDR
9 Written by Andrew Tridgell <tridge@osdl.org>
12 import "nbt.idl";
14 interface wrepl
16 const int WINS_REPLICATION_PORT = 42;
18 typedef [flag(NDR_BIG_ENDIAN)] struct {
19 ipv4address owner;
20 ipv4address ip;
21 } wrepl_ip;
23 typedef [flag(NDR_LITTLE_ENDIAN)] struct {
24 uint32 num_ips;
25 wrepl_ip ips[num_ips];
26 } wrepl_address_list;
28 typedef [nodiscriminant] union {
29 [case(0)] ipv4address ip;
30 [case(2)] wrepl_address_list addresses;
31 } wrepl_addresses;
33 typedef [enum8bit] enum {
34 WREPL_TYPE_UNIQUE = 0x0,
35 WREPL_TYPE_GROUP = 0x1,
36 WREPL_TYPE_SGROUP = 0x2,
37 WREPL_TYPE_MHOMED = 0x3
38 } wrepl_name_type;
40 typedef [enum8bit] enum {
41 WREPL_STATE_ACTIVE = 0x0,
42 WREPL_STATE_RELEASED = 0x1,
43 WREPL_STATE_TOMBSTONE = 0x2,
44 WREPL_STATE_RESERVED = 0x3
45 } wrepl_name_state;
47 typedef [enum8bit] enum {
48 WREPL_NODE_B = 0x0,
49 WREPL_NODE_P = 0x1,
50 WREPL_NODE_M = 0x2,
51 WREPL_NODE_H = 0x3
52 } wrepl_name_node;
54 typedef [bitmap32bit] bitmap {
55 WREPL_FLAGS_RECORD_TYPE = 0x00000003,
56 WREPL_FLAGS_RECORD_STATE = 0x0000000C,
57 WREPL_FLAGS_REGISTERED_LOCAL = 0x00000010,
58 WREPL_FLAGS_NODE_TYPE = 0x00000060,
59 WREPL_FLAGS_IS_STATIC = 0x00000080
60 } wrepl_flags;
62 typedef [v1_enum] enum {
63 WREPL_GROUP_FLAG_NO_GROUP = 0x00000000,
64 WREPL_GROUP_FLAG_IS_GROUP = 0x00000001
65 } wrepl_group_flag;
67 #define WREPL_IS_GROUP(flags) (\
68 ((((flags) & WREPL_FLAGS_RECORD_TYPE) == WREPL_TYPE_GROUP)|| \
69 (((flags) & WREPL_FLAGS_RECORD_TYPE) == WREPL_TYPE_SGROUP))\
70 ? WREPL_GROUP_FLAG_IS_GROUP : WREPL_GROUP_FLAG_NO_GROUP)
72 typedef struct {
73 wrepl_nbt_name name;
74 wrepl_flags flags;
75 [flag(NDR_LITTLE_ENDIAN),value(WREPL_IS_GROUP(flags))] wrepl_group_flag is_group;
76 udlongr id;
77 [switch_is(flags & 2)] wrepl_addresses addresses;
78 ipv4address unknown;
79 } wrepl_wins_name;
81 typedef struct {
82 uint32 num_names;
83 wrepl_wins_name names[num_names];
84 } wrepl_send_reply;
86 typedef struct {
87 ipv4address address;
88 udlongr max_version;
89 udlongr min_version;
90 uint32 type;
91 } wrepl_wins_owner;
93 typedef struct {
94 uint32 partner_count;
95 wrepl_wins_owner partners[partner_count];
96 ipv4address initiator;
97 } wrepl_table;
99 typedef [v1_enum] enum {
100 WREPL_REPL_TABLE_QUERY = 0,
101 WREPL_REPL_TABLE_REPLY = 1,
102 WREPL_REPL_SEND_REQUEST = 2,
103 WREPL_REPL_SEND_REPLY = 3,
104 WREPL_REPL_UPDATE = 4,
105 WREPL_REPL_UPDATE2 = 5,
106 WREPL_REPL_INFORM = 8,
107 WREPL_REPL_INFORM2 = 9
108 } wrepl_replication_cmd;
110 typedef [nodiscriminant] union {
111 [case(WREPL_REPL_TABLE_QUERY)] ;
112 [case(WREPL_REPL_TABLE_REPLY)] wrepl_table table;
113 [case(WREPL_REPL_SEND_REQUEST)] wrepl_wins_owner owner;
114 [case(WREPL_REPL_SEND_REPLY)] wrepl_send_reply reply;
115 [case(WREPL_REPL_UPDATE)] wrepl_table table;
116 [case(WREPL_REPL_UPDATE2)] wrepl_table table;
117 [case(WREPL_REPL_INFORM)] wrepl_table table;
118 [case(WREPL_REPL_INFORM2)] wrepl_table table;
119 } wrepl_replication_info;
121 typedef struct {
122 wrepl_replication_cmd command;
123 [switch_is(command)] wrepl_replication_info info;
124 } wrepl_replication;
126 typedef struct {
127 uint32 assoc_ctx;
128 uint16 minor_version;
129 uint16 major_version;
130 } wrepl_start;
132 typedef struct {
133 uint32 reason;
134 } wrepl_stop;
136 typedef [v1_enum] enum {
137 WREPL_START_ASSOCIATION = 0,
138 WREPL_START_ASSOCIATION_REPLY = 1,
139 WREPL_STOP_ASSOCIATION = 2,
140 WREPL_REPLICATION = 3
141 } wrepl_mess_type;
143 typedef [nodiscriminant] union {
144 [case(WREPL_START_ASSOCIATION)] wrepl_start start;
145 [case(WREPL_START_ASSOCIATION_REPLY)] wrepl_start start_reply;
146 [case(WREPL_STOP_ASSOCIATION)] wrepl_stop stop;
147 [case(WREPL_REPLICATION)] wrepl_replication replication;
148 } wrepl_message;
151 the opcode appears to be a bitfield, but as far as I can tell
152 you must always set the following bits. Additional bits don't
153 seem to matter. Very strange.
155 const int WREPL_OPCODE_BITS = 0x7800;
158 typedef [gensize,flag(NDR_BIG_ENDIAN|NDR_PAHEX),public] struct {
159 uint32 opcode;
160 uint32 assoc_ctx;
161 wrepl_mess_type mess_type;
162 [switch_is(mess_type)] wrepl_message message;
163 [flag(NDR_REMAINING)] DATA_BLOB padding;
164 } wrepl_packet;
166 typedef [flag(NDR_BIG_ENDIAN|NDR_PAHEX),public] struct {
167 [value(ndr_size_wrepl_packet(&packet, ndr->iconv_convenience, ndr->flags))] uint32 size;
168 wrepl_packet packet;
169 } wrepl_wrap;
171 void decode_winsrepl(
172 [in] wrepl_wrap p