All of lore.kernel.org
 help / color / mirror / Atom feed
From: cedric arbogast <arbogast.cedric@gmail.com>
To: netdev@vger.kernel.org
Subject: Patchs for pg3.c and Linux 2.6.x kernel
Date: Sun, 22 May 2011 17:24:27 +0200	[thread overview]
Message-ID: <4DD92AAB.8060202@gmail.com> (raw)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello,

This is my first contact and mail with this mailing list, to summarize i'm a coder maintening a personnal home server using several GNU tools since the late 90's.

I build IPUTILS-s20101006 in a chroot jail (gcc 4.5.2/libc 2.13/binutils 2.21/make 3.82) with an athlon architecture on ext3 FS. I see the packet's injection module in the Module directory and try a "make modules" which indeed fails. I put an eye on the pg3.c and it seems it has not been ported to
the 2.6.x modules architecture (i'm not a kernel hacker, so it's just my humble opinion).

I make some trivial adaptations to make the code meets the 2.6 module's API requirements. The patched code compile successfully on the platform described above, but i can't now test it's proper functioning, if anyone could give a try (please consider it could (will ?) be harmful for the test
platform as i am not familiar with kernel modules hacking...) :



- --- Makefile.orig       2010-10-06 13:59:20.000000000 +0200
+++ Makefile    2011-05-22 16:56:09.000000000 +0200
@@ -39,17 +39,8 @@
        $(CC) $(CFLAGS) -DRDISC_SERVER -o rdisc_srv.o rdisc.c


- -check-kernel:
- -ifeq ($(KERNEL_INCLUDE),)
- -       @echo "Please, set correct KERNEL_INCLUDE"; false
- -else
- -       @set -e; \
- -       if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \
- -               echo "Please, set correct KERNEL_INCLUDE"; false; fi
- -endif
- -
- -modules: check-kernel
- -       $(MAKE) KERNEL_INCLUDE=$(KERNEL_INCLUDE) -C Modules
+modules:
+       $(MAKE) -C Modules

 man:
        $(MAKE) -C doc man



- --- Modules/Makefile.orig    2010-10-06 13:59:20.000000000 +0200
+++ Modules/Makefile    2011-05-22 14:47:48.000000000 +0200
@@ -1,12 +1,10 @@
- -KERNEL_INCLUDE=/usr/src/linux/include
+ifneq ($(KERNELRELEASE),)
+    obj-m      := pg3.o

+else
+KDIR   := /lib/modules/$(shell uname -r)/build
+PWD    := $(shell pwd)

- -CC=gcc
- -CCOPT=-O2 -Wstrict-prototypes -Wall -Werror -fno-strict-aliasing -fno-common
- -CFLAGS=-DMODULE -D__KERNEL__ -I$(KERNEL_INCLUDE) $(CCOPT)
- -
- -
- -all: pg3.o
- -
- -clean:
- -       @rm -f *.o
+default:
+       $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
+endif





- --- Modules/pg3.c.orig	2010-10-06 13:59:20.000000000 +0200
+++ Modules/pg3.c	2011-05-22 16:27:57.000000000 +0200
@@ -89,7 +89,7 @@
 #include <linux/ptrace.h>
 #include <linux/errno.h>
 #include <linux/ioport.h>
- -#include <linux/malloc.h>
+#include <linux/slab.h>
 #include <linux/interrupt.h>
 #include <linux/pci.h>
 #include <linux/delay.h>
@@ -110,6 +110,7 @@
 #include <linux/proc_fs.h>
 #include <linux/if_arp.h>
 #include <net/checksum.h>
+#include <linux/version.h>

 static char version[] __initdata =
   "pg3.c: v1.0 010812: Packet Generator for packet performance testing.\n";
@@ -150,7 +151,7 @@
 	u32 saddr;

 	rtnl_lock();
- -	odev = __dev_get_by_name(pg_outdev);
+	odev = __dev_get_by_name(&init_net, pg_outdev);
 	if (!odev) {
 		sprintf(pg_result, "No such netdevice: \"%s\"", pg_outdev);
 		goto out_unlock;
@@ -176,7 +177,8 @@
 		if (in_dev->ifa_list)
 			saddr = in_dev->ifa_list->ifa_address;
 	}
- -	atomic_inc(&odev->refcnt);
+	//atomic_inc(&odev->refcnt);
+	dev_hold(odev);
 	rtnl_unlock();

 	*saddrp = saddr;
@@ -282,7 +284,8 @@
 	iph->check = 0;
 	iph->check = ip_fast_csum((void *)iph, iph->ihl);
 	skb->protocol = __constant_htons(ETH_P_IP);
- -	skb->mac.raw = ((u8*)iph) - 14;
+	//skb->mac.raw = ((u8*)iph) - 14;
+	skb_set_mac_header(skb, -14);
 	skb->dev = odev;
 	skb->pkt_type = PACKET_HOST;

@@ -363,10 +366,11 @@
 	do_gettimeofday(&start);

 	for(;;) {
- -		spin_lock_bh(&odev->xmit_lock);
+		//spin_lock_bh(&odev->xmit_lock);
+		netif_tx_lock_bh(odev);
 		atomic_inc(&skb->users);
 		if (!netif_queue_stopped(odev)) {
- -			if (odev->hard_start_xmit(skb, odev)) {
+			if (odev->netdev_ops->ndo_start_xmit(skb, odev)) {
 				kfree_skb(skb);
 				if (net_ratelimit())
 					printk(KERN_INFO "Hard xmit error\n");
@@ -375,7 +379,8 @@
 		} else {
 			kfree_skb(skb);
 		}
- -		spin_unlock_bh(&odev->xmit_lock);
+		//spin_unlock_bh(&odev->xmit_lock);
+		netif_tx_unlock_bh(odev);

 		if (pg_ipg)
 			nanospin(pg_ipg);
@@ -402,7 +407,7 @@
 			break;
 		}

- -		if (netif_queue_stopped(odev) || current->need_resched) {
+		if (netif_queue_stopped(odev) || test_thread_flag(TIF_NEED_RESCHED) /*current->need_resched*/) {
 			u32 idle_start, idle;

 			idle_start = get_cycles();
@@ -411,10 +416,10 @@
 					goto out_intr;
 				if (!netif_running(odev))
 					goto out_intr;
- -				if (current->need_resched)
+				if (test_thread_flag(TIF_NEED_RESCHED) /*current->need_resched*/)
 					schedule();
- -				else
- -					do_softirq();
+				//else
+				//	do_softirq();
 			} while (netif_queue_stopped(odev));
 			idle = get_cycles() - idle_start;
 			idle_acc_lo += idle;
@@ -540,7 +545,7 @@
 		case '\t':
 		case ' ':
 			goto done_str;
- -		default:
+		default:;
 		}
 done_str:
 	return i;
@@ -669,12 +674,12 @@
 	}

 	if (!strcmp(name, "inject") || !strcmp(name, "start") ) {
- -		MOD_INC_USE_COUNT;
+		//MOD_INC_USE_COUNT;
 		pg_busy = 1;
 		strcpy(pg_result, "Starting");
 		pg_inject();
 		pg_busy = 0;
- -		MOD_DEC_USE_COUNT;
+		//MOD_DEC_USE_COUNT;
 		return count;
 	}

@@ -723,9 +728,12 @@
 #if LINUX_VERSION_CODE > 0x20118
 MODULE_AUTHOR("Robert Olsson <robert.olsson@its.uu.se");
 MODULE_DESCRIPTION("Packet Generator tool");
- -MODULE_PARM(pg_count, "i");
- -MODULE_PARM(pg_ipg, "i");
- -MODULE_PARM(pg_cpu_speed, "i");
+module_param(pg_count, int, S_IRUGO);
+module_param(pg_ipg, int, S_IRUGO);
+module_param(pg_cpu_speed, int, S_IRUGO);
+//MODULE_PARM(pg_count, "i");
+//MODULE_PARM(pg_ipg, "i");
+//MODULE_PARM(pg_cpu_speed, "i");
 #endif

 /*




Regards, Cedric.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk3ZKqsACgkQUPHT03kXaaar2wCfcxesPlBK/5e/Dy9tfX+csq5M
qIIAn2acDqBbFyKZdVHJEKHLkGxoPKxf
=JShy
-----END PGP SIGNATURE-----

                 reply	other threads:[~2011-05-22 15:00 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4DD92AAB.8060202@gmail.com \
    --to=arbogast.cedric@gmail.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.