svn commit: r260500 - in user/gjb/hacking/release-embedded: contrib/atf/atf-c++/detail sbin/geom/class/part sys/arm/arm sys/arm/include sys/conf sys/net sys/netinet6
Glen Barber
gjb at FreeBSD.org
Fri Jan 10 01:44:37 UTC 2014
Author: gjb
Date: Fri Jan 10 01:44:34 2014
New Revision: 260500
URL: http://svnweb.freebsd.org/changeset/base/260500
Log:
MFH: tracking commit (head at r260487)
- Unbreak all the things.
Sponsored by: The FreeBSD Foundation
Modified:
user/gjb/hacking/release-embedded/contrib/atf/atf-c++/detail/test_helpers.cpp
user/gjb/hacking/release-embedded/sbin/geom/class/part/geom_part.c (contents, props changed)
user/gjb/hacking/release-embedded/sys/arm/arm/devmap.c
user/gjb/hacking/release-embedded/sys/arm/arm/machdep.c
user/gjb/hacking/release-embedded/sys/arm/include/devmap.h
user/gjb/hacking/release-embedded/sys/conf/Makefile.arm
user/gjb/hacking/release-embedded/sys/net/route.c
user/gjb/hacking/release-embedded/sys/net/route.h
user/gjb/hacking/release-embedded/sys/net/rtsock.c
user/gjb/hacking/release-embedded/sys/netinet6/ip6_mroute.h
Directory Properties:
user/gjb/hacking/release-embedded/ (props changed)
Modified: user/gjb/hacking/release-embedded/contrib/atf/atf-c++/detail/test_helpers.cpp
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/atf/atf-c++/detail/test_helpers.cpp Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/contrib/atf/atf-c++/detail/test_helpers.cpp Fri Jan 10 01:44:34 2014 (r260500)
@@ -67,14 +67,14 @@ build_check_cxx_o(const atf::tests::tc&
void
header_check(const char *hdrname)
{
- std::ofstream srcfile("test.c");
+ std::ofstream srcfile("test.cpp");
ATF_REQUIRE(srcfile);
srcfile << "#include <" << hdrname << ">\n";
srcfile.close();
const std::string failmsg = std::string("Header check failed; ") +
hdrname + " is not self-contained";
- build_check_cxx_o_aux(atf::fs::path("test.c"), failmsg.c_str(), true);
+ build_check_cxx_o_aux(atf::fs::path("test.cpp"), failmsg.c_str(), true);
}
atf::fs::path
Modified: user/gjb/hacking/release-embedded/sbin/geom/class/part/geom_part.c
==============================================================================
--- user/gjb/hacking/release-embedded/sbin/geom/class/part/geom_part.c Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/sbin/geom/class/part/geom_part.c Fri Jan 10 01:44:34 2014 (r260500)
@@ -454,8 +454,19 @@ gpart_autofill(struct gctl_req *req)
if (s == NULL)
abort();
gp = find_geom(cp, s);
- if (gp == NULL)
- errx(EXIT_FAILURE, "No such geom: %s.", s);
+ if (gp == NULL) {
+ if (g_device_path(s) == NULL) {
+ errx(EXIT_FAILURE, "No such geom %s.", s);
+ } else {
+ /*
+ * We don't free memory allocated by g_device_path() as
+ * we are about to exit.
+ */
+ errx(EXIT_FAILURE,
+ "No partitioning scheme found on geom %s. Create one first using 'gpart create'.",
+ s);
+ }
+ }
pp = LIST_FIRST(&gp->lg_consumer)->lg_provider;
if (pp == NULL)
errx(EXIT_FAILURE, "Provider for geom %s not found.", s);
Modified: user/gjb/hacking/release-embedded/sys/arm/arm/devmap.c
==============================================================================
--- user/gjb/hacking/release-embedded/sys/arm/arm/devmap.c Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/sys/arm/arm/devmap.c Fri Jan 10 01:44:34 2014 (r260500)
@@ -31,6 +31,8 @@ __FBSDID("$FreeBSD$");
* Routines for mapping device memory.
*/
+#include "opt_ddb.h"
+
#include <sys/param.h>
#include <sys/systm.h>
#include <vm/vm.h>
@@ -54,6 +56,36 @@ static u_int akva_devmap_idx;
static vm_offset_t akva_devmap_vaddr = ARM_VECTORS_HIGH;
/*
+ * Print the contents of the static mapping table using the provided printf-like
+ * output function (which will be either printf or db_printf).
+ */
+static void
+devmap_dump_table(int (*prfunc)(const char *, ...))
+{
+ const struct arm_devmap_entry *pd;
+
+ if (devmap_table == NULL || devmap_table[0].pd_size == 0) {
+ prfunc("No static device mappings.\n");
+ return;
+ }
+
+ prfunc("Static device mappings:\n");
+ for (pd = devmap_table; pd->pd_size != 0; ++pd) {
+ prfunc(" 0x%08x - 0x%08x mapped at VA 0x%08x\n",
+ pd->pd_pa, pd->pd_pa + pd->pd_size - 1, pd->pd_va);
+ }
+}
+
+/*
+ * Print the contents of the static mapping table. Used for bootverbose.
+ */
+void
+arm_devmap_print_table()
+{
+ devmap_dump_table(printf);
+}
+
+/*
* Return the "last" kva address used by the registered devmap table. It's
* actually the lowest address used by the static mappings, i.e., the address of
* the first unusable byte of KVA.
@@ -266,3 +298,13 @@ pmap_unmapdev(vm_offset_t va, vm_size_t
kva_free(va, origsize);
}
+#ifdef DDB
+#include <ddb/ddb.h>
+
+DB_SHOW_COMMAND(devmap, db_show_devmap)
+{
+ devmap_dump_table(db_printf);
+}
+
+#endif /* DDB */
+
Modified: user/gjb/hacking/release-embedded/sys/arm/arm/machdep.c
==============================================================================
--- user/gjb/hacking/release-embedded/sys/arm/arm/machdep.c Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/sys/arm/arm/machdep.c Fri Jan 10 01:44:34 2014 (r260500)
@@ -379,10 +379,10 @@ cpu_startup(void *dummy)
vm_paddr_t size;
size = phys_avail[indx + 1] - phys_avail[indx];
- printf("%#08jx - %#08jx, %ju bytes (%ju pages)\n",
+ printf(" 0x%08jx - 0x%08jx, %ju KBytes (%ju pages)\n",
(uintmax_t)phys_avail[indx],
(uintmax_t)phys_avail[indx + 1] - 1,
- (uintmax_t)size, (uintmax_t)size / PAGE_SIZE);
+ (uintmax_t)size / 1024, (uintmax_t)size / PAGE_SIZE);
}
}
@@ -392,6 +392,9 @@ cpu_startup(void *dummy)
(uintmax_t)ptoa(cnt.v_free_count),
(uintmax_t)ptoa(cnt.v_free_count) / 1048576);
+ if (bootverbose)
+ arm_devmap_print_table();
+
bufinit();
vm_pager_bufferinit();
pcb->un_32.pcb32_und_sp = (u_int)thread0.td_kstack +
Modified: user/gjb/hacking/release-embedded/sys/arm/include/devmap.h
==============================================================================
--- user/gjb/hacking/release-embedded/sys/arm/include/devmap.h Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/sys/arm/include/devmap.h Fri Jan 10 01:44:34 2014 (r260500)
@@ -87,4 +87,7 @@ void arm_devmap_bootstrap(vm_offset_t _l
void * arm_devmap_ptov(vm_paddr_t _pa, vm_size_t _sz);
vm_paddr_t arm_devmap_vtop(void * _va, vm_size_t _sz);
+/* Print the static mapping table; used for bootverbose output. */
+void arm_devmap_print_table(void);
+
#endif
Modified: user/gjb/hacking/release-embedded/sys/conf/Makefile.arm
==============================================================================
--- user/gjb/hacking/release-embedded/sys/conf/Makefile.arm Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/sys/conf/Makefile.arm Fri Jan 10 01:44:34 2014 (r260500)
@@ -39,16 +39,20 @@ SYSTEM_DEP:= ${SYSTEM_DEP:$S/conf/ldscri
STRIP_FLAGS = -S
.endif
-CFLAGS.gcc += -mno-thumb-interwork
+.if ${COMPILER_TYPE} != "clang"
+CFLAGS += -mno-thumb-interwork
+.endif
.if empty(DDB_ENABLED)
-.if defined(WITHOUT_ARM_EABI)
-CFLAGS.gcc += -mno-apcs-frame
+.if defined(WITHOUT_ARM_EABI) && ${COMPILER_TYPE} != "clang"
+CFLAGS += -mno-apcs-frame
.endif
.elif !defined(WITHOUT_ARM_EABI)
CFLAGS += -funwind-tables
+.if ${COMPILER_TYPE} == "clang"
# clang requires us to tell it to emit assembly with unwind information
-CFLAGS.clang += -mllvm -arm-enable-ehabi
+CFLAGS += -mllvm -arm-enable-ehabi
+.endif
.endif
SYSTEM_LD_ = ${LD} -Bdynamic -T ldscript.$M.noheader ${LDFLAGS} \
Modified: user/gjb/hacking/release-embedded/sys/net/route.c
==============================================================================
--- user/gjb/hacking/release-embedded/sys/net/route.c Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/sys/net/route.c Fri Jan 10 01:44:34 2014 (r260500)
@@ -37,6 +37,7 @@
#include "opt_inet.h"
#include "opt_inet6.h"
#include "opt_route.h"
+#include "opt_sctp.h"
#include "opt_mrouting.h"
#include "opt_mpath.h"
@@ -52,6 +53,7 @@
#include <sys/proc.h>
#include <sys/domain.h>
#include <sys/kernel.h>
+#include <sys/kdb.h>
#include <net/if.h>
#include <net/if_var.h>
@@ -86,6 +88,13 @@
#define RT_NUMFIBS 1
#endif
+#if defined(INET) || defined(INET6)
+#ifdef SCTP
+extern void sctp_addr_change(struct ifaddr *ifa, int cmd);
+#endif /* SCTP */
+#endif
+
+
/* This is read-only.. */
u_int rt_numfibs = RT_NUMFIBS;
SYSCTL_UINT(_net, OID_AUTO, fibs, CTLFLAG_RD, &rt_numfibs, 0, "");
@@ -118,7 +127,8 @@ VNET_DEFINE(int, rttrash); /* routes no
/* compare two sockaddr structures */
-#define sa_equal(a1, a2) (bcmp((a1), (a2), (a1)->sa_len) == 0)
+#define sa_equal(a1, a2) (((a1)->sa_len == (a2)->sa_len) && \
+ (bcmp((a1), (a2), (a1)->sa_len) == 0))
/*
* Convert a 'struct radix_node *' to a 'struct rtentry *'.
@@ -1731,3 +1741,99 @@ rtinit(struct ifaddr *ifa, int cmd, int
}
return (rtinit1(ifa, cmd, flags, fib));
}
+
+/*
+ * Announce interface address arrival/withdraw
+ * Returns 0 on success.
+ */
+int
+rt_addrmsg(int cmd, struct ifaddr *ifa, int fibnum)
+{
+
+ KASSERT(cmd == RTM_ADD || cmd == RTM_DELETE,
+ ("unexpected cmd %u", cmd));
+
+ if (fibnum != RT_ALL_FIBS) {
+ KASSERT(fibnum >= 0 && fibnum < rt_numfibs, ("%s: "
+ "fibnum out of range 0 <= %d < %d", __func__,
+ fibnum, rt_numfibs));
+ }
+
+ return (rtsock_addrmsg(cmd, ifa, fibnum));
+}
+
+
+/*
+ * Announce route addition/removal
+ * Users of this function MUST validate input data BEFORE calling.
+ * However we have to be able to handle invalid data:
+ * if some userland app sends us "invalid" route message (invalid mask,
+ * no dst, wrokg address families, etc...) we need to pass it back
+ * to app (and any other rtsock consumers) with rtm_errno field set to
+ * non-zero value.
+ * Returns 0 on success.
+ */
+int
+rt_routemsg(int cmd, struct ifnet *ifp, int error, struct rtentry *rt,
+ int fibnum)
+{
+
+ KASSERT(cmd == RTM_ADD || cmd == RTM_DELETE,
+ ("unexpected cmd %u", cmd));
+
+ if (fibnum != RT_ALL_FIBS) {
+ KASSERT(fibnum >= 0 && fibnum < rt_numfibs, ("%s: "
+ "fibnum out of range 0 <= %d < %d", __func__,
+ fibnum, rt_numfibs));
+ }
+
+ KASSERT(rt_key(rt) != NULL, (":%s: rt_key must be supplied", __func__));
+
+ return (rtsock_routemsg(cmd, ifp, error, rt, fibnum));
+}
+
+void
+rt_newaddrmsg(int cmd, struct ifaddr *ifa, int error, struct rtentry *rt)
+{
+
+ rt_newaddrmsg_fib(cmd, ifa, error, rt, RT_ALL_FIBS);
+}
+
+/*
+ * This is called to generate messages from the routing socket
+ * indicating a network interface has had addresses associated with it.
+ */
+void
+rt_newaddrmsg_fib(int cmd, struct ifaddr *ifa, int error, struct rtentry *rt,
+ int fibnum)
+{
+
+ KASSERT(cmd == RTM_ADD || cmd == RTM_DELETE,
+ ("unexpected cmd %u", cmd));
+ if (fibnum != RT_ALL_FIBS) {
+ KASSERT(fibnum >= 0 && fibnum < rt_numfibs, ("%s: "
+ "fibnum out of range 0 <= %d < %d", __func__,
+ fibnum, rt_numfibs));
+ }
+
+#if defined(INET) || defined(INET6)
+#ifdef SCTP
+ /*
+ * notify the SCTP stack
+ * this will only get called when an address is added/deleted
+ * XXX pass the ifaddr struct instead if ifa->ifa_addr...
+ */
+ sctp_addr_change(ifa, cmd);
+#endif /* SCTP */
+#endif
+ if (cmd == RTM_ADD) {
+ rt_addrmsg(cmd, ifa, fibnum);
+ if (rt != NULL)
+ rt_routemsg(cmd, ifa->ifa_ifp, error, rt, fibnum);
+ } else {
+ if (rt != NULL)
+ rt_routemsg(cmd, ifa->ifa_ifp, error, rt, fibnum);
+ rt_addrmsg(cmd, ifa, fibnum);
+ }
+}
+
Modified: user/gjb/hacking/release-embedded/sys/net/route.h
==============================================================================
--- user/gjb/hacking/release-embedded/sys/net/route.h Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/sys/net/route.h Fri Jan 10 01:44:34 2014 (r260500)
@@ -369,10 +369,15 @@ void rt_missmsg(int, struct rt_addrinfo
void rt_missmsg_fib(int, struct rt_addrinfo *, int, int, int);
void rt_newaddrmsg(int, struct ifaddr *, int, struct rtentry *);
void rt_newaddrmsg_fib(int, struct ifaddr *, int, struct rtentry *, int);
+int rt_addrmsg(int, struct ifaddr *, int);
+int rt_routemsg(int, struct ifnet *ifp, int, struct rtentry *, int);
void rt_newmaddrmsg(int, struct ifmultiaddr *);
int rt_setgate(struct rtentry *, struct sockaddr *, struct sockaddr *);
void rt_maskedcopy(struct sockaddr *, struct sockaddr *, struct sockaddr *);
+int rtsock_addrmsg(int, struct ifaddr *, int);
+int rtsock_routemsg(int, struct ifnet *ifp, int, struct rtentry *, int);
+
/*
* Note the following locking behavior:
*
Modified: user/gjb/hacking/release-embedded/sys/net/rtsock.c
==============================================================================
--- user/gjb/hacking/release-embedded/sys/net/rtsock.c Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/sys/net/rtsock.c Fri Jan 10 01:44:34 2014 (r260500)
@@ -30,7 +30,6 @@
* $FreeBSD$
*/
#include "opt_compat.h"
-#include "opt_sctp.h"
#include "opt_mpath.h"
#include "opt_inet.h"
#include "opt_inet6.h"
@@ -70,12 +69,6 @@
#include <netinet6/scope6_var.h>
#endif
-#if defined(INET) || defined(INET6)
-#ifdef SCTP
-extern void sctp_addr_change(struct ifaddr *ifa, int cmd);
-#endif /* SCTP */
-#endif
-
#ifdef COMPAT_FREEBSD32
#include <sys/mount.h>
#include <compat/freebsd32/freebsd32.h>
@@ -1334,91 +1327,95 @@ rt_ifmsg(struct ifnet *ifp)
}
/*
- * This is called to generate messages from the routing socket
- * indicating a network interface has had addresses associated with it.
- * if we ever reverse the logic and replace messages TO the routing
- * socket indicate a request to configure interfaces, then it will
- * be unnecessary as the routing socket will automatically generate
- * copies of it.
+ * Announce interface address arrival/withdraw.
+ * Please do not call directly, use rt_addrmsg().
+ * Assume input data to be valid.
+ * Returns 0 on success.
*/
-void
-rt_newaddrmsg_fib(int cmd, struct ifaddr *ifa, int error, struct rtentry *rt,
- int fibnum)
+int
+rtsock_addrmsg(int cmd, struct ifaddr *ifa, int fibnum)
{
struct rt_addrinfo info;
- struct sockaddr *sa = NULL;
- int pass;
- struct mbuf *m = NULL;
+ struct sockaddr *sa;
+ int ncmd;
+ struct mbuf *m;
+ struct ifa_msghdr *ifam;
struct ifnet *ifp = ifa->ifa_ifp;
- KASSERT(cmd == RTM_ADD || cmd == RTM_DELETE,
- ("unexpected cmd %u", cmd));
-#if defined(INET) || defined(INET6)
-#ifdef SCTP
- /*
- * notify the SCTP stack
- * this will only get called when an address is added/deleted
- * XXX pass the ifaddr struct instead if ifa->ifa_addr...
- */
- sctp_addr_change(ifa, cmd);
-#endif /* SCTP */
-#endif
if (route_cb.any_count == 0)
- return;
- for (pass = 1; pass < 3; pass++) {
- bzero((caddr_t)&info, sizeof(info));
- if ((cmd == RTM_ADD && pass == 1) ||
- (cmd == RTM_DELETE && pass == 2)) {
- struct ifa_msghdr *ifam;
- int ncmd = cmd == RTM_ADD ? RTM_NEWADDR : RTM_DELADDR;
+ return (0);
- info.rti_info[RTAX_IFA] = sa = ifa->ifa_addr;
- info.rti_info[RTAX_IFP] = ifp->if_addr->ifa_addr;
- info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask;
- info.rti_info[RTAX_BRD] = ifa->ifa_dstaddr;
- if ((m = rt_msg1(ncmd, &info)) == NULL)
- continue;
- ifam = mtod(m, struct ifa_msghdr *);
- ifam->ifam_index = ifp->if_index;
- ifam->ifam_metric = ifa->ifa_metric;
- ifam->ifam_flags = ifa->ifa_flags;
- ifam->ifam_addrs = info.rti_addrs;
- }
- if ((cmd == RTM_ADD && pass == 2) ||
- (cmd == RTM_DELETE && pass == 1)) {
- struct rt_msghdr *rtm;
+ ncmd = cmd == RTM_ADD ? RTM_NEWADDR : RTM_DELADDR;
- if (rt == NULL)
- continue;
- info.rti_info[RTAX_NETMASK] = rt_mask(rt);
- info.rti_info[RTAX_DST] = sa = rt_key(rt);
- info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
- if ((m = rt_msg1(cmd, &info)) == NULL)
- continue;
- rtm = mtod(m, struct rt_msghdr *);
- rtm->rtm_index = ifp->if_index;
- rtm->rtm_flags |= rt->rt_flags;
- rtm->rtm_errno = error;
- rtm->rtm_addrs = info.rti_addrs;
- }
- if (fibnum != RT_ALL_FIBS) {
- KASSERT(fibnum >= 0 && fibnum < rt_numfibs, ("%s: "
- "fibnum out of range 0 <= %d < %d", __func__,
- fibnum, rt_numfibs));
- M_SETFIB(m, fibnum);
- m->m_flags |= RTS_FILTER_FIB;
- }
- rt_dispatch(m, sa ? sa->sa_family : AF_UNSPEC);
+ bzero((caddr_t)&info, sizeof(info));
+ info.rti_info[RTAX_IFA] = sa = ifa->ifa_addr;
+ info.rti_info[RTAX_IFP] = ifp->if_addr->ifa_addr;
+ info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask;
+ info.rti_info[RTAX_BRD] = ifa->ifa_dstaddr;
+ if ((m = rt_msg1(ncmd, &info)) == NULL)
+ return (ENOBUFS);
+ ifam = mtod(m, struct ifa_msghdr *);
+ ifam->ifam_index = ifp->if_index;
+ ifam->ifam_metric = ifa->ifa_metric;
+ ifam->ifam_flags = ifa->ifa_flags;
+ ifam->ifam_addrs = info.rti_addrs;
+
+ if (fibnum != RT_ALL_FIBS) {
+ M_SETFIB(m, fibnum);
+ m->m_flags |= RTS_FILTER_FIB;
}
+
+ rt_dispatch(m, sa ? sa->sa_family : AF_UNSPEC);
+
+ return (0);
}
-void
-rt_newaddrmsg(int cmd, struct ifaddr *ifa, int error, struct rtentry *rt)
+/*
+ * Announce route addition/removal.
+ * Please do not call directly, use rt_routemsg().
+ * Note that @rt data MAY be inconsistent/invalid:
+ * if some userland app sends us "invalid" route message (invalid mask,
+ * no dst, wrong address families, etc...) we need to pass it back
+ * to app (and any other rtsock consumers) with rtm_errno field set to
+ * non-zero value.
+ *
+ * Returns 0 on success.
+ */
+int
+rtsock_routemsg(int cmd, struct ifnet *ifp, int error, struct rtentry *rt,
+ int fibnum)
{
+ struct rt_addrinfo info;
+ struct sockaddr *sa;
+ struct mbuf *m;
+ struct rt_msghdr *rtm;
- rt_newaddrmsg_fib(cmd, ifa, error, rt, RT_ALL_FIBS);
+ if (route_cb.any_count == 0)
+ return (0);
+
+ bzero((caddr_t)&info, sizeof(info));
+ info.rti_info[RTAX_NETMASK] = rt_mask(rt);
+ info.rti_info[RTAX_DST] = sa = rt_key(rt);
+ info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
+ if ((m = rt_msg1(cmd, &info)) == NULL)
+ return (ENOBUFS);
+ rtm = mtod(m, struct rt_msghdr *);
+ rtm->rtm_index = ifp->if_index;
+ rtm->rtm_flags |= rt->rt_flags;
+ rtm->rtm_errno = error;
+ rtm->rtm_addrs = info.rti_addrs;
+
+ if (fibnum != RT_ALL_FIBS) {
+ M_SETFIB(m, fibnum);
+ m->m_flags |= RTS_FILTER_FIB;
+ }
+
+ rt_dispatch(m, sa ? sa->sa_family : AF_UNSPEC);
+
+ return (0);
}
+
/*
* This is the analogue to the rt_newaddrmsg which performs the same
* function but for multicast group memberhips. This is easier since
Modified: user/gjb/hacking/release-embedded/sys/netinet6/ip6_mroute.h
==============================================================================
--- user/gjb/hacking/release-embedded/sys/netinet6/ip6_mroute.h Thu Jan 9 23:52:55 2014 (r260499)
+++ user/gjb/hacking/release-embedded/sys/netinet6/ip6_mroute.h Fri Jan 10 01:44:34 2014 (r260500)
@@ -194,7 +194,7 @@ struct sioc_mif_req6 {
u_quad_t obytes; /* Output byte count on mif */
};
-#ifdef _KERNEL
+#if defined(_KERNEL) || defined(KERNEL)
/*
* The kernel's multicast-interface structure.
*/
More information about the svn-src-user
mailing list