[myn:2008041800] の続き.Linux 2.6.25 の git の最新版にあげると,
/tmp/vmware-config0/vmnet-only/bridge.c: In function 'VNetBridgeDevCompatible': /tmp/vmware-config0/vmnet-only/bridge.c:278: error: 'struct net_device' has no member named 'nd_net' /tmp/vmware-config0/vmnet-only/bridge.c:278: error: 'struct net_device' has no member named 'nd_net' /tmp/vmware-config0/vmnet-only/bridge.c: In function 'VNetBridgeUp': /tmp/vmware-config0/vmnet-only/bridge.c:913: error: 'struct net_device' has no member named 'nd_net' /tmp/vmware-config0/vmnet-only/bridge.c:951: error: 'struct net_device' has no member named 'nd_net'
とか怒られる.これは,
[include/linux/netdevice.h]
#ifdef CONFIG_NET_NS
/* Network namespace this network device is inside */
struct net *nd_net;
#endif
とかになっていて CONFIG_NET_NS が設定されていないから. とはいえ CONFIG_NET_NS は !CONFIG_SYSFS でなければ設定不能 (ということで普通は設定されない).ということで,
[include/linux/netdevice.h]
/*
* Net namespace inlines
*/
static inline
struct net *dev_net(const struct net_device *dev)
{
#ifdef CONFIG_NET_NS
return dev->nd_net;
#else
return &init_net;
#endif
}
という method を使うことにする.
diff -ruw vmnet-only.orig/bridge.c vmnet-only/bridge.c
--- vmnet-only.orig/bridge.c 2007-11-28 19:25:06.000000000 +0900
+++ vmnet-only/bridge.c 2008-04-19 19:08:45.000000000 +0900
@@ -275,7 +275,7 @@
struct net_device *net) // IN: Network device
{
#ifdef VMW_NETDEV_HAS_NET
- if (net->nd_net != bridge->internalDev->nd_net) {
+ if (dev_net(net) != dev_net(bridge->internalDev)) {
return 0;
}
#endif
と,
diff -ruw vmnet-only.orig/vmnet-only/vmnetInt.h vmnet-only/vmnetInt.h
--- vmnet-only.orig/vmnet-only/vmnetInt.h 2007-11-28 19:25:06.000000000 +0900
+++ vmnet-only/vmnetInt.h 2008-04-20 23:09:00.000000000 +0900
@@ -63,7 +63,7 @@
# define dev_lock_list() read_lock(&dev_base_lock)
# define dev_unlock_list() read_unlock(&dev_base_lock)
# ifdef VMW_NETDEV_HAS_NET
-# define DEV_GET(x) __dev_get_by_name((x)->internalDev->nd_net, (x)->name)
+# define DEV_GET(x) __dev_get_by_name((dev_net((x)->internalDev)), (x)->name)
# else
# define DEV_GET(x) __dev_get_by_name((x)->name)
# endif
@@ -85,7 +85,7 @@
#ifdef VMW_NETDEV_HAS_NET
extern struct proto vmnet_proto;
-# define compat_sk_alloc(_bri, _pri) sk_alloc((_bri)->internalDev->nd_net, \
+# define compat_sk_alloc(_bri, _pri) sk_alloc((dev_net((_bri)->internalDev)), \
PF_NETLINK, _pri, &vmnet_proto)
#elif defined(VMW_HAVE_SK_ALLOC_WITH_PROTO)
extern struct proto vmnet_proto;
みたいな感じで(なんか無駄に括弧が多くしてしまったような気もする).
該当する Linux 側の変更は, [NET] NETNS: Omit net_device->nd_net without CONFIG_NET_NS.
Last-modified: Sun May 11 18:13:47 +0900 2008