Dnia PoniedziaƂek, 15 Grudnia 2014 22:24 Mariusz Janiak <mariuszjan...@wp.pl> 
napisaƂ(a) 
> Hi,
> 
> Following patch should fix the RTnet compilation issues on a kernel 3.10 and 
> higher, especially the latest supported 3.14.17 by the Xenomai 2.6.4. It is 
> based on the Anders Blomdell patch
> 
> http://sourceforge.net/p/rtnet/mailman/message/32034653/
> 
> supplemented with missing parts. 
> 
> Best regards,
> Mariusz Janiak

Now witch missing attachment.

Mariusz

> 
> 
> 
> ------------------------------------------------------------------------------
> Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
> from Actuate! Instantly Supercharge Your Business Reports and Dashboards
> with Interactivity, Sharing, Native Excel Exports, App Integration & more
> Get technology previously reserved for billion-dollar corporations, FREE
> http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
> _______________________________________________
> RTnet-users mailing list
> RTnet-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/rtnet-users

From faafd9b26050cdf9fe77fdcf6a3f4d3a50c823bd Mon Sep 17 00:00:00 2001
From: Mariusz Janiak <mariusz.jan...@pwr.edu.pl>
Date: Mon, 15 Dec 2014 11:53:14 +0100
Subject: [PATCH] Fix compilatin issues on kernel above 3.10


Signed-off-by: Mariusz Janiak <mariusz.jan...@pwr.edu.pl>
---
 drivers/e1000e/netdev.c                |    8 +-
 stack/include/rtcfg/rtcfg_conn_event.h |    1 +
 stack/include/rtcfg/rtcfg_event.h      |    1 +
 stack/include/rtmac/rtmac_disc.h       |    3 +-
 stack/include/rtmac/rtmac_vnic.h       |    7 +-
 stack/include/rtnet_internal.h         |    3 +-
 stack/ipv4/af_inet.c                   |    2 +-
 stack/ipv4/route.c                     |  105 +++++++--------
 stack/ipv4/tcp/tcp.c                   |   46 +++----
 stack/ipv4/udp/udp.c                   |    3 +-
 stack/rtcfg/rtcfg_client_event.c       |    2 +
 stack/rtcfg/rtcfg_event.c              |    3 +-
 stack/rtcfg/rtcfg_proc.c               |  218 ++++++++++++++++++--------------
 stack/rtmac/rtmac_disc.c               |   18 +--
 stack/rtmac/rtmac_proc.c               |   69 ++++++++--
 stack/rtmac/rtmac_vnic.c               |   18 +--
 stack/rtnet_module.c                   |  179 ++++++++++++++------------
 17 files changed, 380 insertions(+), 306 deletions(-)

diff --git a/drivers/e1000e/netdev.c b/drivers/e1000e/netdev.c
index 5634a9b..cc9d537 100644
--- a/drivers/e1000e/netdev.c
+++ b/drivers/e1000e/netdev.c
@@ -2204,7 +2204,7 @@ static void e1000_set_multi(struct rtnet_device *netdev)
 
 	e1000_update_mc_addr_list(hw, NULL, 0);
 
-	if (netdev->features & NETIF_F_HW_VLAN_RX)
+	if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
 		e1000e_vlan_strip_enable(adapter);
 	else
 		e1000e_vlan_strip_disable(adapter);
@@ -4102,15 +4102,15 @@ static int e1000_probe(struct pci_dev *pdev,
 
 	/* Set initial default active device features */
 	netdev->features = (NETIF_F_SG |
-			    NETIF_F_HW_VLAN_RX |
-			    NETIF_F_HW_VLAN_TX |
+			    NETIF_F_HW_VLAN_CTAG_RX |
+			    NETIF_F_HW_VLAN_CTAG_TX |
 			    NETIF_F_TSO |
 			    NETIF_F_TSO6 |
 			    NETIF_F_RXCSUM |
 			    NETIF_F_HW_CSUM);
 
 	if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER)
-		netdev->features |= NETIF_F_HW_VLAN_FILTER;
+		netdev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
 
 	if (pci_using_dac) {
 		netdev->features |= NETIF_F_HIGHDMA;
diff --git a/stack/include/rtcfg/rtcfg_conn_event.h b/stack/include/rtcfg/rtcfg_conn_event.h
index a89dcd1..0083ae4 100644
--- a/stack/include/rtcfg/rtcfg_conn_event.h
+++ b/stack/include/rtcfg/rtcfg_conn_event.h
@@ -61,6 +61,7 @@ struct rtcfg_connection {
     u64                     cfg_timeout;
 #ifdef CONFIG_PROC_FS
     struct proc_dir_entry   *proc_entry;
+    char                    proc_entry_name[64];
 #endif
 };
 
diff --git a/stack/include/rtcfg/rtcfg_event.h b/stack/include/rtcfg/rtcfg_event.h
index 5a6fb9d..98a1a85 100644
--- a/stack/include/rtcfg/rtcfg_event.h
+++ b/stack/include/rtcfg/rtcfg_event.h
@@ -68,6 +68,7 @@ struct rtcfg_device {
     unsigned int                    burstrate;
 #ifdef CONFIG_PROC_FS
     struct proc_dir_entry           *proc_entry;
+    char                            proc_entry_name[64];
 #endif
 
     union {
diff --git a/stack/include/rtmac/rtmac_disc.h b/stack/include/rtmac/rtmac_disc.h
index 58663ce..94b60e9 100644
--- a/stack/include/rtmac/rtmac_disc.h
+++ b/stack/include/rtmac/rtmac_disc.h
@@ -87,8 +87,7 @@ int rtmac_disc_register(struct rtmac_disc *disc);
 void rtmac_disc_deregister(struct rtmac_disc *disc);
 
 #ifdef CONFIG_PROC_FS
-int rtmac_proc_read_disc(char *buf, char **start, off_t offset,
-                         int count, int *eof, void *data);
+int rtnet_rtmac_disciplines_show(struct seq_file *p, void *data);
 #endif /* CONFIG_PROC_FS */
 
 
diff --git a/stack/include/rtmac/rtmac_vnic.h b/stack/include/rtmac/rtmac_vnic.h
index 1adf295..634bd72 100644
--- a/stack/include/rtmac/rtmac_vnic.h
+++ b/stack/include/rtmac/rtmac_vnic.h
@@ -48,10 +48,9 @@ static inline void rtmac_vnic_cleanup(struct rtnet_device *rtdev)
     rtskb_pool_release(&mac_priv->vnic_skb_pool);
 }
 
-
-int rtmac_proc_read_vnic(char *buf, char **start, off_t offset,
-                         int count, int *eof, void *data);
-
+#ifdef CONFIG_PROC_FS
+int rtnet_rtmac_vnics_show(struct seq_file *p, void *data);
+#endif /* CONFIG_PROC_FS */
 
 int __init rtmac_vnic_module_init(void);
 void rtmac_vnic_module_cleanup(void);
diff --git a/stack/include/rtnet_internal.h b/stack/include/rtnet_internal.h
index 81b291a..008e92d 100644
--- a/stack/include/rtnet_internal.h
+++ b/stack/include/rtnet_internal.h
@@ -76,8 +76,9 @@ extern const char rtnet_rtdm_provider_name[];
 
 #include <linux/proc_fs.h>
 
+#ifdef CONFIG_PROC_FS
 extern struct proc_dir_entry *rtnet_proc_root;
-
+#endif
 
 /* Derived from Erwin Rol's rtai_proc_fs.h.
    Standard version assumes that output fits into the provided buffer,
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/route.c b/stack/ipv4/route.c
index c3c4a9b..b467282 100644
--- a/stack/ipv4/route.c
+++ b/stack/ipv4/route.c
@@ -98,47 +98,50 @@ MODULE_PARM_DESC(net_hash_key_shift, "destination right shift for "
  *  proc filesystem section
  */
 #ifdef CONFIG_PROC_FS
-static int rt_route_read_proc(char *buf, char **start, off_t offset, int count,
-                              int *eof, void *data)
+static int rtnet_ipv4_route_show(struct seq_file *p, void *data)
 {
 #ifdef CONFIG_RTNET_RTIPV4_NETROUTING
     u32 mask;
 #endif /* CONFIG_RTNET_RTIPV4_NETROUTING */
-    RTNET_PROC_PRINT_VARS(256);
 
-
-    if (!RTNET_PROC_PRINT("Host routes allocated/total:\t%d/%d\n"
-                          "Host hash table size:\t\t%d\n",
-                          allocated_host_routes,
-                          CONFIG_RTNET_RTIPV4_HOST_ROUTES,
-                          HOST_HASH_TBL_SIZE))
-        goto done;
+    seq_printf(p, "Host routes allocated/total:\t%d/%d\n"
+	       "Host hash table size:\t\t%d\n",
+	       allocated_host_routes,
+	       CONFIG_RTNET_RTIPV4_HOST_ROUTES,
+	       HOST_HASH_TBL_SIZE);
 
 #ifdef CONFIG_RTNET_RTIPV4_NETROUTING
     mask = NET_HASH_KEY_MASK << net_hash_key_shift;
-    if (!RTNET_PROC_PRINT("Network routes allocated/total:\t%d/%d\n"
-                          "Network hash table size:\t%d\n"
-                          "Network hash key shift/mask:\t%d/%08X\n",
-                          allocated_net_routes,
-                          CONFIG_RTNET_RTIPV4_NET_ROUTES, NET_HASH_TBL_SIZE,
-                          net_hash_key_shift, mask))
-        goto done;
+    seq_printf(p, "Network routes allocated/total:\t%d/%d\n"
+	       "Network hash table size:\t%d\n"
+	       "Network hash key shift/mask:\t%d/%08X\n",
+	       allocated_net_routes,
+	       CONFIG_RTNET_RTIPV4_NET_ROUTES, NET_HASH_TBL_SIZE,
+	       net_hash_key_shift, mask);
 #endif /* CONFIG_RTNET_RTIPV4_NETROUTING */
 
 #ifdef CONFIG_RTNET_RTIPV4_ROUTER
-    RTNET_PROC_PRINT("IP Router:\t\t\tyes\n");
+    seq_printf(p, "IP Router:\t\t\tyes\n");
 #else
-    RTNET_PROC_PRINT("IP Router:\t\t\tno\n");
+    seq_printf(p, "IP Router:\t\t\tno\n");
 #endif
 
-  done:
-    RTNET_PROC_PRINT_DONE;
+    return 0;
 }
 
+static int rtnet_ipv4_route_open(struct inode *inode, struct  file *file) {
+  return single_open(file, rtnet_ipv4_route_show, NULL);
+}
+
+static const struct file_operations rtnet_ipv4_route_fops = {
+  .open = rtnet_ipv4_route_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
 
 
-static int rt_host_route_read_proc(char *buf, char **start, off_t offset,
-                                   int count, int *eof, void *data)
+static int  rtnet_ipv4_host__route_show(struct seq_file *p, void *data)
 {
     struct host_route   *entry_ptr;
     struct dest_route   dest_host;
@@ -146,13 +149,8 @@ static int rt_host_route_read_proc(char *buf, char **start, off_t offset,
     unsigned int        index;
     unsigned int        i;
     rtdm_lockctx_t      context;
-    int                 res;
-    RTNET_PROC_PRINT_VARS_EX(80);
-
-
-    if (!RTNET_PROC_PRINT_EX("Hash\tDestination\tHW Address\t\tDevice\n"))
-        goto done;
 
+    seq_printf(p, "Hash\tDestination\tHW Address\t\tDevice\n");
     for (key = 0; key < HOST_HASH_TBL_SIZE; key++) {
         index = 0;
         while (1) {
@@ -174,25 +172,32 @@ static int rt_host_route_read_proc(char *buf, char **start, off_t offset,
 
             rtdm_lock_put_irqrestore(&host_table_lock, context);
 
-            res = RTNET_PROC_PRINT_EX("%02X\t%u.%u.%u.%-3u\t"
-                    "%02X:%02X:%02X:%02X:%02X:%02X\t%s\n",
-                    key, NIPQUAD(dest_host.ip),
-                    dest_host.dev_addr[0], dest_host.dev_addr[1],
-                    dest_host.dev_addr[2], dest_host.dev_addr[3],
-                    dest_host.dev_addr[4], dest_host.dev_addr[5],
-                    dest_host.rtdev->name);
+            seq_printf(p, "%02X\t%u.%u.%u.%-3u\t"
+		      "%02X:%02X:%02X:%02X:%02X:%02X\t%s\n",
+		      key, NIPQUAD(dest_host.ip),
+		      dest_host.dev_addr[0], dest_host.dev_addr[1],
+		      dest_host.dev_addr[2], dest_host.dev_addr[3],
+		      dest_host.dev_addr[4], dest_host.dev_addr[5],
+		      dest_host.rtdev->name);
             rtdev_dereference(dest_host.rtdev);
-            if (!res)
-                goto done;
 
             index++;
         }
     }
+    return 0;
+}
 
-  done:
-    RTNET_PROC_PRINT_DONE_EX;
+static int rtnet_ipv4_host__route_open(struct inode *inode,
+					    struct  file *file) {
+  return single_open(file, rtnet_ipv4_host__route_show, NULL);
 }
 
+static const struct file_operations rtnet_ipv4_host__route_fops = {
+  .open = rtnet_ipv4_host__route_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
 
 
 #ifdef CONFIG_RTNET_RTIPV4_NETROUTING
@@ -266,31 +271,27 @@ static int __init rt_route_proc_register(void)
     struct proc_dir_entry *proc_entry;
 
 
-    proc_entry = create_proc_entry("route", S_IFREG | S_IRUGO | S_IWUSR,
-                                   ipv4_proc_root);
+    proc_entry = proc_create("route", S_IFREG | S_IRUGO | S_IWUSR,
+			     ipv4_proc_root, &rtnet_ipv4_route_fops);
     if (!proc_entry)
         goto err1;
-    proc_entry->read_proc = rt_route_read_proc;
 
-    proc_entry = create_proc_entry("host_route", S_IFREG | S_IRUGO | S_IWUSR,
-                                   ipv4_proc_root);
+    proc_entry = proc_create("host_route", S_IFREG | S_IRUGO | S_IWUSR,
+			     ipv4_proc_root, &rtnet_ipv4_host__route_fops);
     if (!proc_entry)
         goto err2;
-    proc_entry->read_proc = rt_host_route_read_proc;
 
     /* create "arp" as an alias for "host_route" */
-    proc_entry = create_proc_entry("arp", S_IFREG | S_IRUGO | S_IWUSR,
-                                   ipv4_proc_root);
+    proc_entry = proc_create("arp", S_IFREG | S_IRUGO | S_IWUSR,
+			     ipv4_proc_root, &rtnet_ipv4_host__route_fops);
     if (!proc_entry)
         goto err3;
-    proc_entry->read_proc = rt_host_route_read_proc;
 
 #ifdef CONFIG_RTNET_RTIPV4_NETROUTING
-    proc_entry = create_proc_entry("net_route", S_IFREG | S_IRUGO | S_IWUSR,
-                                   ipv4_proc_root);
+    proc_entry = proc_create("net_route", S_IFREG | S_IRUGO | S_IWUSR,
+			     ipv4_proc_root, &rtnet_ipv4_net__route_fops);
     if (!proc_entry)
         goto err4;
-    proc_entry->read_proc = rt_net_route_read_proc;
 #endif /* CONFIG_RTNET_RTIPV4_NETROUTING */
 
     return 0;
diff --git a/stack/ipv4/tcp/tcp.c b/stack/ipv4/tcp/tcp.c
index b49f8de..6a961b2 100644
--- a/stack/ipv4/tcp/tcp.c
+++ b/stack/ipv4/tcp/tcp.c
@@ -201,9 +201,8 @@ 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;
 
-    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 +2174,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_ipv4_tcp_show(struct seq_file *p, void *data)
 {
     rtdm_lockctx_t context;
     struct tcp_socket *ts;
@@ -2186,13 +2184,9 @@ static int rt_tcp_proc_read(char *buf, char **start, off_t offset,
     char dbuffer[24];
     int state;
     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,34 +2209,42 @@ 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));
-            if (!ret)
-                break;
+            seq_printf(p, "%04X    %-23s %-23s %s\n",
+		       sport & port_hash_mask, sbuffer, dbuffer,
+		       rt_tcp_string_of_state(state));
         }
     }
-
- done:
-    RTNET_PROC_PRINT_DONE_EX;
+    return 0;
 }
 
 /***
  *  rt_tcp_proc_register
  */
+
+static int rtnet_ipv4_tcp_open(struct inode *inode, struct  file *file)
+{
+  return single_open(file, rtnet_ipv4_tcp_show, NULL);
+}
+
+static const struct file_operations rtnet_ipv4_tcp_fops = {
+  .open = rtnet_ipv4_tcp_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
+
+
 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_ipv4_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..32b716a 100644
--- a/stack/ipv4/udp/udp.c
+++ b/stack/ipv4/udp/udp.c
@@ -94,9 +94,8 @@ 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;
 
-	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
diff --git a/stack/rtcfg/rtcfg_client_event.c b/stack/rtcfg/rtcfg_client_event.c
index 0ad0cc4..5eef8ba 100644
--- a/stack/rtcfg/rtcfg_client_event.c
+++ b/stack/rtcfg/rtcfg_client_event.c
@@ -744,7 +744,9 @@ static int rtcfg_client_recv_announce(int ifindex, struct rtskb *rtskb)
     struct rtcfg_frm_announce *announce_frm;
     struct rtcfg_device       *rtcfg_dev = &device[ifindex];
     u32                       i;
+#ifdef CONFIG_RTNET_RTIPV4
     u32                       announce_frm_addr;
+#endif
     int                       result;
 
 
diff --git a/stack/rtcfg/rtcfg_event.c b/stack/rtcfg/rtcfg_event.c
index e3005d3..5e70372 100644
--- a/stack/rtcfg/rtcfg_event.c
+++ b/stack/rtcfg/rtcfg_event.c
@@ -507,8 +507,9 @@ static int rtcfg_server_recv_announce(int ifindex, RTCFG_EVENT event_id,
     struct list_head          *entry;
     struct rtcfg_frm_announce *announce;
     struct rtcfg_connection   *conn;
+#ifdef CONFIG_RTNET_RTIPV4
     u32                        announce_addr;
-
+#endif
 
     if (rtskb->len < sizeof(struct rtcfg_frm_announce)) {
         rtdm_mutex_unlock(&rtcfg_dev->dev_mutex);
diff --git a/stack/rtcfg/rtcfg_proc.c b/stack/rtcfg/rtcfg_proc.c
index 93aafd8..ec9430b 100644
--- a/stack/rtcfg/rtcfg_proc.c
+++ b/stack/rtcfg/rtcfg_proc.c
@@ -31,68 +31,74 @@
 
 
 #ifdef CONFIG_PROC_FS
+
 DEFINE_MUTEX(nrt_proc_lock);
 static struct proc_dir_entry    *rtcfg_proc_root;
 
 
 
-int rtcfg_proc_read_dev_state(char *buf, char **start, off_t offset, int count,
-                              int *eof, void *data)
+static int rtnet_rtcfg_dev_state_show(struct seq_file *p, void *data)
 {
     struct rtcfg_device *rtcfg_dev = data;
     char *state_name[] = { "OFF", "SERVER_RUNNING", "CLIENT_0", "CLIENT_1",
                            "CLIENT_ANNOUNCED", "CLIENT_ALL_KNOWN",
                            "CLIENT_ALL_FRAMES", "CLIENT_2", "CLIENT_READY" };
-    RTNET_PROC_PRINT_VARS(256);
 
 
-    if (!RTNET_PROC_PRINT("state:\t\t\t%d (%s)\n"
-                          "flags:\t\t\t%08X\n"
-                          "other stations:\t\t%d\n"
-                          "stations found:\t\t%d\n"
-                          "stations ready:\t\t%d\n",
-                          rtcfg_dev->state, state_name[rtcfg_dev->state],
-                          rtcfg_dev->flags, rtcfg_dev->other_stations,
-                          rtcfg_dev->stations_found,
-                          rtcfg_dev->stations_ready))
-        goto done;
+    seq_printf(p, "state:\t\t\t%d (%s)\n"
+	       "flags:\t\t\t%08X\n"
+	       "other stations:\t\t%d\n"
+	       "stations found:\t\t%d\n"
+	       "stations ready:\t\t%d\n",
+	       rtcfg_dev->state, state_name[rtcfg_dev->state],
+	       rtcfg_dev->flags, rtcfg_dev->other_stations,
+	       rtcfg_dev->stations_found,
+	       rtcfg_dev->stations_ready);
 
     if (rtcfg_dev->state == RTCFG_MAIN_SERVER_RUNNING) {
-        RTNET_PROC_PRINT("configured clients:\t%d\n"
-                         "burstrate:\t\t%d\n"
-                         "heartbeat period:\t%d ms\n",
-                         rtcfg_dev->spec.srv.clients_configured,
-                         rtcfg_dev->burstrate, rtcfg_dev->spec.srv.heartbeat);
+        seq_printf(p, "configured clients:\t%d\n"
+		   "burstrate:\t\t%d\n"
+		   "heartbeat period:\t%d ms\n",
+		   rtcfg_dev->spec.srv.clients_configured,
+		   rtcfg_dev->burstrate, rtcfg_dev->spec.srv.heartbeat);
     } else if (rtcfg_dev->state != RTCFG_MAIN_OFF) {
-        RTNET_PROC_PRINT("address type:\t\t%d\n"
-                         "server address:\t\t%02X:%02X:%02X:%02X:%02X:%02X\n"
-                         "stage 2 config:\t\t%d/%d\n",
-                         rtcfg_dev->spec.clt.addr_type,
-                         rtcfg_dev->spec.clt.srv_mac_addr[0],
-                         rtcfg_dev->spec.clt.srv_mac_addr[1],
-                         rtcfg_dev->spec.clt.srv_mac_addr[2],
-                         rtcfg_dev->spec.clt.srv_mac_addr[3],
-                         rtcfg_dev->spec.clt.srv_mac_addr[4],
-                         rtcfg_dev->spec.clt.srv_mac_addr[5],
-                         rtcfg_dev->spec.clt.cfg_offs,
-                         rtcfg_dev->spec.clt.cfg_len);
+      seq_printf(p, "address type:\t\t%d\n"
+		 "server address:\t\t%02X:%02X:%02X:%02X:%02X:%02X\n"
+		 "stage 2 config:\t\t%d/%d\n",
+		 rtcfg_dev->spec.clt.addr_type,
+		 rtcfg_dev->spec.clt.srv_mac_addr[0],
+		 rtcfg_dev->spec.clt.srv_mac_addr[1],
+		 rtcfg_dev->spec.clt.srv_mac_addr[2],
+		 rtcfg_dev->spec.clt.srv_mac_addr[3],
+		 rtcfg_dev->spec.clt.srv_mac_addr[4],
+		 rtcfg_dev->spec.clt.srv_mac_addr[5],
+		 rtcfg_dev->spec.clt.cfg_offs,
+		 rtcfg_dev->spec.clt.cfg_len);
     }
 
-  done:
-    RTNET_PROC_PRINT_DONE;
+    return 0;
+}
+
+static int rtnet_rtcfg_dev_state_open(struct inode *inode, struct  file *file)
+{
+  return single_open(file, rtnet_rtcfg_dev_state_show, NULL);
 }
 
+static const struct file_operations rtnet_rtcfg_dev_state_fops = {
+  .open = rtnet_rtcfg_dev_state_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
 
 
-int rtcfg_proc_read_stations(char *buf, char **start, off_t offset, int count,
-                             int *eof, void *data)
+int rtnet_rtcfg_dev_station__list_show(struct seq_file *p, void *data)
 {
     struct rtcfg_device     *rtcfg_dev = data;
     struct list_head        *entry;
     struct rtcfg_connection *conn;
     struct rtcfg_station    *station;
     int                     i;
-    RTNET_PROC_PRINT_VARS_EX(80);
 
 
     if (mutex_lock_interruptible(&nrt_proc_lock))
@@ -103,70 +109,89 @@ int rtcfg_proc_read_stations(char *buf, char **start, off_t offset, int count,
             conn = list_entry(entry, struct rtcfg_connection, entry);
 
             if ((conn->state != RTCFG_CONN_SEARCHING) &&
-                (conn->state != RTCFG_CONN_DEAD) &&
-                !RTNET_PROC_PRINT_EX("%02X:%02X:%02X:%02X:%02X:%02X\t%02X\n",
-                                     conn->mac_addr[0], conn->mac_addr[1],
-                                     conn->mac_addr[2], conn->mac_addr[3],
-                                     conn->mac_addr[4], conn->mac_addr[5],
-                                     conn->flags))
-                break;
+                (conn->state != RTCFG_CONN_DEAD)) {
+	        seq_printf(p, "%02X:%02X:%02X:%02X:%02X:%02X\t%02X\n",
+			   conn->mac_addr[0], conn->mac_addr[1],
+			   conn->mac_addr[2], conn->mac_addr[3],
+			   conn->mac_addr[4], conn->mac_addr[5],
+			   conn->flags);
+		break;
+	    }
         }
     } else if (rtcfg_dev->spec.clt.station_addr_list) {
         for (i = 0; i < rtcfg_dev->stations_found; i++) {
             station = &rtcfg_dev->spec.clt.station_addr_list[i];
 
-            if (!RTNET_PROC_PRINT_EX("%02X:%02X:%02X:%02X:%02X:%02X\t%02X\n",
-                    station->mac_addr[0], station->mac_addr[1],
-                    station->mac_addr[2], station->mac_addr[3],
-                    station->mac_addr[4], station->mac_addr[5],
-                    station->flags))
-                break;
-        }
+            seq_printf(p, "%02X:%02X:%02X:%02X:%02X:%02X\t%02X\n",
+		       station->mac_addr[0], station->mac_addr[1],
+		       station->mac_addr[2], station->mac_addr[3],
+		       station->mac_addr[4], station->mac_addr[5],
+		       station->flags);
+	}
     }
 
     mutex_unlock(&nrt_proc_lock);
-    RTNET_PROC_PRINT_DONE_EX;
+
+    return 0;
 }
 
+static int rtnet_rtcfg_dev_station__list_open(struct inode *inode,
+					      struct  file *file)
+{
+  return single_open(file, rtnet_rtcfg_dev_station__list_show, NULL);
+}
+
+static const struct file_operations rtnet_rtcfg_dev_station__list_fops = {
+  .open = rtnet_rtcfg_dev_station__list_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
 
 
-int rtcfg_proc_read_conn_state(char *buf, char **start, off_t offset,
-                               int count, int *eof, void *data)
+int rtnet_rtcfg_dev_conn_show(struct seq_file *p, void *data)
 {
     struct rtcfg_connection *conn = data;
     char *state_name[] =
         { "SEARCHING", "STAGE_1", "STAGE_2", "READY", "DEAD" };
-    RTNET_PROC_PRINT_VARS(512);
-
-
-    if (!RTNET_PROC_PRINT("state:\t\t\t%d (%s)\n"
-                          "flags:\t\t\t%02X\n"
-                          "stage 1 size:\t\t%zd\n"
-                          "stage 2 filename:\t%s\n"
-                          "stage 2 size:\t\t%zd\n"
-                          "stage 2 offset:\t\t%d\n"
-                          "burstrate:\t\t%d\n"
-                          "mac address:\t\t%02X:%02X:%02X:%02X:%02X:%02X\n",
-                          conn->state, state_name[conn->state], conn->flags,
-                          conn->stage1_size,
-                          (conn->stage2_file)? conn->stage2_file->name: "-",
-                          (conn->stage2_file)? conn->stage2_file->size: 0,
-                          conn->cfg_offs, conn->burstrate,
-                          conn->mac_addr[0], conn->mac_addr[1],
-                          conn->mac_addr[2], conn->mac_addr[3],
-                          conn->mac_addr[4], conn->mac_addr[5]))
-        goto done;
+
+    seq_printf(p, "state:\t\t\t%d (%s)\n"
+	       "flags:\t\t\t%02X\n"
+	       "stage 1 size:\t\t%zd\n"
+	       "stage 2 filename:\t%s\n"
+	       "stage 2 size:\t\t%zd\n"
+	       "stage 2 offset:\t\t%d\n"
+	       "burstrate:\t\t%d\n"
+	       "mac address:\t\t%02X:%02X:%02X:%02X:%02X:%02X\n",
+	       conn->state, state_name[conn->state], conn->flags,
+	       conn->stage1_size,
+	       (conn->stage2_file)? conn->stage2_file->name: "-",
+	       (conn->stage2_file)? conn->stage2_file->size: 0,
+	       conn->cfg_offs, conn->burstrate,
+	       conn->mac_addr[0], conn->mac_addr[1],
+	       conn->mac_addr[2], conn->mac_addr[3],
+	       conn->mac_addr[4], conn->mac_addr[5]);
 
 #ifdef CONFIG_RTNET_RTIPV4
     if ((conn->addr_type & RTCFG_ADDR_MASK) == RTCFG_ADDR_IP)
-        RTNET_PROC_PRINT("ip:\t\t\t%u.%u.%u.%u\n",
-                         NIPQUAD(conn->addr.ip_addr));
+        seq_printf(p, "ip:\t\t\t%u.%u.%u.%u\n",
+		   NIPQUAD(conn->addr.ip_addr));
 #endif /* CONFIG_RTNET_RTIPV4 */
 
-  done:
-    RTNET_PROC_PRINT_DONE;
+    return 0;
 }
 
+static int rtnet_rtcfg_dev_conn_open(struct inode *inode, struct  file *file)
+{
+  return single_open(file, rtnet_rtcfg_dev_conn_show, NULL);
+}
+
+static const struct file_operations rtnet_rtcfg_dev_conn_fops = {
+  .open = rtnet_rtcfg_dev_conn_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
 
 
 void rtcfg_update_conn_proc_entries(int ifindex)
@@ -174,7 +199,6 @@ void rtcfg_update_conn_proc_entries(int ifindex)
     struct rtcfg_device     *dev = &device[ifindex];
     struct list_head        *entry;
     struct rtcfg_connection *conn;
-    char                    name_buf[64];
 
 
     if (dev->state != RTCFG_MAIN_SERVER_RUNNING)
@@ -186,26 +210,27 @@ void rtcfg_update_conn_proc_entries(int ifindex)
         switch (conn->addr_type & RTCFG_ADDR_MASK) {
 #ifdef CONFIG_RTNET_RTIPV4
             case RTCFG_ADDR_IP:
-                snprintf(name_buf, 64, "CLIENT_%u.%u.%u.%u",
+	      snprintf(conn->proc_entry_name, sizeof(conn->proc_entry_name),
+		       "CLIENT_%u.%u.%u.%u",
                          NIPQUAD(conn->addr.ip_addr));
                 break;
 #endif /* CONFIG_RTNET_RTIPV4 */
 
             default: /* RTCFG_ADDR_MAC */
-                snprintf(name_buf, 64,
+                snprintf(conn->proc_entry_name, sizeof(conn->proc_entry_name),
                          "CLIENT_%02X%02X%02X%02X%02X%02X",
                          conn->mac_addr[0], conn->mac_addr[1],
                          conn->mac_addr[2], conn->mac_addr[3],
                          conn->mac_addr[4], conn->mac_addr[5]);
                 break;
         }
-        conn->proc_entry = create_proc_entry(name_buf,
-            S_IFREG | S_IRUGO | S_IWUSR, dev->proc_entry);
+        conn->proc_entry = proc_create_data(conn->proc_entry_name,
+					    S_IFREG | S_IRUGO | S_IWUSR,
+					    dev->proc_entry,
+					    &rtnet_rtcfg_dev_conn_fops,
+					    conn);
         if (!conn->proc_entry)
             continue;
-
-        conn->proc_entry->read_proc = rtcfg_proc_read_conn_state;
-        conn->proc_entry->data      = conn;
     }
 }
 
@@ -224,7 +249,7 @@ void rtcfg_remove_conn_proc_entries(int ifindex)
     list_for_each(entry, &dev->spec.srv.conn_list) {
         conn = list_entry(entry, struct rtcfg_connection, entry);
 
-        remove_proc_entry(conn->proc_entry->name, dev->proc_entry);
+        remove_proc_entry(conn->proc_entry_name, dev->proc_entry);
     }
 }
 
@@ -238,23 +263,24 @@ void rtcfg_new_rtdev(struct rtnet_device *rtdev)
 
     mutex_lock(&nrt_proc_lock);
 
-    dev->proc_entry = create_proc_entry(rtdev->name, S_IFDIR, rtcfg_proc_root);
+    strncpy(dev->proc_entry_name, rtdev->name, sizeof(dev->proc_entry_name));
+    dev->proc_entry = proc_mkdir(dev->proc_entry_name, rtcfg_proc_root);
     if (!dev->proc_entry)
         goto exit;
 
-    proc_entry = create_proc_entry("state", S_IFREG | S_IRUGO | S_IWUSR,
-                                   dev->proc_entry);
+    proc_entry = proc_create_data("state", S_IFREG | S_IRUGO | S_IWUSR,
+				  dev->proc_entry,
+				  &rtnet_rtcfg_dev_state_fops,
+				  dev);
     if (!proc_entry)
         goto exit;
-    proc_entry->read_proc = rtcfg_proc_read_dev_state;
-    proc_entry->data      = dev;
 
-    proc_entry = create_proc_entry("station_list", S_IFREG | S_IRUGO | S_IWUSR,
-                                   dev->proc_entry);
+    proc_entry = proc_create_data("station_list", S_IFREG | S_IRUGO | S_IWUSR,
+				  dev->proc_entry,
+				  &rtnet_rtcfg_dev_station__list_fops,
+				  dev);
     if (!proc_entry)
         goto exit;
-    proc_entry->read_proc = rtcfg_proc_read_stations;
-    proc_entry->data      = dev;
 
   exit:
     mutex_unlock(&nrt_proc_lock);
@@ -276,7 +302,7 @@ void rtcfg_remove_rtdev(struct rtnet_device *rtdev)
 
         remove_proc_entry("station_list", dev->proc_entry);
         remove_proc_entry("state", dev->proc_entry);
-        remove_proc_entry(dev->proc_entry->name, rtcfg_proc_root);
+        remove_proc_entry(dev->proc_entry_name, rtcfg_proc_root);
         dev->proc_entry = NULL;
     }
 
@@ -300,7 +326,7 @@ int rtcfg_init_proc(void)
     int                 i;
 
 
-    rtcfg_proc_root = create_proc_entry("rtcfg", S_IFDIR, rtnet_proc_root);
+    rtcfg_proc_root = proc_mkdir("rtcfg", rtnet_proc_root);
     if (!rtcfg_proc_root)
         goto err1;
 
diff --git a/stack/rtmac/rtmac_disc.c b/stack/rtmac/rtmac_disc.c
index 8143de0..daa0c23 100644
--- a/stack/rtmac/rtmac_disc.c
+++ b/stack/rtmac/rtmac_disc.c
@@ -247,28 +247,22 @@ void rtmac_disc_deregister(struct rtmac_disc *disc)
 
 
 #ifdef CONFIG_PROC_FS
-int rtmac_proc_read_disc(char *buf, char **start, off_t offset, int count,
-                         int *eof, void *data)
+int rtnet_rtmac_disciplines_show(struct seq_file *p, void *data)
 {
     struct list_head    *disc;
-    RTNET_PROC_PRINT_VARS(80);
-
 
     mutex_lock(&disc_list_lock);
 
-    if (!RTNET_PROC_PRINT("Name\t\tID\n"))
-        goto done;
+    seq_printf(p, "Name\t\tID\n");
 
     list_for_each(disc, &disc_list) {
-        if (!RTNET_PROC_PRINT("%-15s %04X\n",
-                              ((struct rtmac_disc *)disc)->name,
-                              ntohs(((struct rtmac_disc *)disc)->disc_type)))
-            break;
+        seq_printf(p, "%-15s %04X\n",
+		   ((struct rtmac_disc *)disc)->name,
+		   ntohs(((struct rtmac_disc *)disc)->disc_type));
     }
 
-  done:
     mutex_unlock(&disc_list_lock);
 
-    RTNET_PROC_PRINT_DONE;
+    return 0;
 }
 #endif /* CONFIG_PROC_FS */
diff --git a/stack/rtmac/rtmac_proc.c b/stack/rtmac/rtmac_proc.c
index f155ea3..578fdb9 100644
--- a/stack/rtmac/rtmac_proc.c
+++ b/stack/rtmac/rtmac_proc.c
@@ -34,6 +34,27 @@
 struct proc_dir_entry *rtmac_proc_root;
 
 
+static int  rtnet_rtmac_disc_show(struct seq_file *p, void *data)
+{
+  int (*handler)(struct seq_file *p, void *data) = data;
+
+  return handler(p, NULL);
+}
+
+static int rtnet_rtmac_disc_open(struct inode *inode, struct file *file)
+{
+  return single_open(file, rtnet_rtmac_disc_show, NULL);
+}
+
+static const struct file_operations rtnet_rtmac_disc_fops = {
+  .open = rtnet_rtmac_disc_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
+
+
+
 int rtmac_disc_proc_register(struct rtmac_disc *disc)
 {
     int                     i;
@@ -42,9 +63,11 @@ int rtmac_disc_proc_register(struct rtmac_disc *disc)
 
     i = 0;
     while (disc->proc_entries[i].name != NULL) {
-        proc_entry = create_proc_entry(disc->proc_entries[i].name,
-                                       S_IFREG | S_IRUGO | S_IWUSR,
-                                       rtmac_proc_root);
+        proc_entry = proc_create_data(disc->proc_entries[i].name,
+				      S_IFREG | S_IRUGO | S_IWUSR,
+				      rtmac_proc_root,
+				      &rtnet_rtmac_disc_fops,
+				      disc->proc_entries[i].handler);
         if (!proc_entry) {
             while (--i > 0) {
                 remove_proc_entry(disc->proc_entries[i].name, rtmac_proc_root);
@@ -52,8 +75,6 @@ int rtmac_disc_proc_register(struct rtmac_disc *disc)
             }
             return -1;
         }
-
-        proc_entry->read_proc = disc->proc_entries[i].handler;
         i++;
     }
 
@@ -74,6 +95,32 @@ void rtmac_disc_proc_unregister(struct rtmac_disc *disc)
     }
 }
 
+static int rtnet_rtmac_disciplines_open(struct inode *inode, struct file *file)
+{
+  return single_open(file, rtnet_rtmac_disciplines_show, NULL);
+}
+
+static const struct file_operations rtnet_rtmac_disciplines_fops = {
+  .open = rtnet_rtmac_disciplines_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
+
+
+
+static int rtnet_rtmac_vnics_open(struct inode *inode, struct file *file)
+{
+  return single_open(file, rtnet_rtmac_vnics_show, NULL);
+}
+
+static const struct file_operations rtnet_rtmac_vnics_fops = {
+  .open = rtnet_rtmac_vnics_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
+
 
 
 int rtmac_proc_register(void)
@@ -81,21 +128,19 @@ int rtmac_proc_register(void)
     struct proc_dir_entry *proc_entry;
 
 
-    rtmac_proc_root = create_proc_entry("rtmac", S_IFDIR, rtnet_proc_root);
+    rtmac_proc_root = proc_mkdir("rtmac", rtnet_proc_root);
     if (!rtmac_proc_root)
         goto err1;
 
-    proc_entry = create_proc_entry("disciplines", S_IFREG | S_IRUGO | S_IWUSR,
-                                   rtmac_proc_root);
+    proc_entry = proc_create("disciplines", S_IFREG | S_IRUGO | S_IWUSR,
+			     rtmac_proc_root, &rtnet_rtmac_disciplines_fops);
     if (!proc_entry)
         goto err2;
-    proc_entry->read_proc = rtmac_proc_read_disc;
 
-    proc_entry = create_proc_entry("vnics", S_IFREG | S_IRUGO | S_IWUSR,
-                                   rtmac_proc_root);
+    proc_entry = proc_create("vnics", S_IFREG | S_IRUGO | S_IWUSR,
+			     rtmac_proc_root, &rtnet_rtmac_vnics_fops);
     if (!proc_entry)
         goto err3;
-    proc_entry->read_proc = rtmac_proc_read_vnic;
 
     return 0;
 
diff --git a/stack/rtmac/rtmac_vnic.c b/stack/rtmac/rtmac_vnic.c
index 68798f9..7460401 100644
--- a/stack/rtmac/rtmac_vnic.c
+++ b/stack/rtmac/rtmac_vnic.c
@@ -333,17 +333,13 @@ void rtmac_vnic_unregister(struct rtnet_device *rtdev)
 
 
 #ifdef CONFIG_PROC_FS
-int rtmac_proc_read_vnic(char *buf, char **start, off_t offset, int count,
-                         int *eof, void *data)
+int rtnet_rtmac_vnics_show(struct seq_file *p, void *data)
 {
     struct rtnet_device *rtdev;
     int                 i;
-    int                 res = 0;
-    RTNET_PROC_PRINT_VARS(80);
 
 
-    if (!RTNET_PROC_PRINT("RT-NIC name\tVNIC name\n"))
-        goto done;
+    seq_printf(p, "RT-NIC name\tVNIC name\n");
 
     for (i = 1; i <= MAX_RT_DEVICES; i++) {
         rtdev = rtdev_get_by_index(i);
@@ -359,19 +355,15 @@ int rtmac_proc_read_vnic(char *buf, char **start, off_t offset, int count,
             struct rtmac_priv *rtmac;
 
             rtmac = (struct rtmac_priv *)rtdev->mac_priv;
-            res = RTNET_PROC_PRINT("%-15s %s\n",
-                                    rtdev->name, rtmac->vnic->name);
+            seq_printf(p, "%-15s %s\n",
+		       rtdev->name, rtmac->vnic->name);
         }
 
         mutex_unlock(&rtdev->nrt_lock);
         rtdev_dereference(rtdev);
-
-        if (!res)
-            break;
     }
 
-  done:
-    RTNET_PROC_PRINT_DONE;
+    return 0;
 }
 #endif /* CONFIG_PROC_FS */
 
diff --git a/stack/rtnet_module.c b/stack/rtnet_module.c
index d36f37d..ad0ebe8 100644
--- a/stack/rtnet_module.c
+++ b/stack/rtnet_module.c
@@ -50,7 +50,6 @@ const char rtnet_rtdm_provider_name[] =
 
 EXPORT_SYMBOL(rtnet_rtdm_provider_name);
 
-
 #ifdef CONFIG_PROC_FS
 /***
  *      proc filesystem section
@@ -59,64 +58,71 @@ struct proc_dir_entry *rtnet_proc_root;
 
 EXPORT_SYMBOL(rtnet_proc_root);
 
-
-static int rtnet_read_proc_devices(char *buf, char **start, off_t offset,
-                                   int count, int *eof, void *data)
+static int proc_rtnet_devices_show(struct seq_file *p, void *data)
 {
     int i;
-    int res;
     struct rtnet_device *rtdev;
-    RTNET_PROC_PRINT_VARS(80);
-
 
-    if (!RTNET_PROC_PRINT("Index\tName\t\tFlags\n"))
-        goto done;
+    seq_printf(p, "Index\tName\t\tFlags\n");
 
     mutex_lock(&rtnet_devices_nrt_lock);
     for (i = 1; i <= MAX_RT_DEVICES; i++) {
         rtdev = __rtdev_get_by_index(i);
         if (rtdev != NULL) {
-            res = RTNET_PROC_PRINT("%d\t%-15s %s%s%s%s\n",
-                            rtdev->ifindex, rtdev->name,
-                            (rtdev->flags & IFF_UP) ? "UP" : "DOWN",
-                            (rtdev->flags & IFF_BROADCAST) ? " BROADCAST" : "",
-                            (rtdev->flags & IFF_LOOPBACK) ? " LOOPBACK" : "",
-                            (rtdev->flags & IFF_PROMISC) ? " PROMISC" : "");
-            if (!res)
-                break;
+	  seq_printf(p, "%d\t%-15s %s%s%s%s\n",
+		     rtdev->ifindex, rtdev->name,
+		     (rtdev->flags & IFF_UP) ? "UP" : "DOWN",
+		     (rtdev->flags & IFF_BROADCAST) ? " BROADCAST" : "",
+		     (rtdev->flags & IFF_LOOPBACK) ? " LOOPBACK" : "",
+		     (rtdev->flags & IFF_PROMISC) ? " PROMISC" : "");
         }
     }
     mutex_unlock(&rtnet_devices_nrt_lock);
 
-  done:
-    RTNET_PROC_PRINT_DONE;
+    return 0;
 }
 
+static int proc_rtnet_devices_open(struct inode *inode, struct  file *file) {
+  return single_open(file, proc_rtnet_devices_show, NULL);
+}
 
+static const struct file_operations proc_rtnet_devices_fops = {
+  .open = proc_rtnet_devices_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
 
-static int rtnet_read_proc_rtskb(char *buf, char **start, off_t offset, int count,
-                                 int *eof, void *data)
+
+static int proc_rtnet_rtskb_show(struct seq_file *p, void *data)
 {
     unsigned int rtskb_len;
-    RTNET_PROC_PRINT_VARS(256);
-
 
     rtskb_len = ALIGN_RTSKB_STRUCT_LEN + SKB_DATA_ALIGN(RTSKB_SIZE);
-    RTNET_PROC_PRINT("Statistics\t\tCurrent\tMaximum\n"
-                     "rtskb pools\t\t%d\t%d\n"
-                     "rtskbs\t\t\t%d\t%d\n"
-                     "rtskb memory need\t%d\t%d\n",
-                     rtskb_pools, rtskb_pools_max,
-                     rtskb_amount, rtskb_amount_max,
-                     rtskb_amount * rtskb_len, rtskb_amount_max * rtskb_len);
-
-    RTNET_PROC_PRINT_DONE;
+    seq_printf(p, "Statistics\t\tCurrent\tMaximum\n"
+	       "rtskb pools\t\t%d\t%d\n"
+	       "rtskbs\t\t\t%d\t%d\n"
+	       "rtskb memory need\t%d\t%d\n",
+	       rtskb_pools, rtskb_pools_max,
+	       rtskb_amount, rtskb_amount_max,
+	       rtskb_amount * rtskb_len, rtskb_amount_max * rtskb_len);
+
+    return 0;
 }
 
+static int proc_rtnet_rtskb_open(struct inode *inode, struct  file *file) {
+  return single_open(file, proc_rtnet_rtskb_show, NULL);
+}
+
+static const struct file_operations proc_rtnet_rtskb_fops = {
+  .open = proc_rtnet_rtskb_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
 
 
-static int rtnet_read_proc_version(char *buf, char **start, off_t offset,
-                                   int count, int *eof, void *data)
+static int proc_rtnet_version_show(struct seq_file *p, void *data)
 {
     const char verstr[] =
         "RTnet " RTNET_PACKAGE_VERSION " - built on " __DATE__ " " __TIME__ "\n"
@@ -138,31 +144,34 @@ static int rtnet_read_proc_version(char *buf, char **start, off_t offset,
 #else
             "no\n";
 #endif
-    RTNET_PROC_PRINT_VARS(256);
 
+    seq_printf(p, "%s", verstr);
 
-    RTNET_PROC_PRINT(verstr);
+    return 0;
+}
 
-    RTNET_PROC_PRINT_DONE;
+static int proc_rtnet_version_open(struct inode *inode, struct  file *file) {
+  return single_open(file, proc_rtnet_version_show, NULL);
 }
 
+static const struct file_operations proc_rtnet_version_fops = {
+  .open = proc_rtnet_version_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
 
 
-static int rtnet_read_proc_stats(char *buf, char **start, off_t offset,
-                                 int count, int *eof, void *data)
+static int proc_rtnet_stats_show(struct seq_file *p, void *data)
 {
     int i;
-    int res;
     struct rtnet_device *rtdev;
-    RTNET_PROC_PRINT_VARS(130);
 
-
-    if (!RTNET_PROC_PRINT("Inter-|   Receive                            "
-                          "                    |  Transmit\n") ||
-        !RTNET_PROC_PRINT(" face |bytes    packets errs drop fifo frame "
-                          "compressed multicast|bytes    packets errs "
-                          "drop fifo colls carrier compressed\n"))
-        goto done;
+    seq_printf(p, "Inter-|   Receive                            "
+	       "                    |  Transmit\n");
+    seq_printf(p, " face |bytes    packets errs drop fifo frame "
+	       "compressed multicast|bytes    packets errs "
+	       "drop fifo colls carrier compressed\n");
 
     mutex_lock(&rtnet_devices_nrt_lock);
     for (i = 1; i <= MAX_RT_DEVICES; i++) {
@@ -172,69 +181,71 @@ static int rtnet_read_proc_stats(char *buf, char **start, off_t offset,
         if (rtdev->get_stats) {
             struct net_device_stats *stats = rtdev->get_stats(rtdev);
 
-            res = RTNET_PROC_PRINT(
-                    "%6s:%8lu %7lu %4lu %4lu %4lu %5lu %10lu %9lu "
-                    "%8lu %7lu %4lu %4lu %4lu %5lu %7lu %10lu\n",
-                    rtdev->name, stats->rx_bytes, stats->rx_packets,
-                    stats->rx_errors,
-                    stats->rx_dropped + stats->rx_missed_errors,
-                    stats->rx_fifo_errors,
-                    stats->rx_length_errors + stats->rx_over_errors +
-                      stats->rx_crc_errors + stats->rx_frame_errors,
-                    stats->rx_compressed, stats->multicast,
-                    stats->tx_bytes, stats->tx_packets,
-                    stats->tx_errors, stats->tx_dropped,
-                    stats->tx_fifo_errors, stats->collisions,
-                    stats->tx_carrier_errors +
-                      stats->tx_aborted_errors +
-                      stats->tx_window_errors +
-                      stats->tx_heartbeat_errors,
-                    stats->tx_compressed);
+            seq_printf(p, "%6s:%8lu %7lu %4lu %4lu %4lu %5lu %10lu %9lu "
+		       "%8lu %7lu %4lu %4lu %4lu %5lu %7lu %10lu\n",
+		       rtdev->name, stats->rx_bytes, stats->rx_packets,
+		       stats->rx_errors,
+		       stats->rx_dropped + stats->rx_missed_errors,
+		       stats->rx_fifo_errors,
+		       stats->rx_length_errors + stats->rx_over_errors +
+		       stats->rx_crc_errors + stats->rx_frame_errors,
+		       stats->rx_compressed, stats->multicast,
+		       stats->tx_bytes, stats->tx_packets,
+		       stats->tx_errors, stats->tx_dropped,
+		       stats->tx_fifo_errors, stats->collisions,
+		       stats->tx_carrier_errors +
+		       stats->tx_aborted_errors +
+		       stats->tx_window_errors +
+		       stats->tx_heartbeat_errors,
+		       stats->tx_compressed);
         } else {
-            res = RTNET_PROC_PRINT("%6s: No statistics available.\n",
-                                   rtdev->name);
+	  seq_printf(p, "%6s: No statistics available.\n", rtdev->name);
         }
-        if (!res)
-            break;
     }
     mutex_unlock(&rtnet_devices_nrt_lock);
 
-  done:
-    RTNET_PROC_PRINT_DONE;
+    return 0;
+}
+
+static int proc_rtnet_stats_open(struct inode *inode, struct  file *file) {
+  return single_open(file, proc_rtnet_stats_show, NULL);
 }
 
+static const struct file_operations proc_rtnet_stats_fops = {
+  .open = proc_rtnet_stats_open,
+  .read = seq_read,
+  .llseek = seq_lseek,
+  .release = single_release,
+};
 
 
 static int rtnet_proc_register(void)
 {
     struct proc_dir_entry *proc_entry;
 
-    rtnet_proc_root = create_proc_entry("rtnet", S_IFDIR, 0);
+    rtnet_proc_root = proc_mkdir("rtnet", 0);
     if (!rtnet_proc_root)
         goto error1;
 
-    proc_entry = create_proc_entry("devices", S_IFREG | S_IRUGO | S_IWUSR,
-                                   rtnet_proc_root);
+    proc_entry = proc_create("devices", S_IFREG | S_IRUGO | S_IWUSR,
+			     rtnet_proc_root, &proc_rtnet_devices_fops);
     if (!proc_entry)
         goto error2;
-    proc_entry->read_proc = rtnet_read_proc_devices;
 
-    proc_entry = create_proc_entry("rtskb", S_IFREG | S_IRUGO | S_IWUSR,
-                                   rtnet_proc_root);
+    proc_entry = proc_create("rtskb", S_IFREG | S_IRUGO | S_IWUSR,
+			     rtnet_proc_root, &proc_rtnet_rtskb_fops);
     if (!proc_entry)
         goto error3;
-    proc_entry->read_proc = rtnet_read_proc_rtskb;
 
-    proc_entry = create_proc_entry("version", S_IFREG | S_IRUGO | S_IWUSR,
-                                   rtnet_proc_root);
+    proc_entry = proc_create("version", S_IFREG | S_IRUGO | S_IWUSR,
+			     rtnet_proc_root, &proc_rtnet_version_fops);
     if (!proc_entry)
         goto error4;
-    proc_entry->read_proc = rtnet_read_proc_version;
 
-    proc_entry = create_proc_entry("stats", S_IRUGO, rtnet_proc_root);
+    proc_entry = proc_create("stats", S_IRUGO,
+			     rtnet_proc_root, &proc_rtnet_stats_fops);
     if (!proc_entry)
         goto error5;
-    proc_entry->read_proc = rtnet_read_proc_stats;
 
     return 0;
 
-- 
1.7.9.5

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
_______________________________________________
RTnet-users mailing list
RTnet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rtnet-users

Reply via email to