Problem with skb_push

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

I need to do a quick hack in the ethernet driver
(3c59x.c), ie. to insert 4 bytes bewteen the ethernet
header and the IP header.
I save the packet then do skb_push, then copy the
packet back into skb->data

I tried the following:

	unsigned char temp_buf[2000];
	unsigned char *temp_ptr;
	int temp_len, i;
	char *fourbytes = "abcd";
	
	temp_ptr = skb->data;
	temp_len = skb->len;

	memcpy(temp_buf, skb->data, skb->len);

	skb_push(skb, 4)
	
	memcpy(temp_ptr, temp_buf, dev->hard_header_len);

	temp_ptr = skb->data + dev->hard_header_len;

	memcpy(temp_ptr, fourbytes, 4);

	temp_ptr += 4;
	
	memcpy(temp_ptr, temp_buf + dev->hard_header_len,
temp_len -        dev->hard_header_len);



For some reason when I call skb_push(), the system
hangs (kernel panic - Aiee killing interupt handler).
What am I doing wrong?

TIA
Roger

PS. I know I could do something similar using a raw
ethernet socket from user space, but I need to do it
in the driver because I want to operate on packets
coming down through the stack.

__________________________________________________
Do You Yahoo!?
Get email alerts & NEW webcam video instant messaging with Yahoo! Messenger
http://im.yahoo.com
-
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
IRC Channel:   irc.openprojects.net / #kernelnewbies
Web Page:      http://www.kernelnewbies.org/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux