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