* Patchs for pg3.c and Linux 2.6.x kernel
@ 2011-05-22 15:24 cedric arbogast
0 siblings, 0 replies; only message in thread
From: cedric arbogast @ 2011-05-22 15:24 UTC (permalink / raw)
To: netdev
-----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-----
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-05-22 15:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-05-22 15:24 Patchs for pg3.c and Linux 2.6.x kernel cedric arbogast
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.