--- vpnclient.ori/interceptor.c	2009-05-21 01:16:34.000000000 +1200
+++ vpnclient/interceptor.c	2009-09-06 22:02:39.000000000 +1200
@@ -116,6 +116,14 @@
 };
 #endif
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
+static struct net_device_ops interceptor_netdev_ops = {
+    .ndo_start_xmit = interceptor_tx,
+    .ndo_do_ioctl   = interceptor_ioctl,
+    .ndo_get_stats  = interceptor_stats,
+};
+#endif
+
 static struct notifier_block interceptor_notifier = {
     .notifier_call = handle_netdev_event,
 };
@@ -129,9 +137,13 @@
 {
     ether_setup(dev);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
+    dev->netdev_ops = &interceptor_netdev_ops;
+#else
     dev->hard_start_xmit = interceptor_tx;
     dev->get_stats = interceptor_stats;
     dev->do_ioctl = interceptor_ioctl;
+#endif
 
     dev->mtu = ETH_DATA_LEN-MTU_REDUCTION;
     kernel_memcpy(dev->dev_addr, interceptor_eth_addr,ETH_ALEN);
@@ -242,6 +254,9 @@
 {
     int rc = -1;
     int i = 0;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
+    struct net_device_ops * tmp_ops; 
+#endif
 
     if (!supported_device(dev))
     {
@@ -268,8 +283,14 @@
     Bindings[i].original_mtu = dev->mtu;
 
     /*replace the original send function with our send function */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
+    Bindings[i].InjectSend = dev->netdev_ops->ndo_start_xmit;
+    tmp_ops = (struct net_device_ops *) dev->netdev_ops;
+    tmp_ops->ndo_start_xmit = replacement_dev_xmit;
+#else
     Bindings[i].InjectSend = dev->hard_start_xmit;
     dev->hard_start_xmit = replacement_dev_xmit;
+#endif
 
     /*copy in the ip packet handler function and packet type struct */
     Bindings[i].InjectReceive = original_ip_handler.orig_handler_func;
@@ -285,13 +306,21 @@
 {
     int rc = -1;
     BINDING *b;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
+    struct net_device_ops * tmp_ops; 
+#endif
 
     b = getbindingbydev(dev);
 
     if (b)
     {   
         rc = 0;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
+        tmp_ops = (struct net_device_ops *) dev->netdev_ops;
+        tmp_ops->ndo_start_xmit = b->InjectSend; 
+#else
         dev->hard_start_xmit = b->InjectSend;
+#endif
         kernel_memset(b, 0, sizeof(BINDING));
     }
     else
