Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sbin/ifconfig Split off AppleTalk support into its own file.



details:   https://anonhg.NetBSD.org/src/rev/815c6903b220
branches:  trunk
changeset: 579630:815c6903b220
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Sat Mar 19 23:32:55 2005 +0000

description:
Split off AppleTalk support into its own file.

diffstat:

 sbin/ifconfig/Makefile   |    5 +-
 sbin/ifconfig/af_atalk.c |  177 +++++++++++++++++++++++++++++++++++++++++++++++
 sbin/ifconfig/af_atalk.h |   38 ++++++++++
 sbin/ifconfig/extern.h   |   14 +++-
 sbin/ifconfig/ifconfig.c |  142 ++-----------------------------------
 5 files changed, 239 insertions(+), 137 deletions(-)

diffs (truncated from 512 to 300 lines):

diff -r fe9db74c4b31 -r 815c6903b220 sbin/ifconfig/Makefile
--- a/sbin/ifconfig/Makefile    Sat Mar 19 23:19:17 2005 +0000
+++ b/sbin/ifconfig/Makefile    Sat Mar 19 23:32:55 2005 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.21 2005/03/19 23:13:42 thorpej Exp $
+#      $NetBSD: Makefile,v 1.22 2005/03/19 23:32:55 thorpej Exp $
 #      @(#)Makefile    8.1 (Berkeley) 6/5/93
 
 .include <bsd.own.mk>
@@ -20,6 +20,9 @@
 LDADD+=-lutil
 
 SRCS= ifconfig.c 
+
+SRCS+= af_atalk.c
+
 SRCS+= agr.c
 SRCS+= ieee80211.c
 SRCS+= tunnel.c
diff -r fe9db74c4b31 -r 815c6903b220 sbin/ifconfig/af_atalk.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sbin/ifconfig/af_atalk.c  Sat Mar 19 23:32:55 2005 +0000
@@ -0,0 +1,177 @@
+/*     $NetBSD: af_atalk.c,v 1.1 2005/03/19 23:32:55 thorpej Exp $     */
+
+/*
+ * Copyright (c) 1983, 1993
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
+ * SUCH DAMAGE.
+ */
+
+#ifndef INET_ONLY
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: af_atalk.c,v 1.1 2005/03/19 23:32:55 thorpej Exp $");
+#endif /* not lint */
+
+#include <sys/param.h> 
+#include <sys/ioctl.h> 
+#include <sys/socket.h>
+
+#include <net/if.h> 
+
+#include <netatalk/at.h>
+
+#include <err.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "extern.h"
+#include "af_atalk.h"
+
+static struct netrange at_nr;  /* AppleTalk net range */
+
+void
+at_getaddr(const char *addr, int which)
+{
+       struct sockaddr_at *sat = (struct sockaddr_at *) &addreq.ifra_addr;
+       u_int net, node;
+
+       sat->sat_family = AF_APPLETALK;
+       sat->sat_len = sizeof(*sat);
+       if (which == MASK)
+               errx(EXIT_FAILURE, "AppleTalk does not use netmasks");
+       if (sscanf(addr, "%u.%u", &net, &node) != 2
+           || net == 0 || net > 0xffff || node == 0 || node > 0xfe)
+               errx(EXIT_FAILURE, "%s: illegal address", addr);
+       sat->sat_addr.s_net = htons(net);
+       sat->sat_addr.s_node = node;
+}
+
+void
+setatrange(const char *range, int d)
+{
+       u_short first = 123, last = 123;
+
+       if (sscanf(range, "%hu-%hu", &first, &last) != 2
+           || first == 0 /* || first > 0xffff */
+           || last == 0 /* || last > 0xffff */ || first > last)
+               errx(EXIT_FAILURE, "%s: illegal net range: %u-%u", range,
+                   first, last);
+       at_nr.nr_firstnet = htons(first);
+       at_nr.nr_lastnet = htons(last);
+}
+
+void
+setatphase(const char *phase, int d)
+{
+       if (!strcmp(phase, "1"))
+               at_nr.nr_phase = 1;
+       else if (!strcmp(phase, "2"))
+               at_nr.nr_phase = 2;
+       else
+               errx(EXIT_FAILURE, "%s: illegal phase", phase);
+}
+
+void
+checkatrange(struct sockaddr *sa)
+{
+       struct sockaddr_at *sat = (struct sockaddr_at *) sa;
+
+       if (at_nr.nr_phase == 0)
+               at_nr.nr_phase = 2;     /* Default phase 2 */
+       if (at_nr.nr_firstnet == 0)
+               at_nr.nr_firstnet =     /* Default range of one */
+               at_nr.nr_lastnet = sat->sat_addr.s_net;
+       printf("\tatalk %d.%d range %d-%d phase %d\n",
+       ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node,
+       ntohs(at_nr.nr_firstnet), ntohs(at_nr.nr_lastnet), at_nr.nr_phase);
+       if ((u_short) ntohs(at_nr.nr_firstnet) >
+                       (u_short) ntohs(sat->sat_addr.s_net)
+                   || (u_short) ntohs(at_nr.nr_lastnet) <
+                       (u_short) ntohs(sat->sat_addr.s_net))
+               errx(EXIT_FAILURE, "AppleTalk address is not in range");
+       *((struct netrange *) &sat->sat_zero) = at_nr;
+}
+
+void
+at_status(int force)
+{
+       struct sockaddr_at *sat, null_sat;
+       struct netrange *nr;
+
+       getsock(AF_APPLETALK);
+       if (s < 0) {
+               if (errno == EPROTONOSUPPORT)
+                       return;
+               err(EXIT_FAILURE, "socket");
+       }
+       (void) memset(&ifr, 0, sizeof(ifr));
+       (void) strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
+       if (ioctl(s, SIOCGIFADDR, &ifr) == -1) {
+               if (errno == EADDRNOTAVAIL || errno == EAFNOSUPPORT) {
+                       if (!force)
+                               return;
+                       (void) memset(&ifr.ifr_addr, 0, sizeof(ifr.ifr_addr));
+               } else
+                       warn("SIOCGIFADDR");
+       }
+       (void) strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
+       sat = (struct sockaddr_at *)&ifr.ifr_addr;
+
+       (void) memset(&null_sat, 0, sizeof(null_sat));
+
+       nr = (struct netrange *) &sat->sat_zero;
+       printf("\tatalk %d.%d range %d-%d phase %d",
+           ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node,
+           ntohs(nr->nr_firstnet), ntohs(nr->nr_lastnet), nr->nr_phase);
+       if (flags & IFF_POINTOPOINT) {
+               if (ioctl(s, SIOCGIFDSTADDR, &ifr) == -1) {
+                       if (errno == EADDRNOTAVAIL)
+                           (void) memset(&ifr.ifr_addr, 0,
+                               sizeof(ifr.ifr_addr));
+                       else
+                           warn("SIOCGIFDSTADDR");
+               }
+               (void) strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name));
+               sat = (struct sockaddr_at *)&ifr.ifr_dstaddr;
+               if (!sat)
+                       sat = &null_sat;
+               printf("--> %d.%d",
+                   ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node);
+       }
+       if (flags & IFF_BROADCAST) {
+               /* note RTAX_BRD overlap with IFF_POINTOPOINT */
+               sat = (struct sockaddr_at *)&ifr.ifr_broadaddr;
+               if (sat)
+                       printf(" broadcast %d.%d", ntohs(sat->sat_addr.s_net),
+                           sat->sat_addr.s_node);
+       }
+       printf("\n");
+}
+
+#endif /* ! INET_ONLY */
diff -r fe9db74c4b31 -r 815c6903b220 sbin/ifconfig/af_atalk.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sbin/ifconfig/af_atalk.h  Sat Mar 19 23:32:55 2005 +0000
@@ -0,0 +1,38 @@
+/*     $NetBSD: af_atalk.h,v 1.1 2005/03/19 23:32:55 thorpej Exp $     */
+
+/*
+ * Copyright (c) 1983, 1993
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
+ * SUCH DAMAGE.
+ */
+
+void   setatrange(const char *, int);
+void   setatphase(const char *, int);
+
+void   checkatrange(struct sockaddr *);
+
+void   at_status(int);
+void   at_getaddr(const char *, int);
diff -r fe9db74c4b31 -r 815c6903b220 sbin/ifconfig/extern.h
--- a/sbin/ifconfig/extern.h    Sat Mar 19 23:19:17 2005 +0000
+++ b/sbin/ifconfig/extern.h    Sat Mar 19 23:32:55 2005 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: extern.h,v 1.5 2005/03/19 23:16:55 thorpej Exp $       */
+/*     $NetBSD: extern.h,v 1.6 2005/03/19 23:32:55 thorpej Exp $       */
 
 /*
  * Copyright (c) 1983, 1993
@@ -29,6 +29,11 @@
  * SUCH DAMAGE.
  */
 
+#define        RIDADDR 0  
+#define        ADDR    1
+#define        MASK    2
+#define        DSTADDR 3
+
 struct afswtch {
        const char *af_name;
        short af_af;
@@ -47,9 +52,14 @@
 extern int s;
 extern char name[30];
 
+extern u_short flags;
 extern int zflag;
 
+extern struct ifreq ifr, ridreq;
+extern struct ifaliasreq addreq;
+
 const struct afswtch *lookup_af_byname(const char *);
 const struct afswtch *lookup_af_bynum(int);
 const char *get_string(const char *, const char *, u_int8_t *, int *);
-void print_string(const u_int8_t *, int);
+void   print_string(const u_int8_t *, int);
+void    getsock(int);
diff -r fe9db74c4b31 -r 815c6903b220 sbin/ifconfig/ifconfig.c
--- a/sbin/ifconfig/ifconfig.c  Sat Mar 19 23:19:17 2005 +0000
+++ b/sbin/ifconfig/ifconfig.c  Sat Mar 19 23:32:55 2005 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ifconfig.c,v 1.160 2005/03/19 23:16:55 thorpej Exp $   */
+/*     $NetBSD: ifconfig.c,v 1.161 2005/03/19 23:32:55 thorpej Exp $   */
 
 /*-
  * Copyright (c) 1997, 1998, 2000 The NetBSD Foundation, Inc.
@@ -76,7 +76,7 @@
 #if 0
 static char sccsid[] = "@(#)ifconfig.c 8.2 (Berkeley) 2/16/94";
 #else
-__RCSID("$NetBSD: ifconfig.c,v 1.160 2005/03/19 23:16:55 thorpej Exp $");
+__RCSID("$NetBSD: ifconfig.c,v 1.161 2005/03/19 23:32:55 thorpej Exp $");
 #endif
 #endif /* not lint */
 
@@ -95,8 +95,6 @@
 #endif
 #include <arpa/inet.h>



Home | Main Index | Thread Index | Old Index