summaryrefslogtreecommitdiff
path: root/source3/namedbsubnet.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>1997-10-23 22:30:57 +0000
committerJeremy Allison <jra@samba.org>1997-10-23 22:30:57 +0000
commitabb255cfe674a39c6a42f5083af9c5facdbcca05 (patch)
treebccbf53d36ce62b7a0e23cbcf628a53850c2db95 /source3/namedbsubnet.c
parent5557ab3c007b79c132e9a2da16e41be7b13f1b39 (diff)
downloadsamba-abb255cfe674a39c6a42f5083af9c5facdbcca05.tar.gz
samba-abb255cfe674a39c6a42f5083af9c5facdbcca05.tar.bz2
samba-abb255cfe674a39c6a42f5083af9c5facdbcca05.zip
Big change to make nmbd code more readable/understandable.
Main change is removal of find_name_search() confusion. This has been replaced with find_name_on_subnet() which makes it explicit what is being searched. Also changed wins_subnet to be wins_client_subnet in preparation for splitting the wins subnet into client and server pieces. This is a big nmbd change and I'd appreciate any bug reports. Specific changes follow : asyncdns.c: Removed wins entry from add_netbios_entry(). This is now explicit in the subnet_record parameter. interface.c: iface_bcast(), iface_nmask(), iface_ip() return the default interface if none can be found. Made this behavior explicit - some code in nmbd incorrectly depended upon this (reply_name_status() for instance). nameannounce.c: find_name_search changes to find_name_on_subnet. namebrowse.c: wins_subnet renamed to wins_client_subnet. namedbname.c: find_name_search removed. find_name_on_subnet added. add_netbios_entry - wins parameter removed. namedbsubnet.c: find_req_subnet removed - not explicit enough. nameelect.c: wins_subnet renamed to wins_client_subnet. namepacket.c: listening() simplified. nameresp.c: wins_subnet renamed to wins_client_subnet. nameserv.c: find_name_search moved to find_name_on_subnet. nameserv.h: FIND_XXX -> changed to FIND_SELF_NAME, FIND_ANY_NAME. nameservreply.c: find_name_search moved to find_name_on_subnet. Debug entries changed. nameservresp.c: wins_subnet renamed to wins_client_subnet. namework.c: wins_subnet renamed to wins_client_subnet. nmbd.c: wins parameter removed from add_netbios_entry. nmbsync: wins_subnet renamed to wins_client_subnet. proto.h: The usual. server.c: remove accepted fd from fd_set. Jeremy (jallison@whistle.com) (This used to be commit 2c97b33fc0b5ef181dbf51a50cb61074935165bf)
Diffstat (limited to 'source3/namedbsubnet.c')
-rw-r--r--source3/namedbsubnet.c44
1 files changed, 14 insertions, 30 deletions
diff --git a/source3/namedbsubnet.c b/source3/namedbsubnet.c
index 3597c32387..27c1a0470e 100644
--- a/source3/namedbsubnet.c
+++ b/source3/namedbsubnet.c
@@ -55,7 +55,7 @@ struct subnet_record *subnetlist = NULL;
/* WINS subnet - keep this separate so enumeration code doesn't
run onto it by mistake. */
-struct subnet_record *wins_subnet = NULL;
+struct subnet_record *wins_client_subnet = NULL;
extern uint16 nb_type; /* samba's NetBIOS name type */
@@ -83,50 +83,34 @@ static void add_subnet(struct subnet_record *d)
/****************************************************************************
- find a subnet in the subnetlist - not including WINS.
+ find a subnet in the subnetlist that a given IP address could
+ match - not including WINS. Returns NULL if no match.
**************************************************************************/
-struct subnet_record *find_subnet(struct in_addr bcast_ip)
+struct subnet_record *find_subnet(struct in_addr ip)
{
- struct subnet_record *d;
+ struct subnet_record *d = NULL;
/* search through subnet list for broadcast/netmask that matches
the source ip address. */
for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_EXCLUDING_WINS(d))
{
- if (same_net(bcast_ip, d->bcast_ip, d->mask_ip))
- return d;
+ if (same_net(ip, d->bcast_ip, d->mask_ip))
+ break;
}
- return (NULL);
-}
-
-
-/****************************************************************************
- finds the appropriate subnet structure. directed packets (non-bcast) are
- assumed to come from a point-to-point (P or M node), and so the subnet we
- return in this instance is the WINS 'pseudo-subnet' with ip 255.255.255.255
- ****************************************************************************/
-struct subnet_record *find_req_subnet(struct in_addr ip, BOOL bcast)
-{
- if (bcast)
- {
- /* identify the subnet the broadcast request came from */
- return find_subnet(*iface_bcast(ip));
- }
- /* Return the subnet with the pseudo-ip of 255.255.255.255 */
- return wins_subnet;
+ return d;
}
/****************************************************************************
find a subnet in the subnetlist - if the subnet is not found
- then return the WINS subnet.
+ then return the WINS client subnet.
**************************************************************************/
-struct subnet_record *find_subnet_all(struct in_addr bcast_ip)
+struct subnet_record *find_subnet_all(struct in_addr ip)
{
- struct subnet_record *d = find_subnet(bcast_ip);
+ struct subnet_record *d = find_subnet(ip);
if(!d)
- return wins_subnet;
+ return wins_client_subnet;
return d;
}
@@ -235,7 +219,7 @@ static struct subnet_record *add_subnet_entry(struct in_addr myip,
return d;
}
if(ip_equal(bcast_ip, wins_ip))
- return wins_subnet;
+ return wins_client_subnet;
return find_subnet(bcast_ip);
}
@@ -329,7 +313,7 @@ void add_my_subnets(char *group)
if (lp_wins_support() || lp_wins_server())
{
struct in_addr wins_nmask = ipzero;
- wins_subnet = add_subnet_entry(ipzero, wins_ip, wins_nmask, group, create_subnets, False);
+ wins_client_subnet = add_subnet_entry(ipzero, wins_ip, wins_nmask, group, create_subnets, False);
}
/* Ensure we only create the subnets once. */