xref: /plan9/sys/src/ape/lib/net/netmkaddr.c (revision 254fe3d33c382063ab759e3351c8169ee4bc264e)
1*254fe3d3SDavid du Colombier #include <stdlib.h>
2*254fe3d3SDavid du Colombier #include <sys/types.h>
3*254fe3d3SDavid du Colombier #include <string.h>
4*254fe3d3SDavid du Colombier #include <fcntl.h>
5*254fe3d3SDavid du Colombier #include <stdio.h>
6*254fe3d3SDavid du Colombier #include <unistd.h>
7*254fe3d3SDavid du Colombier #include <libnet.h>
8*254fe3d3SDavid du Colombier 
9*254fe3d3SDavid du Colombier /*
10*254fe3d3SDavid du Colombier  *  make an address, add the defaults
11*254fe3d3SDavid du Colombier  */
12*254fe3d3SDavid du Colombier char *
netmkaddr(char * linear,char * defnet,char * defsrv)13*254fe3d3SDavid du Colombier netmkaddr(char *linear, char *defnet, char *defsrv)
14*254fe3d3SDavid du Colombier {
15*254fe3d3SDavid du Colombier 	static char addr[256];
16*254fe3d3SDavid du Colombier 	char *cp;
17*254fe3d3SDavid du Colombier 
18*254fe3d3SDavid du Colombier 	/*
19*254fe3d3SDavid du Colombier 	 *  dump network name
20*254fe3d3SDavid du Colombier 	 */
21*254fe3d3SDavid du Colombier 	cp = strchr(linear, '!');
22*254fe3d3SDavid du Colombier 	if(cp == 0){
23*254fe3d3SDavid du Colombier 		if(defnet==0){
24*254fe3d3SDavid du Colombier 			if(defsrv)
25*254fe3d3SDavid du Colombier 				snprintf(addr, sizeof(addr), "net!%s!%s",
26*254fe3d3SDavid du Colombier 					linear, defsrv);
27*254fe3d3SDavid du Colombier 			else
28*254fe3d3SDavid du Colombier 				snprintf(addr, sizeof(addr), "net!%s", linear);
29*254fe3d3SDavid du Colombier 		}
30*254fe3d3SDavid du Colombier 		else {
31*254fe3d3SDavid du Colombier 			if(defsrv)
32*254fe3d3SDavid du Colombier 				snprintf(addr, sizeof(addr), "%s!%s!%s", defnet,
33*254fe3d3SDavid du Colombier 					linear, defsrv);
34*254fe3d3SDavid du Colombier 			else
35*254fe3d3SDavid du Colombier 				snprintf(addr, sizeof(addr), "%s!%s", defnet,
36*254fe3d3SDavid du Colombier 					linear);
37*254fe3d3SDavid du Colombier 		}
38*254fe3d3SDavid du Colombier 		return addr;
39*254fe3d3SDavid du Colombier 	}
40*254fe3d3SDavid du Colombier 
41*254fe3d3SDavid du Colombier 	/*
42*254fe3d3SDavid du Colombier 	 *  if there is already a service, use it
43*254fe3d3SDavid du Colombier 	 */
44*254fe3d3SDavid du Colombier 	cp = strchr(cp+1, '!');
45*254fe3d3SDavid du Colombier 	if(cp)
46*254fe3d3SDavid du Colombier 		return linear;
47*254fe3d3SDavid du Colombier 
48*254fe3d3SDavid du Colombier 	/*
49*254fe3d3SDavid du Colombier 	 *  add default service
50*254fe3d3SDavid du Colombier 	 */
51*254fe3d3SDavid du Colombier 	if(defsrv == 0)
52*254fe3d3SDavid du Colombier 		return linear;
53*254fe3d3SDavid du Colombier 	snprintf(addr, sizeof(addr), "%s!%s", linear, defsrv);
54*254fe3d3SDavid du Colombier 
55*254fe3d3SDavid du Colombier 	return addr;
56*254fe3d3SDavid du Colombier }
57