3 * ===================================
4 * HARP | Host ATM Research Platform
5 * ===================================
8 * This Host ATM Research Platform ("HARP") file (the "Software") is
9 * made available by Network Computing Services, Inc. ("NetworkCS")
10 * "AS IS". NetworkCS does not provide maintenance, improvements or
11 * support of any kind.
13 * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
14 * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
15 * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
16 * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
17 * In no event shall NetworkCS be responsible for any damages, including
18 * but not limited to consequential damages, arising from or relating to
19 * any use of the Software or related support.
21 * Copyright 1994-1998 Network Computing Services, Inc.
23 * Copies of this Software may be made, however, the above copyright
24 * notice must be reproduced on all copies.
26 * @(#) $FreeBSD: src/sbin/atm/atm/atm_inet.c,v 1.3.2.1 2000/07/01 06:02:14 ps Exp $
27 * @(#) $DragonFly: src/sbin/atm/atm/atm_inet.c,v 1.2 2003/06/17 04:27:32 dillon Exp $
31 * User configuration and display program
32 * --------------------------------------
38 #include <sys/param.h>
39 #include <sys/socket.h>
41 #include <netinet/in.h>
42 #include <netatm/port.h>
43 #include <netatm/atm.h>
44 #include <netatm/atm_if.h>
45 #include <netatm/atm_sap.h>
46 #include <netatm/atm_sys.h>
47 #include <netatm/atm_ioctl.h>
58 * Process add command for a TCP/IP PVC
61 * atm add pvc <intf> <vpi> <vci> <aal> <encaps> IP <netif>
65 * argc number of remaining arguments to command
66 * argv pointer to remaining argument strings
67 * cmdp pointer to command description
68 * app pointer to AIOCAPVC structure
69 * intp pointer to air_int_rsp structure with information
70 * about the physical interface that is the PVC is for.
77 ip_pvcadd(argc, argv, cmdp, app, intp)
81 struct atmaddreq *app;
82 struct air_int_rsp *intp;
86 int i, netif_pref_len, netif_no;
92 strcpy(nhelp, cmdp->help);
93 cp = strstr(nhelp, "<netif>");
95 strcpy(cp, "ip {dyn|<dst>}");
96 fprintf(stderr, "%s: Invalid number of arguments:\n",
98 fprintf(stderr, "\tformat is: %s%s %s\n",
99 prefix, cmdp->name, nhelp);
104 * Validate and set network interface
106 UM_ZERO(app->aar_pvc_intf, sizeof(app->aar_pvc_intf));
107 netif_pref_len = strlen(intp->anp_nif_pref);
108 cp = &argv[0][netif_pref_len];
110 for (i=0; i<strlen(cp); i++) {
111 if (cp[i] < '0' || cp[i] > '9') {
116 if ((strlen(argv[0]) > sizeof(app->aar_pvc_intf) - 1) ||
118 fprintf(stderr, "%s: Illegal network interface name\n",
122 if (strncasecmp(intp->anp_nif_pref, argv[0], netif_pref_len) ||
123 strlen (argv[0]) <= netif_pref_len ||
124 netif_no > intp->anp_nif_cnt - 1) {
125 fprintf(stderr, "%s: network interface %s is not associated with interface %s\n",
131 strcpy(app->aar_pvc_intf, argv[0]);
135 * Set PVC destination address
137 UM_ZERO(&app->aar_pvc_dst, sizeof(struct sockaddr));
138 if (strcasecmp(argv[0], "dynamic") == 0 ||
139 strcasecmp(argv[0], "dyn") == 0) {
142 * Destination is dynamically determined
144 app->aar_pvc_flags |= PVC_DYN;
148 * Get destination IP address
150 struct sockaddr_in *sin;
152 sin = (struct sockaddr_in *) &app->aar_pvc_dst;
153 sin->sin_addr.s_addr =
154 get_ip_addr(argv[0])->sin_addr.s_addr;