MFH @ 186335
This commit is contained in:
commit
41fe50f5de
17
UPDATING
17
UPDATING
@ -22,6 +22,23 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 8.x IS SLOW:
|
||||
to maximize performance. (To disable malloc debugging, run
|
||||
ln -s aj /etc/malloc.conf.)
|
||||
|
||||
20081219:
|
||||
With __FreeBSD_version 800060 the makefs tool is part of
|
||||
the base system (it was a port).
|
||||
|
||||
20081216:
|
||||
The afdata and ifnet locks have been changed from mutexes to
|
||||
rwlocks, network modules will need to be re-compiled.
|
||||
|
||||
20081214:
|
||||
__FreeBSD_version 800059 incorporates the new arp-v2 rewrite.
|
||||
RTF_CLONING, RTF_LLINFO and RTF_WASCLONED flags are eliminated.
|
||||
The new code reduced struct rtentry{} by 16 bytes on 32-bit
|
||||
architecture and 40 bytes on 64-bit architecture. The userland
|
||||
applications "arp" and "ndp" have been updated accordingly.
|
||||
The output from "netstat -r" shows only routing entries and
|
||||
none of the L2 information.
|
||||
|
||||
20081130:
|
||||
__FreeBSD_version 800057 marks the switchover from the
|
||||
binary ath hal to source code. Users must add the line:
|
||||
|
@ -48,8 +48,7 @@ static void *route_fd;
|
||||
/* if-index allocator */
|
||||
static uint32_t next_if_index = 1;
|
||||
|
||||
/* re-fetch arp table */
|
||||
static int update_arp;
|
||||
/* currently fetching the arp table */
|
||||
static int in_update_arp;
|
||||
|
||||
/* OR registrations */
|
||||
@ -910,36 +909,6 @@ mib_find_ifa(struct in_addr addr)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Process a new ARP entry
|
||||
*/
|
||||
static void
|
||||
process_arp(const struct rt_msghdr *rtm, const struct sockaddr_dl *sdl,
|
||||
const struct sockaddr_in *sa)
|
||||
{
|
||||
struct mibif *ifp;
|
||||
struct mibarp *at;
|
||||
|
||||
/* IP arp table entry */
|
||||
if (sdl->sdl_alen == 0) {
|
||||
update_arp = 1;
|
||||
return;
|
||||
}
|
||||
if ((ifp = mib_find_if_sys(sdl->sdl_index)) == NULL)
|
||||
return;
|
||||
/* have a valid entry */
|
||||
if ((at = mib_find_arp(ifp, sa->sin_addr)) == NULL &&
|
||||
(at = mib_arp_create(ifp, sa->sin_addr,
|
||||
sdl->sdl_data + sdl->sdl_nlen, sdl->sdl_alen)) == NULL)
|
||||
return;
|
||||
|
||||
if (rtm->rtm_rmx.rmx_expire == 0)
|
||||
at->flags |= MIBARP_PERM;
|
||||
else
|
||||
at->flags &= ~MIBARP_PERM;
|
||||
at->flags |= MIBARP_FOUND;
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle a routing socket message.
|
||||
*/
|
||||
@ -1080,46 +1049,12 @@ handle_rtmsg(struct rt_msghdr *rtm)
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case RTM_GET:
|
||||
mib_extract_addrs(rtm->rtm_addrs, (u_char *)(rtm + 1), addrs);
|
||||
if (rtm->rtm_flags & RTF_LLINFO) {
|
||||
if (addrs[RTAX_DST] == NULL ||
|
||||
addrs[RTAX_GATEWAY] == NULL ||
|
||||
addrs[RTAX_DST]->sa_family != AF_INET ||
|
||||
addrs[RTAX_GATEWAY]->sa_family != AF_LINK)
|
||||
break;
|
||||
process_arp(rtm,
|
||||
(struct sockaddr_dl *)(void *)addrs[RTAX_GATEWAY],
|
||||
(struct sockaddr_in *)(void *)addrs[RTAX_DST]);
|
||||
} else {
|
||||
if (rtm->rtm_errno == 0 && (rtm->rtm_flags & RTF_UP))
|
||||
mib_sroute_process(rtm, addrs[RTAX_GATEWAY],
|
||||
addrs[RTAX_DST], addrs[RTAX_NETMASK]);
|
||||
}
|
||||
break;
|
||||
|
||||
case RTM_ADD:
|
||||
mib_extract_addrs(rtm->rtm_addrs, (u_char *)(rtm + 1), addrs);
|
||||
if (rtm->rtm_flags & RTF_LLINFO) {
|
||||
if (addrs[RTAX_DST] == NULL ||
|
||||
addrs[RTAX_GATEWAY] == NULL ||
|
||||
addrs[RTAX_DST]->sa_family != AF_INET ||
|
||||
addrs[RTAX_GATEWAY]->sa_family != AF_LINK)
|
||||
break;
|
||||
process_arp(rtm,
|
||||
(struct sockaddr_dl *)(void *)addrs[RTAX_GATEWAY],
|
||||
(struct sockaddr_in *)(void *)addrs[RTAX_DST]);
|
||||
} else {
|
||||
if (rtm->rtm_errno == 0 && (rtm->rtm_flags & RTF_UP))
|
||||
mib_sroute_process(rtm, addrs[RTAX_GATEWAY],
|
||||
addrs[RTAX_DST], addrs[RTAX_NETMASK]);
|
||||
}
|
||||
break;
|
||||
|
||||
case RTM_DELETE:
|
||||
mib_extract_addrs(rtm->rtm_addrs, (u_char *)(rtm + 1), addrs);
|
||||
if (rtm->rtm_errno == 0 && !(rtm->rtm_flags & RTF_LLINFO))
|
||||
|
||||
if (rtm->rtm_errno == 0 && (rtm->rtm_flags & RTF_UP))
|
||||
mib_sroute_process(rtm, addrs[RTAX_GATEWAY],
|
||||
addrs[RTAX_DST], addrs[RTAX_NETMASK]);
|
||||
break;
|
||||
@ -1289,7 +1224,8 @@ update_ifa_info(void)
|
||||
|
||||
/*
|
||||
* Update arp table
|
||||
*/
|
||||
*
|
||||
*/
|
||||
void
|
||||
mib_arp_update(void)
|
||||
{
|
||||
@ -1305,11 +1241,11 @@ mib_arp_update(void)
|
||||
TAILQ_FOREACH(at, &mibarp_list, link)
|
||||
at->flags &= ~MIBARP_FOUND;
|
||||
|
||||
if ((buf = mib_fetch_rtab(AF_INET, NET_RT_FLAGS, RTF_LLINFO, &needed)) == NULL) {
|
||||
if ((buf = mib_fetch_rtab(AF_INET, NET_RT_FLAGS, 0, &needed)) == NULL) {
|
||||
in_update_arp = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
next = buf;
|
||||
while (next < buf + needed) {
|
||||
rtm = (struct rt_msghdr *)(void *)next;
|
||||
@ -1326,7 +1262,6 @@ mib_arp_update(void)
|
||||
at = at1;
|
||||
}
|
||||
mibarpticks = get_ticks();
|
||||
update_arp = 0;
|
||||
in_update_arp = 0;
|
||||
}
|
||||
|
||||
@ -1634,8 +1569,8 @@ mibII_idle(void)
|
||||
mib_arp_update();
|
||||
mib_iflist_bad = 0;
|
||||
}
|
||||
if (update_arp)
|
||||
mib_arp_update();
|
||||
|
||||
mib_arp_update();
|
||||
}
|
||||
|
||||
|
||||
|
@ -186,8 +186,7 @@ mib_sroute_process(struct rt_msghdr *rtm, struct sockaddr *gw,
|
||||
memcpy(r->index, key.index, sizeof(r->index));
|
||||
r->ifindex = (ifp == NULL) ? 0 : ifp->index;
|
||||
|
||||
r->type = (rtm->rtm_flags & RTF_LLINFO) ? 3 :
|
||||
(rtm->rtm_flags & RTF_REJECT) ? 2 : 4;
|
||||
r->type = (rtm->rtm_flags & RTF_REJECT) ? 2 : 4;
|
||||
|
||||
/* cannot really know, what protocol it runs */
|
||||
r->proto = (rtm->rtm_flags & RTF_LOCAL) ? 2 :
|
||||
|
@ -88,7 +88,12 @@ char *addr, *eaddr;
|
||||
mib[2] = 0;
|
||||
mib[3] = AF_INET;
|
||||
mib[4] = NET_RT_FLAGS;
|
||||
#ifdef RTF_LLINFO
|
||||
mib[5] = RTF_LLINFO;
|
||||
#else
|
||||
mib[5] = 0;
|
||||
#endif
|
||||
|
||||
if (sysctl(mib, 6, NULL, &needed, NULL, 0) == -1)
|
||||
{
|
||||
perror("route-sysctl-estimate");
|
||||
|
@ -1,7 +1,7 @@
|
||||
# $FreeBSD$
|
||||
Project: netcat (aka src/usr.bin/nc in OpenBSD)
|
||||
ProjectURL: http://www.openbsd.org/
|
||||
Version: 4.3
|
||||
Version: 4.4
|
||||
VendorTag: OPENBSD
|
||||
VersionTag: OPENBSD_4_3
|
||||
VersionTag: OPENBSD_4_4
|
||||
License: BSD
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" $OpenBSD: nc.1,v 1.45 2007/05/31 19:20:13 jmc Exp $
|
||||
.\" $OpenBSD: nc.1,v 1.47 2008/05/06 16:21:03 jmc Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1996 David Sacerdote
|
||||
.\" All rights reserved.
|
||||
@ -27,7 +27,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd $Mdocdate$
|
||||
.Dd $Mdocdate: May 6 2008 $
|
||||
.Dt NC 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -36,9 +36,12 @@
|
||||
.Sh SYNOPSIS
|
||||
.Nm nc
|
||||
.Bk -words
|
||||
.Op Fl 46DdEhklnOorStUuvz
|
||||
.Op Fl 46DdEhklnorStUuvz
|
||||
.Op Fl e Ar IPsec_policy
|
||||
.Op Fl I Ar length
|
||||
.Op Fl i Ar interval
|
||||
.Op Fl -no-tcpopt
|
||||
.Op Fl O Ar length
|
||||
.Op Fl P Ar proxy_username
|
||||
.Op Fl p Ar source_port
|
||||
.Op Fl s Ar source_ip_address
|
||||
@ -118,6 +121,8 @@ each direction is needed.
|
||||
Prints out
|
||||
.Nm
|
||||
help.
|
||||
.It Fl I Ar length
|
||||
Specifies the size of the TCP receive buffer.
|
||||
.It Fl i Ar interval
|
||||
Specifies a delay time interval between lines of text sent and received.
|
||||
Also causes a delay time between connections to multiple ports.
|
||||
@ -146,10 +151,13 @@ option are ignored.
|
||||
.It Fl n
|
||||
Do not do any DNS or service lookups on any specified addresses,
|
||||
hostnames or ports.
|
||||
.It Fl O
|
||||
.It Fl -no-tcpopt
|
||||
Disables the use of TCP options on the socket, by setting the boolean
|
||||
TCP_NOOPT
|
||||
socket option.
|
||||
.It Fl O Ar length
|
||||
Specifies the size of the TCP send buffer.
|
||||
When
|
||||
.It Fl o
|
||||
.Dq Once-only mode .
|
||||
By default,
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: netcat.c,v 1.89 2007/02/20 14:11:17 jmc Exp $ */
|
||||
/* $OpenBSD: netcat.c,v 1.91 2008/05/09 09:00:11 markus Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
|
||||
*
|
||||
@ -50,6 +50,7 @@
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <getopt.h>
|
||||
#include <netdb.h>
|
||||
#include <poll.h>
|
||||
#include <stdarg.h>
|
||||
@ -78,7 +79,7 @@ int kflag; /* More than one connect */
|
||||
int lflag; /* Bind to local port */
|
||||
int nflag; /* Don't do name look up */
|
||||
int oflag; /* Once only: stop on EOF */
|
||||
int Oflag; /* Do not use TCP options */
|
||||
int FreeBSD_Oflag; /* Do not use TCP options */
|
||||
char *Pflag; /* Proxy username */
|
||||
char *pflag; /* Localport flag */
|
||||
int rflag; /* Random ports flag */
|
||||
@ -89,6 +90,8 @@ int vflag; /* Verbosity */
|
||||
int xflag; /* Socks proxy */
|
||||
int zflag; /* Port Scan Flag */
|
||||
int Dflag; /* sodebug */
|
||||
int Iflag; /* TCP receive buffer size */
|
||||
int Oflag; /* TCP send buffer size */
|
||||
int Sflag; /* TCP MD5 signature option */
|
||||
int Tflag = -1; /* IP Type of Service */
|
||||
|
||||
@ -129,6 +132,10 @@ main(int argc, char *argv[])
|
||||
char *proxy;
|
||||
const char *errstr, *proxyhost = "", *proxyport = NULL;
|
||||
struct addrinfo proxyhints;
|
||||
struct option longopts[] = {
|
||||
{ "no-tcpopt", no_argument, &FreeBSD_Oflag, 1 },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
|
||||
ret = 1;
|
||||
ipsec_count = 0;
|
||||
@ -138,8 +145,9 @@ main(int argc, char *argv[])
|
||||
uport = NULL;
|
||||
sv = NULL;
|
||||
|
||||
while ((ch = getopt(argc, argv,
|
||||
"46e:DEdhi:jklnoOP:p:rSs:tT:Uuvw:X:x:z")) != -1) {
|
||||
while ((ch = getopt_long(argc, argv,
|
||||
"46e:DEdhi:jklnoI:O:P:p:rSs:tT:Uuvw:X:x:z",
|
||||
longopts, NULL)) != -1) {
|
||||
switch (ch) {
|
||||
case '4':
|
||||
family = AF_INET;
|
||||
@ -203,9 +211,6 @@ main(int argc, char *argv[])
|
||||
case 'o':
|
||||
oflag = 1;
|
||||
break;
|
||||
case 'O':
|
||||
Oflag = 1;
|
||||
break;
|
||||
case 'P':
|
||||
Pflag = optarg;
|
||||
break;
|
||||
@ -244,12 +249,28 @@ main(int argc, char *argv[])
|
||||
case 'D':
|
||||
Dflag = 1;
|
||||
break;
|
||||
case 'I':
|
||||
Iflag = strtonum(optarg, 1, 65536 << 14, &errstr);
|
||||
if (errstr != NULL)
|
||||
errx(1, "TCP receive window %s: %s",
|
||||
errstr, optarg);
|
||||
break;
|
||||
case 'O':
|
||||
Oflag = strtonum(optarg, 1, 65536 << 14, &errstr);
|
||||
if (errstr != NULL) {
|
||||
if (strcmp(errstr, "invalid") != 0)
|
||||
errx(1, "TCP send window %s: %s",
|
||||
errstr, optarg);
|
||||
}
|
||||
break;
|
||||
case 'S':
|
||||
Sflag = 1;
|
||||
break;
|
||||
case 'T':
|
||||
Tflag = parse_iptos(optarg);
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
usage(1);
|
||||
}
|
||||
@ -512,7 +533,7 @@ int
|
||||
remote_connect(const char *host, const char *port, struct addrinfo hints)
|
||||
{
|
||||
struct addrinfo *res, *res0;
|
||||
int s, error;
|
||||
int s, error, on = 1;
|
||||
|
||||
if ((error = getaddrinfo(host, port, &hints, &res)))
|
||||
errx(1, "getaddrinfo: %s", gai_strerror(error));
|
||||
@ -533,6 +554,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints)
|
||||
if (sflag || pflag) {
|
||||
struct addrinfo ahints, *ares;
|
||||
|
||||
#ifdef SO_BINDANY
|
||||
/* try SO_BINDANY, but don't insist */
|
||||
setsockopt(s, SOL_SOCKET, SO_BINDANY, &on, sizeof(on));
|
||||
#endif
|
||||
memset(&ahints, 0, sizeof(struct addrinfo));
|
||||
ahints.ai_family = res0->ai_family;
|
||||
ahints.ai_socktype = uflag ? SOCK_DGRAM : SOCK_STREAM;
|
||||
@ -604,9 +629,9 @@ local_listen(char *host, char *port, struct addrinfo hints)
|
||||
if (ipsec_policy[1] != NULL)
|
||||
add_ipsec_policy(s, ipsec_policy[1]);
|
||||
#endif
|
||||
if (Oflag) {
|
||||
if (FreeBSD_Oflag) {
|
||||
if (setsockopt(s, IPPROTO_TCP, TCP_NOOPT,
|
||||
&Oflag, sizeof(Oflag)) == -1)
|
||||
&FreeBSD_Oflag, sizeof(FreeBSD_Oflag)) == -1)
|
||||
err(1, "disable TCP options");
|
||||
}
|
||||
|
||||
@ -838,9 +863,19 @@ set_common_sockopts(int s)
|
||||
&Tflag, sizeof(Tflag)) == -1)
|
||||
err(1, "set IP ToS");
|
||||
}
|
||||
if (Iflag) {
|
||||
if (setsockopt(s, SOL_SOCKET, SO_RCVBUF,
|
||||
&Iflag, sizeof(Iflag)) == -1)
|
||||
err(1, "set TCP receive buffer size");
|
||||
}
|
||||
if (Oflag) {
|
||||
if (setsockopt(s, IPPROTO_TCP, TCP_NOOPT,
|
||||
if (setsockopt(s, SOL_SOCKET, SO_SNDBUF,
|
||||
&Oflag, sizeof(Oflag)) == -1)
|
||||
err(1, "set TCP send buffer size");
|
||||
}
|
||||
if (FreeBSD_Oflag) {
|
||||
if (setsockopt(s, IPPROTO_TCP, TCP_NOOPT,
|
||||
&FreeBSD_Oflag, sizeof(FreeBSD_Oflag)) == -1)
|
||||
err(1, "disable TCP options");
|
||||
}
|
||||
}
|
||||
@ -878,11 +913,13 @@ help(void)
|
||||
#endif
|
||||
fprintf(stderr, "\
|
||||
\t-h This help text\n\
|
||||
\t-I length TCP receive buffer length\n\
|
||||
\t-i secs\t Delay interval for lines sent, ports scanned\n\
|
||||
\t-k Keep inbound sockets open for multiple connects\n\
|
||||
\t-l Listen mode, for inbound connects\n\
|
||||
\t-n Suppress name/port resolutions\n\
|
||||
\t-O Disable TCP options\n\
|
||||
\t--no-tcpopt Disable TCP options\n\
|
||||
\t-O length TCP send buffer length\n\
|
||||
\t-o Terminate on EOF on input\n\
|
||||
\t-P proxyuser\tUsername for proxy authentication\n\
|
||||
\t-p port\t Specify local port for remote connects\n\
|
||||
@ -931,10 +968,11 @@ void
|
||||
usage(int ret)
|
||||
{
|
||||
#ifdef IPSEC
|
||||
fprintf(stderr, "usage: nc [-46DdEhklnOorStUuvz] [-e policy] [-i interval] [-P proxy_username] [-p source_port]\n");
|
||||
fprintf(stderr, "usage: nc [-46DdEhklnorStUuvz] [-e policy] [-I receive_buffer_len] [-i interval]\n");
|
||||
#else
|
||||
fprintf(stderr, "usage: nc [-46DdhklnOorStUuvz] [-i interval] [-P proxy_username] [-p source_port]\n");
|
||||
fprintf(stderr, "usage: nc [-46DdhklnorStUuvz] [-I receive_buffer_len] [-i interval]\n");
|
||||
#endif
|
||||
fprintf(stderr, "\t [-O send_buffer_len] [-P proxy_username] [-p source_port]\n");
|
||||
fprintf(stderr, "\t [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]\n");
|
||||
fprintf(stderr, "\t [-x proxy_address[:port]] [hostname] [port[s]]\n");
|
||||
if (ret)
|
||||
|
@ -162,6 +162,7 @@ distribution:
|
||||
${_+_}cd ${.CURDIR}/bluetooth; ${MAKE} install
|
||||
.endif
|
||||
${_+_}cd ${.CURDIR}/defaults; ${MAKE} install
|
||||
${_+_}cd ${.CURDIR}/devd; ${MAKE} install
|
||||
${_+_}cd ${.CURDIR}/gss; ${MAKE} install
|
||||
${_+_}cd ${.CURDIR}/periodic; ${MAKE} install
|
||||
${_+_}cd ${.CURDIR}/rc.d; ${MAKE} install
|
||||
|
@ -277,29 +277,6 @@ notify 0 {
|
||||
action "mixer vol +10";
|
||||
};
|
||||
|
||||
# The next blocks enable volume hotkeys that can be found on the Asus EeePC
|
||||
# The four keys above the keyboard notify 0x1a through to 0x1d respectively
|
||||
notify 0 {
|
||||
match "system" "ACPI";
|
||||
match "subsystem" "ASUS-Eee";
|
||||
match "notify" "0x13";
|
||||
action "mixer 0";
|
||||
};
|
||||
|
||||
notify 0 {
|
||||
match "system" "ACPI";
|
||||
match "subsystem" "ASUS-Eee";
|
||||
match "notify" "0x14";
|
||||
action "mixer vol -10";
|
||||
};
|
||||
|
||||
notify 0 {
|
||||
match "system" "ACPI";
|
||||
match "subsystem" "ASUS-Eee";
|
||||
match "notify" "0x15";
|
||||
action "mixer vol +10";
|
||||
};
|
||||
|
||||
/* EXAMPLES TO END OF FILE
|
||||
|
||||
# The following might be an example of something that a vendor might
|
||||
|
9
etc/devd/Makefile
Normal file
9
etc/devd/Makefile
Normal file
@ -0,0 +1,9 @@
|
||||
# $FreeBSD$
|
||||
|
||||
FILES= asus.conf
|
||||
|
||||
NO_OBJ=
|
||||
FILESDIR= /etc/devd
|
||||
FILESMODE= 644
|
||||
|
||||
.include <bsd.prog.mk>
|
52
etc/devd/asus.conf
Normal file
52
etc/devd/asus.conf
Normal file
@ -0,0 +1,52 @@
|
||||
# $FreeBSD$
|
||||
#
|
||||
# ASUS specific devd events
|
||||
|
||||
# The next blocks enable volume hotkeys that can be found on the Asus EeePC
|
||||
notify 0 {
|
||||
match "system" "ACPI";
|
||||
match "subsystem" "ASUS-Eee";
|
||||
match "notify" "0x13";
|
||||
action "mixer 0";
|
||||
};
|
||||
|
||||
notify 0 {
|
||||
match "system" "ACPI";
|
||||
match "subsystem" "ASUS-Eee";
|
||||
match "notify" "0x14";
|
||||
action "mixer vol -10";
|
||||
};
|
||||
|
||||
notify 0 {
|
||||
match "system" "ACPI";
|
||||
match "subsystem" "ASUS-Eee";
|
||||
match "notify" "0x15";
|
||||
action "mixer vol +10";
|
||||
};
|
||||
|
||||
# Enable user hotkeys that can be found on the Asus EeePC
|
||||
# The four keys above the keyboard notify 0x1a through to 0x1d respectively
|
||||
#notify 0 {
|
||||
# match "system" "ACPI";
|
||||
# match "subsystem" "ASUS-Eee";
|
||||
# match "notify" "0x1a";
|
||||
# action "";
|
||||
#};
|
||||
#notify 0 {
|
||||
# match "system" "ACPI";
|
||||
# match "subsystem" "ASUS-Eee";
|
||||
# match "notify" "0x1b";
|
||||
# action "";
|
||||
#};
|
||||
#notify 0 {
|
||||
# match "system" "ACPI";
|
||||
# match "subsystem" "ASUS-Eee";
|
||||
# match "notify" "0x1c";
|
||||
# action "";
|
||||
#};
|
||||
#notify 0 {
|
||||
# match "system" "ACPI";
|
||||
# match "subsystem" "ASUS-Eee";
|
||||
# match "notify" "0x1d";
|
||||
# action "";
|
||||
#};
|
@ -28,6 +28,8 @@
|
||||
..
|
||||
defaults
|
||||
..
|
||||
devd
|
||||
..
|
||||
gnats
|
||||
..
|
||||
gss
|
||||
|
@ -30,7 +30,7 @@ defaultroute_start()
|
||||
defif=`get_default_if -inet`
|
||||
if [ -n "${defif}" ]; then
|
||||
if [ ${delay} -ne ${if_up_delay} ]; then
|
||||
echo "($defif)"
|
||||
echo -n "($defif)"
|
||||
fi
|
||||
break
|
||||
fi
|
||||
@ -42,6 +42,8 @@ defaultroute_start()
|
||||
sleep 1
|
||||
delay=`expr $delay - 1`
|
||||
done
|
||||
|
||||
echo
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
|
@ -39,7 +39,7 @@
|
||||
-->
|
||||
<rd id="debug">
|
||||
<name>DEBUG</name>
|
||||
<sku>0</sku>
|
||||
<sku>0x1ff</sku>
|
||||
</rd>
|
||||
|
||||
<rd id="fcc">
|
||||
@ -1080,6 +1080,75 @@
|
||||
</band>
|
||||
</netband>
|
||||
</rd>
|
||||
|
||||
<rd id="sr9">
|
||||
<name>SR9</name>
|
||||
<sku>0x0298</sku>
|
||||
<defcc ref="SR9"/>
|
||||
<netband mode="11g">
|
||||
<band>
|
||||
<freqband ref="S1_907_922_5"/>
|
||||
<maxpower>30</maxpower>
|
||||
<flags>IEEE80211_CHAN_G</flags>
|
||||
</band>
|
||||
<band>
|
||||
<freqband ref="S1_907_922_10"/>
|
||||
<maxpower>30</maxpower>
|
||||
<flags>IEEE80211_CHAN_G</flags>
|
||||
</band>
|
||||
<band>
|
||||
<freqband ref="S1_912_917"/>
|
||||
<maxpower>30</maxpower>
|
||||
<flags>IEEE80211_CHAN_G</flags>
|
||||
</band>
|
||||
</netband>
|
||||
</rd>
|
||||
|
||||
<rd id="xr9">
|
||||
<name>XR9</name>
|
||||
<sku>0x299</sku>
|
||||
<defcc ref="XR9"/>
|
||||
<netband mode="11g">
|
||||
<band>
|
||||
<freqband ref="S2_907_922_5"/>
|
||||
<maxpower>30</maxpower>
|
||||
<flags>IEEE80211_CHAN_G</flags>
|
||||
</band>
|
||||
<band>
|
||||
<freqband ref="S2_907_922_10"/>
|
||||
<maxpower>30</maxpower>
|
||||
<flags>IEEE80211_CHAN_G</flags>
|
||||
</band>
|
||||
<band>
|
||||
<freqband ref="S2_912_917"/>
|
||||
<maxpower>30</maxpower>
|
||||
<flags>IEEE80211_CHAN_G</flags>
|
||||
</band>
|
||||
</netband>
|
||||
</rd>
|
||||
|
||||
<rd id="gz901">
|
||||
<name>GZ901</name>
|
||||
<sku>0x29a</sku>
|
||||
<defcc ref="GZ901"/>
|
||||
<netband mode="11g">
|
||||
<band>
|
||||
<freqband ref="S1_908_923_5"/>
|
||||
<maxpower>30</maxpower>
|
||||
<flags>IEEE80211_CHAN_G</flags>
|
||||
</band>
|
||||
<band>
|
||||
<freqband ref="S1_913_918_10"/>
|
||||
<maxpower>30</maxpower>
|
||||
<flags>IEEE80211_CHAN_G</flags>
|
||||
</band>
|
||||
<band>
|
||||
<freqband ref="S1_913_918"/>
|
||||
<maxpower>30</maxpower>
|
||||
<flags>IEEE80211_CHAN_G</flags>
|
||||
</band>
|
||||
</netband>
|
||||
</rd>
|
||||
</regulatory-domains>
|
||||
|
||||
<country-codes>
|
||||
@ -1201,6 +1270,9 @@
|
||||
<country id="GT">
|
||||
<isocc>320</isocc> <name>Guatemala</name> <rd ref="none"/>
|
||||
</country>
|
||||
<country id="GZ901">
|
||||
<isocc>5002</isocc> <name>ZComax GZ-901</name> <rd ref="gz901"/>
|
||||
</country>
|
||||
<country id="HN">
|
||||
<isocc>340</isocc> <name>Honduras</name> <rd ref="none"/>
|
||||
</country>
|
||||
@ -1396,6 +1468,12 @@
|
||||
<country id="TR">
|
||||
<isocc>792</isocc> <name>Turkey</name> <rd ref="etsi"/>
|
||||
</country>
|
||||
<country id="SR9">
|
||||
<isocc>5000</isocc> <name>Ubiquiti SR9</name> <rd ref="sr9"/>
|
||||
</country>
|
||||
<country id="XR9">
|
||||
<isocc>5001</isocc> <name>Ubiquiti XR9</name> <rd ref="xr9"/>
|
||||
</country>
|
||||
<country id="UA">
|
||||
<isocc>804</isocc> <name>Ukraine</name> <rd ref="none"/>
|
||||
</country>
|
||||
@ -1426,6 +1504,10 @@
|
||||
<country id="ZW">
|
||||
<isocc>716</isocc> <name>Zimbabwe</name> <rd ref="none"/>
|
||||
</country>
|
||||
|
||||
<country id="DEBUG">
|
||||
<isocc>0</isocc> <name>Debug</name> <rd ref="debug"/>
|
||||
</country>
|
||||
</country-codes>
|
||||
|
||||
<!--
|
||||
@ -1575,6 +1657,61 @@
|
||||
<freqstart>2512</freqstart> <freqend>2732</freqend>
|
||||
<chanwidth>20</chanwidth> <chansep>5</chansep>
|
||||
</freqband>
|
||||
|
||||
<freqband id="S1_907_922_5">
|
||||
<freqstart>2422</freqstart> <freqend>2437</freqend>
|
||||
<chanwidth>5</chanwidth> <chansep>5</chansep>
|
||||
<flags>IEEE80211_CHAN_GSM</flags>
|
||||
<flags>IEEE80211_CHAN_QUARTER</flags>
|
||||
</freqband>
|
||||
<freqband id="S1_907_922_10">
|
||||
<freqstart>2422</freqstart> <freqend>2437</freqend>
|
||||
<chanwidth>10</chanwidth> <chansep>5</chansep>
|
||||
<flags>IEEE80211_CHAN_GSM</flags>
|
||||
<flags>IEEE80211_CHAN_HALF</flags>
|
||||
</freqband>
|
||||
<freqband id="S1_912_917">
|
||||
<freqstart>2427</freqstart> <freqend>2432</freqend>
|
||||
<chanwidth>20</chanwidth> <chansep>5</chansep>
|
||||
<flags>IEEE80211_CHAN_GSM</flags>
|
||||
</freqband>
|
||||
|
||||
<freqband id="S2_907_922_5">
|
||||
<freqstart>2427</freqstart> <freqend>2442</freqend>
|
||||
<chanwidth>5</chanwidth> <chansep>5</chansep>
|
||||
<flags>IEEE80211_CHAN_GSM</flags>
|
||||
<flags>IEEE80211_CHAN_QUARTER</flags>
|
||||
</freqband>
|
||||
<freqband id="S2_907_922_10">
|
||||
<freqstart>2427</freqstart> <freqend>2442</freqend>
|
||||
<chanwidth>10</chanwidth> <chansep>5</chansep>
|
||||
<flags>IEEE80211_CHAN_GSM</flags>
|
||||
<flags>IEEE80211_CHAN_HALF</flags>
|
||||
</freqband>
|
||||
<freqband id="S2_912_917">
|
||||
<freqstart>2432</freqstart> <freqend>2437</freqend>
|
||||
<chanwidth>20</chanwidth> <chansep>5</chansep>
|
||||
<flags>IEEE80211_CHAN_GSM</flags>
|
||||
</freqband>
|
||||
|
||||
<freqband id="S1_908_923_5">
|
||||
<freqstart>2447</freqstart> <freqend>2467</freqend>
|
||||
<chanwidth>5</chanwidth> <chansep>5</chansep>
|
||||
<flags>IEEE80211_CHAN_GSM</flags>
|
||||
<flags>IEEE80211_CHAN_QUARTER</flags>
|
||||
</freqband>
|
||||
<freqband id="S1_913_918_10">
|
||||
<freqstart>2457</freqstart> <freqend>2462</freqend>
|
||||
<chanwidth>10</chanwidth> <chansep>5</chansep>
|
||||
<flags>IEEE80211_CHAN_GSM</flags>
|
||||
<flags>IEEE80211_CHAN_HALF</flags>
|
||||
</freqband>
|
||||
<freqband id="S1_913_918">
|
||||
<freqstart>2457</freqstart> <freqend>2462</freqend>
|
||||
<chanwidth>20</chanwidth> <chansep>5</chansep>
|
||||
<flags>IEEE80211_CHAN_GSM</flags>
|
||||
</freqband>
|
||||
|
||||
</shared-frequency-bands>
|
||||
|
||||
</regulatory-data>
|
||||
|
@ -69,6 +69,8 @@
|
||||
.
|
||||
.\" FreeBSD releases not found in doc-common
|
||||
.ds doc-operating-system-FreeBSD-6.3 6.3
|
||||
.ds doc-operating-system-FreeBSD-6.4 6.4
|
||||
.ds doc-operating-system-FreeBSD-7.1 7.1
|
||||
.ds doc-operating-system-FreeBSD-8.0 8.0
|
||||
.
|
||||
.ec
|
||||
|
@ -49,7 +49,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: nameser.h,v 1.7.18.1 2005/04/27 05:00:50 sra Exp $
|
||||
* $Id: nameser.h,v 1.7.18.2 2008/04/03 23:15:15 marka Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
@ -424,9 +424,10 @@ typedef enum __ns_cert_types {
|
||||
#define NS_NXT_MAX 127
|
||||
|
||||
/*%
|
||||
* EDNS0 extended flags, host order.
|
||||
* EDNS0 extended flags and option codes, host order.
|
||||
*/
|
||||
#define NS_OPT_DNSSEC_OK 0x8000U
|
||||
#define NS_OPT_NSID 3
|
||||
|
||||
/*%
|
||||
* Inline versions of get/put short/long. Pointer is advanced.
|
||||
|
@ -50,7 +50,7 @@
|
||||
|
||||
/*%
|
||||
* @(#)resolv.h 8.1 (Berkeley) 6/2/93
|
||||
* $Id: resolv.h,v 1.19.18.3 2005/08/25 04:43:51 marka Exp $
|
||||
* $Id: resolv.h,v 1.19.18.4 2008/04/03 23:15:15 marka Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
@ -245,6 +245,7 @@ union res_sockaddr_union {
|
||||
#define RES_NOCHECKNAME 0x00008000 /*%< do not check names for sanity. */
|
||||
#define RES_KEEPTSIG 0x00010000 /*%< do not strip TSIG records */
|
||||
#define RES_BLAST 0x00020000 /*%< blast all recursive servers */
|
||||
#define RES_NSID 0x00040000 /*%< request name server ID */
|
||||
#define RES_NOTLDQUERY 0x00100000 /*%< don't unqualified name as a tld */
|
||||
#define RES_USE_DNSSEC 0x00200000 /*%< use DNSSEC using OK bit in OPT */
|
||||
/* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */
|
||||
@ -386,6 +387,7 @@ extern const struct res_sym __p_rcode_syms[];
|
||||
#define sym_ntos __sym_ntos
|
||||
#define sym_ston __sym_ston
|
||||
#define res_nopt __res_nopt
|
||||
#define res_nopt_rdata __res_nopt_rdata
|
||||
#define res_ndestroy __res_ndestroy
|
||||
#define res_nametoclass __res_nametoclass
|
||||
#define res_nametotype __res_nametotype
|
||||
@ -474,6 +476,8 @@ int res_findzonecut2(res_state, const char *, ns_class, int,
|
||||
union res_sockaddr_union *, int);
|
||||
void res_nclose(res_state);
|
||||
int res_nopt(res_state, int, u_char *, int, int);
|
||||
int res_nopt_rdata(res_state, int, u_char *, int, u_char *,
|
||||
u_short, u_short, u_char *);
|
||||
void res_send_setqhook(res_send_qhook);
|
||||
void res_send_setrhook(res_send_rhook);
|
||||
int __res_vinit(res_state, int);
|
||||
|
@ -192,7 +192,7 @@ archive_read_format_ar_read_header(struct archive_read *a,
|
||||
/* Verify the magic signature on the file header. */
|
||||
if (strncmp(h + AR_fmag_offset, "`\n", 2) != 0) {
|
||||
archive_set_error(&a->archive, EINVAL,
|
||||
"Consistency check failed");
|
||||
"Incorrect file header signature");
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
|
||||
|
@ -897,7 +897,7 @@ int main(int argc, char **argv)
|
||||
time_t now;
|
||||
char *refdir_alloc = NULL;
|
||||
char *progname, *p;
|
||||
char *tmp;
|
||||
const char *tmp;
|
||||
char tmpdir[256];
|
||||
char tmpdir_timestamp[256];
|
||||
|
||||
|
@ -43,6 +43,7 @@ test_compat_gtar_1(void)
|
||||
char name[] = "test_compat_gtar_1.tgz";
|
||||
struct archive_entry *ae;
|
||||
struct archive *a;
|
||||
int r;
|
||||
|
||||
assert((a = archive_read_new()) != NULL);
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a));
|
||||
@ -51,7 +52,11 @@ test_compat_gtar_1(void)
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 10240));
|
||||
|
||||
/* Read first entry. */
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualIntA(a, ARCHIVE_OK, r = archive_read_next_header(a, &ae));
|
||||
if (r != ARCHIVE_OK) {
|
||||
archive_read_finish(a);
|
||||
return;
|
||||
}
|
||||
assertEqualString(
|
||||
"12345678901234567890123456789012345678901234567890"
|
||||
"12345678901234567890123456789012345678901234567890"
|
||||
@ -66,7 +71,11 @@ test_compat_gtar_1(void)
|
||||
assertEqualInt(0100644, archive_entry_mode(ae));
|
||||
|
||||
/* Read second entry. */
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualIntA(a, ARCHIVE_OK, r = archive_read_next_header(a, &ae));
|
||||
if (r != ARCHIVE_OK) {
|
||||
archive_read_finish(a);
|
||||
return;
|
||||
}
|
||||
assertEqualString(
|
||||
"abcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"
|
||||
"abcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"
|
||||
|
@ -85,11 +85,11 @@ DEFINE_TEST(test_write_compress)
|
||||
|
||||
for (i = 0; i < 100; i++) {
|
||||
sprintf(path, "file%03d", i);
|
||||
assertEqualInt(0, archive_read_next_header(a, &ae));
|
||||
if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
|
||||
break;
|
||||
assertEqualString(path, archive_entry_pathname(ae));
|
||||
assertEqualInt(datasize, archive_entry_size(ae));
|
||||
}
|
||||
|
||||
assert(0 == archive_read_close(a));
|
||||
#if ARCHIVE_VERSION_NUMBER < 2000000
|
||||
archive_read_finish(a);
|
||||
|
@ -73,8 +73,8 @@ DEFINE_TEST(test_write_format_ar)
|
||||
archive_entry_copy_pathname(ae, "ggghhhjjjrrrttt.o");
|
||||
archive_entry_set_filetype(ae, AE_IFREG);
|
||||
archive_entry_set_size(ae, 7);
|
||||
assertA(0 == archive_write_header(a, ae));
|
||||
assertA(7 == archive_write_data(a, "7777777", 7));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
|
||||
assertEqualIntA(a, 7, archive_write_data(a, "7777777", 7));
|
||||
archive_entry_free(ae);
|
||||
|
||||
/* test full pathname */
|
||||
@ -82,8 +82,8 @@ DEFINE_TEST(test_write_format_ar)
|
||||
archive_entry_copy_pathname(ae, "/usr/home/xx/iiijjjdddsssppp.o");
|
||||
archive_entry_set_mode(ae, S_IFREG | 0755);
|
||||
archive_entry_set_size(ae, 8);
|
||||
assertA(0 == archive_write_header(a, ae));
|
||||
assertA(8 == archive_write_data(a, "88877766", 8));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
|
||||
assertEqualIntA(a, 8, archive_write_data(a, "88877766", 8));
|
||||
archive_entry_free(ae);
|
||||
|
||||
/* trailing "/" should be rejected */
|
||||
@ -105,46 +105,46 @@ DEFINE_TEST(test_write_format_ar)
|
||||
#if ARCHIVE_VERSION_NUMBER < 2000000
|
||||
archive_write_finish(a);
|
||||
#else
|
||||
assert(0 == archive_write_finish(a));
|
||||
assertEqualInt(0, archive_write_finish(a));
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Now, read the data back.
|
||||
*/
|
||||
assert((a = archive_read_new()) != NULL);
|
||||
assertA(0 == archive_read_support_format_all(a));
|
||||
assertA(0 == archive_read_support_compression_all(a));
|
||||
assertA(0 == archive_read_open_memory(a, buff, used));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used));
|
||||
|
||||
assertA(0 == archive_read_next_header(a, &ae));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualInt(0, archive_entry_mtime(ae));
|
||||
assertEqualString("//", archive_entry_pathname(ae));
|
||||
assertEqualInt(0, archive_entry_size(ae));
|
||||
|
||||
assertA(0 == archive_read_next_header(a, &ae));
|
||||
assert(1 == archive_entry_mtime(ae));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualInt(1, archive_entry_mtime(ae));
|
||||
assertEqualString("abcdefghijklmn.o", archive_entry_pathname(ae));
|
||||
assert(8 == archive_entry_size(ae));
|
||||
assertA(8 == archive_read_data(a, buff2, 10));
|
||||
assert(0 == memcmp(buff2, "87654321", 8));
|
||||
assertEqualInt(8, archive_entry_size(ae));
|
||||
assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
|
||||
assertEqualMem(buff2, "87654321", 8);
|
||||
|
||||
assert(0 == archive_read_next_header(a, &ae));
|
||||
assertEqualInt(ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString("ggghhhjjjrrrttt.o", archive_entry_pathname(ae));
|
||||
assert(7 == archive_entry_size(ae));
|
||||
assertA(7 == archive_read_data(a, buff2, 11));
|
||||
assert(0 == memcmp(buff2, "7777777", 7));
|
||||
assertEqualInt(7, archive_entry_size(ae));
|
||||
assertEqualIntA(a, 7, archive_read_data(a, buff2, 11));
|
||||
assertEqualMem(buff2, "7777777", 7);
|
||||
|
||||
assert(0 == archive_read_next_header(a, &ae));
|
||||
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
|
||||
assertEqualString("iiijjjdddsssppp.o", archive_entry_pathname(ae));
|
||||
assert(8 == archive_entry_size(ae));
|
||||
assertA(8 == archive_read_data(a, buff2, 17));
|
||||
assert(0 == memcmp(buff2, "88877766", 8));
|
||||
assertEqualInt(8, archive_entry_size(ae));
|
||||
assertEqualIntA(a, 8, archive_read_data(a, buff2, 17));
|
||||
assertEqualMem(buff2, "88877766", 8);
|
||||
|
||||
assert(0 == archive_read_close(a));
|
||||
assertEqualIntA(a, 0, archive_read_close(a));
|
||||
#if ARCHIVE_VERSION_NUMBER < 2000000
|
||||
archive_read_finish(a);
|
||||
#else
|
||||
assert(0 == archive_read_finish(a));
|
||||
assertEqualInt(0, archive_read_finish(a));
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -152,18 +152,18 @@ DEFINE_TEST(test_write_format_ar)
|
||||
*/
|
||||
memset(buff, 0, sizeof(buff));
|
||||
assert((a = archive_write_new()) != NULL);
|
||||
assertA(0 == archive_write_set_format_ar_bsd(a));
|
||||
assertA(0 == archive_write_set_compression_bzip2(a));
|
||||
assertA(0 == archive_write_open_memory(a, buff, sizeof(buff), &used));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_ar_bsd(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_set_compression_bzip2(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, sizeof(buff), &used));
|
||||
|
||||
/* write a entry need long name extension */
|
||||
assert((ae = archive_entry_new()) != NULL);
|
||||
archive_entry_copy_pathname(ae, "ttttyyyyuuuuiiii.o");
|
||||
archive_entry_set_filetype(ae, AE_IFREG);
|
||||
archive_entry_set_size(ae, 5);
|
||||
assertA(0 == archive_write_header(a, ae));
|
||||
assertA(5 == archive_entry_size(ae));
|
||||
assertA(5 == archive_write_data(a, "12345", 7));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
|
||||
assertEqualInt(5, archive_entry_size(ae));
|
||||
assertEqualIntA(a, 5, archive_write_data(a, "12345", 7));
|
||||
archive_entry_free(ae);
|
||||
|
||||
/* write a entry with a short name */
|
||||
@ -171,41 +171,41 @@ DEFINE_TEST(test_write_format_ar)
|
||||
archive_entry_copy_pathname(ae, "ttyy.o");
|
||||
archive_entry_set_filetype(ae, AE_IFREG);
|
||||
archive_entry_set_size(ae, 6);
|
||||
assertA(0 == archive_write_header(a, ae));
|
||||
assertA(6 == archive_write_data(a, "555555", 7));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
|
||||
assertEqualIntA(a, 6, archive_write_data(a, "555555", 7));
|
||||
archive_entry_free(ae);
|
||||
archive_write_close(a);
|
||||
#if ARCHIVE_VERSION_NUMBER < 2000000
|
||||
archive_write_finish(a);
|
||||
#else
|
||||
assert(0 == archive_write_finish(a));
|
||||
assertEqualInt(0, archive_write_finish(a));
|
||||
#endif
|
||||
|
||||
/* Now, Read the data back */
|
||||
assert((a = archive_read_new()) != NULL);
|
||||
assertA(0 == archive_read_support_format_all(a));
|
||||
assertA(0 == archive_read_support_compression_all(a));
|
||||
assertA(0 == archive_read_open_memory(a, buff, used));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used));
|
||||
|
||||
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
|
||||
assertEqualString("ttttyyyyuuuuiiii.o", archive_entry_pathname(ae));
|
||||
assertEqualInt(5, archive_entry_size(ae));
|
||||
assertA(5 == archive_read_data(a, buff2, 10));
|
||||
assert(0 == memcmp(buff2, "12345", 5));
|
||||
assertEqualIntA(a, 5, archive_read_data(a, buff2, 10));
|
||||
assertEqualMem(buff2, "12345", 5);
|
||||
|
||||
assert(0 == archive_read_next_header(a, &ae));
|
||||
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
|
||||
assertEqualString("ttyy.o", archive_entry_pathname(ae));
|
||||
assert(6 == archive_entry_size(ae));
|
||||
assertA(6 == archive_read_data(a, buff2, 10));
|
||||
assert(0 == memcmp(buff2, "555555", 6));
|
||||
assertEqualInt(6, archive_entry_size(ae));
|
||||
assertEqualIntA(a, 6, archive_read_data(a, buff2, 10));
|
||||
assertEqualMem(buff2, "555555", 6);
|
||||
|
||||
/* Test EOF */
|
||||
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
|
||||
assert(0 == archive_read_close(a));
|
||||
assertEqualIntA(a, 0, archive_read_close(a));
|
||||
#if ARCHIVE_VERSION_NUMBER < 2000000
|
||||
archive_read_finish(a);
|
||||
#else
|
||||
assert(0 == archive_read_finish(a));
|
||||
assertEqualInt(0, archive_read_finish(a));
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
/* eventlib.h - exported interfaces for eventlib
|
||||
* vix 09sep95 [initial]
|
||||
*
|
||||
* $Id: eventlib.h,v 1.3.18.2 2005/07/28 07:38:07 marka Exp $
|
||||
* $Id: eventlib.h,v 1.3.18.3 2008/01/23 02:12:01 marka Exp $
|
||||
*/
|
||||
|
||||
#ifndef _EVENTLIB_H
|
||||
@ -29,6 +29,8 @@
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <isc/platform.h>
|
||||
|
||||
#ifndef __P
|
||||
# define __EVENTLIB_P_DEFINED
|
||||
# ifdef __STDC__
|
||||
|
37
lib/libc/include/isc/platform.h
Normal file
37
lib/libc/include/isc/platform.h
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (C) 2008 Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
||||
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: platform.h.in,v 1.2.6.2 2008/01/23 02:15:02 tbox Exp $ */
|
||||
/* $FreeBSD$ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
#ifndef ISC_PLATFORM_H
|
||||
#define ISC_PLATFORM_H
|
||||
|
||||
/*
|
||||
* Define if the OS does not define struct timespec.
|
||||
*/
|
||||
#undef ISC_PLATFORM_NEEDTIMESPEC
|
||||
#ifdef ISC_PLATFORM_NEEDTIMESPEC
|
||||
#include <time.h> /* For time_t */
|
||||
struct timespec {
|
||||
time_t tv_sec; /* seconds */
|
||||
long tv_nsec; /* nanoseconds */
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] = "$Id: inet_net_pton.c,v 1.7.18.1 2005/04/27 05:00:53 sra Exp $";
|
||||
static const char rcsid[] = "$Id: inet_net_pton.c,v 1.7.18.2 2008/08/26 04:42:43 marka Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -135,11 +135,11 @@ inet_net_pton_ipv4(const char *src, u_char *dst, size_t size) {
|
||||
assert(n >= 0 && n <= 9);
|
||||
bits *= 10;
|
||||
bits += n;
|
||||
if (bits > 32)
|
||||
goto enoent;
|
||||
} while ((ch = *src++) != '\0' && isascii(ch) && isdigit(ch));
|
||||
if (ch != '\0')
|
||||
goto enoent;
|
||||
if (bits > 32)
|
||||
goto emsgsize;
|
||||
}
|
||||
|
||||
/* Firey death and destruction unless we prefetched EOS. */
|
||||
|
@ -238,6 +238,13 @@ For
|
||||
.Fn rcmd_af ,
|
||||
.Dv PF_UNSPEC
|
||||
is also allowed.
|
||||
.Sh ENVIRONMENT
|
||||
.Bl -tag -width RSH
|
||||
.It Ev RSH
|
||||
When using the
|
||||
.Fn rcmd
|
||||
function, this variable is used as the program to run instead of
|
||||
.Xr rsh 1 .
|
||||
.Sh DIAGNOSTICS
|
||||
The
|
||||
.Fn rcmd
|
||||
|
@ -91,7 +91,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: res_debug.c,v 1.10.18.5 2005/07/28 07:38:11 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_debug.c,v 1.10.18.6 2008/04/03 23:15:15 marka Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -187,10 +187,56 @@ do_section(const res_state statp,
|
||||
p_type(ns_rr_type(rr)),
|
||||
p_class(ns_rr_class(rr)));
|
||||
else if (section == ns_s_ar && ns_rr_type(rr) == ns_t_opt) {
|
||||
u_int16_t optcode, optlen, rdatalen = ns_rr_rdlen(rr);
|
||||
u_int32_t ttl = ns_rr_ttl(rr);
|
||||
|
||||
fprintf(file,
|
||||
"; EDNS: version: %u, udp=%u, flags=%04x\n",
|
||||
(ttl>>16)&0xff, ns_rr_class(rr), ttl&0xffff);
|
||||
|
||||
while (rdatalen >= 4) {
|
||||
const u_char *cp = ns_rr_rdata(rr);
|
||||
int i;
|
||||
|
||||
GETSHORT(optcode, cp);
|
||||
GETSHORT(optlen, cp);
|
||||
|
||||
if (optcode == NS_OPT_NSID) {
|
||||
fputs("; NSID: ", file);
|
||||
if (optlen == 0) {
|
||||
fputs("; NSID\n", file);
|
||||
} else {
|
||||
fputs("; NSID: ", file);
|
||||
for (i = 0; i < optlen; i++)
|
||||
fprintf(file, "%02x ",
|
||||
cp[i]);
|
||||
fputs(" (",file);
|
||||
for (i = 0; i < optlen; i++)
|
||||
fprintf(file, "%c",
|
||||
isprint(cp[i])?
|
||||
cp[i] : '.');
|
||||
fputs(")\n", file);
|
||||
}
|
||||
} else {
|
||||
if (optlen == 0) {
|
||||
fprintf(file, "; OPT=%u\n",
|
||||
optcode);
|
||||
} else {
|
||||
fprintf(file, "; OPT=%u: ",
|
||||
optcode);
|
||||
for (i = 0; i < optlen; i++)
|
||||
fprintf(file, "%02x ",
|
||||
cp[i]);
|
||||
fputs(" (",file);
|
||||
for (i = 0; i < optlen; i++)
|
||||
fprintf(file, "%c",
|
||||
isprint(cp[i]) ?
|
||||
cp[i] : '.');
|
||||
fputs(")\n", file);
|
||||
}
|
||||
}
|
||||
rdatalen -= 4 + optlen;
|
||||
}
|
||||
} else {
|
||||
n = ns_sprintrr(handle, &rr, NULL, NULL,
|
||||
buf, buflen);
|
||||
@ -202,7 +248,7 @@ do_section(const res_state statp,
|
||||
buf = malloc(buflen += 1024);
|
||||
if (buf == NULL) {
|
||||
fprintf(file,
|
||||
";; memory allocation failure\n");
|
||||
";; memory allocation failure\n");
|
||||
return;
|
||||
}
|
||||
continue;
|
||||
@ -379,7 +425,7 @@ static const struct res_sym __p_default_section_syms[] = {
|
||||
{ns_s_an, "ANSWER", (char *)0},
|
||||
{ns_s_ns, "AUTHORITY", (char *)0},
|
||||
{ns_s_ar, "ADDITIONAL", (char *)0},
|
||||
{0, (char *)0, (char *)0}
|
||||
{0, (char *)0, (char *)0}
|
||||
};
|
||||
|
||||
static const struct res_sym __p_update_section_syms[] = {
|
||||
@ -387,7 +433,7 @@ static const struct res_sym __p_update_section_syms[] = {
|
||||
{S_PREREQ, "PREREQUISITE", (char *)0},
|
||||
{S_UPDATE, "UPDATE", (char *)0},
|
||||
{S_ADDT, "ADDITIONAL", (char *)0},
|
||||
{0, (char *)0, (char *)0}
|
||||
{0, (char *)0, (char *)0}
|
||||
};
|
||||
|
||||
const struct res_sym __p_key_syms[] = {
|
||||
@ -615,6 +661,7 @@ p_option(u_long option) {
|
||||
case RES_USE_INET6: return "inet6";
|
||||
#ifdef RES_USE_EDNS0 /*%< KAME extension */
|
||||
case RES_USE_EDNS0: return "edns0";
|
||||
case RES_NSID: return "nsid";
|
||||
#endif
|
||||
#ifdef RES_USE_DNAME
|
||||
case RES_USE_DNAME: return "dname";
|
||||
|
@ -66,7 +66,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: res_mkquery.c,v 1.5.18.1 2005/04/27 05:01:11 sra Exp $";
|
||||
static const char rcsid[] = "$Id: res_mkquery.c,v 1.5.18.2 2008/04/03 23:15:15 marka Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -201,9 +201,6 @@ res_nmkquery(res_state statp,
|
||||
|
||||
#ifdef RES_USE_EDNS0
|
||||
/* attach OPT pseudo-RR, as documented in RFC2671 (EDNS0). */
|
||||
#ifndef T_OPT
|
||||
#define T_OPT 41
|
||||
#endif
|
||||
|
||||
int
|
||||
res_nopt(res_state statp,
|
||||
@ -228,15 +225,16 @@ res_nopt(res_state statp,
|
||||
if ((ep - cp) < 1 + RRFIXEDSZ)
|
||||
return (-1);
|
||||
|
||||
*cp++ = 0; /*%< "." */
|
||||
ns_put16(T_OPT, cp); /*%< TYPE */
|
||||
*cp++ = 0; /*%< "." */
|
||||
ns_put16(ns_t_opt, cp); /*%< TYPE */
|
||||
cp += INT16SZ;
|
||||
if (anslen > 0xffff)
|
||||
anslen = 0xffff; /* limit to 16bit value */
|
||||
ns_put16(anslen & 0xffff, cp); /*%< CLASS = UDP payload size */
|
||||
ns_put16(anslen & 0xffff, cp); /*%< CLASS = UDP payload size */
|
||||
cp += INT16SZ;
|
||||
*cp++ = NOERROR; /*%< extended RCODE */
|
||||
*cp++ = 0; /*%< EDNS version */
|
||||
*cp++ = NOERROR; /*%< extended RCODE */
|
||||
*cp++ = 0; /*%< EDNS version */
|
||||
|
||||
if (statp->options & RES_USE_DNSSEC) {
|
||||
#ifdef DEBUG
|
||||
if (statp->options & RES_DEBUG)
|
||||
@ -246,12 +244,60 @@ res_nopt(res_state statp,
|
||||
}
|
||||
ns_put16(flags, cp);
|
||||
cp += INT16SZ;
|
||||
ns_put16(0, cp); /*%< RDLEN */
|
||||
|
||||
ns_put16(0U, cp); /*%< RDLEN */
|
||||
cp += INT16SZ;
|
||||
|
||||
hp->arcount = htons(ntohs(hp->arcount) + 1);
|
||||
|
||||
return (cp - buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* Construct variable data (RDATA) block for OPT psuedo-RR, append it
|
||||
* to the buffer, then update the RDLEN field (previously set to zero by
|
||||
* res_nopt()) with the new RDATA length.
|
||||
*/
|
||||
int
|
||||
res_nopt_rdata(res_state statp,
|
||||
int n0, /*%< current offset in buffer */
|
||||
u_char *buf, /*%< buffer to put query */
|
||||
int buflen, /*%< size of buffer */
|
||||
u_char *rdata, /*%< ptr to start of opt rdata */
|
||||
u_short code, /*%< OPTION-CODE */
|
||||
u_short len, /*%< OPTION-LENGTH */
|
||||
u_char *data) /*%< OPTION_DATA */
|
||||
{
|
||||
register u_char *cp, *ep;
|
||||
|
||||
#ifdef DEBUG
|
||||
if ((statp->options & RES_DEBUG) != 0U)
|
||||
printf(";; res_nopt_rdata()\n");
|
||||
#endif
|
||||
|
||||
cp = buf + n0;
|
||||
ep = buf + buflen;
|
||||
|
||||
if ((ep - cp) < (4 + len))
|
||||
return (-1);
|
||||
|
||||
if (rdata < (buf + 2) || rdata >= ep)
|
||||
return (-1);
|
||||
|
||||
ns_put16(code, cp);
|
||||
cp += INT16SZ;
|
||||
|
||||
ns_put16(len, cp);
|
||||
cp += INT16SZ;
|
||||
|
||||
memcpy(cp, data, len);
|
||||
cp += len;
|
||||
|
||||
len = cp - rdata;
|
||||
ns_put16(len, rdata - 2); /* Update RDLEN field */
|
||||
|
||||
return (cp - buf);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*! \file */
|
||||
|
@ -66,7 +66,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_query.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: res_query.c,v 1.7.18.1 2005/04/27 05:01:11 sra Exp $";
|
||||
static const char rcsid[] = "$Id: res_query.c,v 1.7.18.2 2008/04/03 23:15:15 marka Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -115,8 +115,9 @@ res_nquery(res_state statp,
|
||||
{
|
||||
u_char buf[MAXPACKET];
|
||||
HEADER *hp = (HEADER *) answer;
|
||||
int n;
|
||||
u_int oflags;
|
||||
u_char *rdata;
|
||||
int n;
|
||||
|
||||
oflags = statp->_flags;
|
||||
|
||||
@ -131,8 +132,14 @@ res_nquery(res_state statp,
|
||||
buf, sizeof(buf));
|
||||
#ifdef RES_USE_EDNS0
|
||||
if (n > 0 && (statp->_flags & RES_F_EDNS0ERR) == 0 &&
|
||||
(statp->options & (RES_USE_EDNS0|RES_USE_DNSSEC)) != 0U)
|
||||
(statp->options & (RES_USE_EDNS0|RES_USE_DNSSEC|RES_NSID))) {
|
||||
n = res_nopt(statp, n, buf, sizeof(buf), anslen);
|
||||
rdata = &buf[n];
|
||||
if (n > 0 && (statp->options & RES_NSID) != 0U) {
|
||||
n = res_nopt_rdata(statp, n, buf, sizeof(buf), rdata,
|
||||
NS_OPT_NSID, 0, NULL);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (n <= 0) {
|
||||
#ifdef DEBUG
|
||||
@ -142,6 +149,7 @@ res_nquery(res_state statp,
|
||||
RES_SET_H_ERRNO(statp, NO_RECOVERY);
|
||||
return (n);
|
||||
}
|
||||
|
||||
n = res_nsend(statp, buf, n, answer, anslen);
|
||||
if (n < 0) {
|
||||
#ifdef RES_USE_EDNS0
|
||||
|
@ -66,7 +66,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: res_send.c,v 1.9.18.8 2006/10/16 23:00:58 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_send.c,v 1.9.18.10 2008/01/27 02:06:26 marka Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -302,7 +302,7 @@ int
|
||||
res_nsend(res_state statp,
|
||||
const u_char *buf, int buflen, u_char *ans, int anssiz)
|
||||
{
|
||||
int gotsomewhere, terrno, try, v_circuit, resplen, ns, n;
|
||||
int gotsomewhere, terrno, tries, v_circuit, resplen, ns, n;
|
||||
#ifdef USE_KQUEUE
|
||||
int kq;
|
||||
#endif
|
||||
@ -420,7 +420,7 @@ res_nsend(res_state statp,
|
||||
/*
|
||||
* Send request, RETRY times, or until successful.
|
||||
*/
|
||||
for (try = 0; try < statp->retry; try++) {
|
||||
for (tries = 0; tries < statp->retry; tries++) {
|
||||
for (ns = 0; ns < statp->nscount; ns++) {
|
||||
struct sockaddr *nsap;
|
||||
int nsaplen;
|
||||
@ -471,7 +471,7 @@ res_nsend(res_state statp,
|
||||
|
||||
if (v_circuit) {
|
||||
/* Use VC; at most one attempt per server. */
|
||||
try = statp->retry;
|
||||
tries = statp->retry;
|
||||
n = send_vc(statp, buf, buflen, ans, anssiz, &terrno,
|
||||
ns);
|
||||
if (n < 0)
|
||||
@ -486,7 +486,7 @@ res_nsend(res_state statp,
|
||||
kq,
|
||||
#endif
|
||||
buf, buflen, ans, anssiz, &terrno,
|
||||
ns, try, &v_circuit, &gotsomewhere);
|
||||
ns, tries, &v_circuit, &gotsomewhere);
|
||||
if (n < 0)
|
||||
goto fail;
|
||||
if (n == 0)
|
||||
@ -632,6 +632,9 @@ send_vc(res_state statp,
|
||||
u_short len;
|
||||
u_char *cp;
|
||||
void *tmp;
|
||||
#ifdef SO_NOSIGPIPE
|
||||
int on = 1;
|
||||
#endif
|
||||
|
||||
nsap = get_nsaddr(statp, ns);
|
||||
nsaplen = get_salen(nsap);
|
||||
@ -679,6 +682,17 @@ send_vc(res_state statp,
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
#ifdef SO_NOSIGPIPE
|
||||
/*
|
||||
* Disable generation of SIGPIPE when writing to a closed
|
||||
* socket. Write should return -1 and set errno to EPIPE
|
||||
* instead.
|
||||
*
|
||||
* Push on even if setsockopt(SO_NOSIGPIPE) fails.
|
||||
*/
|
||||
(void)_setsockopt(statp->_vcsock, SOL_SOCKET, SO_NOSIGPIPE, &on,
|
||||
sizeof(on));
|
||||
#endif
|
||||
errno = 0;
|
||||
if (_connect(statp->_vcsock, nsap, nsaplen) < 0) {
|
||||
*terrno = errno;
|
||||
@ -811,7 +825,7 @@ send_dg(res_state statp,
|
||||
int kq,
|
||||
#endif
|
||||
const u_char *buf, int buflen, u_char *ans,
|
||||
int anssiz, int *terrno, int ns, int try, int *v_circuit,
|
||||
int anssiz, int *terrno, int ns, int tries, int *v_circuit,
|
||||
int *gotsomewhere)
|
||||
{
|
||||
const HEADER *hp = (const HEADER *) buf;
|
||||
@ -915,7 +929,7 @@ send_dg(res_state statp,
|
||||
/*
|
||||
* Wait for reply.
|
||||
*/
|
||||
seconds = (statp->retrans << try);
|
||||
seconds = (statp->retrans << tries);
|
||||
if (ns > 0)
|
||||
seconds /= statp->nscount;
|
||||
if (seconds <= 0)
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd December 18, 2007
|
||||
.Dd December 14, 2008
|
||||
.Dt FETCH 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -165,9 +165,16 @@ struct url {
|
||||
char *doc;
|
||||
off_t offset;
|
||||
size_t length;
|
||||
time_t ims_time;
|
||||
};
|
||||
.Ed
|
||||
.Pp
|
||||
The
|
||||
.Va ims_time
|
||||
field stores the time value for
|
||||
.Li If-Modified-Since
|
||||
HTTP requests.
|
||||
.Pp
|
||||
The pointer returned by
|
||||
.Fn fetchMakeURL
|
||||
or
|
||||
@ -353,6 +360,22 @@ and
|
||||
.Fn fetchPutHTTP
|
||||
will use a direct connection even if a proxy server is defined.
|
||||
.Pp
|
||||
If the
|
||||
.Ql i
|
||||
(if-modified-since) flag is specified, and
|
||||
the
|
||||
.Va ims_time
|
||||
field is set in
|
||||
.Vt "struct url" ,
|
||||
then
|
||||
.Fn fetchXGetHTTP
|
||||
and
|
||||
.Fn fetchGetHTTP
|
||||
will send a conditional
|
||||
.Li If-Modified-Since
|
||||
HTTP header to only fetch the content if it is newer than
|
||||
.Va ims_time .
|
||||
.Pp
|
||||
Since there seems to be no good way of implementing the HTTP PUT
|
||||
method in a manner consistent with the rest of the
|
||||
.Nm fetch
|
||||
|
@ -74,9 +74,7 @@ static struct fetcherr url_errlist[] = {
|
||||
FILE *
|
||||
fetchXGet(struct url *URL, struct url_stat *us, const char *flags)
|
||||
{
|
||||
int direct;
|
||||
|
||||
direct = CHECK_FLAG('d');
|
||||
if (us != NULL) {
|
||||
us->size = -1;
|
||||
us->atime = us->mtime = 0;
|
||||
@ -110,9 +108,7 @@ fetchGet(struct url *URL, const char *flags)
|
||||
FILE *
|
||||
fetchPut(struct url *URL, const char *flags)
|
||||
{
|
||||
int direct;
|
||||
|
||||
direct = CHECK_FLAG('d');
|
||||
if (strcasecmp(URL->scheme, SCHEME_FILE) == 0)
|
||||
return (fetchPutFile(URL, flags));
|
||||
else if (strcasecmp(URL->scheme, SCHEME_FTP) == 0)
|
||||
@ -132,9 +128,7 @@ fetchPut(struct url *URL, const char *flags)
|
||||
int
|
||||
fetchStat(struct url *URL, struct url_stat *us, const char *flags)
|
||||
{
|
||||
int direct;
|
||||
|
||||
direct = CHECK_FLAG('d');
|
||||
if (us != NULL) {
|
||||
us->size = -1;
|
||||
us->atime = us->mtime = 0;
|
||||
@ -158,9 +152,7 @@ fetchStat(struct url *URL, struct url_stat *us, const char *flags)
|
||||
struct url_ent *
|
||||
fetchList(struct url *URL, const char *flags)
|
||||
{
|
||||
int direct;
|
||||
|
||||
direct = CHECK_FLAG('d');
|
||||
if (strcasecmp(URL->scheme, SCHEME_FILE) == 0)
|
||||
return (fetchListFile(URL, flags));
|
||||
else if (strcasecmp(URL->scheme, SCHEME_FTP) == 0)
|
||||
|
@ -46,6 +46,7 @@ struct url {
|
||||
char *doc;
|
||||
off_t offset;
|
||||
size_t length;
|
||||
time_t ims_time;
|
||||
};
|
||||
|
||||
struct url_stat {
|
||||
|
@ -63,6 +63,7 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <err.h>
|
||||
@ -92,6 +93,7 @@ __FBSDID("$FreeBSD$");
|
||||
#define HTTP_MOVED_PERM 301
|
||||
#define HTTP_MOVED_TEMP 302
|
||||
#define HTTP_SEE_OTHER 303
|
||||
#define HTTP_NOT_MODIFIED 304
|
||||
#define HTTP_TEMP_REDIRECT 307
|
||||
#define HTTP_NEED_AUTH 401
|
||||
#define HTTP_NEED_PROXY_AUTH 407
|
||||
@ -797,20 +799,23 @@ FILE *
|
||||
http_request(struct url *URL, const char *op, struct url_stat *us,
|
||||
struct url *purl, const char *flags)
|
||||
{
|
||||
char timebuf[80];
|
||||
char hbuf[MAXHOSTNAMELEN + 7], *host;
|
||||
conn_t *conn;
|
||||
struct url *url, *new;
|
||||
int chunked, direct, need_auth, noredirect, verbose;
|
||||
int chunked, direct, ims, need_auth, noredirect, verbose;
|
||||
int e, i, n, val;
|
||||
off_t offset, clength, length, size;
|
||||
time_t mtime;
|
||||
const char *p;
|
||||
FILE *f;
|
||||
hdr_t h;
|
||||
char hbuf[MAXHOSTNAMELEN + 7], *host;
|
||||
struct tm *timestruct;
|
||||
|
||||
direct = CHECK_FLAG('d');
|
||||
noredirect = CHECK_FLAG('A');
|
||||
verbose = CHECK_FLAG('v');
|
||||
ims = CHECK_FLAG('i');
|
||||
|
||||
if (direct && purl) {
|
||||
fetchFreeURL(purl);
|
||||
@ -879,6 +884,14 @@ http_request(struct url *URL, const char *op, struct url_stat *us,
|
||||
op, url->doc);
|
||||
}
|
||||
|
||||
if (ims && url->ims_time) {
|
||||
timestruct = gmtime((time_t *)&url->ims_time);
|
||||
(void)strftime(timebuf, 80, "%a, %d %b %Y %T GMT",
|
||||
timestruct);
|
||||
if (verbose)
|
||||
fetch_info("If-Modified-Since: %s", timebuf);
|
||||
http_cmd(conn, "If-Modified-Since: %s", timebuf);
|
||||
}
|
||||
/* virtual host */
|
||||
http_cmd(conn, "Host: %s", host);
|
||||
|
||||
@ -940,6 +953,7 @@ http_request(struct url *URL, const char *op, struct url_stat *us,
|
||||
switch (http_get_reply(conn)) {
|
||||
case HTTP_OK:
|
||||
case HTTP_PARTIAL:
|
||||
case HTTP_NOT_MODIFIED:
|
||||
/* fine */
|
||||
break;
|
||||
case HTTP_MOVED_PERM:
|
||||
@ -1074,7 +1088,10 @@ http_request(struct url *URL, const char *op, struct url_stat *us,
|
||||
}
|
||||
|
||||
/* we have a hit or an error */
|
||||
if (conn->err == HTTP_OK || conn->err == HTTP_PARTIAL || HTTP_ERROR(conn->err))
|
||||
if (conn->err == HTTP_OK
|
||||
|| conn->err == HTTP_NOT_MODIFIED
|
||||
|| conn->err == HTTP_PARTIAL
|
||||
|| HTTP_ERROR(conn->err))
|
||||
break;
|
||||
|
||||
/* all other cases: we got a redirect */
|
||||
@ -1102,6 +1119,11 @@ http_request(struct url *URL, const char *op, struct url_stat *us,
|
||||
(long long)offset, (long long)length,
|
||||
(long long)size, (long long)clength));
|
||||
|
||||
if (conn->err == HTTP_NOT_MODIFIED) {
|
||||
http_seterr(HTTP_NOT_MODIFIED);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* check for inconsistencies */
|
||||
if (clength != -1 && length != -1 && clength != length) {
|
||||
http_seterr(HTTP_PROTOCOL_ERROR);
|
||||
|
@ -156,7 +156,7 @@ struct ifqueue arpintrq;
|
||||
void arpwhohas(struct arpcom *, struct in_addr *);
|
||||
void arpintr(void);
|
||||
int arpresolve(struct arpcom *,
|
||||
struct rtentry *, struct mbuf *, struct sockaddr *, u_char *);
|
||||
struct rtentry *, struct mbuf *, struct sockaddr *, u_char *, struct llentry **);
|
||||
void arp_ifinit(struct arpcom *, struct ifaddr *);
|
||||
void arp_rtrequest(int, struct rtentry *, struct sockaddr *);
|
||||
|
||||
@ -233,7 +233,7 @@ struct ether_multistep {
|
||||
#ifdef _KERNEL
|
||||
void arp_rtrequest(int, struct rtentry *, struct sockaddr *);
|
||||
int arpresolve(struct arpcom *, struct rtentry *, struct mbuf *,
|
||||
struct sockaddr *, u_char *);
|
||||
struct sockaddr *, u_char *, struct llentry **);
|
||||
void arpintr(void);
|
||||
int arpioctl(u_long, caddr_t);
|
||||
void arp_ifinit(struct arpcom *, struct ifaddr *);
|
||||
|
@ -19,6 +19,7 @@ kinfo_getfile(pid_t pid, int *cntp)
|
||||
char *buf, *bp, *eb;
|
||||
struct kinfo_file *kif, *kp, *kf;
|
||||
|
||||
*cntp = 0;
|
||||
len = 0;
|
||||
mib[0] = CTL_KERN;
|
||||
mib[1] = KERN_PROC;
|
||||
@ -27,15 +28,15 @@ kinfo_getfile(pid_t pid, int *cntp)
|
||||
|
||||
error = sysctl(mib, 4, NULL, &len, NULL, 0);
|
||||
if (error)
|
||||
return (0);
|
||||
return (NULL);
|
||||
len = len * 4 / 3;
|
||||
buf = malloc(len);
|
||||
if (buf == NULL)
|
||||
return (0);
|
||||
return (NULL);
|
||||
error = sysctl(mib, 4, buf, &len, NULL, 0);
|
||||
if (error) {
|
||||
free(buf);
|
||||
return (0);
|
||||
return (NULL);
|
||||
}
|
||||
/* Pass 1: count items */
|
||||
cnt = 0;
|
||||
@ -50,7 +51,7 @@ kinfo_getfile(pid_t pid, int *cntp)
|
||||
kif = calloc(cnt, sizeof(*kif));
|
||||
if (kif == NULL) {
|
||||
free(buf);
|
||||
return (0);
|
||||
return (NULL);
|
||||
}
|
||||
bp = buf;
|
||||
eb = buf + len;
|
||||
|
@ -19,6 +19,7 @@ kinfo_getvmmap(pid_t pid, int *cntp)
|
||||
char *buf, *bp, *eb;
|
||||
struct kinfo_vmentry *kiv, *kp, *kv;
|
||||
|
||||
*cntp = 0;
|
||||
len = 0;
|
||||
mib[0] = CTL_KERN;
|
||||
mib[1] = KERN_PROC;
|
||||
@ -27,15 +28,15 @@ kinfo_getvmmap(pid_t pid, int *cntp)
|
||||
|
||||
error = sysctl(mib, 4, NULL, &len, NULL, 0);
|
||||
if (error)
|
||||
return (0);
|
||||
return (NULL);
|
||||
len = len * 4 / 3;
|
||||
buf = malloc(len);
|
||||
if (buf == NULL)
|
||||
return (0);
|
||||
return (NULL);
|
||||
error = sysctl(mib, 4, buf, &len, NULL, 0);
|
||||
if (error) {
|
||||
free(buf);
|
||||
return (0);
|
||||
return (NULL);
|
||||
}
|
||||
/* Pass 1: count items */
|
||||
cnt = 0;
|
||||
@ -50,7 +51,7 @@ kinfo_getvmmap(pid_t pid, int *cntp)
|
||||
kiv = calloc(cnt, sizeof(*kiv));
|
||||
if (kiv == NULL) {
|
||||
free(buf);
|
||||
return (0);
|
||||
return (NULL);
|
||||
}
|
||||
bp = buf;
|
||||
eb = buf + len;
|
||||
|
@ -152,7 +152,6 @@ int bsd_arp_set(ia, eaddr, len)
|
||||
sdl = (struct sockaddr_dl *)(sin->sin_len + (char *)sin);
|
||||
if (sin->sin_addr.s_addr == sin_m.sin_addr.s_addr) {
|
||||
if (sdl->sdl_family == AF_LINK &&
|
||||
(rtm->rtm_flags & RTF_LLINFO) &&
|
||||
!(rtm->rtm_flags & RTF_GATEWAY)) switch (sdl->sdl_type) {
|
||||
case IFT_ETHER: case IFT_FDDI: case IFT_ISO88023:
|
||||
case IFT_ISO88024: case IFT_ISO88025:
|
||||
|
@ -90,22 +90,40 @@
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>&intel; 64-bit &xeon; (<quote>Nocona</quote>). This
|
||||
processor is fabricated on 90nm process technology, and
|
||||
operates with 2.80 to 3.60 GHz (FSB 800MHz) and &intel;
|
||||
E7520/E7525/E7320 chipsets.</para>
|
||||
<para>All multi-core &intel; &xeon; processors except
|
||||
Sossaman have EM64T support.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>&intel; &pentium; 4 Processor supporting &intel; EM64T
|
||||
(<quote>Prescott</quote>). This is fabricated on 90nm
|
||||
process technology, uses FC-LGA775 package, and operates
|
||||
with 3.20F/3.40F/3.60F GHz and &intel; 925X Express
|
||||
chipsets. The corresponding S-Spec numbers are SL7L9,
|
||||
SL7L8, SL7LA, SL7NZ, SL7PZ, and SL7PX. Note that
|
||||
processors marked as 5xx numbers do not support
|
||||
EM64T.</para>
|
||||
<para>The single-core &intel; &xeon;
|
||||
processors <quote>Nocona</quote>, <quote>Irwindale</quote>,
|
||||
<quote>Potomac</quote>, and <quote>Cranford</quote> have
|
||||
EM64T support.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>All &intel; Core 2 (not Core Duo) and later
|
||||
processors</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>All &intel; &pentium; D processors</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>&intel; &pentium; 4s and Celeron Ds using
|
||||
the <quote>Cedar Mill</quote> core have EM64T
|
||||
support.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Some &intel; &pentium; 4s and Celeron Ds using
|
||||
the <quote>Prescott</quote> core have EM64T support. See
|
||||
the <ulink url="http://processorfinder.intel.com">Intel
|
||||
Processor Spec Finder</ulink> for the definitive answer about
|
||||
EM64T support in Intel processors.</para>
|
||||
</listitem>
|
||||
|
||||
</itemizedlist>
|
||||
|
||||
<para>&intel; EM64T is an extended version of IA-32 (x86) and
|
||||
@ -114,7 +132,7 @@
|
||||
to &intel; EM64T as <quote>64-bit extension technology</quote>
|
||||
or <quote>IA-32e</quote>.</para>
|
||||
|
||||
<para>The largest tested memory configuration to date is 8GB.
|
||||
<para>The largest tested memory configuration to date is 64GB.
|
||||
SMP support has been recently completed and is reasonably
|
||||
robust.</para>
|
||||
|
||||
@ -760,7 +778,7 @@
|
||||
|
||||
&hwlist.tl;
|
||||
|
||||
<para>[&arch.amd64;, &arch.i386, &arch.pc98;] SMC 83c17x
|
||||
<para>[&arch.amd64;, &arch.i386;, &arch.pc98;] SMC 83c17x
|
||||
(EPIC)-based Ethernet NICs (&man.tx.4; driver)</para>
|
||||
|
||||
&hwlist.txp;
|
||||
@ -784,7 +802,7 @@
|
||||
<sect2 id="fddi">
|
||||
<title>FDDI Interfaces</title>
|
||||
|
||||
<para>[&arch.i386, &arch.pc98;] DEC DEFPA PCI (&man.fpa.4;
|
||||
<para>[&arch.i386;, &arch.pc98;] DEC DEFPA PCI (&man.fpa.4;
|
||||
driver)</para>
|
||||
|
||||
<para>[&arch.i386;] DEC DEFEA EISA (&man.fpa.4; driver)</para>
|
||||
@ -793,17 +811,17 @@
|
||||
<sect2 id="atm">
|
||||
<title>ATM Interfaces</title>
|
||||
|
||||
<para>[&arch.i386, &arch.pc98;] Midway-based ATM interfaces
|
||||
<para>[&arch.i386;, &arch.pc98;] Midway-based ATM interfaces
|
||||
(&man.en.4; driver)</para>
|
||||
|
||||
<para>[&arch.i386, &arch.pc98; &arch.sparc64;] FORE Systems,
|
||||
<para>[&arch.i386;, &arch.pc98; &arch.sparc64;] FORE Systems,
|
||||
Inc. PCA-200E ATM PCI Adapters (hfa and &man.fatm.4;
|
||||
drivers)</para>
|
||||
|
||||
<para>[&arch.i386;, &arch.pc98;] IDT NICStAR 77201/211-based ATM
|
||||
Adapters (&man.idt.4; driver)</para>
|
||||
|
||||
<para>[&arch.i386, &arch.pc98; &arch.sparc64;] FORE Systems,
|
||||
<para>[&arch.i386;, &arch.pc98; &arch.sparc64;] FORE Systems,
|
||||
Inc. HE155 and HE622 ATM interfaces (&man.hatm.4;
|
||||
driver)</para>
|
||||
|
||||
@ -1008,7 +1026,7 @@
|
||||
<sect2 id="serial">
|
||||
<title>Serial Interfaces</title>
|
||||
|
||||
<para>[&arch.amd64; &arch.i386;] <quote>PC standard</quote>
|
||||
<para>[&arch.amd64;, &arch.i386;] <quote>PC standard</quote>
|
||||
8250, 16450, and 16550-based serial ports (&man.sio.4;
|
||||
driver)</para>
|
||||
|
||||
@ -1016,7 +1034,7 @@
|
||||
|
||||
&hwlist.scc;
|
||||
|
||||
<para>[&arch.amd64; &arch.i386;] AST 4 port serial card using
|
||||
<para>[&arch.amd64;, &arch.i386;] AST 4 port serial card using
|
||||
shared IRQ</para>
|
||||
|
||||
<para>[&arch.i386;] ARNET serial cards (&man.ar.4;
|
||||
@ -1068,25 +1086,25 @@
|
||||
<para>[&arch.i386;] DigiBoard intelligent serial cards (digi
|
||||
driver)</para>
|
||||
|
||||
<para>[&arch.amd64;, &arch.i386, &arch.ia64;] PCI-Based
|
||||
<para>[&arch.amd64;, &arch.i386;, &arch.ia64;] PCI-Based
|
||||
multi-port serial boards (&man.puc.4; driver)</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Actiontech 56K PCI</para>
|
||||
<para>[&arch.amd64;, &arch.i386;] Actiontech 56K PCI</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Avlab Technology, PCI IO 2S
|
||||
<para>[&arch.amd64;, &arch.i386;] Avlab Technology, PCI IO 2S
|
||||
and PCI IO 4S</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Comtrol RocketPort 550</para>
|
||||
<para>[&arch.amd64;, &arch.i386;] Comtrol RocketPort 550</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Decision Computers PCCOM
|
||||
<para>[&arch.amd64;, &arch.i386;] Decision Computers PCCOM
|
||||
4-port serial and dual port RS232/422/485</para>
|
||||
</listitem>
|
||||
|
||||
@ -1095,92 +1113,92 @@
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Dolphin Peripherals
|
||||
<para>[&arch.amd64;, &arch.i386;] Dolphin Peripherals
|
||||
4025/4035/4036</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] IC Book Labs Dreadnought
|
||||
<para>[&arch.amd64;, &arch.i386;] IC Book Labs Dreadnought
|
||||
16x Lite and Pro</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Lava Computers
|
||||
<para>[&arch.amd64;, &arch.i386;] Lava Computers
|
||||
2SP-PCI/DSerial-PCI/Quattro-PCI/Octopus-550</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Middle Digital, Weasle
|
||||
<para>[&arch.amd64;, &arch.i386;] Middle Digital, Weasle
|
||||
serial port</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Moxa Industio CP-114,
|
||||
<para>[&arch.amd64;, &arch.i386;] Moxa Industio CP-114,
|
||||
Smartio C104H-PCI and C168H/PCI</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] NEC PK-UG-X001 and
|
||||
<para>[&arch.amd64;, &arch.i386;] NEC PK-UG-X001 and
|
||||
PK-UG-X008</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Netmos NM9835
|
||||
<para>[&arch.amd64;, &arch.i386;] Netmos NM9835
|
||||
PCI-2S-550</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Oxford Semiconductor
|
||||
<para>[&arch.amd64;, &arch.i386;] Oxford Semiconductor
|
||||
OX16PCI954 PCI UART</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Syba Tech SD-LAB
|
||||
<para>[&arch.amd64;, &arch.i386;] Syba Tech SD-LAB
|
||||
PCI-4S2P-550-ECP</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] SIIG Cyber I/O PCI
|
||||
<para>[&arch.amd64;, &arch.i386;] SIIG Cyber I/O PCI
|
||||
16C550/16C650/16C850</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] SIIG Cyber 2P1S PCI
|
||||
<para>[&arch.amd64;, &arch.i386;] SIIG Cyber 2P1S PCI
|
||||
16C550/16C650/16C850</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] SIIG Cyber 2S1P PCI
|
||||
<para>[&arch.amd64;, &arch.i386;] SIIG Cyber 2S1P PCI
|
||||
16C550/16C650/16C850</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] SIIG Cyber 4S PCI
|
||||
<para>[&arch.amd64;, &arch.i386;] SIIG Cyber 4S PCI
|
||||
16C550/16C650/16C850</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] SIIG Cyber Serial (Single
|
||||
<para>[&arch.amd64;, &arch.i386;] SIIG Cyber Serial (Single
|
||||
and Dual) PCI 16C550/16C650/16C850</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Syba Tech
|
||||
<para>[&arch.amd64;, &arch.i386;] Syba Tech
|
||||
Ltd. PCI-4S2P-550-ECP</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] Titan PCI-200H and
|
||||
<para>[&arch.amd64;, &arch.i386;] Titan PCI-200H and
|
||||
PCI-800H</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] US Robotics (3Com) 3CP5609
|
||||
<para>[&arch.amd64;, &arch.i386;] US Robotics (3Com) 3CP5609
|
||||
modem</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[&arch.amd64; &arch.i386;] VScom PCI-400 and
|
||||
<para>[&arch.amd64;, &arch.i386;] VScom PCI-400 and
|
||||
PCI-800</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
@ -1406,7 +1424,7 @@
|
||||
<para>[&arch.amd64;, &arch.i386;, &arch.ia64;, &arch.pc98;]
|
||||
Keyboards (&man.ukbd.4; driver)</para>
|
||||
|
||||
<para>[&arch.amd64;, &arch.i386, &arch.pc98;]
|
||||
<para>[&arch.amd64;, &arch.i386;, &arch.pc98;]
|
||||
Miscellaneous</para>
|
||||
|
||||
<itemizedlist>
|
||||
@ -1507,7 +1525,7 @@
|
||||
<para>[&arch.amd64;, &arch.i386;, &arch.pc98;] Floppy drives
|
||||
(&man.fdc.4; driver)</para>
|
||||
|
||||
<para>[&arch.amd64; &arch.i386;] VGA-compatible video cards
|
||||
<para>[&arch.amd64;, &arch.i386;] VGA-compatible video cards
|
||||
(&man.vga.4; driver)</para>
|
||||
|
||||
<note>
|
||||
|
@ -382,10 +382,6 @@ print_routing(char *proto)
|
||||
rtm = (struct rt_msghdr *)next;
|
||||
sa = (struct sockaddr *)(rtm + 1);
|
||||
get_rtaddrs(rtm->rtm_addrs, sa, rti_info);
|
||||
if (rtm->rtm_flags & RTF_WASCLONED) {
|
||||
if ((rtm->rtm_flags & RTF_LLINFO) == 0)
|
||||
continue;
|
||||
}
|
||||
if ((sa = rti_info[RTAX_DST]) != NULL) {
|
||||
sprintf(fbuf, "%s", sock_ntop(sa, sa->sa_len));
|
||||
if (((sa1 = rti_info[RTAX_NETMASK]) != NULL)
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd June 25, 2008
|
||||
.Dd December 14, 2008
|
||||
.Dt ATACONTROL 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -63,6 +63,7 @@
|
||||
.Nm
|
||||
.Ic mode
|
||||
.Ar device
|
||||
.Op Ar mode
|
||||
.Nm
|
||||
.Ic info
|
||||
.Ar channel
|
||||
@ -94,7 +95,7 @@ The
|
||||
.Ar channel
|
||||
argument is the ATA channel device (e.g., ata0) on which to operate.
|
||||
The following commands are supported:
|
||||
.Bl -tag -width "rebuild"
|
||||
.Bl -tag -width ".Ic addspare"
|
||||
.It Ic attach
|
||||
Attach an ATA
|
||||
.Ar channel .
|
||||
@ -162,9 +163,13 @@ Rebuild a RAID1 array on a RAID capable ATA controller.
|
||||
.It Ic status
|
||||
Get the status of an ATA RAID.
|
||||
.It Ic mode
|
||||
Without the mode argument, the current transfer modes of the
|
||||
Without the
|
||||
.Ar mode
|
||||
argument, the current transfer mode of the
|
||||
device are printed.
|
||||
If the mode argument is given, the ATA driver
|
||||
If the
|
||||
.Ar mode
|
||||
argument is given, the ATA driver
|
||||
is asked to change the transfer mode to the one given.
|
||||
The ATA driver
|
||||
will reject modes that are not supported by the hardware.
|
||||
@ -190,13 +195,12 @@ and
|
||||
.Cm UDMA6
|
||||
(alias
|
||||
.Cm UDMA133 ) .
|
||||
The device name and manufacture/version strings are shown.
|
||||
.It Ic cap
|
||||
Show detailed info about the device on
|
||||
.Ar device .
|
||||
.It Ic spindown
|
||||
Set or report timeout after which the
|
||||
.Ar device
|
||||
.Ar device
|
||||
will be spun down.
|
||||
To arm the timeout the device needs at least one more request after
|
||||
setting the timeout.
|
||||
@ -205,6 +209,7 @@ No further actions are needed in this case.
|
||||
.It Ic info
|
||||
Show info about the attached devices on the
|
||||
.Ar channel .
|
||||
The device name and manufacture/version strings are shown.
|
||||
.It Ic list
|
||||
Show info about all attached devices on all active controllers.
|
||||
.El
|
||||
@ -312,7 +317,7 @@ If the system has a pure software array and is not using a "real" ATA
|
||||
RAID controller, then shut the system down, make sure that the disk
|
||||
that was still working is moved to the bootable position (channel 0
|
||||
or whatever the BIOS allows the system to boot from) and the blank disk
|
||||
is placed in the secondary position, then boot the system into
|
||||
is placed in the secondary position, then boot the system into
|
||||
single-user mode and issue the command:
|
||||
.Pp
|
||||
.Dl "atacontrol addspare ar0 ad6"
|
||||
|
@ -307,7 +307,7 @@ void
|
||||
config::parse_one_file(const char *fn)
|
||||
{
|
||||
if (Dflag)
|
||||
printf("Parsing %s\n", fn);
|
||||
fprintf(stderr, "Parsing %s\n", fn);
|
||||
yyin = fopen(fn, "r");
|
||||
if (yyin == NULL)
|
||||
err(1, "Cannot open config file %s", fn);
|
||||
@ -325,7 +325,7 @@ config::parse_files_in_dir(const char *dirname)
|
||||
char path[PATH_MAX];
|
||||
|
||||
if (Dflag)
|
||||
printf("Parsing files in %s\n", dirname);
|
||||
fprintf(stderr, "Parsing files in %s\n", dirname);
|
||||
dirp = opendir(dirname);
|
||||
if (dirp == NULL)
|
||||
return;
|
||||
|
@ -110,7 +110,7 @@ statement.
|
||||
.It Ic directory Qq Ar /some/path ;
|
||||
Adds the given directory to the list of directories from which
|
||||
.Xr devd 8
|
||||
will read
|
||||
will read all files named "*.conf" as further
|
||||
configuration files.
|
||||
Any number of
|
||||
.Ic directory
|
||||
|
@ -211,7 +211,7 @@ g_metadata_store(const char *name, u_char *md, size_t size)
|
||||
sector = NULL;
|
||||
error = 0;
|
||||
|
||||
fd = open(path, O_WRONLY);
|
||||
fd = open(path, O_RDWR);
|
||||
if (fd == -1)
|
||||
return (errno);
|
||||
mediasize = g_get_mediasize(name);
|
||||
|
@ -425,7 +425,7 @@ setregdomain_cb(int s, void *arg)
|
||||
struct ieee80211_devcaps_req dc;
|
||||
struct regdata *rdp = getregdata();
|
||||
|
||||
if (rd->country != 0) {
|
||||
if (rd->country != NO_COUNTRY) {
|
||||
const struct country *cc;
|
||||
/*
|
||||
* Check current country seting to make sure it's
|
||||
@ -456,7 +456,7 @@ setregdomain_cb(int s, void *arg)
|
||||
errx(1, "country %s (%s) is not usable with "
|
||||
"regdomain %d", cc->isoname, cc->name,
|
||||
rd->regdomain);
|
||||
else if (rp->cc != 0 && rp->cc != cc)
|
||||
else if (rp->cc != NULL && rp->cc != cc)
|
||||
errx(1, "country %s (%s) is not usable with "
|
||||
"regdomain %s", cc->isoname, cc->name,
|
||||
rp->name);
|
||||
@ -663,31 +663,39 @@ getchannelflags(const char *val, int freq)
|
||||
#undef _CHAN_HT
|
||||
}
|
||||
|
||||
static void
|
||||
getchannel(int s, struct ieee80211_channel *chan, const char *val)
|
||||
{
|
||||
int v, flags;
|
||||
char *eptr;
|
||||
|
||||
memset(chan, 0, sizeof(*chan));
|
||||
if (isanyarg(val)) {
|
||||
chan->ic_freq = IEEE80211_CHAN_ANY;
|
||||
return;
|
||||
}
|
||||
getchaninfo(s);
|
||||
errno = 0;
|
||||
v = strtol(val, &eptr, 10);
|
||||
if (val[0] == '\0' || val == eptr || errno == ERANGE ||
|
||||
/* channel may be suffixed with nothing, :flag, or /width */
|
||||
(eptr[0] != '\0' && eptr[0] != ':' && eptr[0] != '/'))
|
||||
errx(1, "invalid channel specification%s",
|
||||
errno == ERANGE ? " (out of range)" : "");
|
||||
flags = getchannelflags(val, v);
|
||||
if (v > 255) { /* treat as frequency */
|
||||
mapfreq(chan, v, flags);
|
||||
} else {
|
||||
mapchan(chan, v, flags);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
set80211channel(const char *val, int d, int s, const struct afswtch *rafp)
|
||||
{
|
||||
struct ieee80211_channel chan;
|
||||
|
||||
memset(&chan, 0, sizeof(chan));
|
||||
if (!isanyarg(val)) {
|
||||
int v, flags;
|
||||
char *ep;
|
||||
|
||||
getchaninfo(s);
|
||||
v = strtol(val, &ep, 10);
|
||||
if (val[0] == '\0' || val == ep || errno == ERANGE ||
|
||||
/* channel may be suffixed with nothing, :flag, or /width */
|
||||
(ep[0] != '\0' && ep[0] != ':' && ep[0] != '/'))
|
||||
errx(1, "invalid channel specification");
|
||||
flags = getchannelflags(val, v);
|
||||
if (v > 255) { /* treat as frequency */
|
||||
mapfreq(&chan, v, flags);
|
||||
} else {
|
||||
mapchan(&chan, v, flags);
|
||||
}
|
||||
} else {
|
||||
chan.ic_freq = IEEE80211_CHAN_ANY;
|
||||
}
|
||||
getchannel(s, &chan, val);
|
||||
set80211(s, IEEE80211_IOC_CURCHAN, 0, sizeof(chan), &chan);
|
||||
}
|
||||
|
||||
@ -695,17 +703,8 @@ static void
|
||||
set80211chanswitch(const char *val, int d, int s, const struct afswtch *rafp)
|
||||
{
|
||||
struct ieee80211_chanswitch_req csr;
|
||||
int v, flags;
|
||||
|
||||
memset(&csr, 0, sizeof(csr));
|
||||
getchaninfo(s);
|
||||
v = atoi(val);
|
||||
flags = getchannelflags(val, v);
|
||||
if (v > 255) { /* treat as frequency */
|
||||
mapfreq(&csr.csa_chan, v, flags);
|
||||
} else {
|
||||
mapchan(&csr.csa_chan, v, flags);
|
||||
}
|
||||
getchannel(s, &csr.csa_chan, val);
|
||||
csr.csa_mode = 1;
|
||||
csr.csa_count = 5;
|
||||
set80211(s, IEEE80211_IOC_CHANSWITCH, 0, sizeof(csr), &csr);
|
||||
@ -1770,14 +1769,21 @@ regdomain_addchans(struct ieee80211req_chaninfo *ci,
|
||||
printf("%u: skip, flags 0x%x not available\n", freq, chanFlags);
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
* NB: don't enforce 1/2 and 1/4 rate channels being
|
||||
* specified in the device's calibration list for
|
||||
* 900MHz cards because most are not self-identifying.
|
||||
*/
|
||||
if ((flags & IEEE80211_CHAN_HALF) &&
|
||||
(chanFlags & IEEE80211_CHAN_HALF) == 0) {
|
||||
((chanFlags & IEEE80211_CHAN_HALF) == 0 &&
|
||||
(flags & IEEE80211_CHAN_GSM) == 0)) {
|
||||
if (verbose)
|
||||
printf("%u: skip, device does not support half-rate channels\n", freq);
|
||||
continue;
|
||||
}
|
||||
if ((flags & IEEE80211_CHAN_QUARTER) &&
|
||||
(chanFlags & IEEE80211_CHAN_QUARTER) == 0) {
|
||||
((chanFlags & IEEE80211_CHAN_HALF) == 0 &&
|
||||
(flags & IEEE80211_CHAN_GSM) == 0)) {
|
||||
if (verbose)
|
||||
printf("%u: skip, device does not support quarter-rate channels\n", freq);
|
||||
continue;
|
||||
@ -1951,8 +1957,12 @@ DECL_CMD_FUNC(set80211regdomain, val, d)
|
||||
|
||||
rd = lib80211_regdomain_findbyname(rdp, val);
|
||||
if (rd == NULL) {
|
||||
rd = lib80211_regdomain_findbysku(rdp, atoi(val));
|
||||
if (rd == NULL)
|
||||
char *eptr;
|
||||
long sku = strtol(val, &eptr, 0);
|
||||
|
||||
if (eptr != val)
|
||||
rd = lib80211_regdomain_findbysku(rdp, sku);
|
||||
if (eptr == val || rd == NULL)
|
||||
errx(1, "unknown regdomain %s", val);
|
||||
}
|
||||
getregdomain(s);
|
||||
@ -1975,8 +1985,12 @@ DECL_CMD_FUNC(set80211country, val, d)
|
||||
|
||||
cc = lib80211_country_findbyname(rdp, val);
|
||||
if (cc == NULL) {
|
||||
cc = lib80211_country_findbycc(rdp, atoi(val));
|
||||
if (cc == NULL)
|
||||
char *eptr;
|
||||
long code = strtol(val, &eptr, 0);
|
||||
|
||||
if (eptr != val)
|
||||
cc = lib80211_country_findbycc(rdp, code);
|
||||
if (eptr == val || cc == NULL)
|
||||
errx(1, "unknown ISO country code %s", val);
|
||||
}
|
||||
getregdomain(s);
|
||||
@ -3534,8 +3548,12 @@ get80211opmode(int s)
|
||||
(void) strncpy(ifmr.ifm_name, name, sizeof(ifmr.ifm_name));
|
||||
|
||||
if (ioctl(s, SIOCGIFMEDIA, (caddr_t)&ifmr) >= 0) {
|
||||
if (ifmr.ifm_current & IFM_IEEE80211_ADHOC)
|
||||
return IEEE80211_M_IBSS; /* XXX ahdemo */
|
||||
if (ifmr.ifm_current & IFM_IEEE80211_ADHOC) {
|
||||
if (ifmr.ifm_current & IFM_FLAG0)
|
||||
return IEEE80211_M_AHDEMO;
|
||||
else
|
||||
return IEEE80211_M_IBSS;
|
||||
}
|
||||
if (ifmr.ifm_current & IFM_IEEE80211_HOSTAP)
|
||||
return IEEE80211_M_HOSTAP;
|
||||
if (ifmr.ifm_current & IFM_IEEE80211_MONITOR)
|
||||
@ -4244,6 +4262,7 @@ ieee80211_status(int s)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (get80211val(s, IEEE80211_IOC_BEACON_INTERVAL, &val) != -1) {
|
||||
/* XXX default define not visible */
|
||||
if (val != 100 || verbose)
|
||||
|
@ -48,6 +48,7 @@ static const char rcsid[] = "$FreeBSD$";
|
||||
#define MAXLEVEL 20
|
||||
|
||||
struct mystate {
|
||||
XML_Parser parser;
|
||||
struct regdata *rdp;
|
||||
struct regdomain *rd; /* current domain */
|
||||
struct netband *netband; /* current netband */
|
||||
@ -107,7 +108,8 @@ start_element(void *data, const char *name, const char **attr)
|
||||
}
|
||||
if (iseq(name, "netband") && mt->curband == NULL && mt->rd != NULL) {
|
||||
if (mode == NULL) {
|
||||
/* XXX complain */
|
||||
warnx("no mode for netband at line %ld",
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
return;
|
||||
}
|
||||
if (iseq(mode, "11b"))
|
||||
@ -120,12 +122,16 @@ start_element(void *data, const char *name, const char **attr)
|
||||
mt->curband = &mt->rd->bands_11ng;
|
||||
else if (iseq(mode, "11na"))
|
||||
mt->curband = &mt->rd->bands_11na;
|
||||
/* XXX else complain */
|
||||
else
|
||||
warnx("unknown mode \"%s\" at line %ld",
|
||||
__DECONST(char *, mode),
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
return;
|
||||
}
|
||||
if (iseq(name, "band") && mt->netband == NULL) {
|
||||
if (mt->curband == NULL) {
|
||||
/* XXX complain */
|
||||
warnx("band without enclosing netband at line %ld",
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
return;
|
||||
}
|
||||
mt->netband = calloc(1, sizeof(struct netband));
|
||||
@ -135,6 +141,8 @@ start_element(void *data, const char *name, const char **attr)
|
||||
if (iseq(name, "freqband") && mt->freqband == NULL && mt->netband != NULL) {
|
||||
/* XXX handle inlines and merge into table? */
|
||||
if (mt->netband->band != NULL) {
|
||||
warnx("duplicate freqband at line %ld ignored",
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
/* XXX complain */
|
||||
} else
|
||||
mt->netband->band = (void *)strdup(ref);
|
||||
@ -144,6 +152,7 @@ start_element(void *data, const char *name, const char **attr)
|
||||
if (iseq(name, "country") && mt->country == NULL) {
|
||||
mt->country = calloc(1, sizeof(struct country));
|
||||
mt->country->isoname = strdup(id);
|
||||
mt->country->code = NO_COUNTRY;
|
||||
mt->nident++;
|
||||
LIST_INSERT_HEAD(&mt->rdp->countries, mt->country, next);
|
||||
return;
|
||||
@ -159,8 +168,8 @@ start_element(void *data, const char *name, const char **attr)
|
||||
#undef iseq
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
decode_flag(const char *p, int len)
|
||||
static int
|
||||
decode_flag(struct mystate *mt, const char *p, int len)
|
||||
{
|
||||
#define iseq(a,b) (strcasecmp(a,b) == 0)
|
||||
static const struct {
|
||||
@ -168,7 +177,7 @@ decode_flag(const char *p, int len)
|
||||
int len;
|
||||
uint32_t value;
|
||||
} flags[] = {
|
||||
#define FLAG(x) { #x, sizeof(#x), x }
|
||||
#define FLAG(x) { #x, sizeof(#x)-1, x }
|
||||
FLAG(IEEE80211_CHAN_A),
|
||||
FLAG(IEEE80211_CHAN_B),
|
||||
FLAG(IEEE80211_CHAN_G),
|
||||
@ -205,6 +214,8 @@ decode_flag(const char *p, int len)
|
||||
for (i = 0; i < sizeof(flags)/sizeof(flags[0]); i++)
|
||||
if (len == flags[i].len && iseq(p, flags[i].name))
|
||||
return flags[i].value;
|
||||
warnx("unknown flag \"%.*s\" at line %ld ignored",
|
||||
len, p, XML_GetCurrentLineNumber(mt->parser));
|
||||
return 0;
|
||||
#undef iseq
|
||||
}
|
||||
@ -241,11 +252,12 @@ end_element(void *data, const char *name)
|
||||
}
|
||||
if (iseq(name, "flags")) {
|
||||
if (mt->freqband != NULL)
|
||||
mt->freqband->flags |= decode_flag(p, len);
|
||||
mt->freqband->flags |= decode_flag(mt, p, len);
|
||||
else if (mt->netband != NULL)
|
||||
mt->netband->flags |= decode_flag(p, len);
|
||||
mt->netband->flags |= decode_flag(mt, p, len);
|
||||
else {
|
||||
/* XXX complain */
|
||||
warnx("flags without freqband or netband at line %ld ignored",
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
@ -289,7 +301,8 @@ end_element(void *data, const char *name)
|
||||
}
|
||||
|
||||
if (len != 0) {
|
||||
printf("Unexpected XML: name \"%s\" data \"%s\"\n", name, p);
|
||||
warnx("unexpected XML token \"%s\" data \"%s\" at line %ld",
|
||||
name, p, XML_GetCurrentLineNumber(mt->parser));
|
||||
/* XXX goto done? */
|
||||
}
|
||||
/* </freqband> */
|
||||
@ -307,15 +320,12 @@ end_element(void *data, const char *name)
|
||||
/* </band> */
|
||||
if (iseq(name, "band") && mt->netband != NULL) {
|
||||
if (mt->netband->band == NULL) {
|
||||
printf("No frequency band information at line %d\n",
|
||||
#if 0
|
||||
XML_GetCurrentLineNumber(parser));
|
||||
#else
|
||||
0);
|
||||
#endif
|
||||
warnx("no freqbands for band at line %ld",
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
}
|
||||
if (mt->netband->maxPower == 0) {
|
||||
/* XXX complain */
|
||||
warnx("no maxpower for band at line %ld",
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
}
|
||||
/* default max power w/ DFS to max power */
|
||||
if (mt->netband->maxPowerDFS == 0)
|
||||
@ -330,14 +340,17 @@ end_element(void *data, const char *name)
|
||||
}
|
||||
/* </country> */
|
||||
if (iseq(name, "country") && mt->country != NULL) {
|
||||
if (mt->country->code == 0) {
|
||||
/* XXX must have iso cc */
|
||||
if (mt->country->code == NO_COUNTRY) {
|
||||
warnx("no ISO cc for country at line %ld",
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
}
|
||||
if (mt->country->name == NULL) {
|
||||
/* XXX must have name */
|
||||
warnx("no name for country at line %ld",
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
}
|
||||
if (mt->country->rd == NULL) {
|
||||
/* XXX? rd ref? */
|
||||
warnx("no regdomain reference for country at line %ld",
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
}
|
||||
mt->country = NULL;
|
||||
goto done;
|
||||
@ -383,7 +396,6 @@ findid(struct regdata *rdp, const void *id, int type)
|
||||
int
|
||||
lib80211_regdomain_readconfig(struct regdata *rdp, const void *p, size_t len)
|
||||
{
|
||||
XML_Parser parser;
|
||||
struct mystate *mt;
|
||||
struct regdomain *dp;
|
||||
struct country *cp;
|
||||
@ -398,17 +410,17 @@ lib80211_regdomain_readconfig(struct regdata *rdp, const void *p, size_t len)
|
||||
return ENOMEM;
|
||||
/* parse the XML input */
|
||||
mt->rdp = rdp;
|
||||
parser = XML_ParserCreate(NULL);
|
||||
XML_SetUserData(parser, mt);
|
||||
XML_SetElementHandler(parser, start_element, end_element);
|
||||
XML_SetCharacterDataHandler(parser, char_data);
|
||||
if (XML_Parse(parser, p, len, 1) != XML_STATUS_OK) {
|
||||
mt->parser = XML_ParserCreate(NULL);
|
||||
XML_SetUserData(mt->parser, mt);
|
||||
XML_SetElementHandler(mt->parser, start_element, end_element);
|
||||
XML_SetCharacterDataHandler(mt->parser, char_data);
|
||||
if (XML_Parse(mt->parser, p, len, 1) != XML_STATUS_OK) {
|
||||
warnx("%s: %s at line %ld", __func__,
|
||||
XML_ErrorString(XML_GetErrorCode(parser)),
|
||||
XML_GetCurrentLineNumber(parser));
|
||||
XML_ErrorString(XML_GetErrorCode(mt->parser)),
|
||||
XML_GetCurrentLineNumber(mt->parser));
|
||||
return -1;
|
||||
}
|
||||
XML_ParserFree(parser);
|
||||
XML_ParserFree(mt->parser);
|
||||
|
||||
/* setup the identifer table */
|
||||
rdp->ident = calloc(sizeof(struct ident), mt->nident + 1);
|
||||
|
@ -73,6 +73,7 @@ struct regdomain {
|
||||
|
||||
struct country {
|
||||
enum ISOCountryCode code;
|
||||
#define NO_COUNTRY 0xffff
|
||||
const struct regdomain *rd;
|
||||
const char* isoname;
|
||||
const char* name;
|
||||
|
@ -69,6 +69,7 @@
|
||||
.Op Ar number ...
|
||||
.Pp
|
||||
.Nm
|
||||
.Op Fl q
|
||||
.Cm nat
|
||||
.Ar number
|
||||
.Cm config
|
||||
@ -235,6 +236,7 @@ Try to resolve addresses and service names in output.
|
||||
.It Fl q
|
||||
While
|
||||
.Cm add Ns ing ,
|
||||
.Cm nat Ns ing ,
|
||||
.Cm zero Ns ing ,
|
||||
.Cm resetlog Ns ging
|
||||
or
|
||||
|
@ -4067,10 +4067,12 @@ config_nat(int ac, char **av)
|
||||
if (i)
|
||||
err(1, "setsockopt(%s)", "IP_FW_NAT_CFG");
|
||||
|
||||
/* After every modification, we show the resultant rule. */
|
||||
int _ac = 3;
|
||||
char *_av[] = {"show", "config", id};
|
||||
show_nat(_ac, _av);
|
||||
if (!do_quiet) {
|
||||
/* After every modification, we show the resultant rule. */
|
||||
int _ac = 3;
|
||||
char *_av[] = {"show", "config", id};
|
||||
show_nat(_ac, _av);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -68,6 +68,8 @@ static const char rcsid[] =
|
||||
#define MOUNT_META_OPTION_FSTAB "fstab"
|
||||
#define MOUNT_META_OPTION_CURRENT "current"
|
||||
|
||||
#define MAX_ARGS 100
|
||||
|
||||
int debug, fstab_style, verbose;
|
||||
|
||||
char *catopt(char *, const char *);
|
||||
@ -501,7 +503,7 @@ int
|
||||
mountfs(const char *vfstype, const char *spec, const char *name, int flags,
|
||||
const char *options, const char *mntopts)
|
||||
{
|
||||
char *argv[100];
|
||||
char *argv[MAX_ARGS];
|
||||
struct statfs sf;
|
||||
int argc, i, ret;
|
||||
char *optbuf, execname[PATH_MAX], mntpath[PATH_MAX];
|
||||
@ -546,6 +548,10 @@ mountfs(const char *vfstype, const char *spec, const char *name, int flags,
|
||||
argv[argc++] = strdup(name);
|
||||
argv[argc] = NULL;
|
||||
|
||||
if (MAX_ARGS <= argc )
|
||||
errx(1, "Cannot process more than %d mount arguments",
|
||||
MAX_ARGS);
|
||||
|
||||
if (debug) {
|
||||
if (use_mountprog(vfstype))
|
||||
printf("exec: mount_%s", vfstype);
|
||||
|
@ -88,7 +88,7 @@ mount_fs(const char *vfstype, int argc, char *argv[])
|
||||
char *p, *val;
|
||||
int ret;
|
||||
|
||||
strncpy(fstype, vfstype, sizeof(fstype));
|
||||
strlcpy(fstype, vfstype, sizeof(fstype));
|
||||
memset(errmsg, 0, sizeof(errmsg));
|
||||
|
||||
getmnt_silent = 1;
|
||||
|
@ -605,9 +605,6 @@ newroute(argc, argv)
|
||||
case K_NOSTATIC:
|
||||
flags &= ~RTF_STATIC;
|
||||
break;
|
||||
case K_LLINFO:
|
||||
flags |= RTF_LLINFO;
|
||||
break;
|
||||
case K_LOCK:
|
||||
locking = 1;
|
||||
break;
|
||||
@ -632,9 +629,6 @@ newroute(argc, argv)
|
||||
case K_PROXY:
|
||||
proxy = 1;
|
||||
break;
|
||||
case K_CLONING:
|
||||
flags |= RTF_CLONING;
|
||||
break;
|
||||
case K_XRESOLVE:
|
||||
flags |= RTF_XRESOLVE;
|
||||
break;
|
||||
|
@ -1103,12 +1103,13 @@ flush_kern(void)
|
||||
|| INFO_DST(&info)->sa_family != AF_INET)
|
||||
continue;
|
||||
|
||||
#if defined (RTF_LLINFO)
|
||||
/* ignore ARP table entries on systems with a merged route
|
||||
* and ARP table.
|
||||
*/
|
||||
if (rtm->rtm_flags & RTF_LLINFO)
|
||||
continue;
|
||||
|
||||
#endif
|
||||
#if defined(RTF_WASCLONED) && defined(__FreeBSD__)
|
||||
/* ignore cloned routes
|
||||
*/
|
||||
@ -1261,11 +1262,13 @@ read_rt(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
#if defined(RTF_LLINFO)
|
||||
if (m.r.rtm.rtm_flags & RTF_LLINFO) {
|
||||
trace_act("ignore ARP %s", str);
|
||||
continue;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(RTF_WASCLONED) && defined(__FreeBSD__)
|
||||
if (m.r.rtm.rtm_flags & RTF_WASCLONED) {
|
||||
trace_act("ignore cloned %s", str);
|
||||
|
@ -473,6 +473,7 @@ MLINKS+=edsc.4 if_edsc.4
|
||||
MLINKS+=ef.4 if_ef.4
|
||||
MLINKS+=em.4 if_em.4
|
||||
MLINKS+=en.4 if_en.4
|
||||
MLINKS+=enc.4 if_enc.4
|
||||
MLINKS+=et.4 if_et.4
|
||||
MLINKS+=faith.4 if_faith.4
|
||||
MLINKS+=fatm.4 if_fatm.4
|
||||
|
@ -56,8 +56,8 @@ The driver uses ACPI as the backend to fetch sensor values and
|
||||
descriptions and provides its data via the
|
||||
.Xr sysctl 8
|
||||
interface, under dev.acpi_aiboost.0 namespace.
|
||||
Descriptions for these values are set to sysctl description,
|
||||
which can be see with sysctl -d.
|
||||
Descriptions for these values are available
|
||||
with sysctl -d.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd August 20, 2008
|
||||
.Dd December 17, 2008
|
||||
.Dt ACPI_ASUS 4 i386
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -56,7 +56,8 @@ interface to manipulate the brightness of the LCD panel and the display output
|
||||
state.
|
||||
Hotkey events are passed to
|
||||
.Xr devd 8
|
||||
for easy handling in userspace.
|
||||
for easy handling in userspace with the default configuration in
|
||||
.Pa /etc/devd/asus.conf .
|
||||
.Pp
|
||||
Currently, the following Asus laptops are fully supported:
|
||||
.Pp
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd January 7, 2007
|
||||
.Dd December 15, 2008
|
||||
.Dt FXP 4
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -51,6 +51,13 @@ The
|
||||
.Nm
|
||||
driver provides support for Ethernet adapters based on the Intel
|
||||
i82557, i82558, i82559, i82550, and i82562 chips.
|
||||
The driver supports TCP/UDP/IP checksum offload for both transmit
|
||||
and receive on i82550 and i82551.
|
||||
On i82559 only TCP/UDP checksum offload for receive is supported.
|
||||
TCP segmentation offload (TSO) for IPv4 as well as VLAN hardware
|
||||
tag insertion/stripping is supported on i82550 and i82551.
|
||||
Wake On Lan (WOL) support is provided on all controllers
|
||||
except i82557, i82259ER and early i82558 revisions.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
|
@ -196,7 +196,7 @@ Messages include:
|
||||
#define RTM_REDIRECT 0x6 /* Told to use different route */
|
||||
#define RTM_MISS 0x7 /* Lookup failed on this address */
|
||||
#define RTM_LOCK 0x8 /* fix specified metrics */
|
||||
#define RTM_RESOLVE 0xb /* request to resolve dst to LL addr */
|
||||
#define RTM_RESOLVE 0xb /* request to resolve dst to LL addr - unused */
|
||||
#define RTM_NEWADDR 0xc /* address being added to iface */
|
||||
#define RTM_DELADDR 0xd /* address being removed from iface */
|
||||
#define RTM_IFINFO 0xe /* iface going up/down etc. */
|
||||
@ -308,7 +308,7 @@ Specifiers for which addresses are present in the messages are:
|
||||
#define RTA_DST 0x1 /* destination sockaddr present */
|
||||
#define RTA_GATEWAY 0x2 /* gateway sockaddr present */
|
||||
#define RTA_NETMASK 0x4 /* netmask sockaddr present */
|
||||
#define RTA_GENMASK 0x8 /* cloning mask sockaddr present */
|
||||
#define RTA_GENMASK 0x8 /* cloning mask sockaddr present - unused */
|
||||
#define RTA_IFP 0x10 /* interface name sockaddr present */
|
||||
#define RTA_IFA 0x20 /* interface addr sockaddr present */
|
||||
#define RTA_AUTHOR 0x40 /* sockaddr for author of redirect */
|
||||
|
@ -53,7 +53,9 @@ This call either reads or writes data from a file, depending on the value of
|
||||
.Pp
|
||||
The call may block.
|
||||
.Sh RETURN VALUES
|
||||
Zero is returned on success, otherwise an error is returned.
|
||||
Always zero.
|
||||
Errors should be signalled by setting BIO_ERROR on b_ioflags field in struct buf,
|
||||
and setting b_error to the appropriate errno value.
|
||||
.Sh SEE ALSO
|
||||
.\" .Xr buf 9 ,
|
||||
.Xr vnode 9
|
||||
|
@ -27,7 +27,8 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.Dd October 11, 2004
|
||||
.\"
|
||||
.Dd December 11, 2008
|
||||
.Os
|
||||
.Dt RTALLOC 9
|
||||
.Sh NAME
|
||||
@ -64,21 +65,6 @@ certain protocol\- and interface-specific actions to take place.
|
||||
.\" XXX - -mdoc should contain a standard request for getting em and
|
||||
.\" en dashes.
|
||||
.Pp
|
||||
When a route with the flag
|
||||
.Dv RTF_CLONING
|
||||
is retrieved, and the action of this flag is not masked, the
|
||||
.Nm
|
||||
facility automatically generates a new route using information in the
|
||||
old route as a template, and
|
||||
sends an
|
||||
.Dv RTM_RESOLVE
|
||||
message to the appropriate interface-address route-management routine
|
||||
.Pq Fn ifa->ifa_rtrequest .
|
||||
This generated route is called
|
||||
.Em cloned ,
|
||||
and has
|
||||
.Dv RTF_WASCLONED
|
||||
flag set.
|
||||
.Dv RTF_PRCLONING
|
||||
flag is obsolete and thus ignored by facility.
|
||||
If the
|
||||
@ -123,22 +109,19 @@ field.
|
||||
.Pp
|
||||
The
|
||||
.Fn rtalloc_ign
|
||||
interface can be used when the default actions of
|
||||
.Fn rtalloc
|
||||
in the presence of the
|
||||
.Dv RTF_CLONING
|
||||
flag is undesired.
|
||||
interface can be used when the caller does not want to receive
|
||||
the returned
|
||||
.Fa rtentry
|
||||
locked.
|
||||
The
|
||||
.Fa ro
|
||||
argument is the same as
|
||||
.Fn rtalloc ,
|
||||
but there is additionally a
|
||||
.Fa flags
|
||||
argument, which lists the flags in the route which are to be
|
||||
.Em ignored
|
||||
(in most cases this is
|
||||
.Dv RTF_CLONING
|
||||
flag).
|
||||
argument, which is now only used to pass
|
||||
.Dv RTF_RNH_LOCKED
|
||||
indicating that the radix tree lock is already held.
|
||||
Both
|
||||
.Fn rtalloc
|
||||
and
|
||||
@ -163,16 +146,7 @@ directly as the
|
||||
argument.
|
||||
The second argument,
|
||||
.Fa report ,
|
||||
controls whether
|
||||
.Dv RTM_RESOLVE
|
||||
requests are sent to the lower layers when an
|
||||
.Dv RTF_CLONING
|
||||
or
|
||||
.Dv RTF_PRCLONING
|
||||
route is cloned.
|
||||
Ordinarily a value of one should be passed, except
|
||||
in the processing of those lower layers which use the cloning
|
||||
facility.
|
||||
controls whether the lower layers are notified when a lookup fails.
|
||||
The third argument,
|
||||
.Fa flags ,
|
||||
is a set of flags to ignore, as in
|
||||
|
@ -28,7 +28,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd October 7, 2004
|
||||
.Dd December 11, 2008
|
||||
.Os
|
||||
.Dt RTENTRY 9
|
||||
.Sh NAME
|
||||
@ -76,8 +76,11 @@ right (some protocols will put a link-layer address here), or some
|
||||
intermediate stop on the way to that destination (if the
|
||||
.Dv RTF_GATEWAY
|
||||
flag is set).
|
||||
.It Vt "u_long rt_flags" ;
|
||||
.It Vt "int rt_flags" ;
|
||||
See below.
|
||||
.It Vt "int rt_refcnt" ;
|
||||
Route entries are reference-counted; this field indicates the number
|
||||
of external (to the radix tree) references.
|
||||
.It Vt "struct ifnet *rt_ifp" ;
|
||||
.It Vt "struct ifaddr *rt_ifa" ;
|
||||
These two fields represent the
|
||||
@ -88,48 +91,18 @@ packet to the destination or set of destinations which this route
|
||||
represents.
|
||||
.It Vt "struct rt_metrics_lite rt_rmx" ;
|
||||
See below.
|
||||
.It Vt "long rt_refcnt" ;
|
||||
Route entries are reference-counted; this field indicates the number
|
||||
of external (to the radix tree) references.
|
||||
If the
|
||||
.Dv RTF_UP
|
||||
flag is not present, the
|
||||
.Fn rtfree
|
||||
function will delete the route from the radix tree when the last
|
||||
reference drops.
|
||||
.It Vt "struct sockaddr *rt_genmask" ;
|
||||
When the
|
||||
.Fn rtalloc
|
||||
family of functions performs a cloning operation as requested by the
|
||||
.Dv RTF_CLONING
|
||||
flag, this field is used as the mask for the new route which is
|
||||
inserted into the table.
|
||||
If this field is a null pointer, then a host
|
||||
route is generated.
|
||||
.It Vt "caddr_t rt_llinfo" ;
|
||||
When the
|
||||
.Dv RTF_LLINFO
|
||||
flag is set, this field contains information specific to the link
|
||||
layer represented by the named interface address.
|
||||
(It is normally managed by the
|
||||
.Va rt_ifa->ifa_rtrequest
|
||||
routine.)
|
||||
Protocols such as
|
||||
.Xr arp 4
|
||||
use this field to reference per-destination state internal to that
|
||||
protocol.
|
||||
.It Vt "struct rtentry *rt_gwroute" ;
|
||||
This member is a reference to a route whose destination is
|
||||
.Va rt_gateway .
|
||||
It is only used for
|
||||
.Dv RTF_GATEWAY
|
||||
routes.
|
||||
.It Vt "struct rtentry *rt_parent" ;
|
||||
A reference to the route from which this route was cloned, or a null
|
||||
pointer if this route was not generated by cloning.
|
||||
See also the
|
||||
.Dv RTF_WASCLONED
|
||||
flag.
|
||||
.It Vt "struct mtx rt_mtx" ;
|
||||
Mutex to lock this routing entry.
|
||||
.El
|
||||
@ -162,23 +135,12 @@ This route was modified by
|
||||
Used only in the
|
||||
.Xr route 4
|
||||
protocol, indicating that the request was executed.
|
||||
.It Dv RTF_CLONING
|
||||
When this route is returned as a result of a lookup, automatically
|
||||
create a new route using this one as a template and
|
||||
.Va rt_genmask
|
||||
(if present) as a mask.
|
||||
.It Dv RTF_XRESOLVE
|
||||
When this route is returned as a result of a lookup, send a report on
|
||||
the
|
||||
.Xr route 4
|
||||
interface requesting that an external process perform resolution for
|
||||
this route.
|
||||
(Used in conjunction with
|
||||
.Dv RTF_CLONING . )
|
||||
.It Dv RTF_LLINFO
|
||||
Indicates that this route represents information being managed by a
|
||||
link layer's adaptation layer (e.g.,
|
||||
.Tn ARP ) .
|
||||
.It Dv RTF_STATIC
|
||||
Indicates that this route was manually added by means of the
|
||||
.Xr route 8
|
||||
@ -191,14 +153,6 @@ Requests that output sent via this route be discarded.
|
||||
Protocol-specific.
|
||||
.It Dv RTF_PRCLONING
|
||||
This flag is obsolete and simply ignored by facility.
|
||||
.It Dv RTF_WASCLONED
|
||||
Indicates that this route was generated as a result of cloning
|
||||
requested by the
|
||||
.Dv RTF_CLONING
|
||||
flag.
|
||||
When set, the
|
||||
.Va rt_parent
|
||||
field indicates the route from which this one was generated.
|
||||
.It Dv RTF_PINNED
|
||||
(Reserved for future use to indicate routes which are not to be
|
||||
modified by a routing protocol.)
|
||||
@ -296,8 +250,3 @@ The
|
||||
and
|
||||
.Va rmx_filler
|
||||
fields could be named better.
|
||||
.Pp
|
||||
There is some disagreement over whether it is legitimate for
|
||||
.Dv RTF_LLINFO
|
||||
to be set by any process other than
|
||||
.Va rt_ifa->ifa_rtrequest .
|
||||
|
@ -26,7 +26,7 @@
|
||||
.\" From: @(#)style 1.14 (Berkeley) 4/28/95
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd February 10, 2005
|
||||
.Dd December 17, 2008
|
||||
.Dt STYLE 9
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -602,11 +602,9 @@ Do YOU understand the following?
|
||||
k = !(l & FLAGS);
|
||||
.Ed
|
||||
.Pp
|
||||
Exits should be 0 on success, or according to the predefined
|
||||
values in
|
||||
.Xr sysexits 3 .
|
||||
Exits should be 0 on success, or 1 on failure.
|
||||
.Bd -literal
|
||||
exit(EX_OK); /*
|
||||
exit(0); /*
|
||||
* Avoid obvious comments such as
|
||||
* "Exit 0 on success."
|
||||
*/
|
||||
@ -806,7 +804,7 @@ placed in a single set of brackets.
|
||||
.Ed
|
||||
.Bd -literal
|
||||
(void)fprintf(stderr, "usage: f [-ab]\en");
|
||||
exit(EX_USAGE);
|
||||
exit(1);
|
||||
}
|
||||
.Ed
|
||||
.Pp
|
||||
@ -840,7 +838,6 @@ and produce minimal warnings.
|
||||
.Xr indent 1 ,
|
||||
.Xr lint 1 ,
|
||||
.Xr err 3 ,
|
||||
.Xr sysexits 3 ,
|
||||
.Xr warn 3 ,
|
||||
.Xr style.Makefile 5
|
||||
.Sh HISTORY
|
||||
|
@ -459,9 +459,9 @@ nmi_calltrap:
|
||||
*/
|
||||
movq %rsp,%rsi /* source stack pointer */
|
||||
movq $TF_SIZE,%rcx
|
||||
movq PCPU(RSP0),%rbx
|
||||
subq %rcx,%rbx
|
||||
movq %rbx,%rdi /* destination stack pointer */
|
||||
movq PCPU(RSP0),%rdx
|
||||
subq %rcx,%rdx
|
||||
movq %rdx,%rdi /* destination stack pointer */
|
||||
|
||||
shrq $3,%rcx /* trap frame size in long words */
|
||||
cld
|
||||
@ -470,7 +470,7 @@ nmi_calltrap:
|
||||
|
||||
movl %ss,%eax
|
||||
pushq %rax /* tf_ss */
|
||||
pushq %rbx /* tf_rsp (on kernel stack) */
|
||||
pushq %rdx /* tf_rsp (on kernel stack) */
|
||||
pushfq /* tf_rflags */
|
||||
movl %cs,%eax
|
||||
pushq %rax /* tf_cs */
|
||||
@ -480,16 +480,20 @@ outofnmi:
|
||||
/*
|
||||
* At this point the processor has exited NMI mode and is running
|
||||
* with interrupts turned off on the normal kernel stack.
|
||||
* We turn interrupts back on, and take the usual 'doreti' exit
|
||||
* path.
|
||||
*
|
||||
* If a pending NMI gets recognized at or after this point, it
|
||||
* will cause a kernel callchain to be traced. Since this path
|
||||
* is only taken for NMI interrupts from user space, our `swapgs'
|
||||
* state is correct for taking the doreti path.
|
||||
* will cause a kernel callchain to be traced.
|
||||
*
|
||||
* We turn interrupts back on, and call the user callchain capture hook.
|
||||
*/
|
||||
movq pmc_hook,%rax
|
||||
orq %rax,%rax
|
||||
jz nocallchain
|
||||
movq PCPU(CURTHREAD),%rdi /* thread */
|
||||
movq $PMC_FN_USER_CALLCHAIN,%rsi /* command */
|
||||
movq %rsp,%rdx /* frame */
|
||||
sti
|
||||
jmp doreti
|
||||
call *%rax
|
||||
nocallchain:
|
||||
#endif
|
||||
testl %ebx,%ebx
|
||||
|
@ -322,15 +322,15 @@ printcpuinfo(void)
|
||||
"\003SVM" /* Secure Virtual Mode */
|
||||
"\004ExtAPIC" /* Extended APIC register */
|
||||
"\005CR8" /* CR8 in legacy mode */
|
||||
"\006<b5>"
|
||||
"\007<b6>"
|
||||
"\010<b7>"
|
||||
"\006ABM" /* LZCNT instruction */
|
||||
"\007SSE4A" /* SSE4A */
|
||||
"\010MAS" /* Misaligned SSE mode */
|
||||
"\011Prefetch" /* 3DNow! Prefetch/PrefetchW */
|
||||
"\012<b9>"
|
||||
"\013<b10>"
|
||||
"\014<b11>"
|
||||
"\015<b12>"
|
||||
"\016<b13>"
|
||||
"\012OSVW" /* OS visible workaround */
|
||||
"\013IBS" /* Instruction based sampling */
|
||||
"\014SSE5" /* SSE5 */
|
||||
"\015SKINIT" /* SKINIT/STGI */
|
||||
"\016WDT" /* Watchdog timer */
|
||||
"\017<b14>"
|
||||
"\020<b15>"
|
||||
"\021<b16>"
|
||||
|
@ -16,5 +16,5 @@ device io # I/O device
|
||||
device uart_ns8250
|
||||
|
||||
# Default partitioning schemes
|
||||
options GEOM_BSD
|
||||
options GEOM_MBR
|
||||
options GEOM_PART_BSD
|
||||
options GEOM_PART_MBR
|
||||
|
@ -81,18 +81,6 @@ __ElfType(Auxinfo);
|
||||
#define AT_BASE 7 /* Interpreter's base address. */
|
||||
#define AT_FLAGS 8 /* Flags (unused for i386). */
|
||||
#define AT_ENTRY 9 /* Where interpreter should transfer control. */
|
||||
|
||||
/*
|
||||
* The following non-standard values are used for passing information
|
||||
* from John Polstra's testbed program to the dynamic linker. These
|
||||
* are expected to go away soon.
|
||||
*
|
||||
* Unfortunately, these overlap the Linux non-standard values, so they
|
||||
* must not be used in the same context.
|
||||
*/
|
||||
#define AT_BRK 10 /* Starting point for sbrk and brk. */
|
||||
#define AT_DEBUG 11 /* Debugging level. */
|
||||
|
||||
/*
|
||||
* The following non-standard values are used in Linux ELF binaries.
|
||||
*/
|
||||
|
@ -150,7 +150,15 @@
|
||||
#define AMDID2_SVM 0x00000004
|
||||
#define AMDID2_EXT_APIC 0x00000008
|
||||
#define AMDID2_CR8 0x00000010
|
||||
#define AMDID2_ABM 0x00000020
|
||||
#define AMDID2_SSE4A 0x00000040
|
||||
#define AMDID2_MAS 0x00000080
|
||||
#define AMDID2_PREFETCH 0x00000100
|
||||
#define AMDID2_OSVW 0x00000200
|
||||
#define AMDID2_IBS 0x00000400
|
||||
#define AMDID2_SSE5 0x00000800
|
||||
#define AMDID2_SKINIT 0x00001000
|
||||
#define AMDID2_WDT 0x00002000
|
||||
|
||||
/*
|
||||
* CPUID instruction 1 eax info
|
||||
|
@ -254,8 +254,6 @@ elf_linux_fixup(register_t **stack_base, struct image_params *imgp)
|
||||
args = (Elf32_Auxargs *)imgp->auxargs;
|
||||
pos = base + (imgp->args->argc + imgp->args->envc + 2);
|
||||
|
||||
if (args->trace)
|
||||
AUXARGS_ENTRY_32(pos, AT_DEBUG, 1);
|
||||
if (args->execfd != -1)
|
||||
AUXARGS_ENTRY_32(pos, AT_EXECFD, args->execfd);
|
||||
AUXARGS_ENTRY_32(pos, AT_PHDR, args->phdr);
|
||||
|
@ -7,5 +7,5 @@ machine arm
|
||||
|
||||
device mem
|
||||
|
||||
options GEOM_BSD
|
||||
options GEOM_MBR
|
||||
options GEOM_PART_BSD
|
||||
options GEOM_PART_MBR
|
||||
|
@ -57,7 +57,6 @@ options SYSVSEM #SYSV-style semaphores
|
||||
options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions
|
||||
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
|
||||
options GEOM_PART_GPT # GUID Partition Tables.
|
||||
options GEOM_MBR # DOS/MBR partitioning
|
||||
options GEOM_LABEL # Providers labelization.
|
||||
|
||||
options BOOTP
|
||||
|
@ -70,10 +70,6 @@ __ElfType(Auxinfo);
|
||||
#define AT_BASE 7 /* Interpreter's base address. */
|
||||
#define AT_FLAGS 8 /* Flags (unused). */
|
||||
#define AT_ENTRY 9 /* Where interpreter should transfer control. */
|
||||
|
||||
#define AT_BRK 10 /* Starting point for sbrk and brk. */
|
||||
#define AT_DEBUG 11 /* Debugging level. */
|
||||
|
||||
#define AT_NOTELF 10 /* Program is not ELF ?? */
|
||||
#define AT_UID 11 /* Real uid. */
|
||||
#define AT_EUID 12 /* Effective uid. */
|
||||
|
@ -12,7 +12,7 @@ SUBDIR+= ficl
|
||||
.endif
|
||||
|
||||
# Build EFI library.
|
||||
.if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "ia64"
|
||||
.if ${MACHINE_ARCH} == "amd64" || ${MACHINE} == "i386" || ${MACHINE_ARCH} == "ia64"
|
||||
SUBDIR+= efi
|
||||
.endif
|
||||
|
||||
|
@ -60,7 +60,7 @@ gptzfsboot.bin: gptzfsboot.out
|
||||
objcopy -S -O binary gptzfsboot.out ${.TARGET}
|
||||
|
||||
gptzfsboot.out: ${BTXCRT} zfsboot.o sio.o
|
||||
${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC}
|
||||
${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC} ${LIBSTAND}
|
||||
|
||||
zfsboot.o: ${.CURDIR}/../../zfs/zfsimpl.c
|
||||
|
||||
|
@ -80,7 +80,7 @@ zfsboot.bin: zfsboot.out
|
||||
objcopy -S -O binary zfsboot.out ${.TARGET}
|
||||
|
||||
zfsboot.out: ${BTXCRT} zfsboot.o sio.o
|
||||
${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC}
|
||||
${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC} ${LIBSTAND}
|
||||
|
||||
zfsboot.o: zfsboot.s
|
||||
|
||||
|
@ -94,8 +94,8 @@ struct netif_driver *netif_drivers[] = {
|
||||
*/
|
||||
|
||||
struct file_format *file_formats[] = {
|
||||
&uboot_elf,
|
||||
NULL
|
||||
&uboot_elf,
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
@ -104,6 +104,6 @@ struct file_format *file_formats[] = {
|
||||
extern struct console uboot_console;
|
||||
|
||||
struct console *consoles[] = {
|
||||
&uboot_console,
|
||||
NULL
|
||||
&uboot_console,
|
||||
NULL
|
||||
};
|
||||
|
@ -216,6 +216,7 @@ COMMAND_SET(reboot, "reboot", "reboot the system", command_reboot);
|
||||
static int
|
||||
command_reboot(int argc, char *argv[])
|
||||
{
|
||||
|
||||
printf("Resetting...\n");
|
||||
ub_reset();
|
||||
|
||||
|
@ -35,7 +35,8 @@ __FBSDID("$FreeBSD$");
|
||||
#include "bootstrap.h"
|
||||
#include "libuboot.h"
|
||||
|
||||
static int uboot_parsedev(struct uboot_devdesc **dev, const char *devspec, const char **path);
|
||||
static int uboot_parsedev(struct uboot_devdesc **dev, const char *devspec,
|
||||
const char **path);
|
||||
|
||||
/*
|
||||
* Point (dev) at an allocated device specifier for the device matching the
|
||||
@ -178,11 +179,11 @@ uboot_parsedev(struct uboot_devdesc **dev, const char *devspec,
|
||||
} else {
|
||||
*dev = idev;
|
||||
}
|
||||
return(0);
|
||||
return (0);
|
||||
|
||||
fail:
|
||||
free(idev);
|
||||
return(err);
|
||||
return (err);
|
||||
}
|
||||
|
||||
|
||||
@ -191,7 +192,7 @@ uboot_fmtdev(void *vdev)
|
||||
{
|
||||
struct uboot_devdesc *dev = (struct uboot_devdesc *)vdev;
|
||||
char *cp;
|
||||
static char buf[128]; /* XXX device length constant? */
|
||||
static char buf[128];
|
||||
|
||||
switch(dev->d_type) {
|
||||
case DEVT_NONE:
|
||||
@ -220,12 +221,12 @@ uboot_fmtdev(void *vdev)
|
||||
int
|
||||
uboot_setcurrdev(struct env_var *ev, int flags, const void *value)
|
||||
{
|
||||
struct uboot_devdesc *ncurr;
|
||||
int rv;
|
||||
struct uboot_devdesc *ncurr;
|
||||
int rv;
|
||||
|
||||
if ((rv = uboot_parsedev(&ncurr, value, NULL)) != 0)
|
||||
return(rv);
|
||||
return (rv);
|
||||
free(ncurr);
|
||||
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
@ -873,17 +873,12 @@ dnode_read(spa_t *spa, const dnode_phys_t *dnode, off_t offset, void *buf, size_
|
||||
int i, rc;
|
||||
|
||||
/*
|
||||
* We truncate the offset to 32bits, mainly so that I don't
|
||||
* have to find a copy of __divdi3 to put into the bootstrap.
|
||||
* I don't think the bootstrap needs to access anything bigger
|
||||
* than 2G anyway. Note that block addresses are still 64bit
|
||||
* so it doesn't affect the possible size of the media.
|
||||
* We still use 64bit block numbers so that the bitshifts
|
||||
* work correctly. Note: bsize may not be a power of two here.
|
||||
* Note: bsize may not be a power of two here so we need to do an
|
||||
* actual divide rather than a bitshift.
|
||||
*/
|
||||
while (buflen > 0) {
|
||||
uint64_t bn = ((int) offset) / bsize;
|
||||
int boff = ((int) offset) % bsize;
|
||||
uint64_t bn = offset / bsize;
|
||||
int boff = offset % bsize;
|
||||
int ibn;
|
||||
const blkptr_t *indbp;
|
||||
blkptr_t bp;
|
||||
|
@ -290,7 +290,7 @@ cam_periph_acquire(struct cam_periph *periph)
|
||||
}
|
||||
|
||||
void
|
||||
cam_periph_release(struct cam_periph *periph)
|
||||
cam_periph_release_locked(struct cam_periph *periph)
|
||||
{
|
||||
|
||||
if (periph == NULL)
|
||||
@ -302,7 +302,21 @@ cam_periph_release(struct cam_periph *periph)
|
||||
camperiphfree(periph);
|
||||
}
|
||||
xpt_unlock_buses();
|
||||
}
|
||||
|
||||
void
|
||||
cam_periph_release(struct cam_periph *periph)
|
||||
{
|
||||
struct cam_sim *sim;
|
||||
|
||||
if (periph == NULL)
|
||||
return;
|
||||
|
||||
sim = periph->sim;
|
||||
mtx_assert(sim->mtx, MA_NOTOWNED);
|
||||
mtx_lock(sim->mtx);
|
||||
cam_periph_release_locked(periph);
|
||||
mtx_unlock(sim->mtx);
|
||||
}
|
||||
|
||||
int
|
||||
@ -311,8 +325,6 @@ cam_periph_hold(struct cam_periph *periph, int priority)
|
||||
struct mtx *mtx;
|
||||
int error;
|
||||
|
||||
mtx_assert(periph->sim->mtx, MA_OWNED);
|
||||
|
||||
/*
|
||||
* Increment the reference count on the peripheral
|
||||
* while we wait for our lock attempt to succeed
|
||||
@ -324,13 +336,14 @@ cam_periph_hold(struct cam_periph *periph, int priority)
|
||||
return (ENXIO);
|
||||
|
||||
mtx = periph->sim->mtx;
|
||||
mtx_assert(mtx, MA_OWNED);
|
||||
if (mtx == &Giant)
|
||||
mtx = NULL;
|
||||
|
||||
while ((periph->flags & CAM_PERIPH_LOCKED) != 0) {
|
||||
periph->flags |= CAM_PERIPH_LOCK_WANTED;
|
||||
if ((error = msleep(periph, mtx, priority, "caplck", 0)) != 0) {
|
||||
cam_periph_release(periph);
|
||||
cam_periph_release_locked(periph);
|
||||
return (error);
|
||||
}
|
||||
}
|
||||
@ -351,7 +364,7 @@ cam_periph_unhold(struct cam_periph *periph)
|
||||
wakeup(periph);
|
||||
}
|
||||
|
||||
cam_periph_release(periph);
|
||||
cam_periph_release_locked(periph);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -141,6 +141,7 @@ cam_status cam_periph_alloc(periph_ctor_t *periph_ctor,
|
||||
struct cam_periph *cam_periph_find(struct cam_path *path, char *name);
|
||||
cam_status cam_periph_acquire(struct cam_periph *periph);
|
||||
void cam_periph_release(struct cam_periph *periph);
|
||||
void cam_periph_release_locked(struct cam_periph *periph);
|
||||
int cam_periph_hold(struct cam_periph *periph, int priority);
|
||||
void cam_periph_unhold(struct cam_periph *periph);
|
||||
void cam_periph_invalidate(struct cam_periph *periph);
|
||||
|
@ -84,6 +84,7 @@ cam_sim_alloc(sim_action_func sim_action, sim_poll_func sim_poll,
|
||||
sim->max_tagged_dev_openings = max_tagged_dev_transactions;
|
||||
sim->max_dev_openings = max_dev_transactions;
|
||||
sim->flags = 0;
|
||||
sim->refcount = 1;
|
||||
sim->devq = queue;
|
||||
sim->mtx = mtx;
|
||||
if (mtx == &Giant) {
|
||||
@ -103,11 +104,41 @@ cam_sim_alloc(sim_action_func sim_action, sim_poll_func sim_poll,
|
||||
void
|
||||
cam_sim_free(struct cam_sim *sim, int free_devq)
|
||||
{
|
||||
int error;
|
||||
|
||||
sim->refcount--;
|
||||
if (sim->refcount > 0) {
|
||||
error = msleep(sim, sim->mtx, PRIBIO, "simfree", 0);
|
||||
KASSERT(error == 0, ("invalid error value for msleep(9)"));
|
||||
}
|
||||
|
||||
KASSERT(sim->refcount == 0, ("sim->refcount == 0"));
|
||||
|
||||
if (free_devq)
|
||||
cam_simq_free(sim->devq);
|
||||
free(sim, M_CAMSIM);
|
||||
}
|
||||
|
||||
void
|
||||
cam_sim_release(struct cam_sim *sim)
|
||||
{
|
||||
KASSERT(sim->refcount >= 1, ("sim->refcount >= 1"));
|
||||
mtx_assert(sim->mtx, MA_OWNED);
|
||||
|
||||
sim->refcount--;
|
||||
if (sim->refcount == 0)
|
||||
wakeup(sim);
|
||||
}
|
||||
|
||||
void
|
||||
cam_sim_hold(struct cam_sim *sim)
|
||||
{
|
||||
KASSERT(sim->refcount >= 1, ("sim->refcount >= 1"));
|
||||
mtx_assert(sim->mtx, MA_OWNED);
|
||||
|
||||
sim->refcount++;
|
||||
}
|
||||
|
||||
void
|
||||
cam_sim_set_path(struct cam_sim *sim, u_int32_t path_id)
|
||||
{
|
||||
|
@ -61,6 +61,8 @@ struct cam_sim * cam_sim_alloc(sim_action_func sim_action,
|
||||
int max_tagged_dev_transactions,
|
||||
struct cam_devq *queue);
|
||||
void cam_sim_free(struct cam_sim *sim, int free_devq);
|
||||
void cam_sim_hold(struct cam_sim *sim);
|
||||
void cam_sim_release(struct cam_sim *sim);
|
||||
|
||||
/* Optional sim attributes may be set with these. */
|
||||
void cam_sim_set_path(struct cam_sim *sim, u_int32_t path_id);
|
||||
@ -105,6 +107,7 @@ struct cam_sim {
|
||||
#define CAM_SIM_ON_DONEQ 0x04
|
||||
struct callout callout;
|
||||
struct cam_devq *devq; /* Device Queue to use for this SIM */
|
||||
int refcount; /* References to the SIM. */
|
||||
|
||||
/* "Pool" of inactive ccbs managed by xpt_alloc_ccb and xpt_free_ccb */
|
||||
SLIST_HEAD(,ccb_hdr) ccb_freeq;
|
||||
|
@ -698,19 +698,6 @@ static struct cdevsw xpt_cdevsw = {
|
||||
};
|
||||
|
||||
|
||||
static void dead_sim_action(struct cam_sim *sim, union ccb *ccb);
|
||||
static void dead_sim_poll(struct cam_sim *sim);
|
||||
|
||||
/* Dummy SIM that is used when the real one has gone. */
|
||||
static struct cam_sim cam_dead_sim = {
|
||||
.sim_action = dead_sim_action,
|
||||
.sim_poll = dead_sim_poll,
|
||||
.sim_name = "dead_sim",
|
||||
};
|
||||
|
||||
#define SIM_DEAD(sim) ((sim) == &cam_dead_sim)
|
||||
|
||||
|
||||
/* Storage for debugging datastructures */
|
||||
#ifdef CAMDEBUG
|
||||
struct cam_path *cam_dpath;
|
||||
@ -3023,19 +3010,10 @@ xpt_action(union ccb *start_ccb)
|
||||
case XPT_ENG_EXEC:
|
||||
{
|
||||
struct cam_path *path;
|
||||
struct cam_sim *sim;
|
||||
int runq;
|
||||
|
||||
path = start_ccb->ccb_h.path;
|
||||
|
||||
sim = path->bus->sim;
|
||||
if (SIM_DEAD(sim)) {
|
||||
/* The SIM has gone; just execute the CCB directly. */
|
||||
cam_ccbq_send_ccb(&path->device->ccbq, start_ccb);
|
||||
(*(sim->sim_action))(sim, start_ccb);
|
||||
break;
|
||||
}
|
||||
|
||||
cam_ccbq_insert_ccb(&path->device->ccbq, start_ccb);
|
||||
if (path->device->qfrozen_cnt == 0)
|
||||
runq = xpt_schedule_dev_sendq(path->bus, path->device);
|
||||
@ -3623,7 +3601,6 @@ void
|
||||
xpt_schedule(struct cam_periph *perph, u_int32_t new_priority)
|
||||
{
|
||||
struct cam_ed *device;
|
||||
union ccb *work_ccb;
|
||||
int runq;
|
||||
|
||||
mtx_assert(perph->sim->mtx, MA_OWNED);
|
||||
@ -3640,15 +3617,6 @@ xpt_schedule(struct cam_periph *perph, u_int32_t new_priority)
|
||||
new_priority);
|
||||
}
|
||||
runq = 0;
|
||||
} else if (SIM_DEAD(perph->path->bus->sim)) {
|
||||
/* The SIM is gone so just call periph_start directly. */
|
||||
work_ccb = xpt_get_ccb(perph->path->device);
|
||||
if (work_ccb == NULL)
|
||||
return; /* XXX */
|
||||
xpt_setup_ccb(&work_ccb->ccb_h, perph->path, new_priority);
|
||||
perph->pinfo.priority = new_priority;
|
||||
perph->periph_start(perph, work_ccb);
|
||||
return;
|
||||
} else {
|
||||
/* New entry on the queue */
|
||||
CAM_DEBUG(perph->path, CAM_DEBUG_SUBTRACE,
|
||||
@ -4336,6 +4304,7 @@ xpt_bus_register(struct cam_sim *sim, device_t parent, u_int32_t bus)
|
||||
|
||||
TAILQ_INIT(&new_bus->et_entries);
|
||||
new_bus->path_id = sim->path_id;
|
||||
cam_sim_hold(sim);
|
||||
new_bus->sim = sim;
|
||||
timevalclear(&new_bus->last_reset);
|
||||
new_bus->flags = 0;
|
||||
@ -4372,15 +4341,8 @@ int32_t
|
||||
xpt_bus_deregister(path_id_t pathid)
|
||||
{
|
||||
struct cam_path bus_path;
|
||||
struct cam_ed *device;
|
||||
struct cam_ed_qinfo *qinfo;
|
||||
struct cam_devq *devq;
|
||||
struct cam_periph *periph;
|
||||
struct cam_sim *ccbsim;
|
||||
union ccb *work_ccb;
|
||||
cam_status status;
|
||||
|
||||
|
||||
status = xpt_compile_path(&bus_path, NULL, pathid,
|
||||
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD);
|
||||
if (status != CAM_REQ_CMP)
|
||||
@ -4389,42 +4351,6 @@ xpt_bus_deregister(path_id_t pathid)
|
||||
xpt_async(AC_LOST_DEVICE, &bus_path, NULL);
|
||||
xpt_async(AC_PATH_DEREGISTERED, &bus_path, NULL);
|
||||
|
||||
/* The SIM may be gone, so use a dummy SIM for any stray operations. */
|
||||
devq = bus_path.bus->sim->devq;
|
||||
ccbsim = bus_path.bus->sim;
|
||||
bus_path.bus->sim = &cam_dead_sim;
|
||||
|
||||
/* Execute any pending operations now. */
|
||||
while ((qinfo = (struct cam_ed_qinfo *)camq_remove(&devq->send_queue,
|
||||
CAMQ_HEAD)) != NULL ||
|
||||
(qinfo = (struct cam_ed_qinfo *)camq_remove(&devq->alloc_queue,
|
||||
CAMQ_HEAD)) != NULL) {
|
||||
do {
|
||||
device = qinfo->device;
|
||||
work_ccb = cam_ccbq_peek_ccb(&device->ccbq, CAMQ_HEAD);
|
||||
if (work_ccb != NULL) {
|
||||
devq->active_dev = device;
|
||||
cam_ccbq_remove_ccb(&device->ccbq, work_ccb);
|
||||
cam_ccbq_send_ccb(&device->ccbq, work_ccb);
|
||||
(*(ccbsim->sim_action))(ccbsim, work_ccb);
|
||||
}
|
||||
|
||||
periph = (struct cam_periph *)camq_remove(&device->drvq,
|
||||
CAMQ_HEAD);
|
||||
if (periph != NULL)
|
||||
xpt_schedule(periph, periph->pinfo.priority);
|
||||
} while (work_ccb != NULL || periph != NULL);
|
||||
}
|
||||
|
||||
/* Make sure all completed CCBs are processed. */
|
||||
while (!TAILQ_EMPTY(&ccbsim->sim_doneq)) {
|
||||
camisr_runqueue(&ccbsim->sim_doneq);
|
||||
|
||||
/* Repeat the async's for the benefit of any new devices. */
|
||||
xpt_async(AC_LOST_DEVICE, &bus_path, NULL);
|
||||
xpt_async(AC_PATH_DEREGISTERED, &bus_path, NULL);
|
||||
}
|
||||
|
||||
/* Release the reference count held while registered. */
|
||||
xpt_release_bus(bus_path.bus);
|
||||
xpt_release_path(&bus_path);
|
||||
@ -4921,6 +4847,7 @@ xpt_release_bus(struct cam_eb *bus)
|
||||
TAILQ_REMOVE(&xsoftc.xpt_busses, bus, links);
|
||||
xsoftc.bus_generation++;
|
||||
mtx_unlock(&xsoftc.xpt_topo_lock);
|
||||
cam_sim_release(bus->sim);
|
||||
free(bus, M_CAMXPT);
|
||||
}
|
||||
}
|
||||
@ -4982,9 +4909,6 @@ xpt_alloc_device(struct cam_eb *bus, struct cam_et *target, lun_id_t lun_id)
|
||||
struct cam_devq *devq;
|
||||
cam_status status;
|
||||
|
||||
if (SIM_DEAD(bus->sim))
|
||||
return (NULL);
|
||||
|
||||
/* Make space for us in the device queue on our bus */
|
||||
devq = bus->sim->devq;
|
||||
status = cam_devq_resize(devq, devq->alloc_queue.array_size + 1);
|
||||
@ -5094,11 +5018,9 @@ xpt_release_device(struct cam_eb *bus, struct cam_et *target,
|
||||
TAILQ_REMOVE(&target->ed_entries, device,links);
|
||||
target->generation++;
|
||||
bus->sim->max_ccbs -= device->ccbq.devq_openings;
|
||||
if (!SIM_DEAD(bus->sim)) {
|
||||
/* Release our slot in the devq */
|
||||
devq = bus->sim->devq;
|
||||
cam_devq_resize(devq, devq->alloc_queue.array_size - 1);
|
||||
}
|
||||
/* Release our slot in the devq */
|
||||
devq = bus->sim->devq;
|
||||
cam_devq_resize(devq, devq->alloc_queue.array_size - 1);
|
||||
camq_fini(&device->drvq);
|
||||
camq_fini(&device->ccbq.queue);
|
||||
free(device, M_CAMXPT);
|
||||
@ -6392,7 +6314,7 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
|
||||
xpt_done(done_ccb);
|
||||
if (TAILQ_FIRST(&softc->request_ccbs) == NULL) {
|
||||
cam_periph_invalidate(periph);
|
||||
cam_periph_release(periph);
|
||||
cam_periph_release_locked(periph);
|
||||
} else {
|
||||
probeschedule(periph);
|
||||
}
|
||||
@ -7269,11 +7191,8 @@ camisr_runqueue(void *V_queue)
|
||||
dev = ccb_h->path->device;
|
||||
|
||||
cam_ccbq_ccb_done(&dev->ccbq, (union ccb *)ccb_h);
|
||||
|
||||
if (!SIM_DEAD(ccb_h->path->bus->sim)) {
|
||||
ccb_h->path->bus->sim->devq->send_active--;
|
||||
ccb_h->path->bus->sim->devq->send_openings++;
|
||||
}
|
||||
ccb_h->path->bus->sim->devq->send_active--;
|
||||
ccb_h->path->bus->sim->devq->send_openings++;
|
||||
|
||||
if (((dev->flags & CAM_DEV_REL_ON_COMPLETE) != 0
|
||||
&& (ccb_h->status&CAM_STATUS_MASK) != CAM_REQUEUE_REQ)
|
||||
@ -7317,15 +7236,3 @@ camisr_runqueue(void *V_queue)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dead_sim_action(struct cam_sim *sim, union ccb *ccb)
|
||||
{
|
||||
|
||||
ccb->ccb_h.status = CAM_DEV_NOT_THERE;
|
||||
xpt_done(ccb);
|
||||
}
|
||||
|
||||
static void
|
||||
dead_sim_poll(struct cam_sim *sim)
|
||||
{
|
||||
}
|
||||
|
@ -772,8 +772,8 @@ daclose(struct disk *dp)
|
||||
|
||||
softc->flags &= ~DA_FLAG_OPEN;
|
||||
cam_periph_unhold(periph);
|
||||
cam_periph_release(periph);
|
||||
cam_periph_unlock(periph);
|
||||
cam_periph_release(periph);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -218,8 +218,6 @@ svr4_fixup(register_t **stack_base, struct image_params *imgp)
|
||||
args = (Elf32_Auxargs *)imgp->auxargs;
|
||||
pos = *stack_base + (imgp->args->argc + imgp->args->envc + 2);
|
||||
|
||||
if (args->trace)
|
||||
AUXARGS_ENTRY(pos, AT_DEBUG, 1);
|
||||
if (args->execfd != -1)
|
||||
AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd);
|
||||
AUXARGS_ENTRY(pos, AT_PHDR, args->phdr);
|
||||
|
@ -1958,7 +1958,7 @@ device fatm #Fore PCA200E
|
||||
device hatm #Fore/Marconi HE155/622
|
||||
device patm #IDT77252 cards (ProATM and IDT)
|
||||
device utopia #ATM PHY driver
|
||||
options NATM #native ATM
|
||||
#options NATM #native ATM
|
||||
|
||||
options LIBMBPOOL #needed by patm, iatm
|
||||
|
||||
|
@ -2173,6 +2173,7 @@ net/if_gre.c optional gre
|
||||
net/if_iso88025subr.c optional token
|
||||
net/if_lagg.c optional lagg
|
||||
net/if_loop.c optional loop
|
||||
net/if_llatbl.c standard
|
||||
net/if_media.c standard
|
||||
net/if_mib.c standard
|
||||
net/if_ppp.c optional ppp
|
||||
|
@ -30,9 +30,11 @@ dev/kbd/kbd.c optional sc
|
||||
dev/ofw/openfirm.c optional aim
|
||||
dev/ofw/openfirmio.c optional aim
|
||||
dev/ofw/ofw_bus_if.m optional aim
|
||||
dev/ofw/ofw_if.m optional aim
|
||||
dev/ofw/ofw_bus_subr.c optional aim
|
||||
dev/ofw/ofw_console.c optional aim
|
||||
dev/ofw/ofw_disk.c optional ofwd aim
|
||||
dev/ofw/ofw_standard.c optional aim
|
||||
dev/powermac_nvram/powermac_nvram.c optional powermac_nvram powermac
|
||||
dev/quicc/quicc_bfe_ocp.c optional quicc mpc85xx
|
||||
dev/scc/scc_bfe_macio.c optional scc powermac
|
||||
|
@ -42,8 +42,10 @@ dev/kbd/kbd.c optional atkbd | sc | ukbd
|
||||
dev/le/if_le_lebuffer.c optional le sbus
|
||||
dev/le/if_le_ledma.c optional le sbus
|
||||
dev/le/lebuffer_sbus.c optional le sbus
|
||||
dev/ofw/ofw_if.m standard
|
||||
dev/ofw/ofw_bus_if.m standard
|
||||
dev/ofw/ofw_bus_subr.c standard
|
||||
dev/ofw/ofw_standard.c standard
|
||||
dev/ofw/ofw_console.c optional ofw_console
|
||||
dev/ofw/openfirm.c standard
|
||||
dev/ofw/openfirmio.c standard
|
||||
@ -111,7 +113,6 @@ sparc64/sparc64/mp_exception.S optional smp \
|
||||
sparc64/sparc64/mp_locore.S optional smp
|
||||
sparc64/sparc64/mp_machdep.c optional smp
|
||||
sparc64/sparc64/nexus.c standard
|
||||
sparc64/sparc64/ofw_bus.c standard
|
||||
sparc64/sparc64/ofw_machdep.c standard
|
||||
sparc64/sparc64/pmap.c standard
|
||||
sparc64/sparc64/prof_machdep.c optional profiling-routine
|
||||
|
@ -21,8 +21,10 @@ ukbdmap.h optional ukbd_dflt_keymap \
|
||||
crypto/blowfish/bf_enc.c optional crypto | ipsec
|
||||
crypto/des/des_enc.c optional crypto | ipsec | netsmb
|
||||
dev/ofw/ofw_bus_if.m standard
|
||||
dev/ofw/ofw_if.m standard
|
||||
dev/ofw/ofw_bus_subr.c standard
|
||||
dev/ofw/ofw_console.c optional ofw_console
|
||||
dev/ofw/ofw_standard.c standard
|
||||
dev/ofw/openfirm.c standard
|
||||
dev/ofw/openfirmio.c standard
|
||||
dev/ofw/openpromio.c standard
|
||||
@ -65,7 +67,6 @@ sun4v/sun4v/mp_locore.S optional smp
|
||||
sun4v/sun4v/mp_machdep.c optional smp
|
||||
sun4v/sun4v/nexus.c standard
|
||||
sun4v/cddl/t1_copy.S standard
|
||||
sparc64/sparc64/ofw_bus.c standard
|
||||
sparc64/sparc64/ofw_machdep.c standard
|
||||
sun4v/sun4v/pmap.c standard
|
||||
sparc64/sparc64/prof_machdep.c optional profiling-routine
|
||||
|
@ -3162,7 +3162,7 @@ pf_calc_mss(struct pf_addr *addr, sa_family_t af, u_int16_t offer)
|
||||
#ifdef RTF_PRCLONING
|
||||
rtalloc_ign(&ro, (RTF_CLONING | RTF_PRCLONING));
|
||||
#else /* !RTF_PRCLONING */
|
||||
in_rtalloc_ign(&ro, RTF_CLONING, 0);
|
||||
in_rtalloc_ign(&ro, 0, 0);
|
||||
#endif
|
||||
#else /* ! __FreeBSD__ */
|
||||
rtalloc_noclone(&ro, NO_CLONING);
|
||||
@ -3183,7 +3183,7 @@ pf_calc_mss(struct pf_addr *addr, sa_family_t af, u_int16_t offer)
|
||||
rtalloc_ign((struct route *)&ro6,
|
||||
(RTF_CLONING | RTF_PRCLONING));
|
||||
#else /* !RTF_PRCLONING */
|
||||
rtalloc_ign((struct route *)&ro6, RTF_CLONING);
|
||||
rtalloc_ign((struct route *)&ro6, 0);
|
||||
#endif
|
||||
#else /* ! __FreeBSD__ */
|
||||
rtalloc_noclone((struct route *)&ro6, NO_CLONING);
|
||||
@ -5986,9 +5986,9 @@ pf_routable(struct pf_addr *addr, sa_family_t af, struct pfi_kif *kif)
|
||||
#ifdef __FreeBSD__
|
||||
/* XXX MRT not always INET */ /* stick with table 0 though */
|
||||
if (af == AF_INET)
|
||||
in_rtalloc_ign((struct route *)&ro, RTF_CLONING, 0);
|
||||
in_rtalloc_ign((struct route *)&ro, 0, 0);
|
||||
else
|
||||
rtalloc_ign((struct route *)&ro, RTF_CLONING);
|
||||
rtalloc_ign((struct route *)&ro, 0);
|
||||
#else /* ! __FreeBSD__ */
|
||||
rtalloc_noclone((struct route *)&ro, NO_CLONING);
|
||||
#endif
|
||||
@ -6068,9 +6068,9 @@ pf_rtlabel_match(struct pf_addr *addr, sa_family_t af, struct pf_addr_wrap *aw)
|
||||
rtalloc_ign((struct route *)&ro, (RTF_CLONING|RTF_PRCLONING));
|
||||
# else /* !RTF_PRCLONING */
|
||||
if (af == AF_INET)
|
||||
in_rtalloc_ign((struct route *)&ro, RTF_CLONING, 0);
|
||||
in_rtalloc_ign((struct route *)&ro, 0, 0);
|
||||
else
|
||||
rtalloc_ign((struct route *)&ro, RTF_CLONING);
|
||||
rtalloc_ign((struct route *)&ro, 0);
|
||||
# endif
|
||||
#else /* ! __FreeBSD__ */
|
||||
rtalloc_noclone((struct route *)&ro, NO_CLONING);
|
||||
|
@ -115,8 +115,10 @@ void pfi_change_group_event(void * __unused, char *);
|
||||
void pfi_detach_group_event(void * __unused, struct ifg_group *);
|
||||
void pfi_ifaddr_event(void * __unused, struct ifnet *);
|
||||
|
||||
#ifdef VIMAGE_GLOBALS
|
||||
extern struct ifgrouphead ifg_head;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
RB_PROTOTYPE(pfi_ifhead, pfi_kif, pfik_tree, pfi_if_compare);
|
||||
RB_GENERATE(pfi_ifhead, pfi_kif, pfik_tree, pfi_if_compare);
|
||||
|
@ -116,22 +116,22 @@ __FBSDID("$FreeBSD$");
|
||||
#define ISN_STATIC_INCREMENT 4096
|
||||
#define ISN_RANDOM_INCREMENT (4096 - 1)
|
||||
|
||||
static u_char isn_secret[32];
|
||||
static int isn_last_reseed;
|
||||
static u_int32_t isn_offset;
|
||||
static MD5_CTX isn_ctx;
|
||||
static u_char pf_isn_secret[32];
|
||||
static int pf_isn_last_reseed;
|
||||
static u_int32_t pf_isn_offset;
|
||||
|
||||
u_int32_t
|
||||
pf_new_isn(struct pf_state *s)
|
||||
{
|
||||
MD5_CTX isn_ctx;
|
||||
u_int32_t md5_buffer[4];
|
||||
u_int32_t new_isn;
|
||||
struct pf_state_host *src, *dst;
|
||||
|
||||
/* Seed if this is the first use, reseed if requested. */
|
||||
if (isn_last_reseed == 0) {
|
||||
read_random(&isn_secret, sizeof(isn_secret));
|
||||
isn_last_reseed = ticks;
|
||||
if (pf_isn_last_reseed == 0) {
|
||||
read_random(&pf_isn_secret, sizeof(pf_isn_secret));
|
||||
pf_isn_last_reseed = ticks;
|
||||
}
|
||||
|
||||
if (s->direction == PF_IN) {
|
||||
@ -160,11 +160,11 @@ pf_new_isn(struct pf_state *s)
|
||||
MD5Update(&isn_ctx, (u_char *) &src->addr,
|
||||
sizeof(struct in_addr));
|
||||
}
|
||||
MD5Update(&isn_ctx, (u_char *) &isn_secret, sizeof(isn_secret));
|
||||
MD5Update(&isn_ctx, (u_char *) &pf_isn_secret, sizeof(pf_isn_secret));
|
||||
MD5Final((u_char *) &md5_buffer, &isn_ctx);
|
||||
new_isn = (tcp_seq) md5_buffer[0];
|
||||
isn_offset += ISN_STATIC_INCREMENT +
|
||||
pf_isn_offset += ISN_STATIC_INCREMENT +
|
||||
(arc4random() & ISN_RANDOM_INCREMENT);
|
||||
new_isn += isn_offset;
|
||||
new_isn += pf_isn_offset;
|
||||
return (new_isn);
|
||||
}
|
||||
|
@ -163,6 +163,7 @@ static void addr_send_arp(struct sockaddr_in *dst_in)
|
||||
struct route iproute;
|
||||
struct sockaddr_in *dst = (struct sockaddr_in *)&iproute.ro_dst;
|
||||
char dmac[ETHER_ADDR_LEN];
|
||||
struct llentry *lle;
|
||||
|
||||
bzero(&iproute, sizeof iproute);
|
||||
*dst = *dst_in;
|
||||
@ -172,7 +173,7 @@ static void addr_send_arp(struct sockaddr_in *dst_in)
|
||||
return;
|
||||
|
||||
arpresolve(iproute.ro_rt->rt_ifp, iproute.ro_rt, NULL,
|
||||
rt_key(iproute.ro_rt), dmac);
|
||||
rt_key(iproute.ro_rt), dmac, &lle);
|
||||
|
||||
RTFREE(iproute.ro_rt);
|
||||
}
|
||||
@ -186,6 +187,7 @@ static int addr_resolve_remote(struct sockaddr_in *src_in,
|
||||
struct route iproute;
|
||||
struct sockaddr_in *dst = (struct sockaddr_in *)&iproute.ro_dst;
|
||||
char dmac[ETHER_ADDR_LEN];
|
||||
struct llentry *lle;
|
||||
|
||||
bzero(&iproute, sizeof iproute);
|
||||
*dst = *dst_in;
|
||||
@ -202,7 +204,7 @@ static int addr_resolve_remote(struct sockaddr_in *src_in,
|
||||
goto put;
|
||||
}
|
||||
ret = arpresolve(iproute.ro_rt->rt_ifp, iproute.ro_rt, NULL,
|
||||
rt_key(iproute.ro_rt), dmac);
|
||||
rt_key(iproute.ro_rt), dmac, &lle);
|
||||
if (ret) {
|
||||
goto put;
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ void
|
||||
rc4_init(struct rc4_state *const state, const u_char *key, int keylen)
|
||||
{
|
||||
u_char j;
|
||||
int i;
|
||||
int i, k;
|
||||
|
||||
/* Initialize state with identity permutation */
|
||||
for (i = 0; i < 256; i++)
|
||||
@ -70,9 +70,11 @@ rc4_init(struct rc4_state *const state, const u_char *key, int keylen)
|
||||
state->index2 = 0;
|
||||
|
||||
/* Randomize the permutation using key data */
|
||||
for (j = i = 0; i < 256; i++) {
|
||||
j += state->perm[i] + key[i % keylen];
|
||||
for (j = i = k = 0; i < 256; i++) {
|
||||
j += state->perm[i] + key[k];
|
||||
swap_bytes(&state->perm[i], &state->perm[j]);
|
||||
if (++k >= keylen)
|
||||
k = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,6 +61,23 @@ static int acpi_smbat_get_bst(device_t dev, struct acpi_bst *bst);
|
||||
|
||||
ACPI_SERIAL_DECL(smbat, "ACPI Smart Battery");
|
||||
|
||||
SYSCTL_DECL(_debug_acpi);
|
||||
SYSCTL_NODE(_debug_acpi, OID_AUTO, batt, CTLFLAG_RD, NULL, "Battery debugging");
|
||||
|
||||
/* On some laptops with smart batteries, enabling battery monitoring
|
||||
* software causes keystrokes from atkbd to be lost. This has also been
|
||||
* reported on Linux, and is apparently due to the keyboard and I2C line
|
||||
* for the battery being routed through the same chip. Whether that's
|
||||
* accurate or not, adding extra sleeps to the status checking code
|
||||
* causes the problem to go away.
|
||||
*
|
||||
* If you experience that problem, try a value of 10ms and move up
|
||||
* from there.
|
||||
*/
|
||||
static int batt_sleep_ms;
|
||||
SYSCTL_INT(_debug_acpi_batt, OID_AUTO, batt_sleep_ms, CTLFLAG_RW, &batt_sleep_ms, 0,
|
||||
"Sleep during battery status updates to prevent keystroke loss.");
|
||||
|
||||
static device_method_t acpi_smbat_methods[] = {
|
||||
/* device interface */
|
||||
DEVMETHOD(device_probe, acpi_smbat_probe),
|
||||
@ -176,6 +193,9 @@ acpi_smbus_read_2(struct acpi_smbat_softc *sc, uint8_t addr, uint8_t cmd,
|
||||
|
||||
ACPI_SERIAL_ASSERT(smbat);
|
||||
|
||||
if (batt_sleep_ms)
|
||||
AcpiOsSleep(batt_sleep_ms);
|
||||
|
||||
val = addr;
|
||||
error = ACPI_EC_WRITE(sc->ec_dev, sc->sb_base_addr + SMBUS_ADDR,
|
||||
val, 1);
|
||||
@ -194,6 +214,9 @@ acpi_smbus_read_2(struct acpi_smbat_softc *sc, uint8_t addr, uint8_t cmd,
|
||||
if (error)
|
||||
goto out;
|
||||
|
||||
if (batt_sleep_ms)
|
||||
AcpiOsSleep(batt_sleep_ms);
|
||||
|
||||
for (to = SMBUS_TIMEOUT; to != 0; to--) {
|
||||
error = ACPI_EC_READ(sc->ec_dev, sc->sb_base_addr + SMBUS_PRTCL,
|
||||
&val, 1);
|
||||
@ -239,6 +262,9 @@ acpi_smbus_read_multi_1(struct acpi_smbat_softc *sc, uint8_t addr, uint8_t cmd,
|
||||
|
||||
ACPI_SERIAL_ASSERT(smbat);
|
||||
|
||||
if (batt_sleep_ms)
|
||||
AcpiOsSleep(batt_sleep_ms);
|
||||
|
||||
val = addr;
|
||||
error = ACPI_EC_WRITE(sc->ec_dev, sc->sb_base_addr + SMBUS_ADDR,
|
||||
val, 1);
|
||||
@ -257,6 +283,9 @@ acpi_smbus_read_multi_1(struct acpi_smbat_softc *sc, uint8_t addr, uint8_t cmd,
|
||||
if (error)
|
||||
goto out;
|
||||
|
||||
if (batt_sleep_ms)
|
||||
AcpiOsSleep(batt_sleep_ms);
|
||||
|
||||
for (to = SMBUS_TIMEOUT; to != 0; to--) {
|
||||
error = ACPI_EC_READ(sc->ec_dev, sc->sb_base_addr + SMBUS_PRTCL,
|
||||
&val, 1);
|
||||
@ -292,6 +321,9 @@ acpi_smbus_read_multi_1(struct acpi_smbat_softc *sc, uint8_t addr, uint8_t cmd,
|
||||
if (len > val)
|
||||
len = val;
|
||||
|
||||
if (batt_sleep_ms)
|
||||
AcpiOsSleep(batt_sleep_ms);
|
||||
|
||||
while (len--) {
|
||||
error = ACPI_EC_READ(sc->ec_dev, sc->sb_base_addr + SMBUS_DATA
|
||||
+ len, &val, 1);
|
||||
@ -299,6 +331,8 @@ acpi_smbus_read_multi_1(struct acpi_smbat_softc *sc, uint8_t addr, uint8_t cmd,
|
||||
goto out;
|
||||
|
||||
ptr[len] = val;
|
||||
if (batt_sleep_ms)
|
||||
AcpiOsSleep(batt_sleep_ms);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -92,7 +92,8 @@ ata_pci_attach(device_t dev)
|
||||
int unit;
|
||||
|
||||
/* do chipset specific setups only needed once */
|
||||
if (ata_legacy(dev) || pci_read_config(dev, PCIR_BAR(2), 4) & IOMASK)
|
||||
ctlr->legacy = ata_legacy(dev);
|
||||
if (ctlr->legacy || pci_read_config(dev, PCIR_BAR(2), 4) & IOMASK)
|
||||
ctlr->channels = 2;
|
||||
else
|
||||
ctlr->channels = 1;
|
||||
@ -120,7 +121,7 @@ ata_pci_attach(device_t dev)
|
||||
|
||||
/* attach all channels on this controller */
|
||||
for (unit = 0; unit < ctlr->channels; unit++) {
|
||||
if ((unit == 0 || unit == 1) && ata_legacy(dev)) {
|
||||
if ((unit == 0 || unit == 1) && ctlr->legacy) {
|
||||
device_add_child(dev, "ata", unit);
|
||||
continue;
|
||||
}
|
||||
@ -192,7 +193,7 @@ ata_pci_alloc_resource(device_t dev, device_t child, int type, int *rid,
|
||||
if (type == SYS_RES_IOPORT) {
|
||||
switch (*rid) {
|
||||
case ATA_IOADDR_RID:
|
||||
if (ata_legacy(dev)) {
|
||||
if (controller->legacy) {
|
||||
start = (unit ? ATA_SECONDARY : ATA_PRIMARY);
|
||||
count = ATA_IOSIZE;
|
||||
end = start + count - 1;
|
||||
@ -204,7 +205,7 @@ ata_pci_alloc_resource(device_t dev, device_t child, int type, int *rid,
|
||||
break;
|
||||
|
||||
case ATA_CTLADDR_RID:
|
||||
if (ata_legacy(dev)) {
|
||||
if (controller->legacy) {
|
||||
start = (unit ? ATA_SECONDARY : ATA_PRIMARY) + ATA_CTLOFFSET;
|
||||
count = ATA_CTLIOSIZE;
|
||||
end = start + count - 1;
|
||||
@ -217,7 +218,7 @@ ata_pci_alloc_resource(device_t dev, device_t child, int type, int *rid,
|
||||
}
|
||||
}
|
||||
if (type == SYS_RES_IRQ && *rid == ATA_IRQ_RID) {
|
||||
if (ata_legacy(dev)) {
|
||||
if (controller->legacy) {
|
||||
int irq = (unit == 0 ? 14 : 15);
|
||||
|
||||
res = BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
|
||||
@ -233,6 +234,7 @@ int
|
||||
ata_pci_release_resource(device_t dev, device_t child, int type, int rid,
|
||||
struct resource *r)
|
||||
{
|
||||
struct ata_pci_controller *controller = device_get_softc(dev);
|
||||
int unit = ((struct ata_channel *)device_get_softc(child))->unit;
|
||||
|
||||
if (type == SYS_RES_IOPORT) {
|
||||
@ -256,7 +258,7 @@ ata_pci_release_resource(device_t dev, device_t child, int type, int rid,
|
||||
if (rid != ATA_IRQ_RID)
|
||||
return ENOENT;
|
||||
|
||||
if (ata_legacy(dev)) {
|
||||
if (controller->legacy) {
|
||||
return BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
|
||||
SYS_RES_IRQ, rid, r);
|
||||
}
|
||||
@ -271,7 +273,9 @@ ata_pci_setup_intr(device_t dev, device_t child, struct resource *irq,
|
||||
int flags, driver_filter_t *filter, driver_intr_t *function,
|
||||
void *argument, void **cookiep)
|
||||
{
|
||||
if (ata_legacy(dev)) {
|
||||
struct ata_pci_controller *controller = device_get_softc(dev);
|
||||
|
||||
if (controller->legacy) {
|
||||
return BUS_SETUP_INTR(device_get_parent(dev), child, irq,
|
||||
flags, filter, function, argument, cookiep);
|
||||
}
|
||||
@ -294,7 +298,9 @@ int
|
||||
ata_pci_teardown_intr(device_t dev, device_t child, struct resource *irq,
|
||||
void *cookie)
|
||||
{
|
||||
if (ata_legacy(dev)) {
|
||||
struct ata_pci_controller *controller = device_get_softc(dev);
|
||||
|
||||
if (controller->legacy) {
|
||||
return BUS_TEARDOWN_INTR(device_get_parent(dev), child, irq, cookie);
|
||||
}
|
||||
else {
|
||||
@ -352,7 +358,7 @@ ata_pci_allocate(device_t dev)
|
||||
ch->r_io[i].offset = i;
|
||||
}
|
||||
ch->r_io[ATA_CONTROL].res = ctlio;
|
||||
ch->r_io[ATA_CONTROL].offset = ata_legacy(device_get_parent(dev)) ? 0 : 2;
|
||||
ch->r_io[ATA_CONTROL].offset = ctlr->legacy ? 0 : 2;
|
||||
ch->r_io[ATA_IDX_ADDR].res = io;
|
||||
ata_default_registers(dev);
|
||||
if (ctlr->r_res1) {
|
||||
@ -369,9 +375,11 @@ ata_pci_allocate(device_t dev)
|
||||
int
|
||||
ata_pci_status(device_t dev)
|
||||
{
|
||||
struct ata_pci_controller *controller =
|
||||
device_get_softc(device_get_parent(dev));
|
||||
struct ata_channel *ch = device_get_softc(dev);
|
||||
|
||||
if ((dumping || !ata_legacy(device_get_parent(dev))) &&
|
||||
if ((dumping || !controller->legacy) &&
|
||||
((ch->flags & ATA_ALWAYS_DMASTAT) ||
|
||||
(ch->dma.flags & ATA_DMA_ACTIVE))) {
|
||||
int bmstat = ATA_IDX_INB(ch, ATA_BMSTAT_PORT) & ATA_BMSTAT_MASK;
|
||||
@ -652,7 +660,7 @@ ata_setup_interrupt(device_t dev, void *intr_func)
|
||||
struct ata_pci_controller *ctlr = device_get_softc(dev);
|
||||
int rid = ATA_IRQ_RID;
|
||||
|
||||
if (!ata_legacy(dev)) {
|
||||
if (!ctlr->legacy) {
|
||||
if (!(ctlr->r_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
|
||||
RF_SHAREABLE | RF_ACTIVE))) {
|
||||
device_printf(dev, "unable to map interrupt\n");
|
||||
|
@ -48,6 +48,7 @@ struct ata_pci_controller {
|
||||
struct resource *r_irq;
|
||||
void *handle;
|
||||
struct ata_chip_id *chip;
|
||||
int legacy;
|
||||
int channels;
|
||||
int (*chipinit)(device_t);
|
||||
int (*suspend)(device_t);
|
||||
|
@ -73,8 +73,9 @@ ata_ahci_probe(device_t dev)
|
||||
char buffer[64];
|
||||
|
||||
/* is this a possible AHCI candidate ? */
|
||||
if (pci_get_subclass(dev) != PCIS_STORAGE_SATA)
|
||||
return ENXIO;
|
||||
if (pci_get_class(dev) != PCIC_STORAGE ||
|
||||
pci_get_subclass(dev) != PCIS_STORAGE_SATA)
|
||||
return (ENXIO);
|
||||
|
||||
/* is this PCI device flagged as an AHCI compliant chip ? */
|
||||
if (pci_read_config(dev, PCIR_PROGIF, 1) != PCIP_STORAGE_SATA_AHCI_1_0)
|
||||
@ -94,6 +95,7 @@ int
|
||||
ata_ahci_chipinit(device_t dev)
|
||||
{
|
||||
struct ata_pci_controller *ctlr = device_get_softc(dev);
|
||||
int error;
|
||||
u_int32_t version;
|
||||
|
||||
/* if we have a memory BAR(5) we are likely on an AHCI part */
|
||||
@ -105,14 +107,19 @@ ata_ahci_chipinit(device_t dev)
|
||||
|
||||
/* setup interrupt delivery if not done allready by a vendor driver */
|
||||
if (!ctlr->r_irq) {
|
||||
if (ata_setup_interrupt(dev, ata_generic_intr))
|
||||
if (ata_setup_interrupt(dev, ata_generic_intr)) {
|
||||
bus_release_resource(dev, ctlr->r_type2, ctlr->r_rid2, ctlr->r_res2);
|
||||
return ENXIO;
|
||||
}
|
||||
}
|
||||
else
|
||||
device_printf(dev, "AHCI called from vendor specific driver\n");
|
||||
|
||||
/* reset controller */
|
||||
ata_ahci_ctlr_reset(dev);
|
||||
if ((error = ata_ahci_ctlr_reset(dev)) != 0) {
|
||||
bus_release_resource(dev, ctlr->r_type2, ctlr->r_rid2, ctlr->r_res2);
|
||||
return (error);
|
||||
};
|
||||
|
||||
/* get the number of HW channels */
|
||||
ctlr->channels =
|
||||
@ -154,7 +161,6 @@ ata_ahci_ctlr_reset(device_t dev)
|
||||
ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, ATA_AHCI_GHC_HR);
|
||||
DELAY(1000000);
|
||||
if (ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) & ATA_AHCI_GHC_HR) {
|
||||
bus_release_resource(dev, ctlr->r_type2, ctlr->r_rid2, ctlr->r_res2);
|
||||
device_printf(dev, "AHCI controller reset failure\n");
|
||||
return ENXIO;
|
||||
}
|
||||
|
@ -105,6 +105,9 @@ ata_sis_probe(device_t dev)
|
||||
char buffer[64];
|
||||
int found = 0;
|
||||
|
||||
if (pci_get_class(dev) != PCIC_STORAGE)
|
||||
return (ENXIO);
|
||||
|
||||
if (pci_get_vendor(dev) != ATA_SIS_ID)
|
||||
return ENXIO;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user