changeset 20:ecf2a0e61fff

rathaxes: add sk_buff stuff
author Thomas Sanchez <thomas.sanchz@gmail.com>
date Sat, 07 Jan 2012 12:46:45 +0100
parents 670925d566c7
children 052f9209ca09 7f879b938ead
files rathaxes_start_to_implement_sk_buff_in_the_lkm.patch series
diffstat 2 files changed, 136 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rathaxes_start_to_implement_sk_buff_in_the_lkm.patch	Sat Jan 07 12:46:45 2012 +0100
@@ -0,0 +1,135 @@
+# HG changeset patch
+# Parent c979b95fd7fbc4c38849cf42a458a50d8d2d6901
+rathaxes: add sk_buff abstraction and add the implementation of the xmit function for the ethernet system. We have a fully (empty) functionnal ethernet driver
+
+diff -r c979b95fd7fb rathaxes/samples/lkm/CMakeLists.txt
+--- a/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 12:15:32 2012 +0100
++++ b/rathaxes/samples/lkm/CMakeLists.txt	Sat Jan 07 12:46:06 2012 +0100
+@@ -1,6 +1,6 @@
+ ADD_RATHAXES_SOURCES(lkm lkm.rtx
+-                     RTI log.rti lkm.rti pci.rti ethernet.rti
+-                     BLT log.blt lkm.blt pci.blt ethernet.blt)
++                     RTI log.rti lkm.rti pci.rti socket.rti ethernet.rti
++                     BLT log.blt lkm.blt pci.blt socket.blt ethernet.blt)
+ 
+ # We can't name lkm since it's already used as the target name to generate the
+ # source (with ADD_RATHAXES_SOURCES).
+diff -r c979b95fd7fb rathaxes/samples/lkm/ethernet.blt
+--- a/rathaxes/samples/lkm/ethernet.blt	Sat Jan 07 12:15:32 2012 +0100
++++ b/rathaxes/samples/lkm/ethernet.blt	Sat Jan 07 12:46:06 2012 +0100
+@@ -1,4 +1,4 @@
+-with Ethernet, PCI, LKM
++with Ethernet, Socket, PCI, LKM
+ {
+     template type   Ethernet::Device()
+     {
+@@ -51,6 +51,24 @@
+         }
+     }
+ 
++    template sequence   Ethernet::send(Ethernet::Device dev, Socket::SKBuff skb)
++    {
++        chunk LKM::prototypes()
++        {
++            static int  rtx_ethernet_xmit(struct sk_buff* skb, struct net_device *dev);
++        }
++
++        chunk LKM::code()
++        {
++            static int  rtx_ethernet_xmit(struct sk_buff* skb, struct net_device *dev)
++            {
++                ${pointcut ::IMPLEMENTATION};
++
++                return 0;
++            }
++        }
++    }
++
+     template sequence   Ethernet::close(Ethernet::Device dev)
+     {
+         chunk LKM::prototypes()
+@@ -100,7 +118,7 @@
+             {
+                 .ndo_open = rtx_ethernet_open,
+                 .ndo_stop = rtx_ethernet_close,
+-                .ndo_start_xmit = NULL,
++                .ndo_start_xmit = rtx_ethernet_xmit,
+             };
+         }
+ 
+diff -r c979b95fd7fb rathaxes/samples/lkm/ethernet.rti
+--- a/rathaxes/samples/lkm/ethernet.rti	Sat Jan 07 12:15:32 2012 +0100
++++ b/rathaxes/samples/lkm/ethernet.rti	Sat Jan 07 12:46:06 2012 +0100
+@@ -1,4 +1,4 @@
+-interface Ethernet : PCI, LKM
++interface Ethernet : Socket, PCI, LKM
+ {
+     provided type       Ethernet::Device;
+ 
+@@ -10,6 +10,12 @@
+         provided chunk  LKM::code;
+     }
+ 
++    required sequence   Ethernet::send(Ethernet::Device dev, Socket::SKBuff skb)
++    {
++        provided chunk  LKM::prototypes;
++        provided chunk  LKM::code;
++    }
++
+     required sequence   Ethernet::close(Ethernet::Device)
+     {
+         provided chunk  LKM::prototypes;
+diff -r c979b95fd7fb rathaxes/samples/lkm/lkm.rtx
+--- a/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 12:15:32 2012 +0100
++++ b/rathaxes/samples/lkm/lkm.rtx	Sat Jan 07 12:46:06 2012 +0100
+@@ -15,6 +15,11 @@
+         Log::info("Got an interruption");
+     }
+ 
++    Ethernet::send(Ethernet::Device dev, Socket::SKBuff skb)
++    {
++        Log::info("We have one packet to transmit!");
++    }
++
+     PCI::probe(PCI::Device dev)
+     {
+         Log::info("Probe the device");
+diff -r c979b95fd7fb rathaxes/samples/lkm/socket.blt
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/rathaxes/samples/lkm/socket.blt	Sat Jan 07 12:46:06 2012 +0100
+@@ -0,0 +1,27 @@
++with Socket, LKM
++{
++    template type Socket::SKBuff()
++    {
++        chunk LKM::includes()
++        {
++            #include <linux/sk_buff.h>
++        }
++
++        chunk ::decl()
++        {
++            struct sk_buff;
++        }
++
++        chunk ::init()
++        {
++        }
++
++        map
++        {
++            // some work may have to be done here in order
++            // to access to some field of the sk_buff.
++            // We should determine if all the sk_buff managment
++            // can be abstracted from the user.
++        }
++    }
++}
+diff -r c979b95fd7fb rathaxes/samples/lkm/socket.rti
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/rathaxes/samples/lkm/socket.rti	Sat Jan 07 12:46:06 2012 +0100
+@@ -0,0 +1,4 @@
++interface Socket : LKM
++{
++    provided type Socket::SKBuff;
++}
--- a/series	Sat Jan 07 12:15:33 2012 +0100
+++ b/series	Sat Jan 07 12:46:45 2012 +0100
@@ -2,3 +2,4 @@
 rathaxes_add_a_linux_lkm.patch
 rathaxes_start_to_implement_pci_stuff_in_the_lkm.patch
 rathaxes_start_to_implement_the_ethernet_subsystem_in_the_lkm.patch
+rathaxes_start_to_implement_sk_buff_in_the_lkm.patch