svn commit: r185630 - in user/kmacy/HEAD_fast_multi_xmit/sys: net
xen xen/xenbus
Kip Macy
kmacy at FreeBSD.org
Thu Dec 4 23:43:53 PST 2008
Author: kmacy
Date: Fri Dec 5 07:43:51 2008
New Revision: 185630
URL: http://svn.freebsd.org/changeset/base/185630
Log:
IFC 184756:185625 part 5
Added:
user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_if.m
user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbusvar.h
Modified:
user/kmacy/HEAD_fast_multi_xmit/sys/net/bpf.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/bridgestp.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_bridge.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ef.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ethersubr.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_faith.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fddisubr.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fwsubr.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gif.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gre.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_lagg.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_loop.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_mib.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_spppsubr.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_stf.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_tun.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h
user/kmacy/HEAD_fast_multi_xmit/sys/net/if_vlan.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_cb.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_usrreq.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c
user/kmacy/HEAD_fast_multi_xmit/sys/net/vnet.h
user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.c
user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.h
user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_client.c
user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.c
user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.h
user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_dev.c
user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_probe.c
user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_probe_backend.c
user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_xs.c
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/bpf.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/bpf.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/bpf.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$");
#include <sys/sockio.h>
#include <sys/ttycom.h>
#include <sys/uio.h>
+#include <sys/vimage.h>
#include <sys/event.h>
#include <sys/file.h>
@@ -566,7 +567,9 @@ bpf_detachd(struct bpf_d *d)
*/
if (d->bd_promisc) {
d->bd_promisc = 0;
+ CURVNET_SET(ifp->if_vnet);
error = ifpromisc(ifp, 0);
+ CURVNET_RESTORE();
if (error != 0 && error != ENXIO) {
/*
* ENXIO can happen if a pccard is unplugged
@@ -872,7 +875,9 @@ bpfwrite(struct cdev *dev, struct uio *u
#ifdef MAC
BPFD_LOCK(d);
+ CURVNET_SET(ifp->if_vnet);
mac_bpfdesc_create_mbuf(d, m);
+ CURVNET_RESTORE();
if (mc != NULL)
mac_bpfdesc_create_mbuf(d, mc);
BPFD_UNLOCK(d);
@@ -993,6 +998,7 @@ bpfioctl(struct cdev *dev, u_long cmd, c
return (EPERM);
}
}
+ CURVNET_SET(TD_TO_VNET(td));
switch (cmd) {
default:
@@ -1322,6 +1328,7 @@ bpfioctl(struct cdev *dev, u_long cmd, c
case BIOCROTZBUF:
return (bpf_ioctl_rotzbuf(td, d, (struct bpf_zbuf *)addr));
}
+ CURVNET_RESTORE();
return (error);
}
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/bridgestp.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/bridgestp.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/bridgestp.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$");
#include <net/if_types.h>
#include <net/if_llc.h>
#include <net/if_media.h>
+#include <net/vnet.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -67,6 +67,7 @@
#include <net/if_var.h>
#include <net/radix.h>
#include <net/route.h>
+#include <net/vnet.h>
#if defined(INET) || defined(INET6)
/*XXX*/
@@ -79,6 +80,7 @@
#endif
#ifdef INET
#include <netinet/if_ether.h>
+#include <netinet/vinet.h>
#endif
#ifdef DEV_CARP
#include <netinet/ip_carp.h>
@@ -117,6 +119,7 @@ static void if_qflush(struct ifnet *);
static void if_route(struct ifnet *, int flag, int fam);
static int if_setflag(struct ifnet *, int, int, int *, int);
static void if_slowtimo(void *);
+static int if_transmit(struct ifnet *ifp, struct mbuf *m);
static void if_unroute(struct ifnet *, int flag, int fam);
static void link_rtrequest(int, struct rtentry *, struct rt_addrinfo *);
static int if_rtdel(struct radix_node *, void *);
@@ -126,7 +129,6 @@ static void if_start_deferred(void *cont
static void do_link_state_change(void *, int);
static int if_getgroup(struct ifgroupreq *, struct ifnet *);
static int if_getgroupmembers(struct ifgroupreq *);
-static int if_transmit(struct ifnet *ifp, struct mbuf *m);
#ifdef INET6
/*
@@ -136,22 +138,21 @@ static int if_transmit(struct ifnet *ifp
extern void nd6_setmtu(struct ifnet *);
#endif
-int if_index = 0;
-int ifqmaxlen = IFQ_MAXLEN;
+#ifdef VIMAGE_GLOBALS
struct ifnethead ifnet; /* depend on static init XXX */
struct ifgrouphead ifg_head;
+int if_index;
+static int if_indexlim;
+/* Table of ifnet/cdev by index. Locked with ifnet_lock. */
+static struct ifindex_entry *ifindex_table;
+static struct knlist ifklist;
+#endif
+
+int ifqmaxlen = IFQ_MAXLEN;
struct mtx ifnet_lock;
static if_com_alloc_t *if_com_alloc[256];
static if_com_free_t *if_com_free[256];
-static int if_indexlim = 8;
-static struct knlist ifklist;
-
-/*
- * Table of ifnet/cdev by index. Locked with ifnet_lock.
- */
-static struct ifindex_entry *ifindex_table = NULL;
-
static void filt_netdetach(struct knote *kn);
static int filt_netdev(struct knote *kn, long hint);
@@ -193,7 +194,6 @@ ifnet_setbyindex(u_short idx, struct ifn
struct ifaddr *
ifaddr_byindex(u_short idx)
{
- INIT_VNET_NET(curvnet);
struct ifaddr *ifa;
IFNET_RLOCK();
@@ -359,6 +359,10 @@ if_init(void *dummy __unused)
{
INIT_VNET_NET(curvnet);
+ V_if_index = 0;
+ V_ifindex_table = NULL;
+ V_if_indexlim = 8;
+
IFNET_LOCK_INIT();
TAILQ_INIT(&V_ifnet);
TAILQ_INIT(&V_ifg_head);
@@ -733,8 +737,7 @@ if_detach(struct ifnet *ifp)
INIT_VNET_NET(ifp->if_vnet);
struct ifaddr *ifa;
struct radix_node_head *rnh;
- int s;
- int i;
+ int s, i, j;
struct domain *dp;
struct ifnet *iter;
int found = 0;
@@ -806,14 +809,13 @@ if_detach(struct ifnet *ifp)
* to this interface...oh well...
*/
for (i = 1; i <= AF_MAX; i++) {
- int j;
- for (j = 0; j < rt_numfibs; j++) {
- if ((rnh = V_rt_tables[j][i]) == NULL)
- continue;
- RADIX_NODE_HEAD_LOCK(rnh);
- (void) rnh->rnh_walktree(rnh, if_rtdel, ifp);
- RADIX_NODE_HEAD_UNLOCK(rnh);
- }
+ for (j = 0; j < rt_numfibs; j++) {
+ if ((rnh = V_rt_tables[j][i]) == NULL)
+ continue;
+ RADIX_NODE_HEAD_LOCK(rnh);
+ (void) rnh->rnh_walktree(rnh, if_rtdel, ifp);
+ RADIX_NODE_HEAD_UNLOCK(rnh);
+ }
}
/* Announce that the interface is gone. */
@@ -2211,7 +2213,7 @@ again:
struct sockaddr *sa = ifa->ifa_addr;
if (jailed(curthread->td_ucred) &&
- prison_if(curthread->td_ucred, sa))
+ !prison_if(curthread->td_ucred, sa))
continue;
addrs++;
#ifdef COMPAT_43
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_bridge.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_bridge.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_bridge.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -115,9 +115,11 @@ __FBSDID("$FreeBSD$");
#include <netinet/in_var.h>
#include <netinet/ip.h>
#include <netinet/ip_var.h>
+#include <netinet/vinet.h>
#ifdef INET6
#include <netinet/ip6.h>
#include <netinet6/ip6_var.h>
+#include <netinet6/vinet6.h>
#endif
#ifdef DEV_CARP
#include <netinet/ip_carp.h>
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ef.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ef.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ef.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -50,6 +50,7 @@
#include <net/netisr.h>
#include <net/route.h>
#include <net/bpf.h>
+#include <net/vnet.h>
#ifdef INET
#include <netinet/in.h>
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ethersubr.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ethersubr.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ethersubr.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -64,6 +64,7 @@
#include <net/if_bridgevar.h>
#include <net/if_vlan_var.h>
#include <net/pf_mtag.h>
+#include <net/vnet.h>
#if defined(INET) || defined(INET6)
#include <netinet/in.h>
@@ -143,8 +144,10 @@ MALLOC_DEFINE(M_ARPCOM, "arpcom", "802.*
int
ether_ipfw_chk(struct mbuf **m0, struct ifnet *dst,
struct ip_fw **rule, int shared);
+#ifdef VIMAGE_GLOBALS
static int ether_ipfw;
#endif
+#endif
/*
* Ethernet output routine.
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_faith.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_faith.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_faith.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -77,6 +77,7 @@
#include <netinet6/in6_var.h>
#include <netinet/ip6.h>
#include <netinet6/ip6_var.h>
+#include <netinet6/vinet6.h>
#endif
#define FAITHNAME "faith"
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fddisubr.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fddisubr.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fddisubr.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -335,7 +335,7 @@ fddi_output(ifp, m, dst, rt0)
}
}
- IFQ_HANDOFF(ifp, m, error);
+ error = (ifp->if_transmit)(ifp, m);
if (error)
ifp->if_oerrors++;
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fwsubr.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fwsubr.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fwsubr.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -249,7 +249,7 @@ firewire_output(struct ifnet *ifp, struc
*/
enc->ul[0] = htonl(enc->ul[0]);
- IFQ_HANDOFF(ifp, m, error);
+ error = (ifp->if_transmit)(ifp, m);
return (error);
} else {
/*
@@ -309,7 +309,7 @@ firewire_output(struct ifnet *ifp, struc
enc->ul[0] = htonl(enc->ul[0]);
enc->ul[1] = htonl(enc->ul[1]);
- IFQ_HANDOFF(ifp, m, error);
+ error = (ifp->if_transmit)(ifp, m);
if (error) {
if (mtail)
m_freem(mtail);
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gif.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gif.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gif.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -94,7 +94,18 @@
*/
static struct mtx gif_mtx;
static MALLOC_DEFINE(M_GIF, "gif", "Generic Tunnel Interface");
+
+#ifdef VIMAGE_GLOBALS
static LIST_HEAD(, gif_softc) gif_softc_list;
+static int max_gif_nesting;
+static int parallel_tunnels;
+#ifdef INET
+int ip_gif_ttl;
+#endif
+#ifdef INET6
+int ip6_gif_hlim;
+#endif
+#endif
void (*ng_gif_input_p)(struct ifnet *ifp, struct mbuf **mp, int af);
void (*ng_gif_input_orphan_p)(struct ifnet *ifp, struct mbuf *m, int af);
@@ -123,9 +134,6 @@ SYSCTL_NODE(_net_link, IFT_GIF, gif, CTL
*/
#define MAX_GIF_NEST 1
#endif
-#ifndef VIMAGE
-static int max_gif_nesting = MAX_GIF_NEST;
-#endif
SYSCTL_V_INT(V_NET, vnet_gif, _net_link_gif, OID_AUTO, max_nesting,
CTLFLAG_RW, max_gif_nesting, 0, "Max nested tunnels");
@@ -140,11 +148,6 @@ SYSCTL_V_INT(V_NET, vnet_gif, _net_inet6
* pair of addresses. Some applications require this functionality so
* we allow control over this check here.
*/
-#ifdef XBONEHACK
-static int parallel_tunnels = 1;
-#else
-static int parallel_tunnels = 0;
-#endif
SYSCTL_V_INT(V_NET, vnet_gif, _net_link_gif, OID_AUTO, parallel_tunnels,
CTLFLAG_RW, parallel_tunnels, 0, "Allow parallel tunnels?");
@@ -251,12 +254,21 @@ gifmodevent(mod, type, data)
switch (type) {
case MOD_LOAD:
mtx_init(&gif_mtx, "gif_mtx", NULL, MTX_DEF);
- LIST_INIT(&V_gif_softc_list);
- if_clone_attach(&gif_cloner);
+ LIST_INIT(&V_gif_softc_list);
+ V_max_gif_nesting = MAX_GIF_NEST;
+#ifdef XBONEHACK
+ V_parallel_tunnels = 1;
+#else
+ V_parallel_tunnels = 0;
+#endif
+#ifdef INET
+ V_ip_gif_ttl = GIF_TTL;
+#endif
#ifdef INET6
V_ip6_gif_hlim = GIF_HLIM;
#endif
+ if_clone_attach(&gif_cloner);
break;
case MOD_UNLOAD:
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gre.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gre.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gre.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -79,6 +79,7 @@
#include <netinet/ip_gre.h>
#include <netinet/ip_var.h>
#include <netinet/ip_encap.h>
+#include <netinet/vinet.h>
#else
#error "Huh? if_gre without inet?"
#endif
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_lagg.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_lagg.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_lagg.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -1371,7 +1371,7 @@ int
lagg_enqueue(struct ifnet *ifp, struct mbuf *m)
{
- return ((ifp->if_transmit)(ifp, m));
+ return (ifp->if_transmit)(ifp, m);
}
/*
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_loop.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_loop.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_loop.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -57,6 +57,7 @@
#include <net/netisr.h>
#include <net/route.h>
#include <net/bpf.h>
+#include <net/vnet.h>
#ifdef INET
#include <netinet/in.h>
@@ -96,13 +97,18 @@ int looutput(struct ifnet *ifp, struct
static int lo_clone_create(struct if_clone *, int, caddr_t);
static void lo_clone_destroy(struct ifnet *);
-struct ifnet *loif = NULL; /* Used externally */
+#ifdef VIMAGE_GLOBALS
+struct ifnet *loif; /* Used externally */
+#endif
IFC_SIMPLE_DECLARE(lo, 1);
static void
lo_clone_destroy(struct ifnet *ifp)
{
+#ifdef INVARIANTS
+ INIT_VNET_NET(ifp->if_vnet);
+#endif
/* XXX: destroying lo0 will lead to panics. */
KASSERT(V_loif != ifp, ("%s: destroying lo0", __func__));
@@ -139,9 +145,11 @@ lo_clone_create(struct if_clone *ifc, in
static int
loop_modevent(module_t mod, int type, void *data)
{
+ INIT_VNET_NET(curvnet);
switch (type) {
case MOD_LOAD:
+ V_loif = NULL;
if_clone_attach(&lo_cloner);
break;
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_mib.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_mib.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_mib.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -38,6 +38,7 @@
#include <net/if.h>
#include <net/if_mib.h>
+#include <net/vnet.h>
/*
* A sysctl(3) MIB for generic interface information. This information
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_spppsubr.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_spppsubr.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_spppsubr.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -56,6 +56,7 @@
#ifdef INET
#include <netinet/ip.h>
#include <netinet/tcp.h>
+#include <netinet/vinet.h>
#endif
#ifdef INET6
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_stf.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_stf.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_stf.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -107,6 +107,7 @@
#include <netinet/ip.h>
#include <netinet/ip_var.h>
#include <netinet/in_var.h>
+#include <netinet/vinet.h>
#include <netinet/ip6.h>
#include <netinet6/ip6_var.h>
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_tun.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_tun.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_tun.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -657,7 +657,7 @@ tunoutput(
}
}
- IFQ_HANDOFF(ifp, m0, error);
+ error = (ifp->if_transmit)(ifp, m0);
if (error) {
ifp->if_collisions++;
return (ENOBUFS);
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h Fri Dec 5 07:43:51 2008 (r185630)
@@ -720,8 +720,6 @@ int ether_poll_register(poll_handler_
int ether_poll_deregister(struct ifnet *ifp);
#endif /* DEVICE_POLLING */
-#include <net/vnet.h>
-
#endif /* _KERNEL */
#endif /* !_NET_IF_VAR_H_ */
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_vlan.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_vlan.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_vlan.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -64,6 +64,7 @@
#include <net/if_dl.h>
#include <net/if_types.h>
#include <net/if_vlan_var.h>
+#include <net/vnet.h>
#define VLANNAME "vlan"
#define VLAN_DEF_HWIDTH 4
@@ -868,7 +869,7 @@ vlan_start(struct ifnet *ifp)
* Send it, precisely as ether_output() would have.
* We are already running at splimp.
*/
- error = (ifp->if_transmit)(p, m);
+ error = (p->if_transmit)(p, m);
if (!error)
ifp->if_opackets++;
else
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_cb.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_cb.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_cb.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -46,6 +46,7 @@
#include <net/if.h>
#include <net/raw_cb.h>
+#include <net/vnet.h>
/*
* Routines to manage the raw protocol control blocks.
@@ -57,7 +58,9 @@
*/
struct mtx rawcb_mtx;
+#ifdef VIMAGE_GLOBALS
struct rawcb_list_head rawcb_list;
+#endif
SYSCTL_NODE(_net, OID_AUTO, raw, CTLFLAG_RW, 0, "Raw socket infrastructure");
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_usrreq.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_usrreq.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_usrreq.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -48,6 +48,7 @@
#include <net/if.h>
#include <net/raw_cb.h>
+#include <net/vnet.h>
MTX_SYSINIT(rawcb_mtx, &rawcb_mtx, "rawcb", MTX_DEF);
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -57,9 +57,11 @@
#ifdef RADIX_MPATH
#include <net/radix_mpath.h>
#endif
+#include <net/vnet.h>
#include <netinet/in.h>
#include <netinet/ip_mroute.h>
+#include <netinet/vinet.h>
#include <vm/uma.h>
@@ -84,6 +86,7 @@ SYSCTL_INT(_net, OID_AUTO, add_addr_allf
&rt_add_addr_allfibs, 0, "");
TUNABLE_INT("net.add_addr_allfibs", &rt_add_addr_allfibs);
+#ifdef VIMAGE_GLOBALS
static struct rtstat rtstat;
/* by default only the first 'row' of tables will be accessed. */
@@ -96,6 +99,7 @@ static struct rtstat rtstat;
struct radix_node_head *rt_tables[RT_MAXFIBS][AF_MAX+1];
static int rttrash; /* routes not in table but not freed */
+#endif
static void rt_maskedcopy(struct sockaddr *,
struct sockaddr *, struct sockaddr *);
@@ -143,6 +147,7 @@ SYSCTL_PROC(_net, OID_AUTO, my_fibnum, C
static void
route_init(void)
{
+ INIT_VNET_INET(curvnet);
int table;
struct domain *dom;
int fam;
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -31,11 +31,13 @@
*/
#include "opt_sctp.h"
#include "opt_mpath.h"
+#include "opt_inet.h"
+#include "opt_inet6.h"
#include <sys/param.h>
#include <sys/domain.h>
-#include <sys/kernel.h>
#include <sys/jail.h>
+#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/mbuf.h>
#include <sys/priv.h>
@@ -52,8 +54,12 @@
#include <net/netisr.h>
#include <net/raw_cb.h>
#include <net/route.h>
+#include <net/vnet.h>
#include <netinet/in.h>
+#ifdef INET6
+#include <netinet6/scope6_var.h>
+#endif
#ifdef SCTP
extern void sctp_addr_change(struct ifaddr *ifa, int cmd);
@@ -309,6 +315,136 @@ static struct pr_usrreqs route_usrreqs =
.pru_close = rts_close,
};
+#ifndef _SOCKADDR_UNION_DEFINED
+#define _SOCKADDR_UNION_DEFINED
+/*
+ * The union of all possible address formats we handle.
+ */
+union sockaddr_union {
+ struct sockaddr sa;
+ struct sockaddr_in sin;
+ struct sockaddr_in6 sin6;
+};
+#endif /* _SOCKADDR_UNION_DEFINED */
+
+static int
+rtm_get_jailed(struct rt_addrinfo *info, struct ifnet *ifp,
+ struct rtentry *rt, union sockaddr_union *saun, struct ucred *cred)
+{
+
+ switch (info->rti_info[RTAX_DST]->sa_family) {
+#ifdef INET
+ case AF_INET:
+ {
+ struct in_addr ia;
+
+ /*
+ * 1. Check if the returned address is part of the jail.
+ */
+ ia = ((struct sockaddr_in *)rt->rt_ifa->ifa_addr)->sin_addr;
+ if (prison_check_ip4(cred, &ia) != 0) {
+ info->rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
+
+ } else {
+ struct ifaddr *ifa;
+ int found;
+
+ found = 0;
+
+ /*
+ * 2. Try to find an address on the given outgoing
+ * interface that belongs to the jail.
+ */
+ TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
+ struct sockaddr *sa;
+ sa = ifa->ifa_addr;
+ if (sa->sa_family != AF_INET)
+ continue;
+ ia = ((struct sockaddr_in *)sa)->sin_addr;
+ if (prison_check_ip4(cred, &ia) != 0) {
+ found = 1;
+ break;
+ }
+ }
+ if (!found) {
+ /*
+ * 3. As a last resort return the 'default'
+ * jail address.
+ */
+ if (prison_getip4(cred, &ia) != 0)
+ return (ESRCH);
+ }
+ bzero(&saun->sin, sizeof(struct sockaddr_in));
+ saun->sin.sin_len = sizeof(struct sockaddr_in);
+ saun->sin.sin_family = AF_INET;
+ saun->sin.sin_addr.s_addr = ia.s_addr;
+ info->rti_info[RTAX_IFA] =
+ (struct sockaddr *)&saun->sin;
+ }
+ break;
+ }
+#endif
+#ifdef INET6
+ case AF_INET6:
+ {
+ struct in6_addr ia6;
+
+ /*
+ * 1. Check if the returned address is part of the jail.
+ */
+ bcopy(&((struct sockaddr_in6 *)rt->rt_ifa->ifa_addr)->sin6_addr,
+ &ia6, sizeof(struct in6_addr));
+ if (prison_check_ip6(cred, &ia6) != 0) {
+ info->rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
+ } else {
+ struct ifaddr *ifa;
+ int found;
+
+ found = 0;
+
+ /*
+ * 2. Try to find an address on the given outgoing
+ * interface that belongs to the jail.
+ */
+ TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
+ struct sockaddr *sa;
+ sa = ifa->ifa_addr;
+ if (sa->sa_family != AF_INET6)
+ continue;
+ bcopy(&((struct sockaddr_in6 *)sa)->sin6_addr,
+ &ia6, sizeof(struct in6_addr));
+ if (prison_check_ip6(cred, &ia6) != 0) {
+ found = 1;
+ break;
+ }
+ }
+ if (!found) {
+ /*
+ * 3. As a last resort return the 'default'
+ * jail address.
+ */
+ if (prison_getip6(cred, &ia6) != 0)
+ return (ESRCH);
+ }
+ bzero(&saun->sin6, sizeof(struct sockaddr_in6));
+ saun->sin6.sin6_len = sizeof(struct sockaddr_in6);
+ saun->sin6.sin6_family = AF_INET6;
+ bcopy(&ia6, &saun->sin6.sin6_addr,
+ sizeof(struct in6_addr));
+ if (sa6_recoverscope(&saun->sin6) != 0)
+ return (ESRCH);
+ info->rti_info[RTAX_IFA] =
+ (struct sockaddr *)&saun->sin6;
+ }
+ break;
+ }
+#endif
+ default:
+ return (ESRCH);
+ }
+ return (0);
+}
+
/*ARGSUSED*/
static int
route_output(struct mbuf *m, struct socket *so)
@@ -321,7 +457,7 @@ route_output(struct mbuf *m, struct sock
struct rt_addrinfo info;
int len, error = 0;
struct ifnet *ifp = NULL;
- struct sockaddr_in jail;
+ union sockaddr_union saun;
#define senderr(e) { error = e; goto flush;}
if (m == NULL || ((m->m_len < sizeof(long)) &&
@@ -481,16 +617,17 @@ route_output(struct mbuf *m, struct sock
info.rti_info[RTAX_IFP] =
ifp->if_addr->ifa_addr;
if (jailed(so->so_cred)) {
- bzero(&jail, sizeof(jail));
- jail.sin_family = PF_INET;
- jail.sin_len = sizeof(jail);
- jail.sin_addr.s_addr =
- htonl(prison_getip(so->so_cred));
- info.rti_info[RTAX_IFA] =
- (struct sockaddr *)&jail;
- } else
+ error = rtm_get_jailed(
+ &info, ifp, rt, &saun,
+ so->so_cred);
+ if (error != 0) {
+ RT_UNLOCK(rt);
+ senderr(ESRCH);
+ }
+ } else {
info.rti_info[RTAX_IFA] =
rt->rt_ifa->ifa_addr;
+ }
if (ifp->if_flags & IFF_POINTOPOINT)
info.rti_info[RTAX_BRD] =
rt->rt_ifa->ifa_dstaddr;
@@ -1171,7 +1308,7 @@ sysctl_iflist(int af, struct walkarg *w)
if (af && af != ifa->ifa_addr->sa_family)
continue;
if (jailed(curthread->td_ucred) &&
- prison_if(curthread->td_ucred, ifa->ifa_addr))
+ !prison_if(curthread->td_ucred, ifa->ifa_addr))
continue;
info.rti_info[RTAX_IFA] = ifa->ifa_addr;
info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask;
@@ -1220,7 +1357,7 @@ sysctl_ifmalist(int af, struct walkarg *
if (af && af != ifma->ifma_addr->sa_family)
continue;
if (jailed(curproc->p_ucred) &&
- prison_if(curproc->p_ucred, ifma->ifma_addr))
+ !prison_if(curproc->p_ucred, ifma->ifma_addr))
continue;
info.rti_info[RTAX_IFA] = ifma->ifma_addr;
info.rti_info[RTAX_GATEWAY] =
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/vnet.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/net/vnet.h Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/net/vnet.h Fri Dec 5 07:43:51 2008 (r185630)
@@ -33,9 +33,10 @@
#ifndef _NET_VNET_H_
#define _NET_VNET_H_
-#ifdef VIMAGE
#include "opt_route.h"
+#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/proc.h>
#include <sys/protosw.h>
#include <sys/socket.h>
@@ -66,8 +67,6 @@ struct vnet_net {
int _ether_ipfw;
};
-#endif
-
/*
* Symbol translation macros
*/
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -537,8 +537,8 @@ gnttab_expand(unsigned int req_entries)
return rc;
}
-static int
-gnttab_init(void *unused)
+int
+gnttab_init()
{
int i;
unsigned int max_nr_glist_frames;
@@ -593,4 +593,4 @@ ini_nomem:
}
MTX_SYSINIT(gnttab, &gnttab_list_lock, "GNTTAB LOCK", MTX_DEF);
-SYSINIT(gnttab, SI_SUB_PSEUDO, SI_ORDER_FIRST, gnttab_init, NULL);
+//SYSINIT(gnttab, SI_SUB_PSEUDO, SI_ORDER_FIRST, gnttab_init, NULL);
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.h Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.h Fri Dec 5 07:43:51 2008 (r185630)
@@ -49,6 +49,8 @@ struct gnttab_free_callback {
uint16_t count;
};
+int gnttab_init(void);
+
int gnttab_grant_foreign_access(domid_t domid, unsigned long frame,
int flags);
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_client.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_client.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_client.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -46,7 +46,7 @@ __FBSDID("$FreeBSD$");
#include <machine/xen/xen-os.h>
#include <machine/xen/evtchn.h>
#include <xen/gnttab.h>
-#include <machine/xen/xenbus.h>
+#include <xen/xenbus/xenbusvar.h>
#include <machine/stdarg.h>
@@ -71,7 +71,7 @@ const char *xenbus_strstate(XenbusState
}
int
-xenbus_watch_path(struct xenbus_device *dev, char *path,
+xenbus_watch_path(device_t dev, char *path,
struct xenbus_watch *watch,
void (*callback)(struct xenbus_watch *,
const char **, unsigned int))
@@ -94,7 +94,7 @@ xenbus_watch_path(struct xenbus_device *
EXPORT_SYMBOL(xenbus_watch_path);
-int xenbus_watch_path2(struct xenbus_device *dev, const char *path,
+int xenbus_watch_path2(device_t dev, const char *path,
const char *path2, struct xenbus_watch *watch,
void (*callback)(struct xenbus_watch *,
const char **, unsigned int))
@@ -119,70 +119,27 @@ int xenbus_watch_path2(struct xenbus_dev
}
EXPORT_SYMBOL(xenbus_watch_path2);
-
-int xenbus_switch_state(struct xenbus_device *dev,
- XenbusState state)
-{
- /* We check whether the state is currently set to the given value, and
- if not, then the state is set. We don't want to unconditionally
- write the given state, because we don't want to fire watches
- unnecessarily. Furthermore, if the node has gone, we don't write
- to it, as the device will be tearing down, and we don't want to
- resurrect that directory.
- */
-
- int current_state;
- int err;
-
- if (state == dev->state)
- return (0);
-
- err = xenbus_scanf(XBT_NIL, dev->nodename, "state", "%d",
- ¤t_state);
- if (err != 1)
- return 0;
-
- err = xenbus_printf(XBT_NIL, dev->nodename, "state", "%d", state);
- if (err) {
- if (state != XenbusStateClosing) /* Avoid looping */
- xenbus_dev_fatal(dev, err, "writing new state");
- return err;
- }
-
- dev->state = state;
- return 0;
-
-}
-
-int xenbus_frontend_closed(struct xenbus_device *dev)
-{
- xenbus_switch_state(dev, XenbusStateClosed);
-#if 0
- complete(&dev->down);
-#endif
- return 0;
-}
-
/**
* Return the path to the error node for the given device, or NULL on failure.
* If the value returned is non-NULL, then it is the caller's to kfree.
*/
-static char *error_path(struct xenbus_device *dev)
+static char *error_path(device_t dev)
{
- char *path_buffer = kmalloc(strlen("error/") + strlen(dev->nodename) +
+ char *path_buffer = kmalloc(strlen("error/")
+ + strlen(xenbus_get_node(dev)) +
1, GFP_KERNEL);
if (path_buffer == NULL) {
return NULL;
}
strcpy(path_buffer, "error/");
- strcpy(path_buffer + strlen("error/"), dev->nodename);
+ strcpy(path_buffer + strlen("error/"), xenbus_get_node(dev));
return path_buffer;
}
-static void _dev_error(struct xenbus_device *dev, int err, const char *fmt,
+static void _dev_error(device_t dev, int err, const char *fmt,
va_list ap)
{
int ret;
@@ -205,13 +162,13 @@ static void _dev_error(struct xenbus_dev
if (path_buffer == NULL) {
printk("xenbus: failed to write error node for %s (%s)\n",
- dev->nodename, printf_buffer);
+ xenbus_get_node(dev), printf_buffer);
goto fail;
}
if (xenbus_write(XBT_NIL, path_buffer, "error", printf_buffer) != 0) {
printk("xenbus: failed to write error node for %s (%s)\n",
- dev->nodename, printf_buffer);
+ xenbus_get_node(dev), printf_buffer);
goto fail;
}
@@ -223,7 +180,7 @@ static void _dev_error(struct xenbus_dev
}
-void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt,
+void xenbus_dev_error(device_t dev, int err, const char *fmt,
...)
{
va_list ap;
@@ -235,7 +192,7 @@ void xenbus_dev_error(struct xenbus_devi
EXPORT_SYMBOL(xenbus_dev_error);
-void xenbus_dev_fatal(struct xenbus_device *dev, int err, const char *fmt,
+void xenbus_dev_fatal(device_t dev, int err, const char *fmt,
...)
{
va_list ap;
@@ -244,14 +201,15 @@ void xenbus_dev_fatal(struct xenbus_devi
_dev_error(dev, err, fmt, ap);
va_end(ap);
- xenbus_switch_state(dev, XenbusStateClosing);
+ xenbus_set_state(dev, XenbusStateClosing);
}
EXPORT_SYMBOL(xenbus_dev_fatal);
-int xenbus_grant_ring(struct xenbus_device *dev, unsigned long ring_mfn)
+int xenbus_grant_ring(device_t dev, unsigned long ring_mfn)
{
- int err = gnttab_grant_foreign_access(dev->otherend_id, ring_mfn, 0);
+ int err = gnttab_grant_foreign_access(
+ xenbus_get_otherend_id(dev), ring_mfn, 0);
if (err < 0)
xenbus_dev_fatal(dev, err, "granting access to ring page");
return err;
@@ -259,13 +217,13 @@ int xenbus_grant_ring(struct xenbus_devi
EXPORT_SYMBOL(xenbus_grant_ring);
-int xenbus_alloc_evtchn(struct xenbus_device *dev, int *port)
+int xenbus_alloc_evtchn(device_t dev, int *port)
{
struct evtchn_alloc_unbound alloc_unbound;
int err;
alloc_unbound.dom = DOMID_SELF;
- alloc_unbound.remote_dom = dev->otherend_id;
+ alloc_unbound.remote_dom = xenbus_get_otherend_id(dev);
err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
&alloc_unbound);
@@ -279,7 +237,7 @@ int xenbus_alloc_evtchn(struct xenbus_de
EXPORT_SYMBOL(xenbus_alloc_evtchn);
-int xenbus_free_evtchn(struct xenbus_device *dev, int port)
+int xenbus_free_evtchn(device_t dev, int port)
{
struct evtchn_close close;
int err;
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.c Fri Dec 5 07:42:54 2008 (r185629)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.c Fri Dec 5 07:43:51 2008 (r185630)
@@ -31,8 +31,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#include <sys/types.h>
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list