2 Unix SMB/CIFS implementation.
4 packet utility functions
6 Copyright (C) Andrew Tridgell 2005
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #include "dlinklist.h"
25 #include "nbt_server/nbt_server.h"
28 we received a badly formed packet - log it
30 void nbtd_bad_packet(struct nbt_name_packet *packet,
31 const char *src_address, const char *reason)
33 DEBUG(2,("nbtd: bad packet '%s' from %s\n", reason, src_address));
35 NDR_PRINT_DEBUG(nbt_name_packet, packet);
41 see if an incoming packet is a broadcast packet from one of our own
44 BOOL nbtd_self_packet(struct nbt_name_socket *nbtsock,
45 struct nbt_name_packet *packet,
46 const char *src_address, int src_port)
48 struct nbtd_interface *iface = talloc_get_type(nbtsock->incoming.private,
49 struct nbtd_interface);
50 struct nbtd_server *nbtsrv = iface->nbtsrv;
52 /* if its not a broadcast then its not considered a self packet */
53 if (!(packet->operation & NBT_FLAG_BROADCAST)) {
57 /* if its not from the nbt port, then it wasn't a broadcast from us */
58 if (src_port != lp_nbt_port()) {
62 /* this uses the fact that iface->nbtsock is our non-broadcast
64 if (iface->nbtsock == nbtsock) {
68 /* we have to loop over our interface list, seeing if its from
69 one of our own interfaces */
70 for (iface=nbtsrv->interfaces;iface;iface=iface->next) {
71 if (strcmp(src_address, iface->ip_address) == 0) {