--- af_wanpipe.c	Fri Jan 30 13:54:11 2004
+++ /wanpipe/code/sock/af_wanpipe.c	Fri Jan 30 12:21:03 2004
@@ -36,11 +36,13 @@
 #include <linux/wanpipe_includes.h>
 #include <linux/wanpipe.h>
 #include <linux/wanrouter.h>
+#include <linux/if_wanpipe_kernel.h>
+
 #include <linux/if_wanpipe.h>
 #include <linux/if_wanpipe_common.h>
 #include <linux/wanpipe_x25_kernel.h>
 #include <linux/wanpipe_dsp_kernel.h>
-
+#include <linux/if_wanpipe_kernel.h>
 
 #if defined(LINUX_2_1)
  #define dev_put(a)
@@ -112,14 +114,19 @@
 ******************************************************************************/
 
 /* List of all wanpipe sockets. */
+
+#ifdef LINUX_2_6
+HLIST_HEAD(wanpipe_sklist);
+#else
 static struct sock * wanpipe_sklist = NULL;
+#endif
 
 static rwlock_t wanpipe_sklist_lock = RW_LOCK_UNLOCKED;
 
 static atomic_t af_mem_alloc;
 static atomic_t af_skb_alloc;
 
-static atomic_t wanpipe_socks_nr;
+atomic_t wanpipe_socks_nr;
 extern struct proto_ops wanpipe_ops;
 
 static struct sock *wanpipe_alloc_socket(void);
@@ -132,7 +139,7 @@
 void af_wan_sock_rfree(struct sk_buff *skb)
 {
 	struct sock *sk = skb->sk;
-	atomic_sub(skb->truesize, &sk->rmem_alloc);
+	atomic_sub(skb->truesize, &sk->sk_rmem_alloc);
 	wan_skb_destructor(skb);
 }
 
@@ -140,7 +147,7 @@
 {
 	skb->sk = sk;
 	skb->destructor = af_wan_sock_rfree;
-	atomic_add(skb->truesize, &sk->rmem_alloc);
+	atomic_add(skb->truesize, &sk->sk_rmem_alloc);
 }
 #endif
 
@@ -162,50 +169,25 @@
  *
  *===========================================================*/
 
-int wanpipe_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
+static int wanpipe_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
 	struct sock *sk = sock->sk;
-	int err;
-	int pid;
 
 	WAN_ASSERT_EINVAL(!SK_PRIV(sk));
 
 	switch(cmd) 
 	{
-		case FIOSETOWN:
-		case SIOCSPGRP:
-			err = get_user(pid, (int *) arg);
-			if (err)
-				return err; 
-			if (current->pid != pid && current->pgrp != -pid && 
-			    !capable(CAP_NET_ADMIN))
-				return -EPERM;
-			sk->proc = pid;
-			return(0);
-			
-		case FIOGETOWN:
-		case SIOCGPGRP:
-			return put_user(sk->proc, (int *)arg);
-			
-		case SIOCGSTAMP:
-			if(sk->stamp.tv_sec==0)
-				return -ENOENT;
-			err = -EFAULT;
-			if (!copy_to_user((void *)arg, &sk->stamp, sizeof(struct timeval)))
-				err = 0;
-			return err;
-
 		case SIOC_WANPIPE_CHECK_TX:
-			if (atomic_read(&sk->wmem_alloc))
+			if (atomic_read(&sk->sk_wmem_alloc))
 				return 1;
 
 			goto dev_private_ioctl;
 
 		case SIOC_WANPIPE_SOCK_STATE:
 
-			if (sk->state == WANSOCK_CONNECTED){
+			if (sk->sk_state == WANSOCK_CONNECTED){
 				return 0;
-			}else if (sk->state == WANSOCK_DISCONNECTED){	
+			}else if (sk->sk_state == WANSOCK_DISCONNECTED){	
 				return 1;
 			}else{
 				return 2;
@@ -213,7 +195,7 @@
 
 		case SIOC_WANPIPE_SET_NONBLOCK:
 
-			if (sk->state != WANSOCK_DISCONNECTED)
+			if (sk->sk_state != WANSOCK_DISCONNECTED)
 				return -EINVAL;
 
 			sock->file->f_flags |= O_NONBLOCK;
@@ -307,27 +289,26 @@
  *
  *===========================================================*/
 
-static struct sock *wanpipe_make_new(struct sock *osk)
+struct sock *wanpipe_make_new(struct sock *osk)
 {
 	struct sock *sk;
 
-	if (osk->type != SOCK_RAW)
+	if (osk->sk_type != SOCK_RAW)
 		return NULL;
 
 	if ((sk = wanpipe_alloc_socket()) == NULL)
 		return NULL;
 
-	sk->family      = osk->family;
-	sk->type        = osk->type;
-	sk->socket      = osk->socket;
-	sk->priority    = osk->priority;
-	sk->protocol    = osk->protocol;
-	sk->num		= osk->num;
-	sk->rcvbuf      = osk->rcvbuf;
-	sk->sndbuf      = osk->sndbuf;
-	sk->debug       = osk->debug;
-	sk->state       = WANSOCK_CONNECTING;
-	sk->sleep       = osk->sleep;
+	sk->sk_family      = osk->sk_family;
+	sk->sk_type        = osk->sk_type;
+	sk->sk_socket      = osk->sk_socket;
+	sk->sk_priority    = osk->sk_priority;
+	SK_PRIV(sk)->num   = SK_PRIV(osk)->num;
+	sk->sk_rcvbuf      = osk->sk_rcvbuf;
+	sk->sk_sndbuf      = osk->sk_sndbuf;
+	sk->sk_debug       = osk->sk_debug;
+	sk->sk_state       = WANSOCK_CONNECTING;
+	sk->sk_sleep       = osk->sk_sleep;
 
 	return sk;
 }
@@ -378,21 +359,21 @@
 	 * lower layer is dead. Change state and wakeup any waiting
 	 * processes. */
 	if (!skb){
-		sk->state = WANSOCK_BIND_LISTEN;
-		sk->data_ready(sk,0);
+		sk->sk_state = WANSOCK_BIND_LISTEN;
+		sk->sk_data_ready(sk,0);
 		return 0;
 	}
 
-	if (sk->state != WANSOCK_LISTEN){
+	if (sk->sk_state != WANSOCK_LISTEN){
 		printk(KERN_INFO "af_wanpipe: Listen rcv in disconnected state!\n");
-		sk->data_ready(sk,0);
+		sk->sk_data_ready(sk,0);
 		return -EINVAL;
 	}
 
 	/* Check if the receive buffer will hold the incoming
 	 * call request */
-	if (atomic_read(&sk->rmem_alloc) + skb->truesize >= 
-			(unsigned)sk->rcvbuf){
+	if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= 
+			(unsigned)sk->sk_rcvbuf){
 		
 		return -ENOMEM;
 	}	
@@ -421,15 +402,19 @@
 		return -ENODEV;
 	}
 
-	newsk->zapped=1;
-	newsk->bound_dev_if = dev->ifindex;
+	newsk->sk_zapped=1;
+	newsk->sk_bound_dev_if = dev->ifindex;
 	dev_hold(dev);
 	SK_PRIV(newsk)->dev = dev;
 
 	write_lock_irqsave(&wanpipe_sklist_lock,flags);
+#ifdef LINUX_2_6
+	sk_add_node(newsk, &wanpipe_sklist);
+#else
 	newsk->next = wanpipe_sklist;
 	wanpipe_sklist = newsk;
 	sock_hold(newsk);
+#endif
 	write_unlock_irqrestore(&wanpipe_sklist_lock,flags);
 
 	/* Insert the sock into the main wanpipe
@@ -445,19 +430,19 @@
 	//FIXME Obtain the LCN from the SKB buffer
 	//x25_api_hdr = (x25api_hdr_t*)skb->data;
 	
-	newsk->num = skb->protocol;
-	newsk->state = WANSOCK_CONNECTING;
+	SK_PRIV(newsk)->num = skb->protocol;
+	newsk->sk_state = WANSOCK_CONNECTING;
 
 	/* Fill in the standard sock address info */
 
-	sll->sll_family = sk->family;
+	sll->sll_family = sk->sk_family;
 	sll->sll_hatype = dev->type;
-	sll->sll_protocol = newsk->num;
+	sll->sll_protocol = SK_PRIV(newsk)->num;
 	sll->sll_pkttype = skb->pkt_type;
 	sll->sll_ifindex = dev->ifindex;
 	sll->sll_halen = 0;
 
-	sk->ack_backlog++;
+	sk->sk_ack_backlog++;
 
 	/* We also store the new sock pointer in side the
 	 * skb buffer, just incase the lower layer disapears,
@@ -475,8 +460,8 @@
 	 * the dev field in the accept function.*/ 
 
 	skb_set_owner_r(skb, sk);
-	sk->data_ready(sk,skb->len);
-	skb_queue_tail(&sk->receive_queue, skb);
+	sk->sk_data_ready(sk,skb->len);
+	skb_queue_tail(&sk->sk_receive_queue, skb);
 	
 	return 0;
 }
@@ -489,18 +474,20 @@
  *=====================================================================*/
 
 
-int wanpipe_listen(struct socket *sock, int backlog)
+static int wanpipe_listen(struct socket *sock, int backlog)
 {
 	struct sock *sk = sock->sk;
 
  	/* This is x25 specific area if protocol doesn't
          * match, return error */
-	if (sk->num != htons(ETH_P_X25) && sk->num != htons(WP_X25_PROT) && sk->num != htons(DSP_PROT))
+	if (SK_PRIV(sk)->num != htons(ETH_P_X25) && 
+	    SK_PRIV(sk)->num != htons(WP_X25_PROT) && 
+	    SK_PRIV(sk)->num != htons(DSP_PROT))
 		return -EINVAL;
 
-	if (sk->state == WANSOCK_BIND_LISTEN) {
-		sk->max_ack_backlog = backlog;
-		sk->state           = WANSOCK_LISTEN;
+	if (sk->sk_state == WANSOCK_BIND_LISTEN) {
+		sk->sk_max_ack_backlog = backlog;
+		sk->sk_state           = WANSOCK_LISTEN;
 		return 0;
 	}else{
 		printk(KERN_INFO "af_wanpipe: Listening sock was not binded\n");
@@ -520,7 +507,7 @@
  *      return it to the user.	
  *=====================================================================*/
 
-int wanpipe_accept(struct socket *sock, struct socket *newsock, int flags)
+static int wanpipe_accept(struct socket *sock, struct socket *newsock, int flags)
 {
 	struct sock *sk;
 	struct sock *newsk=NULL, *newsk_frmskb=NULL;
@@ -538,25 +525,25 @@
 	if ((sk = sock->sk) == NULL)
 		return -ENOTSOCK;
 
-	if (sk->type != SOCK_RAW)
+	if (sk->sk_type != SOCK_RAW)
 		return -EOPNOTSUPP;
 
-	if (sk->state != WANSOCK_LISTEN)
+	if (sk->sk_state != WANSOCK_LISTEN)
 		return -ENETDOWN;
 
-	if (sk->num != htons(ETH_P_X25) && sk->num != htons(WP_X25_PROT) && sk->num != htons(DSP_PROT))
+	if (SK_PRIV(sk)->num != htons(ETH_P_X25) && SK_PRIV(sk)->num != htons(WP_X25_PROT) && SK_PRIV(sk)->num != htons(DSP_PROT))
 		return -EPROTOTYPE;
 
-	add_wait_queue(sk->sleep,&wait);
+	add_wait_queue(sk->sk_sleep,&wait);
 	current->state = TASK_INTERRUPTIBLE;
 	for (;;){
-		skb = skb_dequeue(&sk->receive_queue);
+		skb = skb_dequeue(&sk->sk_receive_queue);
 		if (skb){
 			err=0;
 			break;
 		}
 		
-		if (sk->state != WANSOCK_LISTEN){
+		if (sk->sk_state != WANSOCK_LISTEN){
 			err = -ENETDOWN;
 			break;
 		}
@@ -568,7 +555,7 @@
 		schedule();
 	}
 	current->state = TASK_RUNNING;
-	remove_wait_queue(sk->sleep,&wait);
+	remove_wait_queue(sk->sk_sleep,&wait);
 
 	if (err != 0)
 		return err;
@@ -584,7 +571,7 @@
 		 * we go the pointer for skb */
 		__sock_put(newsk);
 				
-		if (newsk->zapped && SK_PRIV(newsk) && 
+		if (newsk->sk_zapped && SK_PRIV(newsk) && 
 		   (dev = (struct net_device *)SK_PRIV(newsk)->dev)){
 
 			if (dev && dev->do_ioctl){
@@ -619,7 +606,12 @@
 			printk(KERN_INFO "af_wanpipe: Accept killing newsk, newsk not zapped!\n");
 		}
 
+#ifdef LINUX_2_6
+		sock_set_flag(newsk, SOCK_DEAD);
+#else
 		newsk->dead=1;
+#endif
+
 		wanpipe_kill_sock(newsk);
 
 		KFREE_SKB(skb);
@@ -630,12 +622,12 @@
 	}
 
 accept_newsk_ok:
-	newsk->pair = NULL;
-	newsk->socket = newsock;
-	newsk->sleep = &newsock->wait;
+	newsk->sk_pair = NULL;
+	newsk->sk_socket = newsock;
+	newsk->sk_sleep = &newsock->wait;
 
 	/* Now attach up the new socket */
-	sk->ack_backlog--;
+	sk->sk_ack_backlog--;
 	newsock->sk = newsk;
 
 	if (newsk_frmskb){
@@ -674,13 +666,13 @@
 		return -ENODEV;
 	}
 
-	if (!sk->zapped){
+	if (!sk->sk_zapped){
 		return -EINVAL;
 	}
 
 	sll = (struct wan_sockaddr_ll*)skb->cb;
 
-	sll->sll_family = sk->family;
+	sll->sll_family = sk->sk_family;
 	sll->sll_hatype = dev->type;
 	sll->sll_protocol = skb->protocol;
 	sll->sll_pkttype = skb->pkt_type;
@@ -705,21 +697,25 @@
 
 #ifdef CONFIG_PRODUCT_WANPIPE_SOCK_DATASCOPE
 			if (SK_PRIV(sk) && DATA_SC(sk) && DATA_SC(sk)->parent){
+#ifdef LINUX_2_6
+				if (sock_flag(sk, SOCK_DEAD)){
+#else				
 				if (test_bit(0,&sk->dead)){
+#endif
 					return -ENODEV;
 				}
 				return wanpipe_sk_parent_rx(sk,skb);	
 			}else{
 				if (sock_queue_rcv_skb(sk,skb)<0){
 					AF_SKB_DEC(skb->truesize);
-					sk->data_ready(sk,0);
+					sk->sk_data_ready(sk,0);
 					return -ENOMEM;
 				}
 			}
 #else
 			if (sock_queue_rcv_skb(sk,skb)<0){
 				AF_SKB_DEC(skb->truesize);
-				sk->data_ready(sk,0);
+				sk->sk_data_ready(sk,0);
 				return -ENOMEM;
 			}
 #endif
@@ -729,7 +725,7 @@
                          * Do not set the sock lcn number here, since
          		 * cmd is not guaranteed to be executed on the
                          * board, thus Lcn could be wrong */
-			sk->data_ready(sk,skb->len);
+			sk->sk_data_ready(sk,skb->len);
 			KFREE_SKB(skb);
 			break;
 		case WAN_PACKET_ERR:
@@ -762,7 +758,11 @@
 	struct sock *sk;
 	struct wanpipe_opt *wan_opt;
 
+#ifdef LINUX_2_6
+	if ((sk = sk_alloc(PF_WANPIPE, GFP_ATOMIC, 1,NULL)) == NULL)
+#else
 	if ((sk = sk_alloc(PF_WANPIPE, GFP_ATOMIC, 1)) == NULL)
+#endif
 		return NULL;
 
 	if ((wan_opt = kmalloc(sizeof(struct wanpipe_opt), GFP_ATOMIC)) == NULL) {
@@ -776,8 +776,10 @@
 	
 	AF_MEM_INC(sizeof(struct sock));
 	AF_MEM_INC(sizeof(struct wanpipe_opt));
-	
+
+#ifndef LINUX_2_6
 	MOD_INC_USE_COUNT;
+#endif
 
 	sock_init_data(NULL, sk);
 	return sk;
@@ -789,7 +791,7 @@
  *
  *	This function implements a sendto() system call,
  *      for AF_WANPIPE socket family. 
- *      During socket bind() sk->bound_dev_if is initialized
+ *      During socket bind() sk->sk_bound_dev_if is initialized
  *      to a correct network device. This number is used
  *      to find a network device to which the packet should
  *      be passed to.
@@ -802,8 +804,14 @@
  *      a packet is queued into sk->write_queue.
  *===========================================================*/
 
-int wanpipe_sendmsg(struct socket *sock, struct msghdr *msg, int len,
+#ifdef LINUX_2_6
+static int wanpipe_sendmsg(struct kiocb *iocb, struct socket *sock,
+			       struct msghdr *msg, int len)
+
+#else
+static int wanpipe_sendmsg(struct socket *sock, struct msghdr *msg, int len,
 			  struct scm_cookie *scm)
+#endif
 {
 	struct sock *sk = sock->sk;
 	struct wan_sockaddr_ll *saddr=(struct wan_sockaddr_ll *)msg->msg_name;
@@ -815,20 +823,20 @@
 
 	WAN_ASSERT_EINVAL(!SK_PRIV(sk));
 	
-	if (!sk->zapped)
+	if (!sk->sk_zapped)
 		return -ENETDOWN;
 
-	if (sk->state != WANSOCK_CONNECTED)
+	if (sk->sk_state != WANSOCK_CONNECTED)
 		return -ENOTCONN;	
 
 	if (msg->msg_flags&~MSG_DONTWAIT) 
 		return(-EINVAL);
 
-	if ((sk->protocol == htons(ETH_P_X25) ||
-	     sk->protocol == htons(WP_X25_PROT)) && (len < sizeof(x25api_hdr_t)))
+	if ((SK_PRIV(sk)->num == htons(ETH_P_X25) ||
+	     SK_PRIV(sk)->num == htons(WP_X25_PROT)) && (len < sizeof(x25api_hdr_t)))
 		return -EINVAL;
 
-	if (sk->protocol == htons(DSP_PROT) && (len < sizeof(dspapi_hdr_t)))
+	if (SK_PRIV(sk)->num == htons(DSP_PROT) && (len < sizeof(dspapi_hdr_t)))
 		return -EINVAL;
 
 	if (len < 16){
@@ -836,8 +844,8 @@
 	}
 
 	if (saddr == NULL) {
-		ifindex	= sk->bound_dev_if;
-		proto	= sk->num;
+		ifindex	= sk->sk_bound_dev_if;
+		proto	= SK_PRIV(sk)->num;
 		addr	= NULL;
 
 	}else{
@@ -845,7 +853,7 @@
 			return -EINVAL;
 		}
 
-		ifindex = sk->bound_dev_if;
+		ifindex = sk->sk_bound_dev_if;
 		proto	= saddr->sll_protocol;
 		addr	= saddr->sll_addr;
 	}
@@ -866,9 +874,9 @@
   		return -EMSGSIZE;
 	}
 
-      #ifndef LINUX_2_4
+#if defined(LINUX_2_1)
 	dev_lock_list();
-      #endif
+#endif
       
 	ALLOC_SKB(skb,len+dev->hard_header_len+15);
 	if (skb==NULL){
@@ -894,16 +902,16 @@
 	}
 
 	skb->protocol = proto;
-	skb->priority = sk->priority;
+	skb->priority = sk->sk_priority;
 	skb->pkt_type = WAN_PACKET_DATA;
 
 	err = -ENETDOWN;
 	if (!(dev->flags & IFF_UP))
 		goto out_free;
 
-      #ifndef LINUX_2_4
+#if defined(LINUX_2_1)
 	dev_unlock_list();
-      #endif
+#endif
 
 	AF_SKB_DEC(skb->truesize);
 	if (!dev->hard_start_xmit(skb,dev)){
@@ -916,7 +924,7 @@
 out_free:
 	KFREE_SKB(skb);
 out_unlock:
-#ifndef LINUX_2_4
+#if defined(LINUX_2_1)
 	dev_unlock_list();
 #endif
 	return err;
@@ -930,8 +938,9 @@
  *===========================================================*/
 void wanpipe_kill_sock (struct sock *sk)
 {
-
+#ifndef LINUX_2_6
 	struct sock **skp;
+#endif
 	unsigned long flags;
 	
 	if (!sk)
@@ -939,9 +948,9 @@
 
 	WAN_ASSERT_VOID(!SK_PRIV(sk));
 	
-	sk->state = WANSOCK_DISCONNECTED;
-	sk->zapped=0;
-	sk->bound_dev_if=0;
+	sk->sk_state = WANSOCK_DISCONNECTED;
+	sk->sk_zapped=0;
+	sk->sk_bound_dev_if=0;
 	if (SK_PRIV(sk)->dev){
 		dev_put(SK_PRIV(sk)->dev);
 	}
@@ -951,6 +960,9 @@
 	 * appropriate locks */
 	
 	write_lock_irqsave(&wanpipe_sklist_lock,flags);
+#ifdef LINUX_2_6
+	sk_del_node_init(sk);	
+#else
 	for (skp = &wanpipe_sklist; *skp; skp = &(*skp)->next) {
 		if (*skp == sk) {
 			*skp = sk->next;
@@ -958,30 +970,34 @@
 			break;
 		}
 	}
+#endif
 	write_unlock_irqrestore(&wanpipe_sklist_lock,flags);
 
-	sk->socket = NULL;
+	sk->sk_socket = NULL;
 
 	/* Purge queues */
-	af_skb_queue_purge(&sk->receive_queue);
-	af_skb_queue_purge(&sk->error_queue);
+	af_skb_queue_purge(&sk->sk_receive_queue);
+	af_skb_queue_purge(&sk->sk_error_queue);
 
 	KFREE(SK_PRIV(sk));
 	SK_PRIV(sk)=NULL;
 	
-      #ifdef LINUX_2_4
-	if (atomic_read(&sk->refcnt) != 1){
-		DEBUG_EVENT("af_wanpipe: Error, wrong reference count: %i ! :Kill.\n",
-					atomic_read(&sk->refcnt));
-		atomic_set(&sk->refcnt,1);
+#if defined(LINUX_2_4)||defined(LINUX_2_6)
+	if (atomic_read(&sk->sk_refcnt) != 1){
+		DEBUG_TEST("af_wanpipe: Error, wrong reference count: %i ! :Kill.\n",
+					atomic_read(&sk->sk_refcnt));
+		atomic_set(&sk->sk_refcnt,1);
 	}
 	sock_put(sk);
-      #else
+#else
 	sk_free(sk);
-      #endif
+#endif
 	AF_MEM_DEC(sizeof(struct sock));
 	atomic_dec(&wanpipe_socks_nr);
+
+#ifndef LINUX_2_6
 	MOD_DEC_USE_COUNT;
+#endif
 	return;
 }
 
@@ -992,14 +1008,17 @@
 	struct sk_buff *skb;
 	struct sock *deadsk;
 	
-	while ((skb=skb_dequeue(&sk->receive_queue))!=NULL){
+	while ((skb=skb_dequeue(&sk->sk_receive_queue))!=NULL){
 		deadsk=(struct sock *)*(unsigned long*)&skb->data[0];
 		if (!deadsk){
 			KFREE_SKB(skb);
 			continue;
 		}
-
+#ifdef LINUX_2_6
+		sock_set_flag(deadsk, SOCK_DEAD);
+#else		
 		deadsk->dead=1;
+#endif
 		printk (KERN_INFO "af_wanpipe: Release: found dead sock!\n");
 
 		if (SK_PRIV(deadsk)){
@@ -1030,18 +1049,20 @@
  *      protocol entry in the device list.
  *===========================================================*/
 
-#ifdef LINUX_2_4
-int wanpipe_release(struct socket *sock)
+#if defined(LINUX_2_4)||defined(LINUX_2_6)
+static int wanpipe_release(struct socket *sock)
 #else
-int wanpipe_release(struct socket *sock, struct socket *peersock)
+static int wanpipe_release(struct socket *sock, struct socket *peersock)
 #endif
 {
 	
-#ifndef LINUX_2_4
+#if defined(LINUX_2_1)
 	struct sk_buff	*skb;
 #endif
 	struct sock *sk = sock->sk;
+#ifndef LINUX_2_6
 	struct sock **skp;
+#endif
 	unsigned long flags;
 	
 	if (!sk)
@@ -1053,7 +1074,7 @@
 
 #ifdef CONFIG_PRODUCT_WANPIPE_SOCK_DATASCOPE
 	if (SK_PRIV(sk) && DATA_SC(sk) && DATA_SC(sk)->parent_sk != NULL){
-		clear_bit(0,&sk->zapped);
+		sk->sk_zapped=0;
 		wanpipe_unbind_sk_from_parent(sk);
 	}
 #endif
@@ -1068,13 +1089,13 @@
 	 *	Unhook packet receive handler.
 	 */
 
-	if (sk->state == WANSOCK_LISTEN || sk->state == WANSOCK_BIND_LISTEN){
-		unbind_api_listen_from_protocol	(sk->num,sk);
+	if (sk->sk_state == WANSOCK_LISTEN || sk->sk_state == WANSOCK_BIND_LISTEN){
+		unbind_api_listen_from_protocol	(SK_PRIV(sk)->num,sk);
 		release_queued_pending_sockets(sk);
 		
-	}else if ((sk->num == htons(ETH_P_X25) ||
-		   sk->num == htons(WP_X25_PROT) || 
-		   sk->num == htons(DSP_PROT)) && sk->zapped){
+	}else if ((SK_PRIV(sk)->num == htons(ETH_P_X25) ||
+		   SK_PRIV(sk)->num == htons(WP_X25_PROT) || 
+		   SK_PRIV(sk)->num == htons(DSP_PROT)) && sk->sk_zapped){
 
 		netdevice_t *dev = (struct net_device *)SK_PRIV(sk)->dev;
 		if (dev){
@@ -1088,7 +1109,7 @@
 		}else{
 			DEBUG_EVENT("%s: No dev on svc release !\n",__FUNCTION__);
 		}
-	}else if (sk->zapped){
+	}else if (sk->sk_zapped){
 		netdevice_t *dev = (struct net_device *)SK_PRIV(sk)->dev;
 		if (dev){
 			if(dev->do_ioctl){
@@ -1101,9 +1122,9 @@
 		}
 	}
 
-	sk->state = WANSOCK_DISCONNECTED;
-	sk->zapped=0;
-	sk->bound_dev_if=0;
+	sk->sk_state = WANSOCK_DISCONNECTED;
+	sk->sk_zapped=0;
+	sk->sk_bound_dev_if=0;
 	if (SK_PRIV(sk)->dev){
 		dev_put((struct net_device*)SK_PRIV(sk)->dev);
 	}
@@ -1112,6 +1133,9 @@
 	
 	//FIXME with spinlock_irqsave
 	write_lock_irqsave(&wanpipe_sklist_lock,flags);
+#ifdef LINUX_2_6
+	sk_del_node_init(sk);	
+#else
 	for (skp = &wanpipe_sklist; *skp; skp = &(*skp)->next) {
 		if (*skp == sk) {
 			*skp = sk->next;
@@ -1119,40 +1143,48 @@
 			break;
 		}
 	}
+#endif
 	write_unlock_irqrestore(&wanpipe_sklist_lock,flags);
 
 	/*
 	 *	Now the socket is dead. No more input will appear.
 	 */
 
-	sk->state_change(sk);	/* It is useless. Just for sanity. */
+	sk->sk_state_change(sk);	/* It is useless. Just for sanity. */
 	
 	sock->sk = NULL;
-	sk->socket = NULL;
-	sk->dead = 1;
+	sk->sk_socket = NULL;
+
+#ifdef LINUX_2_6
+	sock_set_flag(sk, SOCK_DEAD);
+#else
+	sk->dead=1;
+#endif
 
 	/* Purge queues */
-	af_skb_queue_purge(&sk->receive_queue);
-	af_skb_queue_purge(&sk->error_queue);
+	af_skb_queue_purge(&sk->sk_receive_queue);
+	af_skb_queue_purge(&sk->sk_error_queue);
 
 
 	KFREE(SK_PRIV(sk));
 	SK_PRIV(sk)=NULL;
 	
-      #ifdef LINUX_2_4
-	if (atomic_read(&sk->refcnt) != 1){
+#if defined(LINUX_2_4)||defined(LINUX_2_6)
+	if (atomic_read(&sk->sk_refcnt) != 1){
 		DEBUG_EVENT("af_wanpipe: Error, wrong reference count: %i !:release.\n",
-					atomic_read(&sk->refcnt));
-		atomic_set(&sk->refcnt,1);
+					atomic_read(&sk->sk_refcnt));
+		atomic_set(&sk->sk_refcnt,1);
 	}
 	sock_put(sk);
-      #else	
+#else	
 	sk_free(sk);
-      #endif
+#endif
 	AF_MEM_DEC(sizeof(struct sock));
 	atomic_dec(&wanpipe_socks_nr);
-	
+
+#ifndef LINUX_2_6
 	MOD_DEC_USE_COUNT;
+#endif
 	
 	return 0;
 }
@@ -1169,10 +1201,10 @@
 static void check_write_queue(struct sock *sk)
 {
 
-	if (sk->state != WANSOCK_CONNECTED)
+	if (sk->sk_state != WANSOCK_CONNECTED)
 		return;
 
-	if (!atomic_read(&sk->wmem_alloc))
+	if (!atomic_read(&sk->sk_wmem_alloc))
 		return;
 
 	printk(KERN_INFO "af_wanpipe: MAJOR ERROR, Data lost on sock release !!!\n");
@@ -1191,7 +1223,7 @@
  *===========================================================*/
 
 
-int wanpipe_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+static int wanpipe_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 {
 	struct wan_sockaddr_ll *sll = (struct wan_sockaddr_ll*)uaddr;
 	struct sock *sk=sock->sk;
@@ -1214,8 +1246,8 @@
 
 	WAN_ASSERT_EINVAL(!SK_PRIV(sk));
 
-	sk->family = sll->sll_family;
-	sk->num = sll->sll_protocol ? sll->sll_protocol : sk->num;
+	sk->sk_family = sll->sll_family;
+	SK_PRIV(sk)->num = sll->sll_protocol ? sll->sll_protocol : SK_PRIV(sk)->num;
 
 	if (!strcmp(sll->sll_device,"svc_connect") ||
 	    !strcmp(sll->sll_device,"dsp_connect")){
@@ -1223,8 +1255,8 @@
 		strncpy(name,sll->sll_card,14);
 		name[14]=0;
 
-		if (sk->num == htons(WP_X25_PROT)){
-			sk->num = htons(ETH_P_X25);
+		if (SK_PRIV(sk)->num == htons(WP_X25_PROT)){
+			SK_PRIV(sk)->num = htons(ETH_P_X25);
 		}
 		
 		/* Obtain the master device, in case of Annexg this
@@ -1232,19 +1264,19 @@
 		 * the usage count on dev will be incremented, once
 		 * we are finshed with the device we should run
 		 * dev_put() to release it */
-#ifdef LINUX_2_4
+#if defined(LINUX_2_4)||defined(LINUX_2_6)
 		dev = dev_get_by_name(name);
 #else
 		dev = dev_get(name);
 #endif
 		if (dev == NULL){
 
-			sk->bound_dev_if = bind_api_to_protocol(NULL,
+			sk->sk_bound_dev_if = bind_api_to_protocol(NULL,
 					                        sll->sll_card,
 								htons(WP_X25_PROT),
 								(void*)sk);
-			if (sk->bound_dev_if >= 0){
-				sk->num = htons(WP_X25_PROT);
+			if (sk->sk_bound_dev_if >= 0){
+				SK_PRIV(sk)->num = htons(WP_X25_PROT);
 				goto wanpipe_svc_connect_skip;
 			}
 				
@@ -1260,7 +1292,7 @@
 			return -ENODEV;
 		}
 		
-		sk->bound_dev_if = bind_api_to_protocol(dev,sll->sll_card,sk->num,(void*)sk);	
+		sk->sk_bound_dev_if = bind_api_to_protocol(dev,sll->sll_card,SK_PRIV(sk)->num,(void*)sk);	
 		
 		/* We are finished with the lapb master device, we
 		 * need it to find a free svc or dsp device but now
@@ -1269,12 +1301,12 @@
 	
 wanpipe_svc_connect_skip:
 		
-		if (sk->bound_dev_if < 0){
-			sk->bound_dev_if=0;
+		if (sk->sk_bound_dev_if < 0){
+			sk->sk_bound_dev_if=0;
 			err=-EINVAL;
 		}else{
-			sk->state = WANSOCK_DISCONNECTED;
-			SK_PRIV(sk)->dev=dev_get_by_index(sk->bound_dev_if);
+			sk->sk_state = WANSOCK_DISCONNECTED;
+			SK_PRIV(sk)->dev=dev_get_by_index(sk->sk_bound_dev_if);
 			if (SK_PRIV(sk)->dev){
 				err=0;
 			}else{
@@ -1289,8 +1321,8 @@
 		strncpy(name,sll->sll_card,14);
 		name[14]=0;
 
-		if (sk->num == htons(WP_X25_PROT)){
-			sk->num = htons(ETH_P_X25);
+		if (SK_PRIV(sk)->num == htons(WP_X25_PROT)){
+			SK_PRIV(sk)->num = htons(ETH_P_X25);
 		}
 
 		/* Obtain the master device, in case of Annexg this
@@ -1299,7 +1331,7 @@
 		 * we are finshed with the device we should run
 		 * dev_put() to release it */
 
-#ifdef LINUX_2_4
+#if defined(LINUX_2_4)||defined(LINUX_2_6)
 		dev = dev_get_by_name(name);
 #else
 		dev = dev_get(name);
@@ -1310,7 +1342,7 @@
 				                          htons(WP_X25_PROT),
 							  (void*)sk);
 			if (err==0){
-				sk->num = htons(WP_X25_PROT);
+				SK_PRIV(sk)->num = htons(WP_X25_PROT);
 				goto wanpipe_svc_listen_skip;
 			}
 			
@@ -1326,14 +1358,14 @@
 			return -ENODEV;
 		}
 
-		err = bind_api_listen_to_protocol(dev,sll->sll_card,sk->num,sk);	
+		err = bind_api_listen_to_protocol(dev,sll->sll_card,SK_PRIV(sk)->num,sk);	
 
 		dev_put(dev);
 
 wanpipe_svc_listen_skip:
 
 		if (!err){
-			sk->state = WANSOCK_BIND_LISTEN;
+			sk->sk_state = WANSOCK_BIND_LISTEN;
 		}
 
 	
@@ -1342,7 +1374,7 @@
 		strncpy(name,sll->sll_device,14);
 		name[14]=0;
 	
-#ifdef LINUX_2_4
+#if defined(LINUX_2_4)||defined(LINUX_2_6)
 		dev = dev_get_by_name(name);
 #else
 		dev = dev_get(name);
@@ -1364,7 +1396,7 @@
 		err=-ENODEV;
 
 #ifdef CONFIG_PRODUCT_WANPIPE_SOCK_DATASCOPE
-		if (sk->num == htons(SS7_MONITOR_PROT)){
+		if (SK_PRIV(sk)->num == htons(SS7_MONITOR_PROT)){
 			return wanpipe_bind_sk_to_parent(sk,dev,sll);
 		}
 #endif
@@ -1373,20 +1405,20 @@
 			err=dev->do_ioctl(dev,&ifr,SIOC_ANNEXG_BIND_SK);
 		
 		if (err == 0){
-			sk->bound_dev_if = dev->ifindex; 
+			sk->sk_bound_dev_if = dev->ifindex; 
 			SK_PRIV(sk)->dev = dev;
 
 
-			if (sk->num == htons(ETH_P_X25) || 
-			    sk->num == htons(WP_X25_PROT) ||
-			    sk->num == htons(DSP_PROT)){
-				sk->state = WANSOCK_DISCONNECTED;
+			if (SK_PRIV(sk)->num == htons(ETH_P_X25) || 
+			    SK_PRIV(sk)->num == htons(WP_X25_PROT) ||
+			    SK_PRIV(sk)->num == htons(DSP_PROT)){
+				sk->sk_state = WANSOCK_DISCONNECTED;
 			}else{
 				err=dev->do_ioctl(dev,&ifr,SIOC_WANPIPE_DEV_STATE);
 				if (err == WANSOCK_CONNECTED){
-					sk->state = WANSOCK_CONNECTED;
+					sk->sk_state = WANSOCK_CONNECTED;
 				}else{
-					sk->state = WANSOCK_DISCONNECTED;
+					sk->sk_state = WANSOCK_CONNECTING;
 				}
 				err=0;
 			}
@@ -1396,11 +1428,11 @@
 	}
 
 	if (!err){
-		sk->zapped=1;
+		sk->sk_zapped=1;
 	}
 	
 //	printk(KERN_INFO "11-11 Bind Socket Prot %i, X25=%i Zapped %i, Bind Dev %i Sock %u!\n",
-//			sk->num,htons(ETH_P_X25),sk->zapped,sk->bound_dev_if,(u32)sk);
+//			SK_PRIV(sk)->num,htons(ETH_P_X25),sk->sk_zapped,sk->sk_bound_dev_if,(u32)sk);
 	
 	return err;
 }
@@ -1427,16 +1459,16 @@
 		return -ENOMEM;
 	}
 
-	sk->reuse = 1;
+	sk->sk_reuse = 1;
 	sock->ops = &wanpipe_ops;
 	sock_init_data(sock,sk);
 
-	sk->zapped=0;
-	sk->family = AF_WANPIPE;
-	sk->num = protocol;
-	sk->state = WANSOCK_UNCONFIGURED;
-	sk->ack_backlog = 0;
-	sk->bound_dev_if=0;
+	sk->sk_zapped=0;
+	sk->sk_family = AF_WANPIPE;
+	SK_PRIV(sk)->num = protocol;
+	sk->sk_state = WANSOCK_UNCONFIGURED;
+	sk->sk_ack_backlog = 0;
+	sk->sk_bound_dev_if=0;
 	SK_PRIV(sk)->dev=NULL;
 
 	atomic_inc(&wanpipe_socks_nr);
@@ -1445,9 +1477,13 @@
 	 * can also change the list */
 	
 	write_lock_irqsave(&wanpipe_sklist_lock,flags);
+#ifdef LINUX_2_6
+	sk_add_node(sk, &wanpipe_sklist);
+#else
 	sk->next = wanpipe_sklist;
 	wanpipe_sklist = sk;
 	sock_hold(sk);
+#endif
 	write_unlock_irqrestore(&wanpipe_sklist_lock,flags);
 	
 	return(0);
@@ -1461,8 +1497,14 @@
  *      to the user. If necessary we block.
  *===========================================================*/
 
-int wanpipe_recvmsg(struct socket *sock, struct msghdr *msg, int len,
+#ifdef LINUX_2_6
+
+static int wanpipe_recvmsg(struct kiocb *iocb, struct socket *sock,
+			  struct msghdr *msg, int len, int flags)
+#else
+static int wanpipe_recvmsg(struct socket *sock, struct msghdr *msg, int len,
 			  int flags, struct scm_cookie *scm)
+#endif
 {
 	struct sock *sk = sock->sk;
 	struct sk_buff *skb;
@@ -1488,7 +1530,7 @@
 	 */
 
 	if (flags & MSG_OOB){	
-		skb=skb_dequeue(&sk->error_queue);
+		skb=skb_dequeue(&sk->sk_error_queue);
 	}else{
 		skb=skb_recv_datagram(sk,flags,1,&err);
 	}
@@ -1557,7 +1599,7 @@
  *===========================================================*/
 
 
-int wanpipe_getname(struct socket *sock, struct sockaddr *uaddr,
+static int wanpipe_getname(struct socket *sock, struct sockaddr *uaddr,
 			  int *uaddr_len, int peer)
 {
 	netdevice_t *dev;
@@ -1566,9 +1608,9 @@
 
 	WAN_ASSERT_EINVAL(!SK_PRIV(sk));
 	
-	sll->sll_family = sk->family;
-	sll->sll_ifindex = sk->bound_dev_if;
-	sll->sll_protocol = sk->num;
+	sll->sll_family = sk->sk_family;
+	sll->sll_ifindex = sk->sk_bound_dev_if;
+	sll->sll_protocol = SK_PRIV(sk)->num;
 	dev = (struct net_device *)SK_PRIV(sk)->dev;
 	if (dev) {
 		sll->sll_hatype = dev->type;
@@ -1598,37 +1640,46 @@
 int wanpipe_notifier(struct notifier_block *this, unsigned long msg, void *data)
 {
 	struct sock *sk;
+#ifdef LINUX_2_6
+	struct hlist_node *node;
+#endif
 	netdevice_t *dev = (netdevice_t*)data;
 
 	if (dev==NULL)
 		return NOTIFY_DONE;
 			
-	for (sk = wanpipe_sklist; sk; sk = sk->next) {
 
+	read_lock(&wanpipe_sklist_lock);
+#ifdef LINUX_2_6
+	sk_for_each(sk, node, &wanpipe_sklist) {
+#else
+	for (sk = wanpipe_sklist; sk; sk = sk->next) {
+#endif
 		switch (msg) {
 		case NETDEV_DOWN:
 		case NETDEV_UNREGISTER:
-			if (dev->ifindex == sk->bound_dev_if) {
+			if (dev->ifindex == sk->sk_bound_dev_if) {
 				
 				printk(KERN_INFO "af_wanpipe: Device down %s\n",dev->name);
 
-				if (sk->state != WANSOCK_LISTEN && 
-				    sk->state != WANSOCK_BIND_LISTEN){
-					sk->state = WANSOCK_DISCONNECTED;
+				if (sk->sk_state != WANSOCK_LISTEN && 
+				    sk->sk_state != WANSOCK_BIND_LISTEN){
+					sk->sk_state = WANSOCK_DISCONNECTED;
 				}
-				sk->bound_dev_if = 0;
-				sk->zapped=0;
+				sk->sk_bound_dev_if = 0;
+				sk->sk_zapped=0;
 				
 				if (SK_PRIV(sk) && SK_PRIV(sk)->dev){
 					dev_put((struct net_device *)SK_PRIV(sk)->dev);
 					SK_PRIV(sk)->dev=NULL;
 				}
-				sk->data_ready(sk,0);
+				sk->sk_data_ready(sk,0);
 			}
 			break;
 		}
 	}
-	
+	read_unlock(&wanpipe_sklist_lock);
+
 	return NOTIFY_DONE;
 }
 
@@ -1644,7 +1695,7 @@
  *	then please supply your own write_space callback.
  *=====================================================================*/
 
-unsigned int wanpipe_poll(struct file * file, struct socket *sock, poll_table *wait)
+static unsigned int wanpipe_poll(struct file * file, struct socket *sock, poll_table *wait)
 {
 	struct sock *sk = sock->sk;
 	unsigned int mask=0;
@@ -1654,35 +1705,36 @@
 		return 0;
 
 	DEBUG_TX("%s: Sock State %p = %d\n",
-			__FUNCTION__,sk,sk->state);
+			__FUNCTION__,sk,sk->sk_state);
 
-	poll_wait(file, sk->sleep, wait);
+	poll_wait(file, sk->sk_sleep, wait);
 
 	/* exceptional events? */
 	if (!SK_PRIV(sk) || 
-	    !sk->zapped  || 
-	    sk->err      || 
-	    !skb_queue_empty(&sk->error_queue)){
+	    !sk->sk_zapped  || 
+	    sk->sk_err      || 
+	    !skb_queue_empty(&sk->sk_error_queue)){
 		mask |= POLLPRI;
 		return mask;
 	}
-	if (sk->shutdown & RCV_SHUTDOWN)
+	if (sk->sk_shutdown & RCV_SHUTDOWN){
 		mask |= POLLHUP;
+	}
 
 	/* readable? */
-	if (!skb_queue_empty(&sk->receive_queue)){
+	if (!skb_queue_empty(&sk->sk_receive_queue)){
 		mask |= POLLIN | POLLRDNORM;
 	}
 
 	/* connection hasn't started yet */
-	if (sk->state == WANSOCK_CONNECTING || sk->state == WANSOCK_LISTEN){
+	if (sk->sk_state == WANSOCK_CONNECTING || sk->sk_state == WANSOCK_LISTEN){
 		return mask;
 	}
 
-	if (sk->state != WANSOCK_CONNECTED){
+	if (sk->sk_state != WANSOCK_CONNECTED){
 		mask = POLLPRI;
 		DEBUG_TEST("%s: Sock not connected event on sock %p State=%i\n",
-				__FUNCTION__,sk,sk->state); 
+				__FUNCTION__,sk,sk->sk_state); 
 		return mask;
 	}
 	
@@ -1697,11 +1749,11 @@
 	if (!netif_queue_stopped(dev)){
 		mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
 	}else{
-	      #ifdef LINUX_2_4
-		set_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
-	      #else
- 		sk->socket->flags |= SO_NOSPACE;
-	      #endif
+#if defined(LINUX_2_4)||defined(LINUX_2_6)
+		set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
+#else
+ 		sk->sk_socket->flags |= SO_NOSPACE;
+#endif
 	}
 	
 	return mask;
@@ -1712,13 +1764,13 @@
 	if (sk == NULL || dev == NULL)
 		return -EINVAL;
 
-	if (!sk->zapped)
+	if (!sk->sk_zapped)
 		return -EINVAL;
 
 	DEBUG_TEST("%s: API Connected!\n",__FUNCTION__);
 	
-	sk->state = WANSOCK_CONNECTED;
-	sk->data_ready(sk,0);
+	sk->sk_state = WANSOCK_CONNECTED;
+	sk->sk_data_ready(sk,0);
 	return 0;
 }
 
@@ -1727,13 +1779,13 @@
 	if (sk == NULL || dev == NULL)
 		return -EINVAL;
 
-	if (!sk->zapped)
+	if (!sk->sk_zapped)
 		return -EINVAL;
 
 	DEBUG_TEST("%s: API Connecting!\n",__FUNCTION__);
 	
-	sk->state = WANSOCK_CONNECTING;
-	sk->data_ready(sk,0);
+	sk->sk_state = WANSOCK_CONNECTING;
+	sk->sk_data_ready(sk,0);
 	return 0;
 }
 
@@ -1743,22 +1795,25 @@
 	if (sk == NULL)
 		return -EINVAL;
 
-	if (sk->state == WANSOCK_BIND_LISTEN ||
-	    sk->state == WANSOCK_LISTEN) {
+
+	if (sk->sk_state == WANSOCK_BIND_LISTEN ||
+	    sk->sk_state == WANSOCK_LISTEN) {
 		
-		sk->state = WANSOCK_DISCONNECTED;
-		sk->data_ready(sk,0);
+		sk->sk_state = WANSOCK_DISCONNECTED;
+		sk->sk_data_ready(sk,0);
 		return 0;
 	}
-
-	if (!sk->zapped)
+	
+	
+	if (!sk->sk_zapped){
 		return -EINVAL;
-		
+	}
+	
 	DEBUG_TEST("%s: API Disconnected!\n",__FUNCTION__);
 	
-	sk->state = WANSOCK_DISCONNECTED;
+	sk->sk_state = WANSOCK_DISCONNECTED;
 
-	sk->data_ready(sk,0);
+	sk->sk_data_ready(sk,0);
 	return 0;
 }
 
@@ -1772,44 +1827,44 @@
  *      if specified by user.
  *=====================================================================*/
 
-int wanpipe_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags)
+static int wanpipe_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags)
 {
 	struct sock *sk = sock->sk;
 	struct wan_sockaddr_ll *addr = (struct wan_sockaddr_ll*)uaddr;
 	netdevice_t *dev;
 
-	if (!sk->zapped){		/* Must bind first - autobinding does not work */
+	if (!sk->sk_zapped){		/* Must bind first - autobinding does not work */
 		return -EINVAL;
 	}
 	
 	WAN_ASSERT_EINVAL(!SK_PRIV(sk));
 	
-	if (sk->num != htons(ETH_P_X25) && 
-	    sk->num != htons(WP_X25_PROT) && 
-	    sk->num != htons(DSP_PROT) &&
-	    sk->num != htons(LAPB_PROT) &&
-	    sk->num != htons(SS7_PROT)){
+	if (SK_PRIV(sk)->num != htons(ETH_P_X25) && 
+	    SK_PRIV(sk)->num != htons(WP_X25_PROT) && 
+	    SK_PRIV(sk)->num != htons(DSP_PROT) &&
+	    SK_PRIV(sk)->num != htons(LAPB_PROT) &&
+	    SK_PRIV(sk)->num != htons(SS7_PROT)){
 		DEBUG_EVENT("%s: Illegal protocol in connect() sys call!\n",
 				__FUNCTION__);
 		return -EINVAL;
 	}
 
-	if (sk->state == WANSOCK_CONNECTED){
+	if (sk->sk_state == WANSOCK_CONNECTED){
 		return EISCONN;	/* No reconnect on a seqpacket socket */
 	}
 
-	if (sk->num == htons(SS7_PROT)){
+	if (SK_PRIV(sk)->num == htons(SS7_PROT)){
 		sock->state   = SS_CONNECTING;
-		sk->state     = WANSOCK_CONNECTING;
+		sk->sk_state     = WANSOCK_CONNECTING;
 		return 0;
 	}
 		
-	if (sk->state != WANSOCK_DISCONNECTED){
+	if (sk->sk_state != WANSOCK_DISCONNECTED){
 		printk(KERN_INFO "af_wanpipe: Trying to connect on channel NON DISCONNECT\n");
 		return -ECONNREFUSED;
 	}
 
-	sk->state   = WANSOCK_DISCONNECTED;	
+	sk->sk_state   = WANSOCK_DISCONNECTED;	
 	sock->state = SS_UNCONNECTED;
 
 	if (addr_len != sizeof(struct wan_sockaddr_ll)){
@@ -1829,10 +1884,10 @@
 		return -ENETUNREACH;
 
 	sock->state   = SS_CONNECTING;
-	sk->state     = WANSOCK_CONNECTING;
+	sk->sk_state     = WANSOCK_CONNECTING;
 
 	if (dev->do_ioctl(dev,NULL,SIOC_ANNEXG_PLACE_CALL)){
-		sk->state   = WANSOCK_DISCONNECTED;	
+		sk->sk_state   = WANSOCK_DISCONNECTED;	
 		sock->state = SS_UNCONNECTED;
 		return -ECONNREFUSED; 
 	}
@@ -1842,10 +1897,10 @@
 
 static int sk_buf_check (struct sock *sk, int len)
 {
-	if (!sk->zapped)
+	if (!sk->sk_zapped)
 		return -EINVAL;
 		
-	if (atomic_read(&sk->rmem_alloc) + len >= (unsigned)sk->rcvbuf)
+	if (atomic_read(&sk->sk_rmem_alloc) + len >= (unsigned)sk->sk_rcvbuf)
 		return -ENOMEM;
 
 	return 0;
@@ -1853,32 +1908,31 @@
 
 static int sk_poll_wake (struct sock *sk)
 {
-	if (!sk->zapped)
+	if (!sk->sk_zapped)
 		return -EINVAL;
 
-	sk->data_ready(sk,0);
+	sk->sk_data_ready(sk,0);
 	return 0;
 }
 
 
-#ifdef LINUX_2_4
+#if defined(LINUX_2_4)||defined(LINUX_2_6)
 struct proto_ops wanpipe_ops = {
-	family: 	PF_WANPIPE,
-
-	release: 	wanpipe_release,
-	bind: 		wanpipe_bind,
-	connect: 	wanpipe_connect,
-	socketpair: 	sock_no_socketpair,
-	accept: 	wanpipe_accept,
-	getname: 	wanpipe_getname, 
-	poll: 		wanpipe_poll,
-	ioctl: 		wanpipe_ioctl,
-	listen: 	wanpipe_listen, 
-	shutdown: 	sock_no_shutdown,
-	setsockopt: 	sock_no_setsockopt,
-	getsockopt: 	sock_no_getsockopt,
-	sendmsg: 	wanpipe_sendmsg,
-	recvmsg: 	wanpipe_recvmsg
+	.family 	PF_WANPIPE,
+	.release 	wanpipe_release,
+	.bind		wanpipe_bind,
+	.connect 	wanpipe_connect,
+	.socketpair 	sock_no_socketpair,
+	.accept 	wanpipe_accept,
+	.getname 	wanpipe_getname, 
+	.poll 		wanpipe_poll,
+	.ioctl 		wanpipe_ioctl,
+	.listen 	wanpipe_listen, 
+	.shutdown 	sock_no_shutdown,
+	.setsockopt 	sock_no_setsockopt,
+	.getsockopt	sock_no_getsockopt,
+	.sendmsg 	wanpipe_sendmsg,
+	.recvmsg 	wanpipe_recvmsg
 };
 #else
 struct proto_ops wanpipe_ops = {
@@ -1915,17 +1969,13 @@
 	0
 };
 
-#ifdef MODULE
 MODULE_AUTHOR ("Nenad Corbic <ncorbic@sangoma.com>");
 MODULE_DESCRIPTION ("Sangoma WANPIPE: API Socket Support");
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,9) 
 MODULE_LICENSE("GPL");
-#endif
 
-void cleanup_module(void)
+void __exit af_wanpipe_exit(void)
 {
-	DEBUG_EVENT("af_wanpipe: Unregistering Wanpipe Annexg API Socket Skb=%i Mem=%i\n",
-			atomic_read(&af_skb_alloc),atomic_read(&af_mem_alloc));
+	DEBUG_EVENT("af_wanpipe: Unregistering Wanpipe API Socket Module\n");
 
 	unregister_wanpipe_api_socket();
 
@@ -1939,7 +1989,7 @@
 static char fullname[]	= "WANPIPE(tm) Socket API Module";
 static char copyright[]	= "(c) 1995-2003 Sangoma Technologies Inc.";
 
-int init_module(void)
+int __init af_wanpipe_init(void)
 {
 	struct wanpipe_api_register_struct wan_api_reg; 
 
@@ -1949,7 +1999,7 @@
 	sock_register(&wanpipe_family_ops);
 	register_netdevice_notifier(&wanpipe_netdev_notifier);
 	
-	DEBUG_EVENT("af_wanpipe: Registering Wanpipe API Socket\n");
+	DEBUG_EVENT("af_wanpipe: Registering Wanpipe API Socket Module\n");
 
 	wan_api_reg.wanpipe_api_sock_rcv = wanpipe_api_sock_rcv; 
 	wan_api_reg.wanpipe_api_connected = wanpipe_api_connected;
@@ -1962,4 +2012,6 @@
 	return register_wanpipe_api_socket(&wan_api_reg);
 }
 
-#endif
+module_init(af_wanpipe_init);
+module_exit(af_wanpipe_exit);
+
