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