diff --git a/stack/ipv4/af_inet.c b/stack/ipv4/af_inet.c
index 8b394be..d3fe5e0 100644
--- a/stack/ipv4/af_inet.c
+++ b/stack/ipv4/af_inet.c
@@ -305,7 +305,7 @@ static int __init rt_ipv4_proto_init(void)
     rt_icmp_init();
 
 #ifdef CONFIG_PROC_FS
-    ipv4_proc_root = create_proc_entry("ipv4", S_IFDIR, rtnet_proc_root);
+    ipv4_proc_root = proc_mkdir("ipv4", rtnet_proc_root);
     if (!ipv4_proc_root) {
         /*ERRMSG*/printk("RTnet: unable to initialize /proc entry (ipv4)\n");
         return -1;
diff --git a/stack/ipv4/tcp/tcp.c b/stack/ipv4/tcp/tcp.c
index b49f8de..1cd3c0d 100644
--- a/stack/ipv4/tcp/tcp.c
+++ b/stack/ipv4/tcp/tcp.c
@@ -201,9 +201,9 @@ static inline struct tcp_socket *port_hash_search(u32 saddr, u16 sport)
 {
     u32 bucket = sport & port_hash_mask;
     struct tcp_socket *ts;
-    struct hlist_node *n;
+    /* struct hlist_node *n; */
 
-    hlist_for_each_entry(ts, n, &port_hash[bucket], link)
+    hlist_for_each_entry(ts, &port_hash[bucket], link)
         if (ts->sport == sport &&
             (saddr == INADDR_ANY
              || ts->saddr == saddr
@@ -2175,8 +2175,7 @@ static inline char* rt_tcp_string_of_state(u8 state)
     }
 }
 
-static int rt_tcp_proc_read(char *buf, char **start, off_t offset,
-                            int count, int *eof, void *data)
+static int rtnet_rt_tcp_show(struct seq_file *p, void *data)
 {
     rtdm_lockctx_t context;
     struct tcp_socket *ts;
@@ -2188,11 +2187,10 @@ static int rt_tcp_proc_read(char *buf, char **start, off_t offset,
     int index;
     int ret;
 
-    RTNET_PROC_PRINT_VARS_EX(80);
 
-    if (!RTNET_PROC_PRINT_EX("Hash    Local Address           "
-                             "Foreign Address         State\n"))
-        goto done;
+    seq_printf(p, "Hash    Local Address           "
+	       "Foreign Address         State\n");
+
 
     for (index = 0; index < RT_TCP_SOCKETS; index++) {
         rtdm_lock_get_irqsave(&tcp_socket_base_lock, context);
@@ -2215,18 +2213,29 @@ static int rt_tcp_proc_read(char *buf, char **start, off_t offset,
             snprintf(dbuffer, sizeof(dbuffer), "%u.%u.%u.%u:%u",
                      NIPQUAD(daddr), ntohs(dport));
 
-            ret = RTNET_PROC_PRINT_EX("%04X    %-23s %-23s %s\n",
-                                      sport & port_hash_mask, sbuffer, dbuffer,
-                                      rt_tcp_string_of_state(state));
+            ret = seq_printf(p, "%04X    %-23s %-23s %s\n",
+			     sport & port_hash_mask, sbuffer, dbuffer,
+			     rt_tcp_string_of_state(state));
             if (!ret)
                 break;
         }
     }
 
- done:
-    RTNET_PROC_PRINT_DONE_EX;
+    return 0;
+}
+
+static int rtnet_rt_tcp_open(struct inode *inode, struct file *file)
+{
+    return single_open(file, rtnet_rt_tcp_show, NULL);
 }
 
+static const struct file_operations rtnet_rt_tcp_fops = {
+    .open	= rtnet_rt_tcp_open,
+    .read	= seq_read,
+    .llseek	= seq_lseek,
+    .release	= single_release,
+};
+
 /***
  *  rt_tcp_proc_register
  */
@@ -2234,15 +2243,13 @@ static int __init rt_tcp_proc_register(void)
 {
     struct proc_dir_entry *proc_entry;
 
-    proc_entry = create_proc_entry("tcp", S_IFREG | S_IRUGO | S_IWUSR,
-                                   ipv4_proc_root);
+    proc_entry = proc_create("tcp", S_IFREG | S_IRUGO | S_IWUSR,
+			     ipv4_proc_root, &rtnet_rt_tcp_fops);
 
     if (!proc_entry) {
         return -EPERM;
     }
 
-    proc_entry->read_proc = rt_tcp_proc_read;
-
     return 0;
 }
 
diff --git a/stack/ipv4/udp/udp.c b/stack/ipv4/udp/udp.c
index 87be2a4..6d10ff7 100644
--- a/stack/ipv4/udp/udp.c
+++ b/stack/ipv4/udp/udp.c
@@ -94,9 +94,9 @@ static inline struct udp_socket *port_hash_search(u32 saddr, u16 sport)
 {
 	unsigned bucket = sport & port_hash_mask;
 	struct udp_socket *sock;
-	struct hlist_node *n;
+	/* struct hlist_node *n; */
 
-	hlist_for_each_entry(sock, n, &port_hash[bucket], link)
+	hlist_for_each_entry(sock, &port_hash[bucket], link)
 		if (sock->sport == sport &&
 		    (saddr == INADDR_ANY
 		     || sock->saddr == saddr
