|  | /* | 
|  | * This file is part of the UCB release of Plan 9. It is subject to the license | 
|  | * terms in the LICENSE file found in the top-level directory of this | 
|  | * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No | 
|  | * part of the UCB release of Plan 9, including this file, may be copied, | 
|  | * modified, propagated, or distributed except according to the terms contained | 
|  | * in the LICENSE file. | 
|  | */ | 
|  | #include <stdlib.h> | 
|  |  | 
|  | #include <stdio.h> | 
|  | #include <parlib/parlib.h> | 
|  | #include <unistd.h> | 
|  | #include <signal.h> | 
|  | #include <fcntl.h> | 
|  | #include <ctype.h> | 
|  | #include <iplib/iplib.h> | 
|  | #include <ndblib/ndb.h> | 
|  |  | 
|  | /* | 
|  | *  return ndb attribute type of an ip name | 
|  | */ | 
|  | char* | 
|  | ipattr(char *name) | 
|  | { | 
|  | char *p, c; | 
|  | int dot = 0; | 
|  | int alpha = 0; | 
|  | int colon = 0; | 
|  | int hex = 0; | 
|  |  | 
|  | for(p = name; *p; p++){ | 
|  | c = *p; | 
|  | if(isdigit(c)) | 
|  | continue; | 
|  | if(isxdigit(c)) | 
|  | hex = 1; | 
|  | else if(isalpha(c) || c == '-') | 
|  | alpha = 1; | 
|  | else if(c == '.') | 
|  | dot = 1; | 
|  | else if(c == ':') | 
|  | colon = 1; | 
|  | else | 
|  | return "sys"; | 
|  | } | 
|  |  | 
|  | if(alpha){ | 
|  | if(dot) | 
|  | return "dom"; | 
|  | else | 
|  | return "sys"; | 
|  | } | 
|  |  | 
|  | if(colon) | 
|  | return "ip";	/* ip v6 */ | 
|  |  | 
|  | if(dot && !hex) | 
|  | return "ip"; | 
|  | else | 
|  | return "sys"; | 
|  | } |