xref: /minix3/external/bsd/bind/dist/contrib/query-loc-0.4.0/ALGO (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van MoolenbroekJust for info, can be out of date.
2*00b67f09SDavid van Moolenbroek
3*00b67f09SDavid van Moolenbroek
4*00b67f09SDavid van MoolenbroekRFC 1876, 5.2, specially 5.2.3
5*00b67f09SDavid van Moolenbroek
6*00b67f09SDavid van MoolenbroekImportant points:
7*00b67f09SDavid van Moolenbroek
8*00b67f09SDavid van Moolenbroek- LOC RRs are always attached to a *name*.
9*00b67f09SDavid van Moolenbroek- we can have two (or more) RRs for one address, one more specific than the other
10*00b67f09SDavid van Moolenbroek
11*00b67f09SDavid van Moolenbroekmain
12*00b67f09SDavid van Moolenbroek if (host is a name)
13*00b67f09SDavid van Moolenbroek	getLOCbyname
14*00b67f09SDavid van Moolenbroek else # host is an IP address
15*00b67f09SDavid van Moolenbroek	gethostbyaddr
16*00b67f09SDavid van Moolenbroek	if (name)
17*00b67f09SDavid van Moolenbroek		getLOCbyname
18*00b67f09SDavid van Moolenbroek		# If there is none, do not search. We assume the above was sufficient	       # (But check 5.2.2)
19*00b67f09SDavid van Moolenbroek	else
20*00b67f09SDavid van Moolenbroek		getLOCbyaddress
21*00b67f09SDavid van Moolenbroek
22*00b67f09SDavid van MoolenbroekgetLOCbyname (host)
23*00b67f09SDavid van Moolenbroek	get LOC for host
24*00b67f09SDavid van Moolenbroek	if (it exists)
25*00b67f09SDavid van Moolenbroek		OK
26*00b67f09SDavid van Moolenbroek	else
27*00b67f09SDavid van Moolenbroek		get all A records of the name
28*00b67f09SDavid van Moolenbroek		foreach A record
29*00b67f09SDavid van Moolenbroek			getLOCbyaddress
30*00b67f09SDavid van Moolenbroek			OK at the first one found
31*00b67f09SDavid van Moolenbroek				# we assume they are consistent
32*00b67f09SDavid van Moolenbroek		END
33*00b67f09SDavid van Moolenbroek
34*00b67f09SDavid van MoolenbroekgetLOCbyaddress (address)
35*00b67f09SDavid van Moolenbroek	# May receive a mask. Otherwise, deduce it from the class
36*00b67f09SDavid van Moolenbroek	makeNetAddress
37*00b67f09SDavid van Moolenbroek	getLOCbynetwork
38*00b67f09SDavid van Moolenbroek
39*00b67f09SDavid van MoolenbroekgetLOCbynetwork
40*00b67f09SDavid van Moolenbroek	get PTR and A for it
41*00b67f09SDavid van Moolenbroek	if (exist)
42*00b67f09SDavid van Moolenbroek		getLOCbyname
43*00b67f09SDavid van Moolenbroek	******* DIFFICULT : we have to manage a stack. See the code
44*00b67f09SDavid van Moolenbroek		makeNetAddress (level--)
45*00b67f09SDavid van Moolenbroek		getLOCbynetwork
46*00b67f09SDavid van Moolenbroek	else
47*00b67f09SDavid van Moolenbroek		END
48*00b67f09SDavid van Moolenbroek
49