r5118: added support for node status replies in nbtd. nmblookup -S now works against...
[samba.git] / source / nbt_server / nbt_server.h
index 9ef510fbb243d6f2121c4fd2b75c66e0bdbea674..602d7b2e46569b73693cde0282a88a6681680baf 100644 (file)
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "libcli/nbt/libnbt.h"
+
+/* 
+   a list of our registered names on each interface
+*/
+struct nbt_iface_name {
+       struct nbt_iface_name *next, *prev;
+       struct nbt_interface *iface;
+       struct nbt_name name;
+       uint16_t nb_flags;
+       struct timeval registration_time;
+       uint32_t ttl;
+};
+
 
 /* a list of network interfaces we are listening on */
 struct nbt_interface {
        struct nbt_interface *next, *prev;
 
 /* a list of network interfaces we are listening on */
 struct nbt_interface {
        struct nbt_interface *next, *prev;
+       struct nbt_server *nbtsrv;
        const char *ip_address;
        const char *bcast_address;
        const char *ip_address;
        const char *bcast_address;
+       const char *netmask;
        struct nbt_name_socket *nbtsock;
        struct nbt_name_socket *nbtsock;
-       struct nbt_server *nbtsrv;
+       struct nbt_iface_name *names;
 };
 
 
 };
 
 
@@ -37,8 +53,19 @@ struct nbt_interface {
 struct nbt_server {
        struct task_server *task;
 
 struct nbt_server {
        struct task_server *task;
 
+       /* the list of local network interfaces */
        struct nbt_interface *interfaces;
        struct nbt_interface *interfaces;
+
+       /* broadcast interface used for receiving packets only */
+       struct nbt_interface *bcast_interface;
 };
 
 
 
 };
 
 
 
+/* check a condition on an incoming packet */
+#define NBT_ASSERT_PACKET(packet, src_address, test) do { \
+       if (!(test)) { \
+               nbt_bad_packet(packet, src_address, #test); \
+               return; \
+       } \
+} while (0)