13e12c5d1SDavid du Colombier #include <u.h> 23e12c5d1SDavid du Colombier #include <ctype.h> 33e12c5d1SDavid du Colombier 43e12c5d1SDavid du Colombier /* 53e12c5d1SDavid du Colombier * return ndb attribute type of an ip name 63e12c5d1SDavid du Colombier */ 73e12c5d1SDavid du Colombier char* ipattr(char * name)83e12c5d1SDavid du Colombieripattr(char *name) 93e12c5d1SDavid du Colombier { 10*7dd7cddfSDavid du Colombier char *p, c; 113e12c5d1SDavid du Colombier int dot = 0; 123e12c5d1SDavid du Colombier int alpha = 0; 13*7dd7cddfSDavid du Colombier int colon = 0; 14*7dd7cddfSDavid du Colombier int hex = 0; 153e12c5d1SDavid du Colombier 163e12c5d1SDavid du Colombier for(p = name; *p; p++){ 17*7dd7cddfSDavid du Colombier c = *p; 18*7dd7cddfSDavid du Colombier if(isdigit(c)) 19*7dd7cddfSDavid du Colombier continue; 20*7dd7cddfSDavid du Colombier if(isxdigit(c)) 21*7dd7cddfSDavid du Colombier hex = 1; 22*7dd7cddfSDavid du Colombier else if(isalpha(c) || c == '-') 233e12c5d1SDavid du Colombier alpha = 1; 24*7dd7cddfSDavid du Colombier else if(c == '.') 253e12c5d1SDavid du Colombier dot = 1; 26*7dd7cddfSDavid du Colombier else if(c == ':') 27*7dd7cddfSDavid du Colombier colon = 1; 283e12c5d1SDavid du Colombier else 293e12c5d1SDavid du Colombier return "sys"; 303e12c5d1SDavid du Colombier } 313e12c5d1SDavid du Colombier 323e12c5d1SDavid du Colombier if(alpha){ 333e12c5d1SDavid du Colombier if(dot) 343e12c5d1SDavid du Colombier return "dom"; 353e12c5d1SDavid du Colombier else 363e12c5d1SDavid du Colombier return "sys"; 373e12c5d1SDavid du Colombier } 383e12c5d1SDavid du Colombier 39*7dd7cddfSDavid du Colombier if(colon) 40*7dd7cddfSDavid du Colombier return "ip"; /* ip v6 */ 41*7dd7cddfSDavid du Colombier 42*7dd7cddfSDavid du Colombier if(dot && !hex) 433e12c5d1SDavid du Colombier return "ip"; 443e12c5d1SDavid du Colombier else 453e12c5d1SDavid du Colombier return "sys"; 463e12c5d1SDavid du Colombier } 47