--- /dev/null
+diff -urN openswan-2.6.23/linux/net/ipsec/ipsec_mast.c openswan-2.6.23.new/linux/net/ipsec/ipsec_mast.c
+--- openswan-2.6.23/linux/net/ipsec/ipsec_mast.c 2009-09-09 02:42:54.000000000 +0200
++++ openswan-2.6.23.new/linux/net/ipsec/ipsec_mast.c 2009-11-08 14:20:37.000000000 +0100
+@@ -643,6 +643,18 @@
+ return NOTIFY_DONE;
+ }
+
++
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++static const struct net_device_ops ipsec_mast_ops = {
++ .ndo_open = ipsec_mast_open,
++ .ndo_stop = ipsec_mast_close,
++ .ndo_start_xmit = ipsec_mast_start_xmit,
++ .ndo_get_stats = ipsec_mast_get_stats,
++ .ndo_do_ioctl = ipsec_mast_ioctl,
++ .ndo_neigh_setup = ipsec_mast_neigh_setup_dev,
++};
++#endif
++
+ /*
+ * Called when an ipsec mast device is initialized.
+ * The ipsec mast device structure is passed to us.
+@@ -657,12 +669,17 @@
+ "allocating %lu bytes initialising device: %s\n",
+ (unsigned long) sizeof(struct mastpriv),
+ dev->name ? dev->name : "NULL");
+-
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ /* Add our mast functions to the device */
+ dev->open = ipsec_mast_open;
+ dev->stop = ipsec_mast_close;
+ dev->hard_start_xmit = ipsec_mast_start_xmit;
+ dev->get_stats = ipsec_mast_get_stats;
++#else
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ dev->netdev_ops = &ipsec_mast_ops;
++#endif
++#endif
+ #ifdef alloc_netdev
+ dev->destructor = free_netdev;
+ #endif
+@@ -677,9 +694,11 @@
+ for(i = 0; i < sizeof(zeroes); i++) {
+ ((__u8*)(zeroes))[i] = 0;
+ }
+-
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ dev->set_multicast_list = NULL;
+ dev->do_ioctl = ipsec_mast_ioctl;
++#endif
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev->header_ops = NULL;
+ #else
+@@ -687,8 +706,10 @@
+ dev->rebuild_header = NULL;
+ dev->header_cache_update= NULL;
+ #endif
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ dev->set_mac_address = NULL;
+ dev->neigh_setup = ipsec_mast_neigh_setup_dev;
++#endif
+ dev->hard_header_len = 8+20+20+8;
+ dev->mtu = 0;
+ dev->addr_len = 0;
+@@ -719,6 +740,9 @@
+ struct net_device *im;
+ int vifentry;
+ char name[IFNAMSIZ];
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ struct net_device_ops *im_ops;
++#endif
+
+ if(vifnum > IPSEC_NUM_IFMAX) {
+ return -ENOENT;
+@@ -750,8 +774,14 @@
+ memset((caddr_t)im, 0, sizeof(struct net_device));
+ memcpy(im->name, name, IFNAMSIZ);
+ #endif
+-
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ im->init = ipsec_mast_probe;
++#else
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ im_ops = (struct net_device_ops *)im->netdev_ops;
++ im_ops->ndo_init = ipsec_mast_probe;
++#endif
++#endif
+
+ if(register_netdev(im) != 0) {
+ printk(KERN_ERR "ipsec_mast: failed to register %s\n",
+diff -urN openswan-2.6.23/linux/net/ipsec/ipsec_rcv.c openswan-2.6.23.new/linux/net/ipsec/ipsec_rcv.c
+--- openswan-2.6.23/linux/net/ipsec/ipsec_rcv.c 2009-09-09 02:42:54.000000000 +0200
++++ openswan-2.6.23.new/linux/net/ipsec/ipsec_rcv.c 2009-11-08 14:16:26.000000000 +0100
+@@ -482,9 +482,15 @@
+ irs->ipsp->ips_out->name);
+ }
+ skb->dev = irs->ipsp->ips_out;
+-
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ if(skb->dev && skb->dev->get_stats) {
+ struct net_device_stats *stats = skb->dev->get_stats(skb->dev);
++#else
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ if(skb->dev && skb->dev->netdev_ops->ndo_get_stats) {
++ struct net_device_stats *stats = skb->dev->netdev_ops->ndo_get_stats(skb->dev);
++#endif
++#endif
+ irs->stats = stats;
+ }
+ }
+diff -urN openswan-2.6.23/linux/net/ipsec/ipsec_tunnel.c openswan-2.6.23.new/linux/net/ipsec/ipsec_tunnel.c
+--- openswan-2.6.23/linux/net/ipsec/ipsec_tunnel.c 2009-09-09 02:42:54.000000000 +0200
++++ openswan-2.6.23.new/linux/net/ipsec/ipsec_tunnel.c 2009-11-08 14:14:38.000000000 +0100
+@@ -3,7 +3,7 @@
+ * Copyright (C) 1996, 1997 John Ioannidis.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Richard Guy Briggs.
+ *
+- * OCF/receive state machine written by
++ * OCF/receive statet machine written by
+ * David McCullough <dmccullough@cyberguard.com>
+ * Copyright (C) 2004-2005 Intel Corporation. All Rights Reserved.
+ *
+@@ -1098,6 +1098,10 @@
+ {
+ int i;
+ struct ipsecpriv *prv = netdev_priv(dev);
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ struct net_device_ops *dev_ops;
++ struct net_device_ops *physdev_ops;
++#endif
+
+ if(dev == NULL) {
+ KLIPS_PRINT(debug_tunnel & DB_TN_REVEC,
+@@ -1113,11 +1117,17 @@
+ dev->name ? dev->name : "NULL");
+ return -ENODATA;
+ }
+-
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ dev->set_mac_address = ipsec_tunnel_set_mac_address;
+ prv->dev = physdev;
+ prv->hard_start_xmit = physdev->hard_start_xmit;
+ prv->get_stats = physdev->get_stats;
++#else
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ dev_ops = (struct net_device_ops *)dev->netdev_ops;
++ dev_ops->ndo_set_mac_address = ipsec_tunnel_set_mac_address;
++#endif
++#endif
+
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ if (physdev->header_ops) {
+@@ -1152,18 +1162,34 @@
+ } else
+ dev->header_cache_update = NULL;
+ #endif
+-
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ if (physdev->set_mac_address) {
+ prv->set_mac_address = physdev->set_mac_address;
+ dev->set_mac_address = ipsec_tunnel_set_mac_address;
+ } else
+ dev->set_mac_address = NULL;
+-
++#else
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ physdev_ops = (struct net_device_ops *)physdev->netdev_ops;
++ if (physdev_ops->ndo_set_mac_address) {
++ prv->set_mac_address = physdev_ops->ndo_set_mac_address;
++ dev_ops->ndo_set_mac_address = ipsec_tunnel_set_mac_address;
++ } else
++ dev_ops->ndo_set_mac_address = NULL;
++#endif
++#endif
++
+ dev->hard_header_len = physdev->hard_header_len;
+
+ #ifdef NET_21
+ /* prv->neigh_setup = physdev->neigh_setup; */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ dev->neigh_setup = ipsec_tunnel_neigh_setup_dev;
++#else
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++#endif
++ dev_ops->ndo_neigh_setup = ipsec_tunnel_neigh_setup_dev;
++#endif
+ #endif /* NET_21 */
+ dev->mtu = 16260; /* 0xfff0; */ /* dev->mtu; */
+ prv->mtu = physdev->mtu;
+@@ -1602,6 +1628,16 @@
+ * Called when an ipsec tunnel device is initialized.
+ * The ipsec tunnel device structure is passed to us.
+ */
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++static const struct net_device_ops ipsec_tunnel_netdev_ops = {
++ .ndo_open = ipsec_tunnel_open,
++ .ndo_stop = ipsec_tunnel_close,
++ .ndo_start_xmit = ipsec_tunnel_start_xmit,
++ .ndo_get_stats = ipsec_tunnel_get_stats,
++ .ndo_do_ioctl = ipsec_tunnel_ioctl,
++ .ndo_neigh_setup = ipsec_tunnel_neigh_setup_dev,
++};
++#endif
+
+ int
+ ipsec_tunnel_init(struct net_device *dev)
+@@ -1614,12 +1650,17 @@
+ (unsigned long) sizeof(struct ipsecpriv),
+ dev->name ? dev->name : "NULL");
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ /* Add our tunnel functions to the device */
+ dev->open = ipsec_tunnel_open;
+ dev->stop = ipsec_tunnel_close;
+ dev->hard_start_xmit = ipsec_tunnel_start_xmit;
+ dev->get_stats = ipsec_tunnel_get_stats;
+-
++#else
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ dev->netdev_ops = &ipsec_tunnel_netdev_ops;
++#endif
++#endif
+ #ifndef alloc_netdev
+ dev->priv = kmalloc(sizeof(struct ipsecpriv), GFP_KERNEL);
+ if (dev->priv == NULL)
+@@ -1637,8 +1678,10 @@
+ skb_queue_head_init(&dev->buffs[i]);
+ #endif /* !NET_21 */
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ dev->set_multicast_list = NULL;
+ dev->do_ioctl = ipsec_tunnel_ioctl;
++#endif
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev->header_ops = NULL;
+ #else
+@@ -1653,7 +1696,9 @@
+
+ #ifdef NET_21
+ /* prv->neigh_setup = NULL; */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ dev->neigh_setup = ipsec_tunnel_neigh_setup_dev;
++#endif
+ #endif /* NET_21 */
+ dev->hard_header_len = 0;
+ dev->mtu = 0;
+@@ -1695,7 +1740,9 @@
+ char name[IFNAMSIZ];
+ struct net_device *dev_ipsec;
+ int vifentry;
+-
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ struct net_device_ops *dev_ops;
++#endif
+ if(ifnum > IPSEC_NUM_IFMAX) {
+ return -ENOENT;
+ }
+@@ -1747,7 +1794,14 @@
+ dev_ipsec->next = NULL;
+ #endif
+ #endif /* alloc_netdev */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ dev_ipsec->init = &ipsec_tunnel_probe;
++#else
++#if !(defined CONFIG_COMPAT_NET_DEV_OPS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
++ dev_ops = (struct net_device_ops *)dev_ipsec->netdev_ops;
++ dev_ops->ndo_init = &ipsec_tunnel_probe;
++#endif
++#endif
+ KLIPS_PRINT(debug_tunnel & DB_TN_INIT,
+ "klips_debug:ipsec_tunnel_init_devices: "
+ "registering device %s\n",